From 946ecca65e02faf864ea024ae1056600cd0c8021 Mon Sep 17 00:00:00 2001 From: Readone Mohamed Date: Tue, 7 Jul 2026 17:26:18 +0200 Subject: [PATCH 01/35] =?UTF-8?q?260707-HFX-L1:=20provider=20containment?= =?UTF-8?q?=20=E2=80=94=20on-disk=20authority=20is=20launch=20truth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The boot-snapshot config is no longer launch authority: worktree_start provider setup, provider_watchers start/restart/invalidate-indexes, provider query one-shots, and the runtime_install watcher rebind re-read the authority settings file and refuse fail-closed when providers are disabled on disk (stop/status/cleanup stay always-legal). Benchmark provider synthesis is filtered to the live authority set, persisted workspace registrations are swept to it on every benchmark touch, and the direct-script path is fail-closed behind AR_BENCHMARK_ALLOW_UNFILTERED_PROVIDERS=1. Provider setup is serialized host-wide (one prepare at a time, lock in the system tempdir out of prune reach) so concurrent sessions cannot stack capped-but-summing container storms. New containment metrics: the serving daemon samples labeled provider containers every 30s into logs/observer/providers/ and provider_status carries the snapshot even when providers are disabled. Query funnels require their specific provider armed; docker stats is fed only running names. Root cause: 2026-07-07 WSL OOM — providers launched despite providers:{} in every harness settings file (emptied 10:28) via the boot-snapshot and benchmark-workspace vectors; one enabled worktree_start starts 7 containers including both workspace source backends. Adversarial review: round 1 BLOCK (B1-B4) → all fixed → round 2 PASS-WITH-NOTES; full quality gate green (1656 tests). --- .../benchmarks/runner_modules/execution.py | 4 + .../runner_modules/mcp_registration.py | 45 ++ .../benchmarks/runner_modules/models.py | 9 + .../benchmarks/runner_modules/services.py | 9 + .../benchmarks/runner_modules/workspace.py | 44 ++ .../controllers/benchmark_tools.py | 14 +- .../controllers/provider_tools.py | 33 ++ .../controllers/worktree_tools.py | 24 +- mcp/src/agents_remember/install/runtime.py | 14 +- mcp/src/agents_remember/mcp/config.py | 73 ++- mcp/src/agents_remember/providers/metrics.py | 280 +++++++++++ .../providers/provider_setup.py | 70 ++- mcp/src/agents_remember/providers/status.py | 11 +- mcp/src/agents_remember/serving/app.py | 29 ++ mcp/tests/test_provider_containment.py | 451 ++++++++++++++++++ mcp/tests/test_provider_watcher_actions.py | 47 +- 16 files changed, 1143 insertions(+), 14 deletions(-) create mode 100644 mcp/src/agents_remember/providers/metrics.py create mode 100644 mcp/tests/test_provider_containment.py diff --git a/mcp/src/agents_remember/benchmarks/runner_modules/execution.py b/mcp/src/agents_remember/benchmarks/runner_modules/execution.py index 5bb39888..bca2b9d8 100644 --- a/mcp/src/agents_remember/benchmarks/runner_modules/execution.py +++ b/mcp/src/agents_remember/benchmarks/runner_modules/execution.py @@ -288,6 +288,7 @@ def maybe_prepare_case( skill_exposure_mode: str, force_clone: bool, provider_timeout: int, + allowed_provider_ids: tuple[str, ...] | None = None, ) -> None: if skip_prepare: return @@ -299,6 +300,7 @@ def maybe_prepare_case( force_clone=force_clone, provider_timeout=provider_timeout, provider_ids=selected_provider_ids(case, prompt_id=prompt_id, variant_id=variant_id), + allowed_provider_ids=allowed_provider_ids, ) @@ -443,6 +445,7 @@ def run_case( force_clone: bool, provider_timeout: int, codex_sandbox: str = CODEX_BENCHMARK_SANDBOX, + allowed_provider_ids: tuple[str, ...] | None = None, ) -> Path: maybe_prepare_case( benchmarks_root, @@ -454,6 +457,7 @@ def run_case( skill_exposure_mode=skill_exposure_mode, force_clone=force_clone, provider_timeout=provider_timeout, + allowed_provider_ids=allowed_provider_ids, ) output_root = create_output_root(benchmarks_root, case, dry_run) task_batches, default_jobs = benchmark_task_batches( diff --git a/mcp/src/agents_remember/benchmarks/runner_modules/mcp_registration.py b/mcp/src/agents_remember/benchmarks/runner_modules/mcp_registration.py index 524be19b..61f4906c 100644 --- a/mcp/src/agents_remember/benchmarks/runner_modules/mcp_registration.py +++ b/mcp/src/agents_remember/benchmarks/runner_modules/mcp_registration.py @@ -36,6 +36,51 @@ def benchmark_agents_config_path(workspace_root: Path) -> Path: return workspace_root / CODEX_HARNESS_DIR / "config.toml" +def disarm_stale_benchmark_registrations( + benchmarks_root: Path, allowed_provider_ids: tuple[str, ...] | None +) -> list[str]: + """Narrow persisted benchmark MCP settings to the live authority set (R1, review B3). + + The registration written at prepare time persists in the workspace and acts + as the AUTHORITY file for every session later booted there — the one place + the fleet kill-switch cannot reach, because those servers re-read *this* + file. Any prepare/run pass therefore sweeps ALL workspace registrations and + strips providers the live authority no longer enables. ``None`` (no + authority context, direct script use) leaves files untouched. Returns the + rewritten paths. + """ + if allowed_provider_ids is None: + return [] + allowed = set(allowed_provider_ids) + base = benchmarks_root / "workspaces" + candidates = sorted( + set(base.glob(f"*/{CODEX_HARNESS_DIR}/mcp/{BENCHMARK_MCP_SETTINGS_NAME}")) + | set(base.glob(f"*/*/{CODEX_HARNESS_DIR}/mcp/{BENCHMARK_MCP_SETTINGS_NAME}")) + ) + rewritten: list[str] = [] + for settings_path in candidates: + try: + data = json.loads(settings_path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + continue + providers = data.get("providers") + if not isinstance(providers, dict): + continue + kept = {pid: cfg for pid, cfg in providers.items() if pid in allowed} + if set(kept) == set(providers): + continue + data["providers"] = kept + settings_path.write_text( + json.dumps(data, indent=2, sort_keys=True) + "\n", encoding="utf-8" + ) + rewritten.append(settings_path.as_posix()) + print( + f"Disarmed stale benchmark registration {settings_path}: providers narrowed " + f"to {sorted(kept) or '(none)'} per the live MCP authority (containment R1)" + ) + return rewritten + + def benchmark_mcp_source_path() -> Path | None: value = os.environ.get(BENCHMARK_MCP_SOURCE_ENV) if not value: diff --git a/mcp/src/agents_remember/benchmarks/runner_modules/models.py b/mcp/src/agents_remember/benchmarks/runner_modules/models.py index 5f2be46f..14a7faf2 100644 --- a/mcp/src/agents_remember/benchmarks/runner_modules/models.py +++ b/mcp/src/agents_remember/benchmarks/runner_modules/models.py @@ -46,6 +46,13 @@ class BenchmarkPrepareRequest: skill_exposure_mode: str = "copy" force_clone: bool = False provider_timeout: int = 1800 + # Containment R1 (260707-HFX-L1): the live MCP authority's provider ids. The + # MCP controllers always pass this; manifest-requested providers outside the + # set are skipped (and reported), never armed or launched. None = no + # authority context (direct script use) and is FAIL-CLOSED by the consumer + # (workspace.filter_benchmark_provider_ids) unless + # AR_BENCHMARK_ALLOW_UNFILTERED_PROVIDERS=1 — the explicit developer act. + allowed_provider_ids: tuple[str, ...] | None = None @dataclass(frozen=True) @@ -63,3 +70,5 @@ class BenchmarkRunRequest: force_clone: bool = False provider_timeout: int = 1800 codex_sandbox: str = CODEX_BENCHMARK_SANDBOX + # See BenchmarkPrepareRequest.allowed_provider_ids (containment R1). + allowed_provider_ids: tuple[str, ...] | None = None diff --git a/mcp/src/agents_remember/benchmarks/runner_modules/services.py b/mcp/src/agents_remember/benchmarks/runner_modules/services.py index 5a004897..cfee095b 100644 --- a/mcp/src/agents_remember/benchmarks/runner_modules/services.py +++ b/mcp/src/agents_remember/benchmarks/runner_modules/services.py @@ -16,6 +16,9 @@ select_cases, selected_provider_ids, ) +from agents_remember.benchmarks.runner_modules.mcp_registration import ( + disarm_stale_benchmark_registrations, +) from agents_remember.benchmarks.runner_modules.models import ( BenchmarkPrepareRequest, BenchmarkRunRequest, @@ -36,6 +39,9 @@ def prepare_benchmarks(request: BenchmarkPrepareRequest) -> dict[str, Any]: cases = select_cases(load_cases(benchmarks_root), request.target, request.case_id) def run_prepare() -> None: + # Review B3: stale workspace registrations are the one authority file the + # fleet kill-switch cannot reach — every touch of the benchmarks sweeps them. + disarm_stale_benchmark_registrations(benchmarks_root, request.allowed_provider_ids) for case in cases: prepare_case( benchmarks_root, @@ -45,6 +51,7 @@ def run_prepare() -> None: force_clone=request.force_clone, provider_timeout=request.provider_timeout, provider_ids=selected_provider_ids(case), + allowed_provider_ids=request.allowed_provider_ids, ) _, messages = _capture_messages(run_prepare) @@ -84,6 +91,7 @@ def run_selected_cases( cases: list[Any], ) -> list[Path]: output_roots: list[Path] = [] + disarm_stale_benchmark_registrations(benchmarks_root, request.allowed_provider_ids) for case in cases: output_roots.append( run_case( @@ -99,6 +107,7 @@ def run_selected_cases( force_clone=request.force_clone, provider_timeout=request.provider_timeout, codex_sandbox=request.codex_sandbox, + allowed_provider_ids=request.allowed_provider_ids, ) ) return output_roots diff --git a/mcp/src/agents_remember/benchmarks/runner_modules/workspace.py b/mcp/src/agents_remember/benchmarks/runner_modules/workspace.py index fab8a46b..8b1d4dba 100644 --- a/mcp/src/agents_remember/benchmarks/runner_modules/workspace.py +++ b/mcp/src/agents_remember/benchmarks/runner_modules/workspace.py @@ -1,5 +1,6 @@ from __future__ import annotations +import os from pathlib import Path from typing import Any @@ -181,6 +182,45 @@ def prepare_memory_repo( return memory_repo +UNFILTERED_PROVIDERS_ENV = "AR_BENCHMARK_ALLOW_UNFILTERED_PROVIDERS" + + +def filter_benchmark_provider_ids( + case_id: str, + provider_ids: tuple[str, ...], + allowed_provider_ids: tuple[str, ...] | None, +) -> tuple[str, ...]: + """Containment R1 (260707-HFX-L1): the case manifest is not launch authority. + + Providers outside the live MCP authority set are neither persisted into the + workspace registration (which arms every later session booted there) nor + launched by prepare_configured_providers. ``None`` (no authority context, + i.e. direct script use below the MCP layer) is FAIL-CLOSED too — review + finding B4: an implicit default must not be the bypass. The explicit + developer act is the ``AR_BENCHMARK_ALLOW_UNFILTERED_PROVIDERS=1`` env var. + """ + if allowed_provider_ids is None: + if os.environ.get(UNFILTERED_PROVIDERS_ENV) == "1": + return provider_ids + if provider_ids: + print( + f"Skipping benchmark providers {list(provider_ids)} for {case_id}: no MCP " + "authority context (containment R1); direct script runs must set " + f"{UNFILTERED_PROVIDERS_ENV}=1 to arm providers without an authority filter" + ) + return () + allowed = set(allowed_provider_ids) + skipped = tuple(p for p in provider_ids if p not in allowed) + kept = tuple(p for p in provider_ids if p in allowed) + if skipped: + print( + f"Skipping benchmark providers {list(skipped)} for {case_id}: not enabled " + "in the live MCP authority settings (containment R1); the workspace registration " + "carries only authority-enabled providers" + ) + return kept + + def prepare_case( benchmarks_root: Path, case: BenchmarkCase, @@ -189,7 +229,11 @@ def prepare_case( force_clone: bool = False, provider_timeout: int = 1800, provider_ids: tuple[str, ...] = (), + allowed_provider_ids: tuple[str, ...] | None = None, ) -> None: + provider_ids = filter_benchmark_provider_ids( + case.case_id, provider_ids, allowed_provider_ids + ) repository = case.repository root = workspace_root(benchmarks_root, case) source_only_root = source_only_workspace_root(benchmarks_root, case) diff --git a/mcp/src/agents_remember/controllers/benchmark_tools.py b/mcp/src/agents_remember/controllers/benchmark_tools.py index 9ae009d1..2f080658 100644 --- a/mcp/src/agents_remember/controllers/benchmark_tools.py +++ b/mcp/src/agents_remember/controllers/benchmark_tools.py @@ -10,7 +10,7 @@ from agents_remember.benchmarks import runner as benchmark_runner from agents_remember.controllers._guards import require_within_coordination from agents_remember.install.assets import packaged_source_root -from agents_remember.mcp.config import McpRuntimeConfig +from agents_remember.mcp.config import McpRuntimeConfig, reload_provider_authority def codex_benchmark_prepare_tool( @@ -36,6 +36,7 @@ def codex_benchmark_prepare_tool( skill_exposure_mode=skill_exposure_mode, force_clone=force_clone, provider_timeout=provider_timeout, + allowed_provider_ids=_live_provider_ids(config), ) ) @@ -92,6 +93,7 @@ def codex_benchmark_run_tool( force_clone=force_clone, provider_timeout=provider_timeout, codex_sandbox=codex_sandbox, + allowed_provider_ids=_live_provider_ids(config), ) ) result["codexExecutable"] = codex_executable @@ -99,6 +101,16 @@ def codex_benchmark_run_tool( return result +def _live_provider_ids(config: McpRuntimeConfig) -> tuple[str, ...]: + """The live on-disk authority's provider ids (containment R1, 260707-HFX-L1). + + Benchmark provider synthesis is filtered to this set; a fail-closed read + error yields an empty set, so no manifest can arm providers the developer + has disabled on disk. + """ + return tuple(sorted(reload_provider_authority(config).providers)) + + @contextmanager def _benchmark_root_context(config: McpRuntimeConfig, value: str | None) -> Iterator[Path]: if value: diff --git a/mcp/src/agents_remember/controllers/provider_tools.py b/mcp/src/agents_remember/controllers/provider_tools.py index 23bc354e..e9733662 100644 --- a/mcp/src/agents_remember/controllers/provider_tools.py +++ b/mcp/src/agents_remember/controllers/provider_tools.py @@ -11,7 +11,9 @@ from agents_remember.controllers._guards import require_repo from agents_remember.mcp.config import ( DEFAULT_DOCKER_CONTROL_SECONDS, + ConfigError, McpRuntimeConfig, + require_provider_launch_authority, ) from agents_remember.providers import lifecycle_service from agents_remember.providers.current_state import write_current_provider_state @@ -60,6 +62,12 @@ def provider_watchers_tool( raise ValueError( "action must be status, start, stop, restart, invalidate-indexes, or shutdown-all" ) + if action in {"start", "restart", "invalidate-indexes"}: + # Containment R1 (260707-HFX-L1): launching (and rebuilding, which + # launches indexers) runs on the LIVE on-disk authority, never the boot + # snapshot. Disabled-on-disk refuses loudly; stop/status/shutdown-all + # stay available — stopping is always legal. + config = require_provider_launch_authority(config, operation=f"provider_watchers {action}") if action == "restart": # Stop then start only. 'start' re-attaches the watchers and lets them pick up changes # via their incremental scan; it never passes --force, so indexes are preserved. @@ -212,6 +220,8 @@ def grepai_search_tool( operation="grepai_search", dry_run=dry_run, timeout=timeout, + launch_capable=True, + launch_capable_provider="grepai-memory", settings_path_override=_worktree_settings_override(target), run=lambda service_config: lifecycle_service.run_grepai_lifecycle( service_config, @@ -266,6 +276,8 @@ def grepai_trace_tool( operation="grepai_trace", dry_run=dry_run, timeout=timeout, + launch_capable=True, + launch_capable_provider="grepai-memory", settings_path_override=_worktree_settings_override(target), run=lambda service_config: lifecycle_service.run_grepai_lifecycle( service_config, @@ -399,6 +411,8 @@ def cgc_visualize_tool( operation="cgc_visualize", dry_run=dry_run, timeout=timeout, + launch_capable=True, + launch_capable_provider="codegraphcontext-code", settings_path_override=_worktree_settings_override(target), run=lambda service_config: lifecycle_service.run_cgc_lifecycle( service_config, @@ -427,6 +441,8 @@ def _cgc_run_tool( operation=operation, dry_run=dry_run, timeout=timeout, + launch_capable=True, + launch_capable_provider="codegraphcontext-code", settings_path_override=_worktree_settings_override(target), run=lambda service_config: lifecycle_service.run_cgc_lifecycle( service_config, @@ -697,7 +713,24 @@ def _provider_operation_result( timeout: int | None = None, run: ProviderLifecycleRunner, settings_path_override: Path | None = None, + launch_capable: bool = False, + launch_capable_provider: str | None = None, ) -> dict[str, Any]: + if launch_capable: + # Containment R1 (260707-HFX-L1): query/run ops spin one-shot runner + # containers, and a worktree's persisted settings file is stamped + # enabled:true forever — neither is launch authority. The live on-disk + # providers map gates both; with an override the worktree's own stack + # settings still drive the run, but only under an armed authority. + # Review note: the SPECIFIC provider must be armed, not just any. + live = require_provider_launch_authority(config, operation=operation) + if launch_capable_provider and launch_capable_provider not in live.providers: + raise ConfigError( + f"{operation} refused: provider {launch_capable_provider!r} is not enabled " + f"in the on-disk authority settings ({config.config_path}) (containment R1)" + ) + if settings_path_override is None: + config = live # When a worktree target resolves, run against its already-persisted lifecycle # settings (do NOT delete that file). Otherwise write a temp workspace settings # file and clean it up. diff --git a/mcp/src/agents_remember/controllers/worktree_tools.py b/mcp/src/agents_remember/controllers/worktree_tools.py index 4a1c23b7..f39fea1f 100644 --- a/mcp/src/agents_remember/controllers/worktree_tools.py +++ b/mcp/src/agents_remember/controllers/worktree_tools.py @@ -9,6 +9,7 @@ DEFAULT_PROVIDER_SETUP_SECONDS, McpRuntimeConfig, RepositoryScope, + reload_provider_authority, ) from agents_remember.observer.ambient import AmbientLifecycle, ambient from agents_remember.observer.save_gate import coerce_save_decision @@ -40,7 +41,16 @@ def worktree_start_tool( # worktree_start promotes the active lifecycle to persistent (design §1.3); with # no active lifecycle, mint a fresh anchor so the contract always carries one. lifecycle_id = amb.current.id if amb is not None and amb.current is not None else new_ulid() - settings_path = None if skip_provider_setup else write_lifecycle_settings(config) + # Containment R1 (260707-HFX-L1): the on-disk authority file — not the boot + # snapshot — decides whether provider setup may launch. An empty (or + # unreadable: fail-closed) live providers map skips setup outright; the + # worktree itself is still created. Launch runs on the LIVE providers map. + authority = None if skip_provider_setup else reload_provider_authority(config) + settings_path = ( + write_lifecycle_settings(authority.apply(config)) + if authority is not None and authority.providers and authority.error is None + else None + ) provider_setup_config = ( None if settings_path is None @@ -82,6 +92,18 @@ def worktree_start_tool( result: dict[str, Any] | None = None try: result = _worktree_result("worktree_start", git_worktree_manager.start_result(args)) + if authority is not None and ( + authority.error is not None or (config.providers and not authority.providers) + ): + # Surface the veto so a stale-snapshot session sees WHY setup was + # skipped instead of silently diverging from its boot config. + veto: dict[str, Any] = { + "source": str(authority.source_path), + "bootSnapshotProviders": sorted(config.providers), + } + if authority.error is not None: + veto["error"] = authority.error + result["providersAuthority"] = veto _attribute_start(amb, result, repo_id) return result finally: diff --git a/mcp/src/agents_remember/install/runtime.py b/mcp/src/agents_remember/install/runtime.py index 3f799ff7..d5b59efd 100644 --- a/mcp/src/agents_remember/install/runtime.py +++ b/mcp/src/agents_remember/install/runtime.py @@ -24,7 +24,11 @@ agentic_settings_path, default_agentic_settings_seed_text, ) -from agents_remember.mcp.config import DEFAULT_PROVIDER_SETUP_SECONDS, McpRuntimeConfig +from agents_remember.mcp.config import ( + DEFAULT_PROVIDER_SETUP_SECONDS, + McpRuntimeConfig, + reload_provider_authority, +) from agents_remember.providers import lifecycle from agents_remember.providers.settings import lifecycle_settings_from_config @@ -570,7 +574,13 @@ def install_runtime_from_config( timeout = provider_deps_timeout or config.timeout_caps.get( "providerSetupSeconds", DEFAULT_PROVIDER_SETUP_SECONDS ) - provider_settings = lifecycle_settings_from_config(config) + # Containment R1 (260707-HFX-L1): the watcher rebind's stop→start cycle is a + # launch path — derive its settings from the LIVE on-disk authority, never the + # boot snapshot. An empty (or unreadable: fail-closed) live map disables the + # rebind while the runtime install itself proceeds. + provider_settings = lifecycle_settings_from_config( + reload_provider_authority(config).apply(config) + ) if source_root is not None: summary = install_runtime( source_root.resolve(), diff --git a/mcp/src/agents_remember/mcp/config.py b/mcp/src/agents_remember/mcp/config.py index 5dc698de..29476077 100644 --- a/mcp/src/agents_remember/mcp/config.py +++ b/mcp/src/agents_remember/mcp/config.py @@ -4,7 +4,7 @@ import json import warnings -from dataclasses import dataclass, field +from dataclasses import dataclass, field, replace from pathlib import Path from typing import Any @@ -116,6 +116,77 @@ def load_config(config_path: str | Path) -> McpRuntimeConfig: return config_from_mapping(data, path) +@dataclass(frozen=True) +class ProviderAuthority: + """The providers map re-read from the on-disk authority settings. + + Containment R1 (260707-HFX-L1): the boot-snapshot config is NOT launch + authority. A server process loads its config once and closes over it, so + editing the authority file to ``"providers": {}`` — the operator's only + fleet-wide kill-switch — previously changed nothing until every running + server restarted. Launch-capable operations re-read the file through this + type instead. ``error`` carries the fail-closed reason when the file could + not be read or parsed: callers must treat that as "no launch authority", + never fall back to the snapshot. Stopping and cleanup are never gated. + """ + + providers: dict[str, ProviderScope] + source_path: Path + error: str | None = None + + def apply(self, config: McpRuntimeConfig) -> McpRuntimeConfig: + """The boot config with the live providers map swapped in.""" + return replace(config, providers=dict(self.providers)) + + +def reload_provider_authority(config: McpRuntimeConfig) -> ProviderAuthority: + """Re-read only the providers map from the authority settings file.""" + path = config.config_path + try: + data = json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError) as error: + return ProviderAuthority( + providers={}, + source_path=path, + error=f"cannot re-read MCP authority settings: {path}: {error}", + ) + if not isinstance(data, dict): + return ProviderAuthority( + providers={}, + source_path=path, + error=f"MCP authority settings must be a JSON object: {path}", + ) + try: + providers = parse_providers( + data.get("providers", {}), + config.coordination_root, + config.workspace_root, + ) + except ConfigError as error: + return ProviderAuthority(providers={}, source_path=path, error=str(error)) + return ProviderAuthority(providers=providers, source_path=path) + + +def require_provider_launch_authority(config: McpRuntimeConfig, *, operation: str) -> McpRuntimeConfig: + """Gate a provider-launching operation on the on-disk authority (fail-closed). + + Returns the boot config with the live providers map applied; raises + ``ConfigError`` when the authority file disables providers or cannot be + read. Stop/status/cleanup paths must not call this — stopping is always + legal. + """ + authority = reload_provider_authority(config) + if authority.error is not None: + raise ConfigError(f"{operation} refused (containment R1, fail-closed): {authority.error}") + if not authority.providers: + raise ConfigError( + f"{operation} refused: providers are disabled in the on-disk authority settings " + f"({authority.source_path}); the boot snapshot ({sorted(config.providers)}) is not " + "launch authority (containment R1). stop/status/cleanup remain available." + ) + return authority.apply(config) + + def require_config_path(config_path: str | Path) -> Path: if not config_path: raise ConfigError("--config is required") diff --git a/mcp/src/agents_remember/providers/metrics.py b/mcp/src/agents_remember/providers/metrics.py new file mode 100644 index 00000000..0ba021bc --- /dev/null +++ b/mcp/src/agents_remember/providers/metrics.py @@ -0,0 +1,280 @@ +"""Central provider containment metrics: sampled by the MCP, consumed fleet-wide. + +Containment R4 (260707-HFX-L1, developer ruling 2026-07-07): the MCP observes +per-stack uptime, reliability, and resource pressure so degradation is a +detectable state instead of a post-mortem. Samples land in one store under the +observer root; `provider_status` / diagnostics / the dashboard projection read +them; the degradation protocol (260707-HFX-L7) evaluates them. The dashboard +statistics board (260703_statistics-component) consumes the same rows later. + +The sampler is deliberately dockerless-safe and read-only: a missing docker +binary or a stopped daemon yields an error-annotated empty sample, never a +launch or a crash — status must stay legal while providers are disabled. +""" + +from __future__ import annotations + +import json +import os +from dataclasses import asdict, dataclass, field +from datetime import UTC, datetime +from pathlib import Path +from typing import Any + +from agents_remember.providers.context import ContextProviderError +from agents_remember.providers.lifecycle.command_runner import run_command +from agents_remember.providers.lifecycle.docker_runtime import docker_command + +PROVIDER_METRICS_SCHEMA = "ar-provider-metrics-sample/v1" + +# Ownership labels every provider container carries (identity.provider_ownership_labels); +# the sampler discovers stacks by label so it needs no settings at all — a +# leftover stack from a dead session is exactly what must stay observable. +OWNERSHIP_LABEL_KEY = "agents-remember.provider" +INSTANCE_LABEL_KEY = "agents-remember.instance-id" + +DEFAULT_SAMPLE_INTERVAL_SECONDS = 30.0 +DOCKER_SAMPLE_TIMEOUT_SECONDS = 20 + + +@dataclass(frozen=True) +class ContainerSample: + """One provider container's state at sample time.""" + + name: str + provider: str + instance: str + running: bool + restarts: int + mem_bytes: int | None = None + mem_limit_bytes: int | None = None + cpu_percent: float | None = None + + +@dataclass(frozen=True) +class MetricsSnapshot: + """One sampling pass over every labeled provider container on the host.""" + + schema: str + sampledAt: str + containers: list[ContainerSample] = field(default_factory=list) + error: str | None = None + + @property + def running_count(self) -> int: + return sum(1 for container in self.containers if container.running) + + def to_payload(self) -> dict[str, Any]: + payload = asdict(self) + payload["runningCount"] = self.running_count + return payload + + +class ProviderMetricsStore: + """Append-log + rolling-current store under the observer root. + + ``metrics.jsonl`` accretes samples for trend/statistics consumers; + ``metrics-current.json`` is the cheap always-fresh read for status packets + and the projection. Writes are replace-atomic like the sibling observer + stores; a torn append line only costs one sample row to a reader that + skips invalid lines. + """ + + def __init__(self, coordination_root: Path) -> None: + self._root = coordination_root / "logs" / "observer" / "providers" + + @property + def log_path(self) -> Path: + return self._root / "metrics.jsonl" + + @property + def current_path(self) -> Path: + return self._root / "metrics-current.json" + + def record(self, snapshot: MetricsSnapshot) -> None: + self._root.mkdir(parents=True, exist_ok=True) + line = json.dumps(snapshot.to_payload(), sort_keys=True) + with self.log_path.open("a", encoding="utf-8") as handle: + handle.write(line + "\n") + tmp = self.current_path.with_name(self.current_path.name + ".tmp") + tmp.write_text(line + "\n", encoding="utf-8") + os.replace(tmp, self.current_path) + + def read_current(self) -> dict[str, Any] | None: + try: + return json.loads(self.current_path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + return None + + def read_recent(self, limit: int = 120) -> list[dict[str, Any]]: + """The newest ``limit`` samples, oldest first; invalid lines skipped.""" + try: + lines = self.log_path.read_text(encoding="utf-8").splitlines() + except OSError: + return [] + rows: list[dict[str, Any]] = [] + for line in lines[-limit:]: + if not line.strip(): + continue + try: + rows.append(json.loads(line)) + except json.JSONDecodeError: + continue + return rows + + +def sample_provider_containers( + *, cwd: Path, timeout: int = DOCKER_SAMPLE_TIMEOUT_SECONDS +) -> MetricsSnapshot: + """One read-only sampling pass over labeled provider containers.""" + sampled_at = datetime.now(UTC).isoformat() + try: + docker = docker_command() + except ContextProviderError as error: + # Dockerless host: an error-annotated empty sample, never a crash — the + # sampling loop and status packet must stay legal without docker. + return MetricsSnapshot( + schema=PROVIDER_METRICS_SCHEMA, sampledAt=sampled_at, error=str(error) + ) + ps = run_command( + [ + docker, + "ps", + "--all", + "--filter", + f"label={OWNERSHIP_LABEL_KEY}", + "--format", + "{{json .}}", + ], + cwd=cwd, + timeout=timeout, + ) + if ps["returncode"] != 0: + return MetricsSnapshot( + schema=PROVIDER_METRICS_SCHEMA, + sampledAt=sampled_at, + error=f"docker ps failed: {str(ps.get('stderr') or '').strip()[:300]}", + ) + rows = _json_rows(str(ps.get("stdout") or ""), key="Names") + # Review note: `docker stats` fed a stopped name can fail the WHOLE command + # and blind every pressure number — only running containers get sampled. + running_names = sorted( + name + for name, row in rows.items() + if str(row.get("State") or "").lower() == "running" + ) + stats = ( + _stats_rows(docker=docker, cwd=cwd, timeout=timeout, names=running_names) + if running_names + else {} + ) + containers = [ + _container_sample(name, rows[name], stats.get(name)) for name in sorted(rows) + ] + return MetricsSnapshot( + schema=PROVIDER_METRICS_SCHEMA, sampledAt=sampled_at, containers=containers + ) + + +def _json_rows(stdout: str, *, key: str) -> dict[str, dict[str, Any]]: + """docker's ``--format {{json .}}`` line stream keyed by ``key``; bad lines skipped.""" + rows: dict[str, dict[str, Any]] = {} + for line in stdout.splitlines(): + if not line.strip(): + continue + try: + row = json.loads(line) + except json.JSONDecodeError: + continue + name = str(row.get(key) or "") + if name: + rows[name] = row + return rows + + +def _stats_rows( + *, docker: str, cwd: Path, timeout: int, names: list[str] +) -> dict[str, dict[str, Any]]: + """One ``docker stats --no-stream`` pass; a failure costs the numbers, never the sample.""" + result = run_command( + [docker, "stats", "--no-stream", "--format", "{{json .}}", *names], + cwd=cwd, + timeout=timeout, + ) + if result["returncode"] != 0: + return {} + return _json_rows(str(result.get("stdout") or ""), key="Name") + + +def _container_sample( + name: str, ps_row: dict[str, Any], stats_row: dict[str, Any] | None +) -> ContainerSample: + labels = _parse_labels(str(ps_row.get("Labels") or "")) + mem_bytes, mem_limit = _parse_mem_usage(str((stats_row or {}).get("MemUsage") or "")) + return ContainerSample( + name=name, + provider=labels.get(OWNERSHIP_LABEL_KEY, ""), + instance=labels.get(INSTANCE_LABEL_KEY, ""), + running=str(ps_row.get("State") or "").lower() == "running", + restarts=_parse_restarts(str(ps_row.get("Status") or "")), + mem_bytes=mem_bytes, + mem_limit_bytes=mem_limit, + cpu_percent=_parse_percent(str((stats_row or {}).get("CPUPerc") or "")), + ) + + +def _parse_labels(raw: str) -> dict[str, str]: + labels: dict[str, str] = {} + for part in raw.split(","): + key, sep, value = part.partition("=") + if sep: + labels[key.strip()] = value.strip() + return labels + + +def _parse_restarts(status: str) -> int: + # docker ps Status strings carry "(N)" only for restarting states; the + # durable restart count needs inspect, which is too heavy per tick — the + # degradation detector treats restart-loop detection as state-change based. + if "Restarting" in status: + return 1 + return 0 + + +_UNIT_FACTORS = { + "b": 1, + "kb": 1000, + "kib": 1024, + "mb": 1000**2, + "mib": 1024**2, + "gb": 1000**3, + "gib": 1024**3, +} + + +def _parse_bytes(value: str) -> int | None: + text = value.strip().lower() + if not text: + return None + for unit in sorted(_UNIT_FACTORS, key=len, reverse=True): + if text.endswith(unit): + try: + return int(float(text[: -len(unit)]) * _UNIT_FACTORS[unit]) + except ValueError: + return None + return None + + +def _parse_mem_usage(raw: str) -> tuple[int | None, int | None]: + used_text, _, limit_text = raw.partition("/") + return _parse_bytes(used_text), _parse_bytes(limit_text) + + +def _parse_percent(raw: str) -> float | None: + text = raw.strip().rstrip("%") + if not text: + return None + try: + return float(text) + except ValueError: + return None diff --git a/mcp/src/agents_remember/providers/provider_setup.py b/mcp/src/agents_remember/providers/provider_setup.py index 0c383982..2e5b79eb 100644 --- a/mcp/src/agents_remember/providers/provider_setup.py +++ b/mcp/src/agents_remember/providers/provider_setup.py @@ -4,12 +4,23 @@ from __future__ import annotations import argparse +import contextlib import json +import os +import tempfile +import time import zipfile +from collections.abc import Iterator from dataclasses import dataclass, field +from datetime import UTC, datetime from pathlib import Path from typing import Any +try: # POSIX-only; the docker-backed provider stack is POSIX-hosted anyway. + import fcntl +except ImportError: # pragma: no cover - Windows fallback: lock becomes a no-op + fcntl = None # type: ignore[assignment] + from agents_remember.providers import setup_common, setup_reporting from agents_remember.providers.cgc import bundle as cgc_bundle from agents_remember.providers.cgc import seed as cgc_seed @@ -247,6 +258,59 @@ def _watchers_needed(args: argparse.Namespace, settings: dict[str, Any]) -> bool ) or selected_provider_enabled(args, settings, cgc_setup.CGC_PROVIDER_ID) +def fleet_setup_lock_path() -> Path: + """HOST-scoped setup lock path (containment R2, 260707-HFX-L1). + + The guarded resource is the host's memory/docker daemon, shared by every + coordination root AND every benchmark workspace, so the lock must not live + under any one of them: `runtime_install` prunes `providers/` (review + finding B1 — a coordination-root lock file was deleted mid-hold), and + benchmark prepares run against workspace-local roots that would otherwise + never serialize with fleet setups (finding B2). + """ + uid = os.getuid() if hasattr(os, "getuid") else "shared" # pragma: no branch + return Path(tempfile.gettempdir()) / f"agents-remember-provider-setup-{uid}.lock" + + +@contextlib.contextmanager +def _fleet_setup_lock(lock_path: Path, timeout: int) -> Iterator[None]: + """Serialize provider setup host-wide (containment R2, 260707-HFX-L1). + + The 2026-07-07 OOM was an aggregate storm: several sessions launched + provider stacks concurrently, each inside its per-container caps (L12) but + summing past the host. One setup at a time bounds the aggregate; a waiter + blocks up to the setup timeout, then fails loudly instead of piling on. + """ + if fcntl is None: # pragma: no cover - non-POSIX + yield + return + lock_path.parent.mkdir(parents=True, exist_ok=True) + handle = lock_path.open("a+", encoding="utf-8") + try: + deadline = time.monotonic() + max(timeout, 1) + while True: + try: + fcntl.flock(handle, fcntl.LOCK_EX | fcntl.LOCK_NB) + break + except OSError: + if time.monotonic() >= deadline: + raise RuntimeError( + f"provider setup lock busy after {timeout}s: {lock_path} — another " + "session's provider setup is running; one setup at a time bounds " + "aggregate container load (containment R2, 260707-HFX-L1)" + ) from None + time.sleep(2) + handle.seek(0) + handle.truncate() + handle.write(f"{os.getpid()} {datetime.now(UTC).isoformat()}\n") + handle.flush() + yield + finally: + with contextlib.suppress(OSError): + fcntl.flock(handle, fcntl.LOCK_UN) + handle.close() + + def run_provider_setup( request: ProviderSetupRequest, progress: SetupProgress | None = None, @@ -269,7 +333,11 @@ def _action_payload_from_args(args: argparse.Namespace) -> dict[str, Any]: enabled = _enabled_provider_summary(args, settings) isolated = write_isolated_provider_settings(args, settings) - results = _action_results(args, settings) + if args.action == "prepare" and not args.dry_run: + with _fleet_setup_lock(fleet_setup_lock_path(), args.timeout): + results = _action_results(args, settings) + else: + results = _action_results(args, settings) payload = { "action": args.action, diff --git a/mcp/src/agents_remember/providers/status.py b/mcp/src/agents_remember/providers/status.py index 71f0b8cf..5f734d58 100644 --- a/mcp/src/agents_remember/providers/status.py +++ b/mcp/src/agents_remember/providers/status.py @@ -30,6 +30,7 @@ ) from agents_remember.providers import lifecycle from agents_remember.providers.current_state import write_current_provider_state +from agents_remember.providers.metrics import ProviderMetricsStore from agents_remember.providers.recovery import PROVIDER_WATCHER_RESTART_RECOVERY from agents_remember.providers.settings import write_lifecycle_settings @@ -62,10 +63,18 @@ def provider_status_packet( detail_limit=detail_limit, target_repo_id=target_repo_id, ) - return ProviderStatusResponse(ok=True, providers=summary).model_dump( + packet = ProviderStatusResponse(ok=True, providers=summary).model_dump( mode="json", exclude_none=True, ) + # Containment R4 (260707-HFX-L1): the daemon-sampled containment metrics ride + # the status packet even when providers are disabled — leftover stacks from a + # dead session are exactly what must stay observable. Read-only; None until + # the serving daemon's first sample lands. + metrics = ProviderMetricsStore(config.coordination_root).read_current() + if metrics is not None: + packet["metrics"] = metrics + return packet def provider_summary_packet( diff --git a/mcp/src/agents_remember/serving/app.py b/mcp/src/agents_remember/serving/app.py index a2974728..337dba0d 100644 --- a/mcp/src/agents_remember/serving/app.py +++ b/mcp/src/agents_remember/serving/app.py @@ -36,6 +36,7 @@ import asyncio import contextlib import json +import logging import os from collections.abc import AsyncGenerator, AsyncIterator, Callable from contextlib import asynccontextmanager @@ -70,6 +71,11 @@ from agents_remember.observer import observer_root from agents_remember.observer.events import now_iso from agents_remember.observer.projection_store import ProviderStateRefresher +from agents_remember.providers.metrics import ( + DEFAULT_SAMPLE_INTERVAL_SECONDS, + ProviderMetricsStore, + sample_provider_containers, +) from agents_remember.serving.actions import ActionRequest, evaluate_action from agents_remember.serving.build_info import ServingBuild, resolve_serving_build from agents_remember.serving.changeset import register_changeset_routes @@ -94,6 +100,8 @@ from agents_remember.mcp.config import McpRuntimeConfig +logger = logging.getLogger(__name__) + def _encode(data: BaseModel | dict[str, Any]) -> Any: """JSON-ready payload: projection nodes dumped by alias (camelCase), markers as-is.""" @@ -413,14 +421,35 @@ def create_app( # Resolved ONCE at boot (260703-L15): the stamp that makes a stale serving process visible. build = resolve_serving_build() + # Containment R4 (260707-HFX-L1): the serving daemon samples labeled provider + # containers on its own cadence (decoupled from the 1s projection tick) into + # the central metrics store — the feed for provider_status, the statistics + # board, and the degradation protocol (260707-HFX-L7). Read-only + dockerless-safe. + metrics_store = ProviderMetricsStore(config.coordination_root) + + async def metrics_loop() -> None: + while True: + try: + snapshot = await asyncio.to_thread( + sample_provider_containers, cwd=config.coordination_root + ) + await asyncio.to_thread(metrics_store.record, snapshot) + except Exception: + logger.exception("provider metrics sample failed; retrying next interval") + await asyncio.sleep(DEFAULT_SAMPLE_INTERVAL_SECONDS) + @asynccontextmanager async def lifespan(_app: FastAPI) -> AsyncIterator[None]: await projector.prime() task = asyncio.create_task(projector.run()) + metrics_task = asyncio.create_task(metrics_loop()) try: yield finally: + metrics_task.cancel() task.cancel() + with contextlib.suppress(asyncio.CancelledError): + await metrics_task with contextlib.suppress(asyncio.CancelledError): await task host.shutdown() diff --git a/mcp/tests/test_provider_containment.py b/mcp/tests/test_provider_containment.py new file mode 100644 index 00000000..c408b023 --- /dev/null +++ b/mcp/tests/test_provider_containment.py @@ -0,0 +1,451 @@ +"""Provider containment (260707-HFX-L1): unconfigured on disk ⇒ no launch, ever. + +The 2026-07-07 WSL OOM proved two bypasses of the settings gate: the boot +snapshot (running servers never re-read the authority file) and benchmark +self-arming (the case manifest synthesized+persisted its own providers map). +These tests pin the containment layer that closes both, plus the aggregate +setup lock and the metrics feed. +""" + +from __future__ import annotations + +import json +import tempfile +import threading +import unittest +from pathlib import Path +from unittest import mock + +from agents_remember.benchmarks.runner_modules.constants import ( + BENCHMARK_MCP_SETTINGS_NAME, + CODEX_HARNESS_DIR, +) +from agents_remember.benchmarks.runner_modules.mcp_registration import ( + disarm_stale_benchmark_registrations, +) +from agents_remember.benchmarks.runner_modules.workspace import ( + UNFILTERED_PROVIDERS_ENV, + filter_benchmark_provider_ids, +) +from agents_remember.controllers import provider_tools, worktree_tools +from agents_remember.mcp.config import ( + ConfigError, + McpRuntimeConfig, + ProviderScope, + RepositoryScope, + reload_provider_authority, + require_provider_launch_authority, +) +from agents_remember.providers.context import ContextProviderError +from agents_remember.providers.metrics import ( + MetricsSnapshot, + ProviderMetricsStore, + _parse_bytes, + _parse_labels, + _parse_mem_usage, + _parse_percent, + sample_provider_containers, +) +from agents_remember.providers.provider_setup import _fleet_setup_lock, fleet_setup_lock_path +from agents_remember.providers.settings import lifecycle_settings_from_config + + +def _armed_boot_config(tmp: Path, *, disk_providers: dict) -> McpRuntimeConfig: + """A config whose BOOT SNAPSHOT is armed while the disk says ``disk_providers``.""" + authority = tmp / "authority.json" + authority.write_text( + json.dumps({"version": 1, "providers": disk_providers}), encoding="utf-8" + ) + coordination_root = tmp / "coord" + workspace_root = tmp / "ws" + return McpRuntimeConfig( + config_path=authority, + coordination_root=coordination_root, + workspace_root=workspace_root, + transcript_root=coordination_root / "logs" / "mcp", + repositories={ + "repo": RepositoryScope(repo_id="repo", path=workspace_root / "repo"), + }, + providers={ + "grepai-memory": ProviderScope( + provider_id="grepai-memory", + runtime_root=coordination_root / "providers" / "runners" / "grepai" / "i1", + log_root=coordination_root / "logs" / "providers" / "grepai" / "i1", + instance_id="i1", + ), + }, + ) + + +class ReloadProviderAuthorityTests(unittest.TestCase): + def test_disk_disabled_yields_empty_map_without_error(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + config = _armed_boot_config(Path(tmp), disk_providers={}) + authority = reload_provider_authority(config) + self.assertEqual(authority.providers, {}) + self.assertIsNone(authority.error) + + def test_disk_armed_yields_live_map(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + config = _armed_boot_config( + Path(tmp), disk_providers={"codegraphcontext-code": {}} + ) + authority = reload_provider_authority(config) + self.assertEqual(sorted(authority.providers), ["codegraphcontext-code"]) + self.assertIsNone(authority.error) + + def test_missing_file_fails_closed(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + config = _armed_boot_config(Path(tmp), disk_providers={}) + config.config_path.unlink() + authority = reload_provider_authority(config) + self.assertEqual(authority.providers, {}) + self.assertIsNotNone(authority.error) + + def test_invalid_json_fails_closed(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + config = _armed_boot_config(Path(tmp), disk_providers={}) + config.config_path.write_text("{torn", encoding="utf-8") + authority = reload_provider_authority(config) + self.assertEqual(authority.providers, {}) + self.assertIsNotNone(authority.error) + + def test_require_launch_authority_refuses_disk_disabled(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + config = _armed_boot_config(Path(tmp), disk_providers={}) + with self.assertRaises(ConfigError) as ctx: + require_provider_launch_authority(config, operation="test-op") + self.assertIn("containment R1", str(ctx.exception)) + self.assertIn("grepai-memory", str(ctx.exception)) # names the stale snapshot + + def test_require_launch_authority_returns_live_config_when_armed(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + config = _armed_boot_config( + Path(tmp), disk_providers={"codegraphcontext-code": {}} + ) + live = require_provider_launch_authority(config, operation="test-op") + self.assertEqual(sorted(live.providers), ["codegraphcontext-code"]) + + +class WorktreeStartVetoTests(unittest.TestCase): + def test_stale_armed_snapshot_is_vetoed_by_disk(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + config = _armed_boot_config(Path(tmp), disk_providers={}) + captured: dict[str, object] = {} + + def fake_start( + args: worktree_tools.git_worktree_manager.WorktreeArgs, + ) -> worktree_tools.git_worktree_manager.WorktreeCommandResult: + captured["provider_setup_config"] = args.provider_setup_config + return worktree_tools.git_worktree_manager.WorktreeCommandResult( + returncode=0, payload={"state": "blocked"} + ) + + with mock.patch.object( + worktree_tools.git_worktree_manager, "start_result", fake_start + ): + result = worktree_tools.worktree_start_tool( + config, + repo_id="repo", + task_name="t", + worktree_name="w", + ) + # The launch side-channel never materializes: no settings file, no setup config. + self.assertIsNone(captured["provider_setup_config"]) + veto = result["providersAuthority"] + self.assertEqual(veto["bootSnapshotProviders"], ["grepai-memory"]) + + def test_disk_armed_snapshot_launches_with_live_map(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + config = _armed_boot_config( + Path(tmp), disk_providers={"grepai-memory": {}} + ) + captured: dict[str, object] = {} + + def fake_start( + args: worktree_tools.git_worktree_manager.WorktreeArgs, + ) -> worktree_tools.git_worktree_manager.WorktreeCommandResult: + setup_config = args.provider_setup_config + captured["provider_setup_config"] = setup_config + if setup_config is not None: + # Read while the temp file exists — the controller's finally + # unlinks it once no background setup owns it. + captured["settings"] = json.loads( + Path(setup_config.settings_path).read_text(encoding="utf-8") + ) + return worktree_tools.git_worktree_manager.WorktreeCommandResult( + returncode=0, payload={"state": "blocked"} + ) + + with mock.patch.object( + worktree_tools.git_worktree_manager, "start_result", fake_start + ): + result = worktree_tools.worktree_start_tool( + config, + repo_id="repo", + task_name="t", + worktree_name="w", + ) + self.assertIsNotNone(captured["provider_setup_config"]) + settings = captured["settings"] + assert isinstance(settings, dict) + self.assertTrue(settings["contextProviders"]["enabled"]) + self.assertNotIn("providersAuthority", result) + + +class QueryFunnelGateTests(unittest.TestCase): + def test_query_funnel_requires_its_specific_provider(self) -> None: + # Review note: an armed grepai must not authorize a cgc one-shot runner. + with tempfile.TemporaryDirectory() as tmp: + config = _armed_boot_config( + Path(tmp), disk_providers={"grepai-memory": {}} + ) + run = mock.Mock() + with self.assertRaises(ConfigError) as ctx: + provider_tools._provider_operation_result( + config, + operation="cgc_symbol_search", + launch_capable=True, + launch_capable_provider="codegraphcontext-code", + run=run, + ) + self.assertIn("codegraphcontext-code", str(ctx.exception)) + run.assert_not_called() + + +class RuntimeRebindDerivationTests(unittest.TestCase): + def test_live_disabled_disables_rebind_settings(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + config = _armed_boot_config(Path(tmp), disk_providers={}) + settings = lifecycle_settings_from_config( + reload_provider_authority(config).apply(config) + ) + self.assertFalse(settings["contextProviders"]["enabled"]) + + +class BenchmarkProviderFilterTests(unittest.TestCase): + def test_manifest_cannot_arm_outside_authority(self) -> None: + kept = filter_benchmark_provider_ids( + "case-1", + ("grepai-memory", "codegraphcontext-code"), + ("codegraphcontext-code",), + ) + self.assertEqual(kept, ("codegraphcontext-code",)) + + def test_empty_authority_filters_everything(self) -> None: + kept = filter_benchmark_provider_ids( + "case-1", ("grepai-memory", "codegraphcontext-code"), () + ) + self.assertEqual(kept, ()) + + def test_none_authority_context_is_fail_closed(self) -> None: + # Review B4: the direct-script path must not be an implicit bypass. + with mock.patch.dict("os.environ", {}, clear=False): + kept = filter_benchmark_provider_ids("case-1", ("grepai-memory",), None) + self.assertEqual(kept, ()) + + def test_env_escape_allows_unfiltered_direct_script_use(self) -> None: + with mock.patch.dict("os.environ", {UNFILTERED_PROVIDERS_ENV: "1"}): + kept = filter_benchmark_provider_ids("case-1", ("grepai-memory",), None) + self.assertEqual(kept, ("grepai-memory",)) + + def test_stale_registration_sweep_narrows_to_authority(self) -> None: + # Review B3: persisted workspace registrations are the authority file + # for sessions booted there — the sweep must strip disabled providers. + with tempfile.TemporaryDirectory() as tmp: + benchmarks_root = Path(tmp) + settings_path = ( + benchmarks_root + / "workspaces" + / "case-1" + / "with-memory" + / CODEX_HARNESS_DIR + / "mcp" + / BENCHMARK_MCP_SETTINGS_NAME + ) + settings_path.parent.mkdir(parents=True) + settings_path.write_text( + json.dumps( + { + "version": 1, + "providers": { + "grepai-memory": {"scope": "benchmark"}, + "codegraphcontext-code": {"scope": "benchmark"}, + }, + } + ), + encoding="utf-8", + ) + rewritten = disarm_stale_benchmark_registrations( + benchmarks_root, ("codegraphcontext-code",) + ) + data = json.loads(settings_path.read_text(encoding="utf-8")) + untouched = disarm_stale_benchmark_registrations( + benchmarks_root, ("codegraphcontext-code",) + ) + no_context = disarm_stale_benchmark_registrations(benchmarks_root, None) + self.assertEqual(rewritten, [settings_path.as_posix()]) + self.assertEqual(sorted(data["providers"]), ["codegraphcontext-code"]) + self.assertEqual(untouched, []) # idempotent + self.assertEqual(no_context, []) # None = no authority context: untouched + + +class FleetSetupLockTests(unittest.TestCase): + def test_second_setup_waits_and_times_out_loudly(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) / "setup.lock" + entered = threading.Event() + release = threading.Event() + + def holder() -> None: + with _fleet_setup_lock(root, timeout=30): + entered.set() + release.wait(timeout=30) + + thread = threading.Thread(target=holder, daemon=True) + thread.start() + self.assertTrue(entered.wait(timeout=10)) + try: + with self.assertRaises(RuntimeError) as ctx, _fleet_setup_lock(root, timeout=1): + pass # pragma: no cover - must not be reached + self.assertIn("containment R2", str(ctx.exception)) + finally: + release.set() + thread.join(timeout=10) + # Released lock is re-acquirable. + with _fleet_setup_lock(root, timeout=1): + pass + + def test_lock_is_noop_when_uncontended(self) -> None: + with tempfile.TemporaryDirectory() as tmp, _fleet_setup_lock( + Path(tmp) / "setup.lock", timeout=1 + ): + pass + + def test_lock_path_is_host_scoped_outside_prunable_roots(self) -> None: + # Review B1/B2: runtime_install prunes providers/ under the coordination + # root, and benchmark prepares run against workspace-local roots — the + # lock must live outside every prunable/per-workspace tree. + path = fleet_setup_lock_path() + self.assertEqual(path.parent, Path(tempfile.gettempdir())) + self.assertIn("agents-remember-provider-setup", path.name) + + +class MetricsTests(unittest.TestCase): + def test_parsers(self) -> None: + self.assertEqual(_parse_bytes("512MiB"), 512 * 1024**2) + self.assertEqual(_parse_bytes("2GiB"), 2 * 1024**3) + self.assertIsNone(_parse_bytes("")) + self.assertEqual(_parse_mem_usage("100MiB / 2GiB"), (100 * 1024**2, 2 * 1024**3)) + self.assertEqual(_parse_percent("12.5%"), 12.5) + self.assertIsNone(_parse_percent("")) + labels = _parse_labels("agents-remember.provider=grepai-memory,a=b") + self.assertEqual(labels["agents-remember.provider"], "grepai-memory") + + def test_sampler_reports_docker_ps_failure(self) -> None: + with ( + mock.patch("agents_remember.providers.metrics.docker_command", return_value="docker"), + mock.patch( + "agents_remember.providers.metrics.run_command", + return_value={"returncode": 1, "stdout": "", "stderr": "daemon down"}, + ), + ): + snapshot = sample_provider_containers(cwd=Path(".")) + self.assertEqual(snapshot.containers, []) + assert snapshot.error is not None + self.assertIn("daemon down", snapshot.error) + + def test_sampler_dockerless_host_yields_error_sample(self) -> None: + with mock.patch( + "agents_remember.providers.metrics.docker_command", + side_effect=ContextProviderError("docker command not found"), + ): + snapshot = sample_provider_containers(cwd=Path(".")) + self.assertEqual(snapshot.containers, []) + assert snapshot.error is not None + self.assertIn("docker command not found", snapshot.error) + + def test_sampler_collects_labeled_containers_with_stats(self) -> None: + ps_line = json.dumps( + { + "Names": "ar-grepai-postgres-i1", + "State": "running", + "Status": "Up 2 hours", + "Labels": ( + "agents-remember.provider=grepai-memory,agents-remember.instance-id=i1" + ), + } + ) + stats_line = json.dumps( + { + "Name": "ar-grepai-postgres-i1", + "MemUsage": "100MiB / 512MiB", + "CPUPerc": "3.5%", + } + ) + + def fake_run(command: list[str], *, cwd: Path, timeout: int) -> dict[str, object]: + if "stats" in command: + return {"returncode": 0, "stdout": stats_line + "\n"} + return {"returncode": 0, "stdout": ps_line + "\nnot-json\n"} + + with ( + mock.patch("agents_remember.providers.metrics.docker_command", return_value="docker"), + mock.patch("agents_remember.providers.metrics.run_command", side_effect=fake_run), + ): + snapshot = sample_provider_containers(cwd=Path(".")) + self.assertEqual(snapshot.running_count, 1) + [container] = snapshot.containers + self.assertEqual(container.provider, "grepai-memory") + self.assertEqual(container.instance, "i1") + self.assertEqual(container.mem_bytes, 100 * 1024**2) + self.assertEqual(container.mem_limit_bytes, 512 * 1024**2) + self.assertEqual(container.cpu_percent, 3.5) + self.assertEqual(container.restarts, 0) + + def test_sampler_tolerates_stats_failure_and_flags_restarting(self) -> None: + ps_line = json.dumps( + { + "Names": "ar-cgc-falkordb-i1", + "State": "restarting", + "Status": "Restarting (137) 5 seconds ago", + "Labels": "agents-remember.provider=codegraphcontext-code", + } + ) + + def fake_run(command: list[str], *, cwd: Path, timeout: int) -> dict[str, object]: + if "stats" in command: + return {"returncode": 1, "stdout": "", "stderr": ""} + return {"returncode": 0, "stdout": ps_line + "\n"} + + with ( + mock.patch("agents_remember.providers.metrics.docker_command", return_value="docker"), + mock.patch("agents_remember.providers.metrics.run_command", side_effect=fake_run), + ): + snapshot = sample_provider_containers(cwd=Path(".")) + [container] = snapshot.containers + self.assertFalse(container.running) + self.assertEqual(container.restarts, 1) + self.assertIsNone(container.mem_bytes) + self.assertIsNone(container.cpu_percent) + + def test_store_roundtrip_and_torn_line_tolerance(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + store = ProviderMetricsStore(Path(tmp)) + snapshot = MetricsSnapshot( + schema="ar-provider-metrics-sample/v1", sampledAt="2026-07-07T00:00:00+00:00" + ) + store.record(snapshot) + current = store.read_current() + assert current is not None + self.assertEqual(current["runningCount"], 0) + # A torn append line (the crash class this master exists for) is skipped. + with store.log_path.open("a", encoding="utf-8") as handle: + handle.write('YAE"}\n') + store.record(snapshot) + rows = store.read_recent() + self.assertEqual(len(rows), 2) + + +if __name__ == "__main__": + unittest.main() diff --git a/mcp/tests/test_provider_watcher_actions.py b/mcp/tests/test_provider_watcher_actions.py index 93347e98..9c2bee08 100644 --- a/mcp/tests/test_provider_watcher_actions.py +++ b/mcp/tests/test_provider_watcher_actions.py @@ -7,12 +7,15 @@ from __future__ import annotations +import json +import tempfile import unittest +from pathlib import Path from types import SimpleNamespace from typing import cast from agents_remember.controllers.provider_tools import provider_watchers_tool -from agents_remember.mcp.config import McpRuntimeConfig +from agents_remember.mcp.config import ConfigError, McpRuntimeConfig def _config_without_providers() -> McpRuntimeConfig: @@ -21,6 +24,22 @@ def _config_without_providers() -> McpRuntimeConfig: return cast(McpRuntimeConfig, SimpleNamespace(providers={})) +def _disk_disabled_config(tmp: Path) -> McpRuntimeConfig: + # Containment R1 (260707-HFX-L1): launch-capable actions re-read the on-disk + # authority file, so the fake config needs a real one saying providers:{}. + settings = tmp / "authority.json" + settings.write_text(json.dumps({"version": 1, "providers": {}}), encoding="utf-8") + return cast( + McpRuntimeConfig, + SimpleNamespace( + providers={}, + config_path=settings, + coordination_root=tmp / "coord", + workspace_root=tmp / "ws", + ), + ) + + class WatcherActionNamingTests(unittest.TestCase): def test_refresh_is_rejected_with_guidance(self) -> None: with self.assertRaises(ValueError) as ctx: @@ -35,13 +54,27 @@ def test_unknown_action_lists_invalidate_indexes(self) -> None: self.assertIn("invalidate-indexes", str(ctx.exception)) self.assertNotIn("refresh", str(ctx.exception)) - def test_invalidate_indexes_dispatches_under_new_name(self) -> None: - result = provider_watchers_tool( - _config_without_providers(), action="invalidate-indexes", dry_run=True - ) + def test_invalidate_indexes_refused_when_disabled_on_disk(self) -> None: + # Containment R1 (260707-HFX-L1): the rebuild launches indexers, so a + # disk-disabled authority refuses it — the old behavior (dispatch with + # empty steps) silently honored a stale boot snapshot. + with tempfile.TemporaryDirectory() as tmp_dir, self.assertRaises(ConfigError) as ctx: + provider_watchers_tool( + _disk_disabled_config(Path(tmp_dir)), + action="invalidate-indexes", + dry_run=True, + ) + message = str(ctx.exception) + self.assertIn("containment R1", message) + self.assertIn("disabled", message) + + def test_stop_still_allowed_when_disabled_on_disk(self) -> None: + # Stopping is always legal: the gate must never block teardown. + with tempfile.TemporaryDirectory() as tmp_dir: + result = provider_watchers_tool( + _disk_disabled_config(Path(tmp_dir)), action="stop", dry_run=True + ) self.assertEqual(result["operation"], "provider_watchers") - self.assertEqual(result["action"], "invalidate-indexes") - self.assertIn("steps", result) if __name__ == "__main__": From 915e841a45cec40283902b69fe98e761672904af Mon Sep 17 00:00:00 2001 From: Readone Mohamed Date: Tue, 7 Jul 2026 18:43:43 +0200 Subject: [PATCH 02/35] =?UTF-8?q?260707-HFX-L2:=20provider=20index=20lifec?= =?UTF-8?q?ycle=20=E2=80=94=20a=20HEAD=20difference=20is=20a=20catch-up=20?= =?UTF-8?q?state,=20never=20a=20teardown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The cgc seed no longer refuses on HEAD divergence: relatable divergence seeds the near-perfect graph clone and hands the classified delta (--name-status; deletions and rename-sources are phantom residuals) to a post-watcher catch-up stage that waits for the watcher's post-subscribe log marker (inotify has no replay; no marker means no touch and honest staleness) and then utime-touches exactly the touchable files so the event-driven watcher re-indexes just the delta. caughtUp is claimed only for a clean delta delivered to a ready watcher; everything else reports staleIndex (served; a from-zero rebuild stays an explicit cgc refresh). Only unrelatable heads still refuse (foreign-graph protection). The implicit refresh-all fallback default is OFF (explicit opt-in flag; the hermetic benchmark path opts in for its synchronous bounded build); benign seed skips never fail a prepare. The grepai half: the worktree mtime sync leaves divergent-content files fresh so the watcher re-embeds exactly the delta instead of silently serving stale content. Index staleness is a reportable state: identity-carrying index-state rows land in the central metrics store and provider_status carries the newest ones. Root cause (developer-pinned): providers seeded fine on the first leaf only because the integration branch had no changes yet; after leaf 1 integrated, the next start hard-crashed into teardown + refresh-all. Adversarial review: round 1 BLOCK (B1 watcher-attach race, B2 over-reported catch-up, B3 scope gap, B4 benchmark half-built graph) -> all fixed -> round 2 PASS-WITH-NOTES; full quality gate green (1677 tests). --- .../runner_modules/mcp_registration.py | 5 + mcp/src/agents_remember/providers/cgc/seed.py | 69 ++- mcp/src/agents_remember/providers/metrics.py | 23 + .../providers/provider_setup.py | 221 +++++++- mcp/src/agents_remember/providers/status.py | 9 +- .../worktrees/modules/start.py | 47 +- mcp/tests/test_provider_index_lifecycle.py | 484 ++++++++++++++++++ mcp/tests/test_provider_setup.py | 50 ++ 8 files changed, 902 insertions(+), 6 deletions(-) create mode 100644 mcp/tests/test_provider_index_lifecycle.py diff --git a/mcp/src/agents_remember/benchmarks/runner_modules/mcp_registration.py b/mcp/src/agents_remember/benchmarks/runner_modules/mcp_registration.py index 61f4906c..0999c783 100644 --- a/mcp/src/agents_remember/benchmarks/runner_modules/mcp_registration.py +++ b/mcp/src/agents_remember/benchmarks/runner_modules/mcp_registration.py @@ -317,6 +317,11 @@ def prepare_configured_providers( settings_path=settings_path, timeout=provider_timeout, dry_run=dry_run, + # Hermetic-cold benchmarks NEED the synchronous timeout-bounded + # graph build: with the fallback default off (260707-HFX-L2), + # `cgc watch` would self-index asynchronously and agents would + # query a half-built graph errorlessly (review L2/B4). + cgc_refresh_fallback=True, ) ) finally: diff --git a/mcp/src/agents_remember/providers/cgc/seed.py b/mcp/src/agents_remember/providers/cgc/seed.py index b06faf17..dfab01f2 100644 --- a/mcp/src/agents_remember/providers/cgc/seed.py +++ b/mcp/src/agents_remember/providers/cgc/seed.py @@ -32,6 +32,7 @@ class CgcSeedOptions: bundle_dir: Path | None = None allow_commit_mismatch: bool = False allow_same_coordination_root: bool = False + delta_max_files: int = 0 # 0 = DEFAULT_SEED_DELTA_MAX_FILES (260707-HFX-L2) @dataclass(frozen=True) @@ -384,6 +385,59 @@ def _seed_validation_failure( ) +# Diff-scoped catch-up bound (260707-HFX-L2): at or below this many changed +# files the seeded near-perfect graph catches up through the watcher's own +# per-file indexing (the post-watcher touch pass in provider_setup); above it +# the clone still serves — stale, surfaced — and a from-zero rebuild stays an +# explicit `cgc refresh` only. +DEFAULT_SEED_DELTA_MAX_FILES = 200 + + +def seed_commit_divergence( + source_repo_root: Path, source_head: str, target_head: str +) -> dict[str, Any] | None: + """Classified changes between the seeded graph state and the target checkout. + + Runs in the SOURCE repo: a target that is a worktree of the source shares + its object database, so both commits resolve there. ``None`` means git + cannot relate the heads (unrelated repositories) — the one case where + refusing the seed is still right. + + ``--name-status`` because the catch-up must be HONEST about what a touch + can deliver (review L2/B2): additions/modifications on disk are touchable; + deletions and rename-sources leave phantom graph nodes no touch can fix — + those are reported as residual staleness, never blessed as caught up. + """ + result = subprocess.run( + ["git", "diff", "--name-status", source_head, target_head], + cwd=source_repo_root, + stdin=subprocess.DEVNULL, + capture_output=True, + text=True, + timeout=60, + check=False, + ) + if result.returncode != 0: + return None + entries: list[dict[str, str]] = [] + for line in result.stdout.splitlines(): + if not line.strip(): + continue + parts = line.split("\t") + status = parts[0].strip() + if status.startswith("R") and len(parts) >= 3: + # Rename: the new path is touchable; the old path is a phantom node. + entries.append({"status": "R", "path": parts[2].strip(), "from": parts[1].strip()}) + elif len(parts) >= 2: + entries.append({"status": status[:1], "path": parts[1].strip()}) + return { + "entries": entries, + "count": len(entries), + "sourceHead": source_head, + "targetHead": target_head, + } + + def _seed_commit_mismatch( args: Any, source_repo_root: Path, @@ -395,10 +449,23 @@ def _seed_commit_mismatch( return None if source_head == target_head: return None + # 260707-HFX-L2: a HEAD difference is a state to CATCH UP from, not a reason + # to throw away a near-perfect graph — the old exact-equality refusal fed the + # refresh-all fallback, i.e. a full reindex on every normal worktree start + # (the OOM amplifier). A relatable divergence seeds anyway and hands the + # delta to the post-watcher catch-up stage; only unrelatable heads refuse, + # which protects against cloning a different repository's graph. + divergence = seed_commit_divergence(source_repo_root, source_head, target_head) + if divergence is not None: + args._cgc_seed_divergence = divergence + return None return { "ok": False, "skipped": True, - "reason": "source and target repository HEAD commits differ", + "reason": ( + "source and target repository heads are unrelated " + "(divergence not computable); refusing to seed a foreign graph" + ), "sourceHead": source_head, "targetHead": target_head, "sourceRepoRoot": source_repo_root.as_posix(), diff --git a/mcp/src/agents_remember/providers/metrics.py b/mcp/src/agents_remember/providers/metrics.py index 0ba021bc..401684c1 100644 --- a/mcp/src/agents_remember/providers/metrics.py +++ b/mcp/src/agents_remember/providers/metrics.py @@ -26,6 +26,7 @@ from agents_remember.providers.lifecycle.docker_runtime import docker_command PROVIDER_METRICS_SCHEMA = "ar-provider-metrics-sample/v1" +PROVIDER_INDEX_STATE_SCHEMA = "ar-provider-index-state/v1" # Ownership labels every provider container carries (identity.provider_ownership_labels); # the sampler discovers stacks by label so it needs no settings at all — a @@ -100,12 +101,34 @@ def record(self, snapshot: MetricsSnapshot) -> None: tmp.write_text(line + "\n", encoding="utf-8") os.replace(tmp, self.current_path) + def record_index_state(self, payload: dict[str, Any]) -> None: + """Append one index-lifecycle row (seed catch-up, staleness) to the log. + + 260707-HFX-L2: rides the same JSONL as the container samples — the + schema field tells consumers (degradation detector, statistics board) + apart; the rolling current-state file stays container-only. + """ + self._root.mkdir(parents=True, exist_ok=True) + row = {"schema": PROVIDER_INDEX_STATE_SCHEMA, **payload} + row.setdefault("sampledAt", datetime.now(UTC).isoformat()) + with self.log_path.open("a", encoding="utf-8") as handle: + handle.write(json.dumps(row, sort_keys=True) + "\n") + def read_current(self) -> dict[str, Any] | None: try: return json.loads(self.current_path.read_text(encoding="utf-8")) except (OSError, json.JSONDecodeError): return None + def read_recent_index_states(self, limit: int = 20) -> list[dict[str, Any]]: + """The newest index-lifecycle rows (260707-HFX-L2), oldest first.""" + rows = [ + row + for row in self.read_recent(limit=500) + if row.get("schema") == PROVIDER_INDEX_STATE_SCHEMA + ] + return rows[-limit:] + def read_recent(self, limit: int = 120) -> list[dict[str, Any]]: """The newest ``limit`` samples, oldest first; invalid lines skipped.""" try: diff --git a/mcp/src/agents_remember/providers/provider_setup.py b/mcp/src/agents_remember/providers/provider_setup.py index 2e5b79eb..e6a878ab 100644 --- a/mcp/src/agents_remember/providers/provider_setup.py +++ b/mcp/src/agents_remember/providers/provider_setup.py @@ -27,17 +27,23 @@ from agents_remember.providers.cgc import setup as cgc_setup from agents_remember.providers.cgc.seed import CgcSeedOptions from agents_remember.providers.cgc.setup import IsolatedCgcOptions +from agents_remember.providers.context import ContextProviderError +from agents_remember.providers.context_common import expand_template from agents_remember.providers.grepai import setup as grepai_setup from agents_remember.providers.grepai.setup import GrepaiSeedOptions, IsolatedGrepaiOptions +from agents_remember.providers.lifecycle.docker_runtime import docker_command +from agents_remember.providers.metrics import ProviderMetricsStore from agents_remember.providers.setup_progress import SetupProgress load_settings = setup_common.load_settings provider_enabled = setup_common.provider_enabled +provider_settings = setup_common.provider_settings require_settings_path = setup_common.require_settings_path run_command = setup_common.run_command run_lifecycle = setup_common.run_lifecycle selected_provider_enabled = setup_common.selected_provider_enabled settings_path = setup_common.settings_path +stable_provider_id = setup_common.stable_provider_id subprocess = setup_common.subprocess cgc_extra_args = cgc_seed.cgc_extra_args @@ -56,7 +62,11 @@ class ProviderSetupRequest: dry_run: bool = False skip_watchers: bool = False skip_grepai: bool = False - cgc_refresh_fallback: bool = True + # 260707-HFX-L2: the implicit refresh-all fallback is OFF by default — a + # refused seed must never cost a from-zero reindex on its own; the seed's + # diff-scoped catch-up handles the normal worktree case and `cgc refresh` + # stays the explicit rebuild. + cgc_refresh_fallback: bool = False cgc_seed: CgcSeedOptions = field(default_factory=CgcSeedOptions) cgc_isolated: IsolatedCgcOptions = field(default_factory=IsolatedCgcOptions) grepai_seed: GrepaiSeedOptions = field(default_factory=GrepaiSeedOptions) @@ -84,6 +94,7 @@ def normalized(self) -> ProviderSetupRequest: bundle_dir=_resolve_optional_path(self.cgc_seed.bundle_dir), allow_commit_mismatch=self.cgc_seed.allow_commit_mismatch, allow_same_coordination_root=self.cgc_seed.allow_same_coordination_root, + delta_max_files=self.cgc_seed.delta_max_files, ), cgc_isolated=IsolatedCgcOptions( runtime_root=_resolve_optional_path(self.cgc_isolated.runtime_root), @@ -136,6 +147,7 @@ def request_from_args(args: argparse.Namespace) -> ProviderSetupRequest: bundle_dir=args.cgc_seed_bundle_dir, allow_commit_mismatch=args.cgc_seed_allow_commit_mismatch, allow_same_coordination_root=args.cgc_seed_allow_same_coordination_root, + delta_max_files=getattr(args, "cgc_seed_delta_max_files", 0), ), cgc_isolated=IsolatedCgcOptions( runtime_root=args.cgc_isolated_runtime_root, @@ -178,6 +190,7 @@ def args_from_request(request: ProviderSetupRequest) -> argparse.Namespace: cgc_seed_bundle_dir=normalized.cgc_seed.bundle_dir, cgc_seed_allow_commit_mismatch=normalized.cgc_seed.allow_commit_mismatch, cgc_seed_allow_same_coordination_root=normalized.cgc_seed.allow_same_coordination_root, + cgc_seed_delta_max_files=normalized.cgc_seed.delta_max_files, cgc_isolated_runtime_root=normalized.cgc_isolated.runtime_root, cgc_isolated_settings_path=normalized.cgc_isolated.settings_path, cgc_isolated_container_name=normalized.cgc_isolated.container_name, @@ -219,9 +232,193 @@ def prepare_enabled_providers( results.extend(grepai_setup.prepare_enabled_provider(args, settings)) results.extend(cgc_setup.prepare_enabled_provider(args, settings)) results.extend(_watcher_results(args, settings)) + results.extend(_seed_catchup_results(args, settings)) return results +# Watcher readiness bound for the catch-up touch (review L2/B1): the cgc +# container subscribes to inotify only after guard PONG wait + python boot + +# graph checks; inotify has no replay and seeded graphs skip the initial scan, +# so a touch before subscription is silently lost. The markers cover cgc's +# post-subscribe log line; no marker within the bound means NO touch and an +# honest staleIndex instead of a silent lie. +CGC_WATCHER_READY_TIMEOUT_SECONDS = 90 +# Only the marker VERIFIED against the pinned codegraphcontext wheel (review +# L2 round 2): speculative extra markers risk a false-positive on some future +# pre-subscribe line, which would silently re-open the B1 race. Re-verify this +# marker on every cgc version bump. +_CGC_WATCH_READY_MARKERS = ("monitoring",) + + +def _seed_catchup_results( + args: argparse.Namespace, settings: dict[str, Any] +) -> list[dict[str, Any]]: + """Diff-scoped index catch-up after the watchers attach (260707-HFX-L2). + + The cgc seed clones the source graph even when the target checkout's HEAD + differs (relatable divergence, recorded by `_seed_commit_mismatch`). The + watcher is event-driven, so touching exactly the changed files makes it + re-index just the delta — a small diff becomes an index UPDATE, never a + teardown. Honesty rules (review L2/B1+B2): the touch waits for the + watcher's post-subscribe marker, deletions/rename-sources/missing files + are RESIDUAL staleness a touch cannot deliver, and ``caughtUp`` is claimed + only when every touchable path reached a ready watcher with zero + residuals. Anything less reports ``staleIndex`` (served; a from-zero + rebuild stays an explicit ``cgc refresh``). + """ + divergence = getattr(args, "_cgc_seed_divergence", None) + if not divergence or args.dry_run: + return [] + target_root = getattr(args, "cgc_seed_target_repo_root", None) + count = int(divergence.get("count", 0)) + if count == 0 or target_root is None: + return [] + payload: dict[str, Any] = { + "ok": True, + "provider": "codegraphcontext", + "action": "seed-catch-up", + "divergence": { + "count": count, + "sourceHead": divergence.get("sourceHead"), + "targetHead": divergence.get("targetHead"), + }, + } + limit = getattr(args, "cgc_seed_delta_max_files", 0) or cgc_seed.DEFAULT_SEED_DELTA_MAX_FILES + if count > limit: + payload["skipped"] = True + payload["staleIndex"] = { + "served": True, + "behindFiles": count, + "deltaMaxFiles": limit, + "reindex": "explicit 'cgc refresh' only", + } + _record_index_state(args, settings, payload) + return [payload] + root = Path(target_root) + touch_paths: list[Path] = [] + residuals: list[dict[str, str]] = [] + for entry in divergence.get("entries", []): + status = str(entry.get("status", "")) + path = str(entry.get("path", "")) + if status == "R" and entry.get("from"): + residuals.append({"kind": "rename-source-phantom", "path": str(entry["from"])}) + if status == "D": + residuals.append({"kind": "deleted-phantom", "path": path}) + continue + candidate = root / path + if candidate.is_file(): + touch_paths.append(candidate) + else: + residuals.append({"kind": "missing-on-disk", "path": path}) + watcher = _wait_for_cgc_watcher_ready(args, settings) + payload["watcherReady"] = watcher + if not watcher.get("ready"): + payload["skipped"] = True + payload["staleIndex"] = { + "served": True, + "behindFiles": count, + "reason": "watcher not ready before the touch window; delta not delivered", + "reindex": "explicit 'cgc refresh' only", + } + _record_index_state(args, settings, payload) + return [payload] + for candidate in touch_paths: + os.utime(candidate) + payload["touched"] = len(touch_paths) + payload["mechanism"] = "watcher-event catch-up (utime on the diff files)" + if residuals: + payload["caughtUp"] = False + payload["staleIndex"] = { + "served": True, + "residuals": residuals, + "reindex": "explicit 'cgc refresh' only", + } + else: + payload["caughtUp"] = True + _record_index_state(args, settings, payload) + return [payload] + + +def _cgc_watcher_container_name( + args: argparse.Namespace, settings: dict[str, Any] +) -> str | None: + provider = provider_settings(settings, cgc_setup.CGC_PROVIDER_ID) + repo_id = getattr(args, "cgc_seed_repo_id", None) + if not isinstance(provider, dict) or not repo_id: + return None + runtime = provider.get("runtime") + runner = runtime.get("runner") if isinstance(runtime, dict) else None + template = str((runner or {}).get("containerNameTemplate") or "") + if not template: + return None + return expand_template(template, {"repoId": stable_provider_id(repo_id)}) + + +def _wait_for_cgc_watcher_ready( + args: argparse.Namespace, + settings: dict[str, Any], + *, + timeout_seconds: int = CGC_WATCHER_READY_TIMEOUT_SECONDS, +) -> dict[str, Any]: + """Poll the watcher container's logs for cgc's post-subscribe marker.""" + container = _cgc_watcher_container_name(args, settings) + if container is None: + return {"ready": False, "reason": "watcher container name unresolved"} + try: + docker = docker_command() + except ContextProviderError as error: + return {"ready": False, "container": container, "reason": str(error)} + deadline = time.monotonic() + max(timeout_seconds, 1) + waited = 0.0 + while True: + # --since bounds the window to THIS boot's output: a marker left in the + # logs by a previous watcher boot must not satisfy a fresh one. + logs = run_command( + [docker, "logs", "--since", "15m", "--tail", "200", container], + cwd=args.coordination_root, + timeout=20, + dry_run=False, + ) + if logs["returncode"] == 0: + text = (str(logs.get("stdout") or "") + str(logs.get("stderr") or "")).lower() + if any(marker in text for marker in _CGC_WATCH_READY_MARKERS): + return { + "ready": True, + "container": container, + "waitedSeconds": round(waited, 1), + } + if time.monotonic() >= deadline: + return { + "ready": False, + "container": container, + "reason": f"no watch-ready marker within {timeout_seconds}s", + } + time.sleep(2) + waited += 2 + + +def _record_index_state( + args: argparse.Namespace, settings: dict[str, Any], payload: dict[str, Any] +) -> None: + """Best-effort index-lifecycle metrics row (L7's feed); never fails the setup.""" + with contextlib.suppress(Exception): # observability must not break setup + provider = provider_settings(settings, cgc_setup.CGC_PROVIDER_ID) + instance = (provider or {}).get("instance") or {} + ProviderMetricsStore(args.coordination_root).record_index_state( + { + "provider": payload.get("provider"), + "action": payload.get("action"), + "repoId": getattr(args, "cgc_seed_repo_id", None), + "instance": instance.get("id"), + "divergence": payload.get("divergence"), + "touched": payload.get("touched"), + "caughtUp": payload.get("caughtUp"), + "watcherReady": payload.get("watcherReady"), + "staleIndex": payload.get("staleIndex"), + } + ) + + def _watcher_results(args: argparse.Namespace, settings: dict[str, Any]) -> list[dict[str, Any]]: if args.skip_watchers or not _watchers_needed(args, settings): return [] @@ -463,6 +660,13 @@ def _action_results(args: argparse.Namespace, settings: dict[str, Any]) -> list[ def result_ok_for_prepare(result: dict[str, Any], args: argparse.Namespace) -> bool: if result.get("ok"): return True + # 260707-HFX-L2: a benign seed skip — no seed was intended or possible + # (hermetic benchmark, source not configured) — never fails a prepare: the + # watcher builds the index from scratch, which is that path's designed + # behavior. A REFUSED seed carries sourceHead/targetHead (unrelated heads) + # and is forgiven only under the explicit refresh-all opt-in. + if result.get("skipped") and "sourceHead" not in result: + return True return bool( args.action == "prepare" and args.cgc_refresh_fallback @@ -484,7 +688,20 @@ def build_parser() -> argparse.ArgumentParser: parser.add_argument( "--no-cgc-refresh-fallback", dest="cgc_refresh_fallback", action="store_false" ) - parser.set_defaults(cgc_refresh_fallback=True) + parser.add_argument( + "--cgc-refresh-fallback", + dest="cgc_refresh_fallback", + action="store_true", + help="Opt IN to the full-reindex fallback after a refused seed (260707-HFX-L2: off by default).", + ) + parser.set_defaults(cgc_refresh_fallback=False) + parser.add_argument( + "--cgc-seed-delta-max-files", + dest="cgc_seed_delta_max_files", + type=int, + default=0, + help="Diff-scoped catch-up bound; 0 uses the built-in default.", + ) parser.add_argument("--cgc-seed-source-coordination-root", type=Path) parser.add_argument("--cgc-seed-source-from-settings", type=Path) parser.add_argument("--cgc-seed-repo-id") diff --git a/mcp/src/agents_remember/providers/status.py b/mcp/src/agents_remember/providers/status.py index 5f734d58..8c589598 100644 --- a/mcp/src/agents_remember/providers/status.py +++ b/mcp/src/agents_remember/providers/status.py @@ -71,9 +71,16 @@ def provider_status_packet( # the status packet even when providers are disabled — leftover stacks from a # dead session are exactly what must stay observable. Read-only; None until # the serving daemon's first sample lands. - metrics = ProviderMetricsStore(config.coordination_root).read_current() + store = ProviderMetricsStore(config.coordination_root) + metrics = store.read_current() if metrics is not None: packet["metrics"] = metrics + # 260707-HFX-L2: index staleness is a reportable STATE — the newest + # index-lifecycle rows (seed catch-up, staleIndex, watcher readiness) + # surface here so an operator sees behind-ness without reading logs. + index_states = store.read_recent_index_states(limit=10) + if index_states: + packet["indexState"] = index_states return packet diff --git a/mcp/src/agents_remember/worktrees/modules/start.py b/mcp/src/agents_remember/worktrees/modules/start.py index 4d72e7bb..c6add85d 100644 --- a/mcp/src/agents_remember/worktrees/modules/start.py +++ b/mcp/src/agents_remember/worktrees/modules/start.py @@ -1089,6 +1089,15 @@ def _sync_worktree_memory_mtimes(contract: WorktreeContract, dry_run: bool) -> d every file look modified and force a full re-embed — defeating the DB clone. Copying each file's mtime from the source memory repo lets the watcher reuse the cloned index (files genuinely newer than the index still re-embed, exactly as on the source). + + 260707-HFX-L2: files whose content diverges between the worktree HEAD and the + source HEAD are deliberately left with their fresh checkout mtimes — stamping + the source's old mtime onto different content would make the watcher skip exactly + the delta and serve a silently wrong index. The fresh mtimes make the watcher's + incremental scan re-embed precisely the divergence. The comparison is HEAD vs + HEAD: uncommitted changes in the SOURCE checkout are outside this guard (the + mtime copied from such a file is at least as new as its content, so the watcher + still re-embeds it — over-embedding, never silent staleness). """ if dry_run: return {"state": "skipped", "reason": "dry-run"} @@ -1096,12 +1105,18 @@ def _sync_worktree_memory_mtimes(contract: WorktreeContract, dry_run: bool) -> d return {"state": "skipped", "reason": "no external memory worktree"} source = contract.memory_repo_path target = contract.memory_worktree + divergent = _memory_divergence_paths(source, target) synced = 0 missing = 0 + left_fresh = 0 for path in target.rglob("*"): if ".git" in path.parts or not path.is_file(): continue - source_file = source / path.relative_to(target) + relative = path.relative_to(target).as_posix() + if divergent is not None and relative in divergent: + left_fresh += 1 + continue + source_file = source / relative try: stat = source_file.stat() except OSError: @@ -1109,7 +1124,35 @@ def _sync_worktree_memory_mtimes(contract: WorktreeContract, dry_run: bool) -> d continue os.utime(path, (stat.st_atime, stat.st_mtime)) synced += 1 - return {"state": "synced", "filesSynced": synced, "filesMissingInSource": missing} + result: dict[str, object] = { + "state": "synced", + "filesSynced": synced, + "filesMissingInSource": missing, + "divergentLeftFresh": left_fresh, + } + if divergent is None: + result["divergenceState"] = "uncomputable; synced all (pre-L2 behavior)" + return result + + +def _memory_divergence_paths(source: Path, target: Path) -> set[str] | None: + """Paths whose content differs between the worktree HEAD and the source HEAD. + + Computed in the source repo (shared object database for worktrees); ``None`` + when git cannot relate the heads, in which case the caller falls back to + syncing everything (the pre-L2 behavior) rather than guessing. + """ + try: + source_head = head_commit(source) + target_head = head_commit(target) + except Exception: + return None + if source_head == target_head: + return set() + diff = run_git(source, ["diff", "--name-only", source_head, target_head]) + if diff.returncode != 0: + return None + return {line.strip() for line in diff.stdout.splitlines() if line.strip()} def _disabled_memory_choice(args: WorktreeArgs) -> dict[str, object] | None: diff --git a/mcp/tests/test_provider_index_lifecycle.py b/mcp/tests/test_provider_index_lifecycle.py new file mode 100644 index 00000000..b80d3e13 --- /dev/null +++ b/mcp/tests/test_provider_index_lifecycle.py @@ -0,0 +1,484 @@ +"""Provider index lifecycle (260707-HFX-L2): small diffs UPDATE indexes, never a teardown. + +The developer-pinned failure cycle: providers seed fine on the first leaf (the +integration branch has no changes yet); after that leaf integrates, the next +worktree's seed saw a HEAD mismatch and hard-crashed into a full teardown + +re-index from scratch (the refresh-all fallback), while the watchers never +delta-updated. These tests pin the repaired lifecycle: relatable divergence +seeds anyway and hands the delta to the watcher-event catch-up; the mtime sync +leaves exactly the divergent files fresh; the from-zero rebuild is explicit +opt-in only. +""" + +from __future__ import annotations + +import argparse +import os +import subprocess +import tempfile +import time +import unittest +from pathlib import Path +from types import SimpleNamespace +from typing import ClassVar, cast +from unittest import mock + +from agents_remember.providers.cgc import seed as cgc_seed +from agents_remember.providers.context import ContextProviderError +from agents_remember.providers.metrics import ( + PROVIDER_INDEX_STATE_SCHEMA, + ProviderMetricsStore, +) +from agents_remember.providers.provider_setup import ( + _cgc_watcher_container_name, + _seed_catchup_results, + _wait_for_cgc_watcher_ready, +) +from agents_remember.worktrees.modules.start import _sync_worktree_memory_mtimes +from agents_remember.worktrees.worktree_contract import WorktreeContract + + +def _git(cwd: Path, *args: str) -> str: + result = subprocess.run( + ["git", *args], cwd=cwd, capture_output=True, text=True, check=True + ) + return result.stdout.strip() + + +def _init_repo(root: Path) -> None: + root.mkdir(parents=True, exist_ok=True) + _git(root, "init", "-q", "-b", "main") + _git(root, "config", "user.email", "test@test") + _git(root, "config", "user.name", "test") + + +def _commit_file(root: Path, name: str, content: str, message: str) -> str: + (root / name).parent.mkdir(parents=True, exist_ok=True) + (root / name).write_text(content, encoding="utf-8") + _git(root, "add", ".") + _git(root, "commit", "-q", "-m", message) + return _git(root, "rev-parse", "HEAD") + + +class SeedDivergenceTests(unittest.TestCase): + def test_relatable_heads_report_the_changed_files(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + repo = Path(tmp) / "repo" + _init_repo(repo) + base = _commit_file(repo, "a.py", "one", "base") + head = _commit_file(repo, "b.py", "two", "integration lands") + divergence = cgc_seed.seed_commit_divergence(repo, head, base) + assert divergence is not None + # Direction: graph@source(head, has b.py) vs tree@target(base, lacks it) + # = a deletion transition — a phantom the catch-up must report, not touch. + self.assertEqual(divergence["entries"], [{"status": "D", "path": "b.py"}]) + self.assertEqual(divergence["count"], 1) + + def test_unrelatable_heads_return_none(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + repo = Path(tmp) / "repo" + _init_repo(repo) + head = _commit_file(repo, "a.py", "one", "base") + divergence = cgc_seed.seed_commit_divergence( + repo, head, "0" * 40 # commit that does not exist anywhere + ) + self.assertIsNone(divergence) + + +class SeedMismatchTests(unittest.TestCase): + def _args(self) -> argparse.Namespace: + return argparse.Namespace(cgc_seed_allow_commit_mismatch=False) + + def test_relatable_divergence_proceeds_and_stashes_the_delta(self) -> None: + # The developer cycle, seed half: the source repo advanced by one + # integration commit; the seed must PROCEED (near-perfect graph clone) + # and record the delta for the catch-up stage — never refuse. + with tempfile.TemporaryDirectory() as tmp: + repo = Path(tmp) / "repo" + _init_repo(repo) + target_head = _commit_file(repo, "a.py", "one", "leaf-2 checkout state") + source_head = _commit_file(repo, "integrated.py", "two", "leaf-1 integrated") + args = self._args() + refusal = cgc_seed._seed_commit_mismatch( + args, repo, repo / "wt", source_head, target_head + ) + self.assertIsNone(refusal) + divergence = args._cgc_seed_divergence + self.assertEqual(divergence["entries"], [{"status": "D", "path": "integrated.py"}]) + self.assertEqual(divergence["sourceHead"], source_head) + self.assertEqual(divergence["targetHead"], target_head) + + def test_equal_heads_proceed_without_divergence(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + repo = Path(tmp) / "repo" + _init_repo(repo) + head = _commit_file(repo, "a.py", "one", "base") + args = self._args() + refusal = cgc_seed._seed_commit_mismatch(args, repo, repo / "wt", head, head) + self.assertIsNone(refusal) + self.assertFalse(hasattr(args, "_cgc_seed_divergence")) + + def test_unrelatable_heads_still_refuse(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + repo = Path(tmp) / "repo" + _init_repo(repo) + head = _commit_file(repo, "a.py", "one", "base") + args = self._args() + refusal = cgc_seed._seed_commit_mismatch( + args, repo, repo / "wt", head, "0" * 40 + ) + assert refusal is not None + self.assertFalse(refusal["ok"]) + self.assertIn("unrelated", refusal["reason"]) + + +class SeedCatchupTests(unittest.TestCase): + def _args(self, tmp: Path, divergence: dict | None, **overrides) -> argparse.Namespace: + values = { + "dry_run": False, + "coordination_root": tmp / "coord", + "cgc_seed_target_repo_root": tmp / "target", + "cgc_seed_delta_max_files": 0, + "cgc_seed_repo_id": "repo-a", + } + values.update(overrides) + args = argparse.Namespace(**values) + if divergence is not None: + args._cgc_seed_divergence = divergence + return args + + def _ready(self): + return mock.patch( + "agents_remember.providers.provider_setup._wait_for_cgc_watcher_ready", + return_value={"ready": True, "container": "c", "waitedSeconds": 0.0}, + ) + + def test_small_diff_touches_exactly_the_delta(self) -> None: + with tempfile.TemporaryDirectory() as tmp_dir: + tmp = Path(tmp_dir) + target = tmp / "target" + target.mkdir() + changed = target / "changed.py" + untouched = target / "untouched.py" + changed.write_text("x", encoding="utf-8") + untouched.write_text("y", encoding="utf-8") + old = time.time() - 3600 + os.utime(changed, (old, old)) + os.utime(untouched, (old, old)) + divergence = { + "entries": [ + {"status": "M", "path": "changed.py"}, + {"status": "M", "path": "gone.py"}, + ], + "count": 2, + "sourceHead": "s", + "targetHead": "t", + } + with self._ready(): + results = _seed_catchup_results(self._args(tmp, divergence), {}) + self.assertEqual(len(results), 1) + self.assertEqual(results[0]["touched"], 1) + # Honesty (review L2/B2): the undeliverable path is residual + # staleness — never blessed as caught up. + self.assertFalse(results[0]["caughtUp"]) + residuals = results[0]["staleIndex"]["residuals"] + self.assertEqual(residuals, [{"kind": "missing-on-disk", "path": "gone.py"}]) + self.assertGreater(changed.stat().st_mtime, old + 1) # fresh → re-indexed + self.assertLess(abs(untouched.stat().st_mtime - old), 1) # untouched stays + store = ProviderMetricsStore(tmp / "coord") + rows = store.read_recent() + self.assertEqual(rows[-1]["schema"], PROVIDER_INDEX_STATE_SCHEMA) + self.assertEqual(rows[-1]["touched"], 1) + self.assertEqual(rows[-1]["repoId"], "repo-a") + + def test_clean_delta_to_ready_watcher_is_caught_up(self) -> None: + with tempfile.TemporaryDirectory() as tmp_dir: + tmp = Path(tmp_dir) + target = tmp / "target" + target.mkdir() + (target / "changed.py").write_text("x", encoding="utf-8") + divergence = { + "entries": [{"status": "M", "path": "changed.py"}], + "count": 1, + "sourceHead": "s", + "targetHead": "t", + } + with self._ready(): + results = _seed_catchup_results(self._args(tmp, divergence), {}) + self.assertTrue(results[0]["caughtUp"]) + self.assertNotIn("staleIndex", results[0]) + + def test_watcher_not_ready_means_no_touch_and_honest_staleness(self) -> None: + # Review L2/B1: inotify has no replay — an early touch is silently + # lost. No ready marker ⇒ no touch, surfaced staleness. + with tempfile.TemporaryDirectory() as tmp_dir: + tmp = Path(tmp_dir) + target = tmp / "target" + target.mkdir() + changed = target / "changed.py" + changed.write_text("x", encoding="utf-8") + old = time.time() - 3600 + os.utime(changed, (old, old)) + divergence = { + "entries": [{"status": "M", "path": "changed.py"}], + "count": 1, + "sourceHead": "s", + "targetHead": "t", + } + with mock.patch( + "agents_remember.providers.provider_setup._wait_for_cgc_watcher_ready", + return_value={"ready": False, "reason": "no marker"}, + ): + results = _seed_catchup_results(self._args(tmp, divergence), {}) + self.assertTrue(results[0]["skipped"]) + self.assertIn("not ready", results[0]["staleIndex"]["reason"]) + self.assertLess(abs(changed.stat().st_mtime - old), 1) # NOT touched + + def test_deletions_and_renames_are_phantom_residuals(self) -> None: + with tempfile.TemporaryDirectory() as tmp_dir: + tmp = Path(tmp_dir) + target = tmp / "target" + target.mkdir() + (target / "renamed_new.py").write_text("x", encoding="utf-8") + divergence = { + "entries": [ + {"status": "D", "path": "removed.py"}, + {"status": "R", "path": "renamed_new.py", "from": "renamed_old.py"}, + ], + "count": 2, + "sourceHead": "s", + "targetHead": "t", + } + with self._ready(): + results = _seed_catchup_results(self._args(tmp, divergence), {}) + self.assertEqual(results[0]["touched"], 1) # the rename's new path + self.assertFalse(results[0]["caughtUp"]) + kinds = sorted(r["kind"] for r in results[0]["staleIndex"]["residuals"]) + self.assertEqual(kinds, ["deleted-phantom", "rename-source-phantom"]) + + def test_big_diff_serves_stale_and_never_touches(self) -> None: + with tempfile.TemporaryDirectory() as tmp_dir: + tmp = Path(tmp_dir) + (tmp / "target").mkdir() + divergence = { + "entries": [{"status": "M", "path": f"f{i}.py"} for i in range(5)], + "count": 5, + "sourceHead": "s", + "targetHead": "t", + } + results = _seed_catchup_results( + self._args(tmp, divergence, cgc_seed_delta_max_files=3), {} + ) + self.assertEqual(len(results), 1) + self.assertTrue(results[0]["skipped"]) + stale = results[0]["staleIndex"] + self.assertTrue(stale["served"]) + self.assertEqual(stale["behindFiles"], 5) + self.assertIn("explicit", stale["reindex"]) + + def test_no_divergence_or_dry_run_is_a_noop(self) -> None: + with tempfile.TemporaryDirectory() as tmp_dir: + tmp = Path(tmp_dir) + self.assertEqual(_seed_catchup_results(self._args(tmp, None), {}), []) + divergence = { + "entries": [{"status": "M", "path": "a"}], + "count": 1, + "sourceHead": "s", + "targetHead": "t", + } + self.assertEqual( + _seed_catchup_results(self._args(tmp, divergence, dry_run=True), {}), [] + ) + + +class WatcherReadinessTests(unittest.TestCase): + _SETTINGS: ClassVar[dict] = { + "contextProviders": { + "enabled": True, + "providers": { + "codegraphcontext-code": { + "enabled": True, + "runtime": { + "runner": {"containerNameTemplate": "ar-cgc-watch-i1-"} + }, + } + }, + } + } + + def _args(self) -> argparse.Namespace: + return argparse.Namespace( + cgc_seed_repo_id="repo-a", coordination_root=Path("/tmp") + ) + + def test_container_name_expands_the_template(self) -> None: + name = _cgc_watcher_container_name(self._args(), self._SETTINGS) + assert name is not None + self.assertTrue(name.startswith("ar-cgc-watch-i1-")) + self.assertNotIn("<", name) + + def test_container_name_unresolvable_without_provider_or_repo(self) -> None: + self.assertIsNone(_cgc_watcher_container_name(self._args(), {})) + args = argparse.Namespace(cgc_seed_repo_id=None, coordination_root=Path("/tmp")) + self.assertIsNone(_cgc_watcher_container_name(args, self._SETTINGS)) + + def test_ready_when_marker_appears_in_logs(self) -> None: + with ( + mock.patch( + "agents_remember.providers.provider_setup.docker_command", + return_value="docker", + ), + mock.patch( + "agents_remember.providers.provider_setup.run_command", + return_value={ + "returncode": 0, + "stdout": "[watch-guard] ...\nMonitoring for file changes\n", + "stderr": "", + }, + ), + ): + result = _wait_for_cgc_watcher_ready( + self._args(), self._SETTINGS, timeout_seconds=1 + ) + self.assertTrue(result["ready"]) + + def test_not_ready_times_out_without_marker(self) -> None: + with ( + mock.patch( + "agents_remember.providers.provider_setup.docker_command", + return_value="docker", + ), + mock.patch( + "agents_remember.providers.provider_setup.run_command", + return_value={"returncode": 0, "stdout": "booting...", "stderr": ""}, + ), + ): + result = _wait_for_cgc_watcher_ready( + self._args(), self._SETTINGS, timeout_seconds=0 + ) + self.assertFalse(result["ready"]) + self.assertIn("no watch-ready marker", result["reason"]) + + def test_unresolved_container_and_dockerless_are_not_ready(self) -> None: + result = _wait_for_cgc_watcher_ready(self._args(), {}, timeout_seconds=0) + self.assertFalse(result["ready"]) + self.assertIn("unresolved", result["reason"]) + with mock.patch( + "agents_remember.providers.provider_setup.docker_command", + side_effect=ContextProviderError("docker command not found"), + ): + result = _wait_for_cgc_watcher_ready( + self._args(), self._SETTINGS, timeout_seconds=0 + ) + self.assertFalse(result["ready"]) + + +class MemoryMtimeSyncDivergenceTests(unittest.TestCase): + def test_divergent_files_keep_fresh_mtimes(self) -> None: + # The developer cycle, grepai half: the memory worktree carries a delta + # relative to the source checkout; stamping old mtimes onto that delta + # would make the watcher skip it (silent staleness). The delta must + # stay fresh; everything else syncs so the cloned index is reused. + with tempfile.TemporaryDirectory() as tmp_dir: + tmp = Path(tmp_dir) + source = tmp / "memory" + _init_repo(source) + _commit_file(source, "same.md", "unchanged", "base") + _commit_file(source, "delta.md", "old content", "base 2") + _git(source, "branch", "task-branch") + worktree = tmp / "memory-wt" + _git(source, "worktree", "add", "-q", str(worktree), "task-branch") + _commit_file(worktree, "delta.md", "NEW content", "the divergence") + fresh = time.time() + old = fresh - 3600 + for repo in (source, worktree): + for name in ("same.md", "delta.md"): + path = repo / name + if repo is source: + os.utime(path, (old, old)) # source carries old mtimes + else: + os.utime(path, (fresh, fresh)) # checkout stamped fresh + contract = cast( + WorktreeContract, + SimpleNamespace(memory_repo_path=source, memory_worktree=worktree), + ) + result = _sync_worktree_memory_mtimes(contract, dry_run=False) + self.assertEqual(result["state"], "synced") + self.assertEqual(result["divergentLeftFresh"], 1) + same_mtime = (worktree / "same.md").stat().st_mtime + delta_mtime = (worktree / "delta.md").stat().st_mtime + self.assertLess(abs(same_mtime - old), 1) # synced to source: watcher reuses index + self.assertGreater(delta_mtime, old + 1) # left fresh: watcher re-embeds the delta + + def test_equal_heads_sync_everything(self) -> None: + with tempfile.TemporaryDirectory() as tmp_dir: + tmp = Path(tmp_dir) + source = tmp / "memory" + _init_repo(source) + _commit_file(source, "same.md", "unchanged", "base") + _git(source, "branch", "task-branch") + worktree = tmp / "memory-wt" + _git(source, "worktree", "add", "-q", str(worktree), "task-branch") + contract = cast( + WorktreeContract, + SimpleNamespace(memory_repo_path=source, memory_worktree=worktree), + ) + result = _sync_worktree_memory_mtimes(contract, dry_run=False) + self.assertEqual(result["state"], "synced") + self.assertEqual(result["divergentLeftFresh"], 0) + self.assertGreaterEqual(int(str(result["filesSynced"])), 1) + + +class IntegrationCycleReproTests(unittest.TestCase): + def test_leaf1_integrates_then_leaf2_seeds_with_catchup(self) -> None: + """The developer's exact crash cycle, end to end at the seam level. + + leaf 1 integrates (source repo advances) → leaf 2's checkout is one + commit behind → the seed PROCEEDS (no refusal, no refresh-all) and the + catch-up stage touches exactly the integrated files so the watchers + update the index in place. Zero teardowns anywhere in the flow. + """ + with tempfile.TemporaryDirectory() as tmp_dir: + tmp = Path(tmp_dir) + repo = tmp / "repo" + _init_repo(repo) + _commit_file(repo, "core.py", "v1", "initial") + _git(repo, "branch", "leaf-2") + worktree = tmp / "leaf-2-wt" + _git(repo, "worktree", "add", "-q", str(worktree), "leaf-2") + target_head = _git(worktree, "rev-parse", "HEAD") + # leaf 1 lands on the integration branch (the source moves). + source_head = _commit_file(repo, "integrated.py", "leaf-1 work", "leaf-1 lands") + + args = argparse.Namespace( + cgc_seed_allow_commit_mismatch=False, + dry_run=False, + coordination_root=tmp / "coord", + cgc_seed_target_repo_root=worktree, + cgc_seed_delta_max_files=0, + cgc_seed_repo_id="repo", + ) + refusal = cgc_seed._seed_commit_mismatch( + args, repo, worktree, source_head, target_head + ) + self.assertIsNone(refusal) # the seed proceeds — no crash-out + + # leaf-2 is BEHIND: the cloned graph carries integrated.py while + # the tree lacks it — an ahead-content phantom, honestly reported + # as residual staleness (review L2/B2), never a teardown/reindex. + with mock.patch( + "agents_remember.providers.provider_setup._wait_for_cgc_watcher_ready", + return_value={"ready": True, "container": "c", "waitedSeconds": 0.0}, + ): + results = _seed_catchup_results(args, {}) + self.assertEqual(len(results), 1) + self.assertEqual(results[0]["divergence"]["count"], 1) + self.assertFalse(results[0]["caughtUp"]) + self.assertEqual( + results[0]["staleIndex"]["residuals"], + [{"kind": "deleted-phantom", "path": "integrated.py"}], + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/mcp/tests/test_provider_setup.py b/mcp/tests/test_provider_setup.py index 6598d1c1..bd106c6e 100644 --- a/mcp/tests/test_provider_setup.py +++ b/mcp/tests/test_provider_setup.py @@ -111,6 +111,8 @@ def phase_done(self, result): coordination_root=root, settings_path=settings_path, dry_run=True, + # 260707-HFX-L2: the refresh fallback is explicit opt-in now. + cgc_refresh_fallback=True, grepai_seed=provider_setup.GrepaiSeedOptions( source_coordination_root=root, project_id="repo-a", @@ -308,6 +310,8 @@ def test_cgc_prepare_is_ok_when_seed_falls_back_to_refresh(self) -> None: coordination_root=root, settings_path=settings_path, dry_run=True, + # 260707-HFX-L2: opt IN — the fallback no longer fires by default. + cgc_refresh_fallback=True, ) ) @@ -318,6 +322,52 @@ def test_cgc_prepare_is_ok_when_seed_falls_back_to_refresh(self) -> None: any(result["action"] == "refresh-all" for result in payload["results"]) ) + def test_cgc_refresh_fallback_is_off_by_default(self) -> None: + # 260707-HFX-L2: a refused seed must never cost a from-zero reindex on + # its own — the fallback fires only on explicit opt-in. + self.assertFalse(provider_setup.ProviderSetupRequest( + action="prepare", + coordination_root=Path("/tmp"), + settings_path=Path("/tmp/settings.json"), + ).cgc_refresh_fallback) + parser = provider_setup.build_parser() + args = parser.parse_args( + ["prepare", "--coordination-root", "/tmp", "--from-settings", "/tmp/s.json"] + ) + self.assertFalse(args.cgc_refresh_fallback) + opt_in = parser.parse_args( + [ + "prepare", + "--coordination-root", + "/tmp", + "--from-settings", + "/tmp/s.json", + "--cgc-refresh-fallback", + ] + ) + self.assertTrue(opt_in.cgc_refresh_fallback) + + def test_benign_seed_skips_never_fail_a_prepare(self) -> None: + # 260707-HFX-L2 (review note): a skip where no seed was intended + # (hermetic benchmark, no source configured — no sourceHead) is fine; + # a REFUSAL (unrelatable heads — carries sourceHead) fails without the + # explicit fallback opt-in. + args = argparse.Namespace(action="prepare", cgc_refresh_fallback=False) + benign = {"ok": False, "skipped": True, "reason": "no seed source configured"} + self.assertTrue(provider_setup.result_ok_for_prepare(benign, args)) + refusal = { + "ok": False, + "skipped": True, + "reason": "heads are unrelated", + "sourceHead": "a" * 40, + "targetHead": "b" * 40, + "provider": "codegraphcontext", + "action": "seed", + } + self.assertFalse(provider_setup.result_ok_for_prepare(refusal, args)) + args_opt_in = argparse.Namespace(action="prepare", cgc_refresh_fallback=True) + self.assertTrue(provider_setup.result_ok_for_prepare(refusal, args_opt_in)) + def test_rewrite_cgc_bundle_paths_rewrites_json_jsonl_and_text(self) -> None: with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) From 551695279f403ab19c0eba4ce6f6cfde6a8bb1f5 Mon Sep 17 00:00:00 2001 From: Readone Mohamed Date: Tue, 7 Jul 2026 20:09:01 +0200 Subject: [PATCH 03/35] =?UTF-8?q?260707-HFX-L3:=20spawn=20payload=20delive?= =?UTF-8?q?ry=20=E2=80=94=20verified,=20idempotent,=20loud?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Delivery reports success only after a pane capture proves the paste landed. One origin baseline is held for the whole delivery over a history-inclusive capture window (capture-pane -p -S -200) and every retry re-captures before re-pasting, so a landed paste is never re-sent; verification runs a strongest-first probe ladder: payload-specific codex chip instance growth, generic chip-count growth across BOTH vocabularies ([Pasted text #N] claude, [Pasted Content N chars] codex — the codex form was unrecognized and every landed paste re-pasted blind), then payload-head echo. Payloads ride stdin into tmux load-buffer then paste-buffer -p -d (no argv/ARG_MAX seam). Failures are loud: the spawn payload ships deliveryCapture (explicit "(empty pane capture)" marker when empty), the inbox push records a bounded capture tail, and the paste endpoint attaches the capture on delivery or submit failure. Escape is refused at the paster — Enter is the only key this seam sends. Root cause (SF-1/F-V, sprint forensics): contextDelivered:true on a clean codex boot with no payload, and per-attempt re-baselining that stacked up to 7 duplicate pastes (empirically reproduced: 10 on the pre-fix seam). Adversarial review: round 1 PASS-WITH-NOTES -> N1 (viewport blindness) + N3 (parity) fixed -> round 2 PASS-WITH-NOTES; gate green (1695 tests). --- mcp/src/agents_remember/mcp/tools/terminal.py | 89 ++++--- mcp/src/agents_remember/models/terminal.py | 12 +- mcp/src/agents_remember/serving/app.py | 24 +- .../agents_remember/serving/inbox_delivery.py | 21 +- .../agents_remember/serving/terminal_paste.py | 226 +++++++++++++----- mcp/tests/test_operator_inbox.py | 45 +++- mcp/tests/test_spawn_agent_session.py | 86 ++++++- mcp/tests/test_terminal_paste.py | 192 ++++++++++++++- 8 files changed, 577 insertions(+), 118 deletions(-) diff --git a/mcp/src/agents_remember/mcp/tools/terminal.py b/mcp/src/agents_remember/mcp/tools/terminal.py index 217a43f2..13ca16c8 100644 --- a/mcp/src/agents_remember/mcp/tools/terminal.py +++ b/mcp/src/agents_remember/mcp/tools/terminal.py @@ -316,35 +316,67 @@ def _brief_packet(context: str | None, prompt_keywords: list[str] | None) -> str return f"{keyword_line}\n\n{context}" if context else keyword_line +_EMPTY_PANE_CAPTURE = "(empty pane capture)" +"""Explicit stand-in when a failed delivery's pane capture is empty (a vanished/unreadable pane): +review N3 alignment with ``inbox_delivery`` -- a False outcome NEVER ships evidence-less, so the +``deliveryCapture`` field is present (with this marker) rather than silently omitted.""" + + +@dataclass(frozen=True) +class _SpawnDelivery: + """Delivery outcomes for one spawn's session layer (``None`` = that piece was not sent). + + ``failure_capture`` is the pane capture attached by the paster to the latest failed paste -- + the 260707-HFX-L3 loud-failure evidence (SF-1: a bare ``contextDelivered:true`` once masked a + codex seat that booted clean with no payload). ``None`` when every sent piece verified. + """ + + session_commands_delivered: bool | None = None + context_delivered: bool | None = None + submitted: bool | None = None + failure_capture: str | None = None + + def _deliver_spawn_pastes( paster: TerminalPaster, tmux_name: str, session_commands: list[str], packet: str | None, submit: bool, -) -> tuple[bool | None, bool | None, bool | None]: - """Deliver the session layer: session commands FIRST (each its own echo-confirmed paste, always +) -> _SpawnDelivery: + """Deliver the session layer: session commands FIRST (each its own capture-verified paste, always submitted -- an unexecuted ``/effort ultracode`` would be a silent downgrade), THEN the brief. - Returns ``(session_commands_delivered, context_delivered, submitted)`` (``None`` = not sent). + Every ``True`` here is capture-verified by the paster (260707-HFX-L3): a ``False`` means the + pane provably shows no trace of the paste, and the failing capture rides the result. """ session_commands_delivered: bool | None = None context_delivered: bool | None = None submitted: bool | None = None + failure_capture: str | None = None + failed = False if session_commands: session_commands_delivered = True for command_line in session_commands: outcome = paster.paste(tmux_name, command_line, submit=True) - session_commands_delivered = ( - session_commands_delivered and outcome.delivered and outcome.submitted - ) + if not (outcome.delivered and outcome.submitted): + session_commands_delivered = False + failed = True + failure_capture = outcome.capture or failure_capture if packet: # Workers auto-start (paste + submit); a human draft-only flow leaves submit=False so the - # draft stays editable. Echo-confirmed server-side (the frontend pasteAndConfirm mirror). + # draft stays editable. Capture-verified server-side (the frontend pasteAndConfirm mirror). outcome = paster.paste(tmux_name, packet, submit=submit) context_delivered = outcome.delivered submitted = outcome.submitted if submit else None - return session_commands_delivered, context_delivered, submitted + if not outcome.delivered or (submit and not outcome.submitted): + failed = True + failure_capture = outcome.capture or failure_capture + if failed and failure_capture is None: + failure_capture = _EMPTY_PANE_CAPTURE + return _SpawnDelivery( + session_commands_delivered, context_delivered, submitted, failure_capture + ) def spawn_agent_session_payload( @@ -373,12 +405,14 @@ def spawn_agent_session_payload( """Spawn one role-configured, leaf-attached, context-primed hosted session (L2 dispatch). Composes the EXISTING session primitives -- the shared serving opener (create + leaf claim + - detached tmux ensure with env-seeded knobs), then an echo-confirmed context-packet paste with an - optional submit -- so orchestrators spawn managers and managers spawn workers without dashboard - clicks. ``harness`` is optional (260703-L13): omitted, it resolves per-use through the agentic - settings (repo-local over global ``orchestration.spawn.harness``), else the detection-gated - default. Leaf uniqueness stays server-arbitrated: a taken leaf returns ``leaf-taken`` (never - overridden). ``host``/``paster``/``which``/``session_id`` are injectable seams for tests. + detached tmux ensure with env-seeded knobs), then a capture-verified context-packet paste with an + optional submit (260707-HFX-L3: ``contextDelivered:true`` only after the pane provably shows the + payload; an unverifiable delivery reports false WITH the pane capture) -- so orchestrators spawn + managers and managers spawn workers without dashboard clicks. ``harness`` is optional + (260703-L13): omitted, it resolves per-use through the agentic settings (repo-local over global + ``orchestration.spawn.harness``), else the detection-gated default. Leaf uniqueness stays + server-arbitrated: a taken leaf returns ``leaf-taken`` (never overridden). + ``host``/``paster``/``which``/``session_id`` are injectable seams for tests. Per-level knob resolution (ruling 2026-07-07T08:15): the settings rungs come from ``resolved_role_knobs(AR_SPAWN_ROLE, level)`` -- the ``orchestration.rolesPerLevel[level]`` @@ -480,27 +514,17 @@ def spawn_agent_session_payload( assert entry is not None # opened => an upserted row packet = _brief_packet(context, prompt_keywords) - session_commands_delivered: bool | None = None - context_delivered: bool | None = None - submitted: bool | None = None + delivery = _SpawnDelivery() if resolved_session_commands or packet: spawn_paster = paster if paster is not None else TerminalPaster() - session_commands_delivered, context_delivered, submitted = _deliver_spawn_pastes( + delivery = _deliver_spawn_pastes( spawn_paster, entry.tmux_name, resolved_session_commands, packet, submit ) - return _tool_payload( - "spawn_agent_session", - _spawned_payload(entry, session_commands_delivered, context_delivered, submitted), - ) + return _tool_payload("spawn_agent_session", _spawned_payload(entry, delivery)) -def _spawned_payload( - entry: TerminalCatalogEntry, - session_commands_delivered: bool | None, - context_delivered: bool | None, - submitted: bool | None, -) -> dict[str, Any]: +def _spawned_payload(entry: TerminalCatalogEntry, delivery: _SpawnDelivery) -> dict[str, Any]: """The ``spawned`` payload: the upserted row (incl. the L16 provenance) + delivery outcomes.""" return { "ok": True, @@ -523,9 +547,12 @@ def _spawned_payload( "launchArgs": list(entry.launch_args) if entry.launch_args else None, "promptKeywords": list(entry.prompt_keywords) if entry.prompt_keywords else None, "sessionCommands": list(entry.session_commands) if entry.session_commands else None, - "sessionCommandsDelivered": session_commands_delivered, - "contextDelivered": context_delivered, - "submitted": submitted, + "sessionCommandsDelivered": delivery.session_commands_delivered, + "contextDelivered": delivery.context_delivered, + "submitted": delivery.submitted, + # 260707-HFX-L3 loud failure: on any False outcome above the pane capture is the attached + # evidence -- the caller must treat the seat as blind, never assume the brief landed. + "deliveryCapture": delivery.failure_capture, } diff --git a/mcp/src/agents_remember/models/terminal.py b/mcp/src/agents_remember/models/terminal.py index 02bf3dfe..ba48c2d8 100644 --- a/mcp/src/agents_remember/models/terminal.py +++ b/mcp/src/agents_remember/models/terminal.py @@ -42,7 +42,7 @@ class AttachTerminalSessionToLeafResponse(ToolResponse): class SpawnAgentSessionResponse(ToolResponse): """``spawn_agent_session``: spawn a role-configured, leaf-attached, context-primed hosted session. - Composes the existing session primitives (opener + leaf claim + echo-confirmed paste + optional + Composes the existing session primitives (opener + leaf claim + capture-verified paste + optional submit). ``ok`` is true only for ``spawned``; ``leaf-taken`` surfaces the server-arbitrated refusal (the tool never overrides it), and the harness/kind statuses report a validation refusal before anything is spawned. @@ -74,11 +74,17 @@ class SpawnAgentSessionResponse(ToolResponse): launchArgs: list[str] | None = None promptKeywords: list[str] | None = None sessionCommands: list[str] | None = None - # Whether every session command was echo-confirmed AND submitted (None = none were sent). + # Whether every session command was capture-verified AND submitted (None = none were sent). sessionCommandsDelivered: bool | None = None # Set on ``leaf-taken``: the running same-role session that already owns the leaf. ownerSession: str | None = None - # Context-packet delivery outcome (echo-confirmed paste; submit only when requested). + # Context-packet delivery outcome: true ONLY after a pane capture proves the payload landed + # (chip count / content probe for codex targets, prompt-echo for claude targets); submit only + # when requested. 260707-HFX-L3 -- the SF-1 blind seat was a true here over a clean-booted pane. contextDelivered: bool | None = None submitted: bool | None = None + # 260707-HFX-L3 loud-failure evidence: the final pane capture, attached whenever any delivery + # outcome above reports False -- a blind seat is diagnosed from the payload itself, never + # trusted from a bare boolean. Absent on full success. + deliveryCapture: str | None = None detail: str | None = None diff --git a/mcp/src/agents_remember/serving/app.py b/mcp/src/agents_remember/serving/app.py index 337dba0d..761b79ef 100644 --- a/mcp/src/agents_remember/serving/app.py +++ b/mcp/src/agents_remember/serving/app.py @@ -764,23 +764,25 @@ def api_terminal_paste(session: str, request: TerminalPasteRequest) -> Response: # L2 paste seam: deliver a context packet to a hosted session server-side (the mirror of the # frontend WebSocket pasteAndConfirm/submitAndConfirm), so a packet can be pushed to a durable # tmux session that has no attached browser client. 404 if the session is unknown/terminated or - # its tmux session is gone; otherwise echo-confirm the paste (and submit when asked) and report - # delivered/submitted. Same localhost posture as the rest of serving/. + # its tmux session is gone; otherwise capture-verify the paste (and submit when asked) and + # report delivered/submitted. Same localhost posture as the rest of serving/. entry = catalog.get(session) if entry is None or entry.status != "running" or not host.has_session(entry.tmux_name): if entry is not None and entry.status == "running": catalog.mark_exited(session) return JSONResponse(content={"status": "unknown-session"}, status_code=404) outcome = paster.paste(entry.tmux_name, request.text, submit=request.submit) - return JSONResponse( - content={ - "session": session, - "status": "delivered" if outcome.delivered else "unconfirmed", - "delivered": outcome.delivered, - "submitted": outcome.submitted, - }, - status_code=200, - ) + content: dict[str, object] = { + "session": session, + "status": "delivered" if outcome.delivered else "unconfirmed", + "delivered": outcome.delivered, + "submitted": outcome.submitted, + } + if not outcome.delivered or (request.submit and not outcome.submitted): + # 260707-HFX-L3 loud failure: an unconfirmed paste OR an unconfirmed requested submit + # ships its pane capture as evidence (review N3 parity with the spawn seam). + content["capture"] = outcome.capture + return JSONResponse(content=content, status_code=200) @app.post("/api/terminal/{session}/terminate") def api_terminal_terminate(session: str) -> Response: diff --git a/mcp/src/agents_remember/serving/inbox_delivery.py b/mcp/src/agents_remember/serving/inbox_delivery.py index f2bd3f8a..e1966a69 100644 --- a/mcp/src/agents_remember/serving/inbox_delivery.py +++ b/mcp/src/agents_remember/serving/inbox_delivery.py @@ -9,7 +9,10 @@ from agents_remember.observer.events import now_iso from agents_remember.serving.terminal import TerminalHost from agents_remember.serving.terminal_catalog import TerminalCatalog, TerminalCatalogEntry -from agents_remember.serving.terminal_paste import TerminalPaster +from agents_remember.serving.terminal_paste import PasteResult, TerminalPaster + +_CAPTURE_EVIDENCE_LIMIT = 2000 +"""Durable-row bound for an attached pane capture: keep the TAIL (the freshest pane output).""" @dataclass(frozen=True) @@ -53,7 +56,21 @@ def deliver_inbox_entry( now=now_iso(), delivery_state="delivered" if outcome.delivered else "unconfirmed", delivered_to_session=target.id, - delivery_detail="echo-confirmed" if outcome.delivered else "paste was not echoed", + delivery_detail="echo-confirmed" if outcome.delivered else _unconfirmed_detail(outcome), + ) + + +def _unconfirmed_detail(outcome: PasteResult) -> str: + """The 260707-HFX-L3 loud-failure detail: an unverified push carries its pane capture. + + Never a bare "not echoed" -- the durable row is the forensic record a re-briefing operator + reads, so the evidence (what the pane actually showed) rides along, tail-bounded. + """ + if not outcome.capture: + return "paste was not capture-verified (empty pane capture)" + return ( + "paste was not capture-verified; pane capture (tail):\n" + + outcome.capture[-_CAPTURE_EVIDENCE_LIMIT:] ) diff --git a/mcp/src/agents_remember/serving/terminal_paste.py b/mcp/src/agents_remember/serving/terminal_paste.py index 995faaef..94753277 100644 --- a/mcp/src/agents_remember/serving/terminal_paste.py +++ b/mcp/src/agents_remember/serving/terminal_paste.py @@ -1,4 +1,4 @@ -"""Server-side echo-confirmed stdin paste into a durable tmux session (slice L2 dispatch). +"""Server-side capture-verified stdin paste into a durable tmux session (slice L2 dispatch). The browser delivers a context packet over the live WebSocket (``data/terminal.ts`` ``pasteAndConfirm`` / ``submitAndConfirm``): it wraps the text as ONE sanitized *bracketed paste*, @@ -6,15 +6,32 @@ until its composer mounts), then -- only when submitting -- sends ``Enter`` and watches for output that advances past the post-paste baseline. The agent-facing ``spawn_agent_session`` tool has **no live WebSocket**: it drives a freshly-spawned, PTY-clientless durable tmux session. This module mirrors the -frontend semantics server-side over tmux primitives: - -* **paste** -- ``set-buffer`` + ``paste-buffer -p`` (tmux does the ``ESC[200~ … ESC[201~`` bracketing - itself), the robust way to inject a multi-line blob into a pane with no escape-byte fiddling. -* **echo confirmation** -- ``capture-pane`` before/after: delivery is confirmed only when the pasted - draft text or a new ``[Pasted text #N]`` chip appears. A booting harness may repaint the pane while - still discarding stdin, so a generic capture change is not enough. +frontend semantics server-side over tmux primitives, hardened by 260707-HFX-L3 (the SF-1 blind seat + +the F-V 7x duplicate-paste stack, both forensically recorded in the 260707 sprint): + +* **paste** -- ``load-buffer`` (payload rides stdin, never argv, so size is unbounded by ARG_MAX) + + ``paste-buffer -p`` (tmux does the ``ESC[200~ … ESC[201~`` bracketing itself) -- the run's proven + large-payload mechanic; raw ``send-keys`` never carries a payload. +* **capture verification** -- ``capture-pane -p -S -`` (the viewport PLUS a bounded + scrollback window; review N1: chips visible at origin that scroll out of the viewport before the + new chip renders would make growth undetectable, and the truncated view would re-paste a landed + paste) against the PRE-DELIVERY origin snapshot: delivery is confirmed only when THIS payload's + expected codex chip (``[Pasted Content chars]`` -- the chip embeds the payload size, so the + probe is payload-specific), a NEW paste chip of either vocabulary (Claude Code + ``[Pasted text #N]``, codex ``[Pasted Content N chars]``), or the payload's own head appears. A + booting harness may repaint the pane while still discarding stdin, so a generic capture change is + not enough. +* **idempotent retry** -- before ANY re-paste the pane is re-captured and checked against the same + origin snapshot: a paste that landed after its echo window is reported delivered, never re-sent. + Duplicate stacking is impossible by construction (F-V happened because the codex chip vocabulary + was unknown here AND every attempt re-baselined, blinding the seam to its own landed chips). +* **loud failure** -- an unverifiable delivery reports ``delivered=False`` WITH the final pane + capture attached (``PasteResult.capture``), so a blind seat (SF-1: ``contextDelivered:true`` over + a clean-booted codex pane) is diagnosable from the result itself, never trusted from a boolean. * **submit** -- ``send-keys Enter`` then one more ``capture-pane`` advance check (workers auto-start; - a human draft-only flow leaves ``submit=False`` so the draft stays editable, unsubmitted). + a human draft-only flow leaves ``submit=False`` so the draft stays editable, unsubmitted). Enter is + the ONLY key this seam ever sends: Escape is refused by construction -- it interrupts a codex + session (run discipline, dispatch-pack PASTE DISCIPLINE). Every tmux operation is an injectable callable (the ``terminal.py`` posture) so tests drive the loop against fakes -- no real tmux, no real sleeping. @@ -40,13 +57,19 @@ # suspend byte, and DEL (0x7f). tmux's ``paste-buffer -p`` re-adds the bracketing around the clean text. _PASTE_MARKER = re.compile(r"\x1b\[20[01]~") _CONTROL_NOISE = re.compile(r"[\x00-\x08\x0b-\x1f\x7f]") -_PASTED_TEXT_CHIP = re.compile(r"\[Pasted text(?: #[0-9]+)?\]") + +# The paste-chip vocabulary, one alternative per harness TUI: Claude Code renders a large paste as +# ``[Pasted text #N]``; codex renders ``[Pasted Content N chars]``. 260707-HFX-L3: the codex form was +# unrecognized here, so the seam misread landed pastes as unconfirmed and blind-retried -- the F-V +# forensic run stacked 7 duplicate chips in one composer. +_PASTE_CHIP = re.compile(r"\[Pasted text(?: #[0-9]+)?\]|\[Pasted [Cc]ontent [0-9]+ chars\]") # Delivery/submit confirmation cadence. Modest by default so a deliberate spawn dispatch does not block # unbounded; overridable per call. A just-spawned harness (Claude Code loading MCP) discards stdin while -# booting, so the paste is retried across the boot window until the composer echoes it. +# booting, so the paste is retried across the boot window -- but only after a re-capture proves the +# previous attempt did NOT land (the idempotence guard above). _ECHO_TIMEOUT = 4.0 -"""Seconds to watch for the composer's echo after one paste before re-pasting.""" +"""Seconds of settle re-captures after one paste before the retry path may consider re-pasting.""" _BOOT_DEADLINE = 30.0 """Total seconds to keep re-pasting across a harness boot before reporting unconfirmed delivery.""" _SUBMIT_TIMEOUT = 8.0 @@ -62,15 +85,29 @@ def sanitize_for_injection(text: str) -> str: return _CONTROL_NOISE.sub("", _PASTE_MARKER.sub("", text)) +def count_paste_chips(capture: str) -> int: + """Count rendered paste chips in a pane capture, across both harness chip vocabularies. + + The delivery-evidence probe: a chip count that grew past the pre-delivery origin proves the + composer accepted a paste (260707-HFX-L3 -- the codex ``[Pasted Content N chars]`` form counts). + """ + return len(_PASTE_CHIP.findall(capture)) + + @dataclass(frozen=True) class PasteResult: - """Outcome of an echo-confirmed paste: whether the composer echoed it and whether it submitted.""" + """Outcome of a capture-verified paste: delivery, submission, and the final pane capture. + + ``capture`` is the LAST pane snapshot taken. On ``delivered=False`` it is the loud-failure + evidence the caller must surface (260707-HFX-L3: never a bare false-success boolean again). + """ delivered: bool submitted: bool + capture: str = "" -TmuxBufferSetter = Callable[[str, str], None] +TmuxBufferLoader = Callable[[str, str], None] """Load text into a named tmux buffer: ``(buffer_name, text)``.""" TmuxBufferPaster = Callable[[str, str], None] @@ -83,11 +120,13 @@ class PasteResult: """Capture the visible pane text of a session: ``(tmux_session_name) -> text``.""" -def _tmux_set_buffer(buffer_name: str, text: str) -> None: +def _tmux_load_buffer(buffer_name: str, text: str) -> None: + # ``load-buffer -`` reads the payload from stdin: nothing rides argv, so a large context packet + # can never hit ARG_MAX or shell-quoting seams (the 260707 run's manual mechanic, server-encoded). subprocess.run( - ["tmux", "set-buffer", "-b", buffer_name, "--", text], + ["tmux", "load-buffer", "-b", buffer_name, "-"], check=False, - stdin=subprocess.DEVNULL, + input=text.encode("utf-8"), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, timeout=_TMUX_TIMEOUT, @@ -117,10 +156,23 @@ def _tmux_send_key(tmux_name: str, key: str) -> None: ) +_CAPTURE_HISTORY_LINES = 200 +"""Scrollback lines every verification capture includes (``-S -200``). Review N1 (260707-HFX-L3): +viewport-only capture let chips visible at origin scroll out before the new chip rendered, making +count growth undetectable -- and the idempotence guard shared the same truncated view, so a LANDED +paste could be re-sent (bounded, but the exact F-V class). Origin and verification captures both +flow through this window: growth math only holds when both sides see the same universe.""" + + +def _capture_pane_argv(tmux_name: str) -> list[str]: + """The history-inclusive verification capture command (pinned by test, not just by prose).""" + return ["tmux", "capture-pane", "-p", "-S", f"-{_CAPTURE_HISTORY_LINES}", "-t", tmux_name] + + def _tmux_capture_pane(tmux_name: str) -> str: try: result = subprocess.run( - ["tmux", "capture-pane", "-p", "-t", tmux_name], + _capture_pane_argv(tmux_name), check=False, stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, @@ -134,7 +186,7 @@ def _tmux_capture_pane(tmux_name: str) -> str: class TerminalPaster: - """Echo-confirmed paste into a durable tmux session, mirroring the frontend paste/submit loop. + """Capture-verified paste into a durable tmux session, mirroring the frontend paste/submit loop. All tmux operations are injectable (the ``terminal.py`` posture) so the confirmation loop is deterministically unit-testable against fakes -- no real tmux server, no real sleep. @@ -143,14 +195,14 @@ class TerminalPaster: def __init__( self, *, - set_buffer: TmuxBufferSetter | None = None, + load_buffer: TmuxBufferLoader | None = None, paste_buffer: TmuxBufferPaster | None = None, send_key: TmuxKeySender | None = None, capture_pane: TmuxPaneCapturer | None = None, sleep: Callable[[float], None] | None = None, monotonic: Callable[[], float] | None = None, ) -> None: - self._set_buffer = set_buffer or _tmux_set_buffer + self._load_buffer = load_buffer or _tmux_load_buffer self._paste_buffer = paste_buffer or _tmux_paste_buffer self._send_key = send_key or _tmux_send_key self._capture_pane = capture_pane or _tmux_capture_pane @@ -168,16 +220,18 @@ def paste( submit_timeout: float = _SUBMIT_TIMEOUT, poll_interval: float = _POLL_INTERVAL, ) -> PasteResult: - """Paste ``text`` (echo-confirmed) and optionally submit it. - - Re-pastes across the boot window until the composer echoes the draft (``delivered``); only then, - when ``submit``, sends ``Enter`` and watches for output past the post-paste baseline - (``submitted``). Never raises on a missing/gone session -- an unchanged pane simply reports the - unconfirmed outcome, the same "surface a retry, never silently drop" contract as the frontend. + """Paste ``text`` (capture-verified against the pre-delivery origin) and optionally submit it. + + Delivery is reported ONLY after a pane capture shows this paste landed (new chip or payload + head); the retry path re-captures FIRST and never re-sends a landed paste (260707-HFX-L3). + Only then, when ``submit``, sends ``Enter`` and watches for output past the post-paste + baseline (``submitted``). Never raises on a missing/gone session -- an unverifiable delivery + reports ``delivered=False`` with the final pane capture attached, the same "surface loudly, + never silently drop" contract as the frontend. """ sanitized = sanitize_for_injection(text) buffer_name = f"ar-spawn-{os.getpid()}-{uuid4().hex[:8]}" - delivered = self._paste_until_echo( + delivered, snap = self._paste_until_verified( tmux_name, sanitized, buffer_name, @@ -186,15 +240,28 @@ def paste( poll_interval=poll_interval, ) if not (delivered and submit): - return PasteResult(delivered=delivered, submitted=False) + return PasteResult(delivered=delivered, submitted=False, capture=snap) baseline = self._capture_pane(tmux_name) - self._send_key(tmux_name, "Enter") - submitted = self._await_advance( + self._press(tmux_name, "Enter") + submitted, snap = self._await_advance( tmux_name, baseline, timeout=submit_timeout, poll_interval=poll_interval ) - return PasteResult(delivered=True, submitted=submitted) + return PasteResult(delivered=True, submitted=submitted, capture=snap) + + def _press(self, tmux_name: str, key: str) -> None: + """Send one key through the delivery seam -- ``Escape`` is refused by construction. - def _paste_until_echo( + 260707-HFX-L3 run discipline (dispatch-pack PASTE DISCIPLINE): Escape INTERRUPTS a codex + session, so no delivery/cleanup path may ever emit it through this seam. + """ + if key == "Escape": + raise ValueError( + "terminal delivery never sends Escape -- it interrupts the target session " + "(260707-HFX-L3 run discipline)" + ) + self._send_key(tmux_name, key) + + def _paste_until_verified( self, tmux_name: str, sanitized: str, @@ -203,68 +270,109 @@ def _paste_until_echo( echo_timeout: float, boot_deadline: float, poll_interval: float, - ) -> bool: + ) -> tuple[bool, str]: + """Deliver ONE paste, capture-verified; re-send only after proof the last one did not land. + + The pre-delivery ``origin`` snapshot is the single baseline for every check. Re-baselining + per attempt was the F-V defect: a chip that rendered between attempts landed inside the + fresh baseline, so the seam never saw it and re-pasted -- stacking up to 7 duplicates. + Returns ``(delivered, last_capture)``; the capture rides back as loud-failure evidence. + """ + origin = self._capture_pane(tmux_name) started = self._monotonic() - first = True - while first or self._monotonic() - started < boot_deadline: - first = False - baseline = self._capture_pane(tmux_name) - self._set_buffer(buffer_name, sanitized) + pasted_once = False + while True: + if pasted_once: + # Idempotence guard (260707-HFX-L3): the TUI renders a beat behind keystrokes, so + # re-capture FIRST -- the previous paste may have landed after its echo window + # closed. A landed paste is never re-sent; the retry below is reached only with + # fresh proof that the pane still shows no trace of it. + snap = self._capture_pane(tmux_name) + if _paste_landed(origin, snap, sanitized): + return True, snap + if self._monotonic() - started >= boot_deadline: + return False, snap + self._load_buffer(buffer_name, sanitized) self._paste_buffer(tmux_name, buffer_name) - if self._await_echo( + pasted_once = True + landed, snap = self._await_echo( tmux_name, - baseline, + origin, sanitized, timeout=echo_timeout, poll_interval=poll_interval, - ): - return True + ) + if landed: + return True, snap with contextlib.suppress(OSError): self._sleep(_RETRY_DELAY) - return False def _await_echo( self, tmux_name: str, - baseline: str, + origin: str, sanitized: str, *, timeout: float, poll_interval: float, - ) -> bool: - """Poll until the pane contains this paste's visible draft or pasted-text chip.""" + ) -> tuple[bool, str]: + """Bounded settle re-captures until the pane shows this paste's chip or visible draft. + + Returns ``(landed, last_capture)`` -- the final capture rides back so a verification + failure is concluded WITH evidence, never from a stale snapshot. + """ started = self._monotonic() while True: current = self._capture_pane(tmux_name) - if _echo_observed(baseline, current, sanitized): - return True + if _paste_landed(origin, current, sanitized): + return True, current if self._monotonic() - started >= timeout: - return False + return False, current with contextlib.suppress(OSError): self._sleep(poll_interval) def _await_advance( self, tmux_name: str, baseline: str, *, timeout: float, poll_interval: float - ) -> bool: + ) -> tuple[bool, str]: """Poll ``capture-pane`` until the visible pane differs from ``baseline`` or ``timeout``.""" started = self._monotonic() while True: - if self._capture_pane(tmux_name) != baseline: - return True + current = self._capture_pane(tmux_name) + if current != baseline: + return True, current if self._monotonic() - started >= timeout: - return False + return False, current with contextlib.suppress(OSError): self._sleep(poll_interval) -def _echo_observed(baseline: str, current: str, sanitized: str) -> bool: - """True when ``current`` shows evidence of the paste itself, not just new boot output.""" - if current == baseline: +def _paste_landed(origin: str, current: str, sanitized: str) -> bool: + """True when ``current`` shows evidence of the paste itself (vs ``origin``), not just boot noise. + + Probes, strongest first (review N1): the payload-SPECIFIC codex chip (its size text is derived + from this payload, so it stays detectable even when unrelated origin chips scroll out of the + capture window and bare count-growth goes blind); generic chip-count growth (either vocabulary); + the payload-head probe for composers that echo the draft text verbatim (claude prompt-echo). + """ + if current == origin: return False - if len(_PASTED_TEXT_CHIP.findall(current)) > len(_PASTED_TEXT_CHIP.findall(baseline)): + expected_chip = _expected_codex_chip(sanitized) + if current.count(expected_chip) > origin.count(expected_chip): + return True + if count_paste_chips(current) > count_paste_chips(origin): return True fragment = _echo_fragment(sanitized) - return bool(fragment and current.count(fragment) > baseline.count(fragment)) + return bool(fragment and current.count(fragment) > origin.count(fragment)) + + +def _expected_codex_chip(sanitized: str) -> str: + """The exact chip codex renders for THIS payload -- it embeds the pasted character count. + + A payload-specific probe: growth of this literal proves OUR paste landed. If codex ever counts + differently, the literal simply never matches and the generic probes still apply (adjunct only, + never load-bearing alone). + """ + return f"[Pasted Content {len(sanitized)} chars]" def _echo_fragment(sanitized: str) -> str: diff --git a/mcp/tests/test_operator_inbox.py b/mcp/tests/test_operator_inbox.py index ed4ad08f..58aac108 100644 --- a/mcp/tests/test_operator_inbox.py +++ b/mcp/tests/test_operator_inbox.py @@ -357,9 +357,10 @@ def test_deliver_inbox_entry_records_unconfirmed_when_paste_is_not_echoed(self) class _UnechoedPaster: def paste(self, tmux_name: str, text: str, *, submit: bool = False) -> PasteResult: - # A booting harness accepts the keystrokes but never echoes them back. + # A booting harness accepts the keystrokes but never echoes them back. The paster + # attaches its final pane capture (260707-HFX-L3 loud-failure contract). attempts.append((tmux_name, text)) - return PasteResult(delivered=False, submitted=submit) + return PasteResult(delivered=False, submitted=submit, capture="claude> (booting)") recorded = deliver_inbox_entry( store=self.store, @@ -368,9 +369,45 @@ def paste(self, tmux_name: str, text: str, *, submit: bool = False) -> PasteResu paster=_UnechoedPaster(), # type: ignore[arg-type] entry=entry, ) - # The paste WAS attempted into the reachable session -- delivery just was not echo-confirmed. + # The paste WAS attempted into the reachable session -- delivery just was not verified. self.assertEqual(attempts[0][0], "ar-agent-a") self.assertEqual(recorded.deliveryState, "unconfirmed") self.assertNotEqual(recorded.deliveryState, "delivered") self.assertEqual(recorded.deliveredToSession, "agent-a") - self.assertEqual(recorded.deliveryDetail, "paste was not echoed") + # 260707-HFX-L3: the durable row carries the pane capture as forensic evidence, never a + # bare "not echoed" -- the re-briefing operator reads what the pane actually showed. + assert recorded.deliveryDetail is not None + self.assertIn("paste was not capture-verified", recorded.deliveryDetail) + self.assertIn("claude> (booting)", recorded.deliveryDetail) + + def test_unverified_delivery_with_empty_capture_still_records_a_loud_detail(self) -> None: + entry = create_operator_inbox_entry( + entry_id="B", + now=T1, + lifecycle_id="L1", + agent_id="agent-a", + sender_role="manager", + recipient_role="worker", + ask="Please continue.", + response="Review the report.", + created_by="manager-1", + created_via="cli", + ) + self.store.append(entry) + + class _GonePaster: + def paste(self, _tmux_name: str, _text: str, *, submit: bool = False) -> PasteResult: + # capture-pane against a vanished session yields an empty capture. + return PasteResult(delivered=False, submitted=submit, capture="") + + recorded = deliver_inbox_entry( + store=self.store, + catalog=self.catalog, + host=self.host, + paster=_GonePaster(), # type: ignore[arg-type] + entry=entry, + ) + self.assertEqual(recorded.deliveryState, "unconfirmed") + self.assertEqual( + recorded.deliveryDetail, "paste was not capture-verified (empty pane capture)" + ) diff --git a/mcp/tests/test_spawn_agent_session.py b/mcp/tests/test_spawn_agent_session.py index fcc7be70..108e035c 100644 --- a/mcp/tests/test_spawn_agent_session.py +++ b/mcp/tests/test_spawn_agent_session.py @@ -87,15 +87,20 @@ def ensure( class _FakePaster: - def __init__(self, *, delivered: bool = True, submitted: bool = True) -> None: + def __init__( + self, *, delivered: bool = True, submitted: bool = True, capture: str = "" + ) -> None: self.calls: list[dict[str, object]] = [] self._delivered = delivered self._submitted = submitted + self._capture = capture def paste(self, tmux_name: str, text: str, *, submit: bool = False, **_kwargs: object) -> PasteResult: self.calls.append({"tmux": tmux_name, "text": text, "submit": submit}) return PasteResult( - delivered=self._delivered, submitted=self._submitted if submit else False + delivered=self._delivered, + submitted=self._submitted if submit else False, + capture=self._capture, ) @@ -195,6 +200,43 @@ def test_spawn_without_context_skips_paste(self) -> None: self.assertNotIn("contextDelivered", payload) self.assertEqual(paster.calls, []) + def test_verified_delivery_omits_the_failure_capture(self) -> None: + paster = _FakePaster(delivered=True, submitted=True, capture="worker> [Pasted text #1]") + payload = self._spawn(context="brief", submit=True, paster=paster) + self.assertTrue(payload["contextDelivered"]) + # 260707-HFX-L3: the capture is failure evidence -- a verified delivery ships none. + self.assertNotIn("deliveryCapture", payload) + + def test_unverified_delivery_reports_false_with_the_pane_capture_attached(self) -> None: + # 260707-HFX-L3 / SF-1: reviewer 46b2e267 got contextDelivered:true over a codex pane that + # booted clean with no payload. The loud-failure contract: delivered false + the capture. + paster = _FakePaster(delivered=False, submitted=False, capture="codex> \n(clean boot)") + payload = self._spawn( + leaf_key="repo/master/leaf-1", context="the brief", submit=True, paster=paster + ) + self.assertEqual(payload["status"], "spawned") + self.assertFalse(payload["contextDelivered"]) + self.assertFalse(payload["submitted"]) + self.assertEqual(payload["deliveryCapture"], "codex> \n(clean boot)") + + def test_unconfirmed_submit_attaches_the_capture_even_when_delivered(self) -> None: + # Review N3: a delivered draft whose requested submit did NOT advance the pane is still a + # failed outcome -- the capture rides along so the caller can see the stuck draft. + paster = _FakePaster(delivered=True, submitted=False, capture="claude> draft sitting") + payload = self._spawn(context="brief", submit=True, paster=paster) + self.assertTrue(payload["contextDelivered"]) + self.assertFalse(payload["submitted"]) + self.assertEqual(payload["deliveryCapture"], "claude> draft sitting") + + def test_failed_delivery_with_empty_capture_ships_an_explicit_marker(self) -> None: + # Review N3 alignment with inbox_delivery: a False outcome never goes evidence-less. A + # vanished pane yields an empty capture -- the payload carries the explicit marker instead + # of silently omitting deliveryCapture. + paster = _FakePaster(delivered=False, submitted=False, capture="") + payload = self._spawn(context="brief", submit=True, paster=paster) + self.assertFalse(payload["contextDelivered"]) + self.assertEqual(payload["deliveryCapture"], "(empty pane capture)") + def test_leaf_taken_is_surfaced_never_overridden(self) -> None: self.catalog.upsert(_running_chat("owner-1", leaf_key="repo/master/leaf-1")) paster = _FakePaster() @@ -365,11 +407,13 @@ def test_session_command_order_is_effort_vehicle_then_free_form_then_brief(self) self.assertEqual(row.session_commands, ("/effort ultracode", "/statusline off")) self.assertEqual(row.prompt_keywords, ("ultracode",)) - def test_undelivered_session_command_is_reported(self) -> None: - paster = _FakePaster(delivered=False, submitted=False) + def test_undelivered_session_command_is_reported_with_capture(self) -> None: + paster = _FakePaster(delivered=False, submitted=False, capture="claude> (booting)") payload = self._spawn(effort="ultracode", paster=paster) self.assertEqual(payload["status"], "spawned") self.assertFalse(payload["sessionCommandsDelivered"]) + # 260707-HFX-L3: the failing paste's pane capture rides the payload as evidence. + self.assertEqual(payload["deliveryCapture"], "claude> (booting)") class SettingsDefinedHarnessTests(unittest.TestCase): @@ -833,8 +877,42 @@ def test_paste_endpoint_delivers_and_submits(self) -> None: self.assertEqual(body["status"], "delivered") self.assertTrue(body["delivered"]) self.assertTrue(body["submitted"]) + self.assertNotIn("capture", body) # full success ships no failure evidence self.assertEqual(paster.calls[0]["tmux"], "ar-live") + def test_paste_endpoint_unconfirmed_submit_ships_the_pane_capture(self) -> None: + # Review N3: delivered but the REQUESTED submit did not advance the pane -- still a failed + # outcome, so the capture rides the response (parity with the spawn seam). + paster = _FakePaster(delivered=True, submitted=False, capture="claude> draft sitting") + with self._client(paster) as client: + response = client.post( + "/api/terminal/live/paste", json={"text": "hello", "submit": True} + ) + self.assertEqual(response.status_code, 200) + body = response.json() + self.assertTrue(body["delivered"]) + self.assertFalse(body["submitted"]) + self.assertEqual(body["capture"], "claude> draft sitting") + + def test_paste_endpoint_unconfirmed_ships_the_pane_capture(self) -> None: + # 260707-HFX-L3 loud failure at the HTTP seam too: an unconfirmed paste carries the pane + # capture so the caller can see what the target composer actually showed. + paster = _FakePaster(delivered=False, submitted=False, capture="claude> (still booting)") + with self._client(paster) as client: + response = client.post("/api/terminal/live/paste", json={"text": "hello"}) + self.assertEqual(response.status_code, 200) + body = response.json() + self.assertEqual(body["status"], "unconfirmed") + self.assertFalse(body["delivered"]) + self.assertEqual(body["capture"], "claude> (still booting)") + + def test_paste_endpoint_delivered_omits_the_capture(self) -> None: + paster = _FakePaster(delivered=True, submitted=False, capture="claude> [Pasted text #1]") + with self._client(paster) as client: + response = client.post("/api/terminal/live/paste", json={"text": "hello"}) + self.assertEqual(response.status_code, 200) + self.assertNotIn("capture", response.json()) + def test_paste_endpoint_unknown_session_is_404(self) -> None: paster = _FakePaster() with self._client(paster) as client: diff --git a/mcp/tests/test_terminal_paste.py b/mcp/tests/test_terminal_paste.py index 94be00a0..0ee3d03f 100644 --- a/mcp/tests/test_terminal_paste.py +++ b/mcp/tests/test_terminal_paste.py @@ -1,8 +1,12 @@ -"""Tests for the server-side echo-confirmed paste helper (``serving.terminal_paste``, slice L2). +"""Tests for the server-side capture-verified paste helper (``serving.terminal_paste``, slice L2). The paster mirrors the frontend ``pasteAndConfirm`` / ``submitAndConfirm`` over tmux primitives. Every tmux operation is injectable, so the confirmation loop is driven against an in-memory fake pane -- no real tmux server and no real sleeping (an injected clock + no-op sleep make the timeouts deterministic). + +The ``DeliveryIntegrityTests`` class encodes 260707-HFX-L3: the SF-1 blind seat (codex chip vocabulary +unrecognized -> false verdicts) and the F-V duplicate stack (blind retry re-pasted a landed paste up +to 7 times). Each scenario failed against the pre-fix seam by construction. """ from __future__ import annotations @@ -16,6 +20,8 @@ from agents_remember.serving.terminal_paste import ( TerminalPaster, + _capture_pane_argv, + count_paste_chips, sanitize_for_injection, ) @@ -31,7 +37,7 @@ def __init__(self, *, echo: bool = True, submit_echo: bool = True) -> None: self.echo = echo self.submit_echo = submit_echo - def set_buffer(self, name: str, text: str) -> None: + def load_buffer(self, name: str, text: str) -> None: self.buffers[name] = text def paste_buffer(self, tmux_name: str, buffer_name: str) -> None: @@ -56,6 +62,79 @@ def paste_buffer(self, tmux_name: str, buffer_name: str) -> None: self.content += "\nloading MCP servers" +class _CodexChipPane(_FakePane): + """A codex composer: a large paste renders ONLY the ``[Pasted Content N chars]`` chip (SF-1).""" + + def __init__(self) -> None: + super().__init__(echo=False) + self.content = "codex> " + + def paste_buffer(self, tmux_name: str, buffer_name: str) -> None: + self.pasted.append((tmux_name, buffer_name, self.buffers.get(buffer_name))) + self.content += "\n[Pasted Content 5324 chars]" + + +class _LaggyChipPane(_FakePane): + """A codex composer whose chip renders a beat BEHIND the paste (the F-V race). + + The chip appears only after ``lag_captures`` further pane captures -- past the first attempt's + echo window, so only the retry path's re-capture guard can see it landed. + """ + + def __init__(self, lag_captures: int = 2) -> None: + super().__init__(echo=False) + self.content = "codex> " + self.lag = lag_captures + self._pending: int | None = None + + def paste_buffer(self, tmux_name: str, buffer_name: str) -> None: + self.pasted.append((tmux_name, buffer_name, self.buffers.get(buffer_name))) + self._pending = self.lag + + def capture(self, _tmux_name: str) -> str: + if self._pending is not None: + self._pending -= 1 + if self._pending <= 0: + self.content += "\n[Pasted Content 5324 chars]" + self._pending = None + return self.content + + +class _ScrollingCodexPane(_FakePane): + """A TRUNCATING codex pane: capture returns only the last ``window`` lines (review N1 honesty). + + Origin shows two OLD chips; every capture appends a boot-log line so those chips scroll out of + the window before the new chip renders (itself lagging two captures behind the paste). Bare + chip-count growth is blind here -- the final window still counts two chips -- so only the + payload-specific probe can prove the landing. + """ + + def __init__(self, *, window: int = 6) -> None: + super().__init__(echo=False) + self.window = window + self.lines: list[str] = [ + "[Pasted Content 111 chars]", + "[Pasted Content 222 chars]", + "codex> ", + ] + self._log = 0 + self._chip_pending: int | None = None + + def paste_buffer(self, tmux_name: str, buffer_name: str) -> None: + self.pasted.append((tmux_name, buffer_name, self.buffers.get(buffer_name))) + self._chip_pending = 2 + + def capture(self, _tmux_name: str) -> str: + self.lines.append(f"boot log {self._log}") + self._log += 1 + if self._chip_pending is not None: + self._chip_pending -= 1 + if self._chip_pending <= 0: + self.lines.append("[Pasted Content 4096 chars]") + self._chip_pending = None + return "\n".join(self.lines[-self.window :]) + + class _Clock: """A monotonic stand-in that advances a fixed step per call so timeouts are hit deterministically.""" @@ -70,7 +149,7 @@ def __call__(self) -> float: def _paster(pane: _FakePane) -> TerminalPaster: return TerminalPaster( - set_buffer=pane.set_buffer, + load_buffer=pane.load_buffer, paste_buffer=pane.paste_buffer, send_key=pane.send_key, capture_pane=pane.capture, @@ -92,6 +171,22 @@ def test_strips_suspend_byte_and_paste_markers_keeps_newline_and_tab(self) -> No self.assertIn("marker", cleaned) +class ChipCountTests(unittest.TestCase): + def test_counts_both_harness_chip_vocabularies(self) -> None: + # Claude Code renders [Pasted text #N]; codex renders [Pasted Content N chars]. Both are + # delivery evidence (260707-HFX-L3: the codex form was unrecognized -> SF-1 false verdicts). + pane = ( + "claude> [Pasted text #1]\n" + "[Pasted text]\n" + "codex> [Pasted Content 5324 chars]\n" + "[pasted content 12 chars] not-a-chip: [Pasted Content chars]" + ) + self.assertEqual(count_paste_chips(pane), 3) + + def test_plain_pane_has_no_chips(self) -> None: + self.assertEqual(count_paste_chips("prompt> loading MCP servers"), 0) + + class PasteTests(unittest.TestCase): def test_paste_echo_confirmed_without_submit_leaves_draft(self) -> None: pane = _FakePane(echo=True) @@ -117,7 +212,8 @@ def test_unechoed_paste_reports_unconfirmed_delivery_after_boot_deadline(self) - ) self.assertFalse(result.delivered) self.assertFalse(result.submitted) - # A discarded paste is retried across the boot window (more than one attempt). + # A verifiably-unlanded paste is retried across the boot window (more than one attempt) -- + # the idempotence guard re-captured first and found no trace each time. self.assertGreaterEqual(len(pane.pasted), 2) # Never submit an unconfirmed paste. self.assertEqual(pane.keys, []) @@ -140,5 +236,93 @@ def test_submit_unconfirmed_when_enter_produces_no_output(self) -> None: self.assertEqual(pane.keys, [("ar-worker", "Enter")]) +class DeliveryIntegrityTests(unittest.TestCase): + """260707-HFX-L3: capture-verified delivery, idempotent retry, loud failure, no Escape. + + Each test failed against the pre-fix seam: the codex chip was unrecognized (SF-1 -> blind + retries, F-V -> 7 stacked duplicates) and a failed verification returned a bare boolean with + no pane evidence. + """ + + def test_codex_pasted_content_chip_confirms_delivery_with_a_single_paste(self) -> None: + # SF-1: a codex target renders a large paste as [Pasted Content N chars] -- that chip IS + # the delivery confirmation. Pre-fix the vocabulary missed it, reported unconfirmed, and + # blind-retried until the boot deadline. + pane = _CodexChipPane() + result = _paster(pane).paste("ar-reviewer", "x" * 5324, submit=False, echo_timeout=1) + self.assertTrue(result.delivered) + self.assertEqual(len(pane.pasted), 1) + + def test_late_rendering_chip_is_seen_by_recapture_and_never_repasted(self) -> None: + # F-V: the TUI renders a beat behind keystrokes. The first attempt's echo window closes + # before the chip appears; the retry path re-captures FIRST, sees the landed chip, and + # returns delivered WITHOUT re-pasting -- duplicate stacking impossible by construction. + pane = _LaggyChipPane(lag_captures=2) + result = _paster(pane).paste( + "ar-reviewer", "y" * 4096, submit=False, echo_timeout=1, boot_deadline=30 + ) + self.assertTrue(result.delivered) + self.assertEqual(len(pane.pasted), 1) + self.assertEqual(count_paste_chips(pane.content), 1) + + def test_unverifiable_delivery_returns_false_with_the_pane_capture_attached(self) -> None: + # Loud failure: delivered=False must carry the final pane capture as evidence -- the + # caller diagnoses the blind seat from the result, never from a trusted boolean. + pane = _FakePane(echo=False) + result = _paster(pane).paste( + "ar-worker", "discarded", submit=True, echo_timeout=1, boot_deadline=8 + ) + self.assertFalse(result.delivered) + self.assertEqual(result.capture, pane.content) + self.assertIn("prompt>", result.capture) + + def test_successful_delivery_also_attaches_the_confirming_capture(self) -> None: + pane = _CodexChipPane() + result = _paster(pane).paste("ar-reviewer", "packet", submit=False, echo_timeout=1) + self.assertTrue(result.delivered) + self.assertIn("[Pasted Content 5324 chars]", result.capture) + + def test_escape_is_refused_by_the_delivery_seam(self) -> None: + # Run discipline (dispatch-pack PASTE DISCIPLINE): Escape interrupts a codex session, so + # the delivery seam refuses it by construction. + pane = _FakePane() + paster = _paster(pane) + with self.assertRaises(ValueError): + paster._press("ar-reviewer", "Escape") # the guard itself is the contract under test + self.assertEqual(pane.keys, []) + + def test_only_enter_is_ever_sent_across_paste_and_submit(self) -> None: + pane = _FakePane(echo=True, submit_echo=True) + _paster(pane).paste("ar-worker", "go", submit=True) + self.assertTrue(all(key == "Enter" for _tmux, key in pane.keys)) + + def test_old_chips_scrolling_out_of_view_do_not_cause_a_duplicate_repaste(self) -> None: + # Review N1: two old chips visible at origin scroll out of the (truncating) capture window + # before the new chip renders, so bare count-growth stays blind -- the final window still + # counts exactly two chips. The payload-SPECIFIC codex chip probe ([Pasted Content + # chars]) proves the landing anyway: one paste, no duplicate. + pane = _ScrollingCodexPane(window=6) + result = _paster(pane).paste( + "ar-reviewer", "z" * 4096, submit=False, echo_timeout=1, boot_deadline=30 + ) + self.assertTrue(result.delivered) + self.assertEqual(len(pane.pasted), 1) + # The blindness being defended against: no NET chip growth in the truncated window. + self.assertEqual(count_paste_chips(result.capture), 2) + self.assertIn("[Pasted Content 4096 chars]", result.capture) + self.assertNotIn("[Pasted Content 111 chars]", result.capture) + + +class CaptureWindowTests(unittest.TestCase): + def test_verification_capture_includes_bounded_history(self) -> None: + # Review N1: viewport-only capture (-p without -S) let landed chips scroll out of the + # verification universe. Origin and verification captures share this argv, so growth math + # compares like against like. + self.assertEqual( + _capture_pane_argv("ar-worker"), + ["tmux", "capture-pane", "-p", "-S", "-200", "-t", "ar-worker"], + ) + + if __name__ == "__main__": unittest.main() From 52911a15091de8d065afc6cbc0f8d6ac34690039 Mon Sep 17 00:00:00 2001 From: Readone Mohamed Date: Tue, 7 Jul 2026 22:29:35 +0200 Subject: [PATCH 04/35] HFX-L4 validate qualified leaf refs --- .../kernel/coordination_context/contracts.py | 4 +- mcp/src/agents_remember/mcp/tools/leaf_ref.py | 29 ++ mcp/src/agents_remember/mcp/tools/terminal.py | 12 + mcp/src/agents_remember/models/terminal.py | 11 +- mcp/src/agents_remember/serving/app.py | 34 +- .../serving/leaf_ref_validation.py | 24 ++ .../agents_remember/worktrees/leaf_refs.py | 399 ++++++++++++++++++ .../worktrees/modules/leaf_ref_start.py | 34 ++ .../worktrees/modules/start.py | 230 ++-------- .../worktrees/modules/start_contract.py | 208 +++++++++ .../worktrees/worktree_contract.py | 36 +- mcp/tests/test_leaf_ref_resolution.py | 267 ++++++++++++ mcp/tests/test_provider_async.py | 2 +- mcp/tests/test_spawn_agent_session.py | 69 +++ mcp/tests/test_task_reopen.py | 5 +- mcp/tests/test_terminal_leaf_assignment.py | 66 ++- mcp/tests/test_terminal_ws.py | 80 ++++ mcp/tests/test_tool_response_conformance.py | 56 ++- mcp/tests/test_worktree_support.py | 99 ++++- 19 files changed, 1443 insertions(+), 222 deletions(-) create mode 100644 mcp/src/agents_remember/mcp/tools/leaf_ref.py create mode 100644 mcp/src/agents_remember/serving/leaf_ref_validation.py create mode 100644 mcp/src/agents_remember/worktrees/leaf_refs.py create mode 100644 mcp/src/agents_remember/worktrees/modules/leaf_ref_start.py create mode 100644 mcp/src/agents_remember/worktrees/modules/start_contract.py create mode 100644 mcp/tests/test_leaf_ref_resolution.py diff --git a/mcp/src/agents_remember/kernel/coordination_context/contracts.py b/mcp/src/agents_remember/kernel/coordination_context/contracts.py index ef75d76f..67955cf4 100644 --- a/mcp/src/agents_remember/kernel/coordination_context/contracts.py +++ b/mcp/src/agents_remember/kernel/coordination_context/contracts.py @@ -3,11 +3,11 @@ from pathlib import Path from typing import Any +from agents_remember.worktrees.leaf_refs import resolve_leaf_enclosure_contract_for_ref from agents_remember.worktrees.task_resolver import ( SERIES_CONTRACT_FILENAME, is_archived_path, resolve_active_task_root, - resolve_leaf_enclosure_contract, series_contract_path, ) from agents_remember.worktrees.worktree_contract import ( @@ -56,7 +56,7 @@ def find_task_contract( leaf_id: str | None = None, ) -> Path | None: if leaf_id: - return resolve_leaf_enclosure_contract( + return resolve_leaf_enclosure_contract_for_ref( coordination_root, code_repository_name, task_name, diff --git a/mcp/src/agents_remember/mcp/tools/leaf_ref.py b/mcp/src/agents_remember/mcp/tools/leaf_ref.py new file mode 100644 index 00000000..3830a92c --- /dev/null +++ b/mcp/src/agents_remember/mcp/tools/leaf_ref.py @@ -0,0 +1,29 @@ +"""MCP payload helpers for leaf-ref validation refusals.""" + +from __future__ import annotations + +from typing import Any + +from agents_remember.worktrees.leaf_refs import LeafRefResolutionError + +from .base import _tool_payload + + +def leaf_ref_refusal_payload( + operation: str, + leaf_key: str, + error: LeafRefResolutionError, + *, + kind: str | None = None, +) -> dict[str, Any]: + payload: dict[str, Any] = { + "ok": False, + "operation": operation, + "status": error.status, + "session": "", + "leafKey": leaf_key, + "detail": str(error), + } + if operation == "spawn_agent_session": + payload["kind"] = kind if kind in ("harness", "terminal") else None + return _tool_payload(operation, payload) diff --git a/mcp/src/agents_remember/mcp/tools/terminal.py b/mcp/src/agents_remember/mcp/tools/terminal.py index 13ca16c8..6e2322d5 100644 --- a/mcp/src/agents_remember/mcp/tools/terminal.py +++ b/mcp/src/agents_remember/mcp/tools/terminal.py @@ -24,6 +24,7 @@ is_detected, unknown_harness_detail, ) +from agents_remember.serving.leaf_ref_validation import resolve_catalog_leaf_key from agents_remember.serving.terminal import TerminalHost from agents_remember.serving.terminal_catalog import ( TerminalCatalog, @@ -33,8 +34,10 @@ from agents_remember.serving.terminal_leaf_assignment import assign_terminal_session_to_leaf from agents_remember.serving.terminal_opener import open_terminal_session from agents_remember.serving.terminal_paste import TerminalPaster +from agents_remember.worktrees.leaf_refs import LeafRefResolutionError from .base import _tool_payload +from .leaf_ref import leaf_ref_refusal_payload if TYPE_CHECKING: from agents_remember.mcp.config import McpRuntimeConfig @@ -56,6 +59,10 @@ def attach_terminal_session_to_leaf_payload( ) -> dict[str, Any]: """Move an existing hosted terminal/chat session to a durable leaf key.""" + try: + leaf_key = resolve_catalog_leaf_key(config, leaf_key) + except LeafRefResolutionError as exc: + return leaf_ref_refusal_payload("attach_terminal_session_to_leaf", leaf_key, exc) catalog = TerminalCatalog(terminal_catalog_path(config.coordination_root)) result = assign_terminal_session_to_leaf( catalog, @@ -437,6 +444,11 @@ def spawn_agent_session_payload( vehicle first, then the caller's -- is what gets recorded), ``prompt_keywords`` (prepended as the first line of the brief paste). """ + if leaf_key is not None: + try: + leaf_key = resolve_catalog_leaf_key(config, leaf_key) + except LeafRefResolutionError as exc: + return leaf_ref_refusal_payload("spawn_agent_session", leaf_key, exc, kind=kind) dispatch: _HarnessDispatch | None = None if kind == "harness": dispatch, refusal = _resolve_harness_dispatch( diff --git a/mcp/src/agents_remember/models/terminal.py b/mcp/src/agents_remember/models/terminal.py index ba48c2d8..6ac0bcb8 100644 --- a/mcp/src/agents_remember/models/terminal.py +++ b/mcp/src/agents_remember/models/terminal.py @@ -6,7 +6,13 @@ from agents_remember.models.base import ToolResponse -LeafAssignmentStatus = Literal["attached", "leaf-taken", "unknown-session"] +LeafAssignmentStatus = Literal[ + "attached", + "leaf-taken", + "unknown-session", + "leaf-ref-not-found", + "leaf-ref-ambiguous", +] class AttachTerminalSessionToLeafResponse(ToolResponse): @@ -19,6 +25,7 @@ class AttachTerminalSessionToLeafResponse(ToolResponse): previousLeafKey: str | None = None ownerSession: str | None = None role: Literal["chat", "terminal"] | None = None + detail: str | None = None SpawnAgentSessionStatus = Literal[ @@ -35,6 +42,8 @@ class AttachTerminalSessionToLeafResponse(ToolResponse): "model-invalid", # 260703-L16 (ruling 2026-07-07T08:15): the dispatch level is outside leaf|master|portfolio. "level-invalid", + "leaf-ref-not-found", + "leaf-ref-ambiguous", "bad-kind", ] diff --git a/mcp/src/agents_remember/serving/app.py b/mcp/src/agents_remember/serving/app.py index 761b79ef..73eb956a 100644 --- a/mcp/src/agents_remember/serving/app.py +++ b/mcp/src/agents_remember/serving/app.py @@ -82,6 +82,7 @@ from agents_remember.serving.events import stream_raw_events from agents_remember.serving.files import register_files_routes from agents_remember.serving.harnesses import detect_harnesses +from agents_remember.serving.leaf_ref_validation import resolve_catalog_leaf_key from agents_remember.serving.notes import register_notes_routes from agents_remember.serving.projector import Projector from agents_remember.serving.static import mount_static @@ -94,6 +95,7 @@ from agents_remember.serving.terminal_leaf_assignment import assign_terminal_session_to_leaf from agents_remember.serving.terminal_opener import open_terminal_session from agents_remember.serving.terminal_paste import TerminalPaster +from agents_remember.worktrees.leaf_refs import LeafRefResolutionError if TYPE_CHECKING: from datetime import datetime @@ -346,6 +348,19 @@ def _catalog_payload(entry: TerminalCatalogEntry) -> dict[str, Any]: return entry.to_json() +def _resolve_request_leaf_key(config: McpRuntimeConfig, leaf_key: str | None) -> str | None: + if leaf_key is None: + return None + return resolve_catalog_leaf_key(config, leaf_key) + + +def _leaf_ref_response(error: LeafRefResolutionError, leaf_key: str) -> JSONResponse: + return JSONResponse( + content={"status": error.status, "leafKey": leaf_key, "detail": str(error)}, + status_code=400, + ) + + def _refresh_catalog_entries( catalog: TerminalCatalog, host: TerminalHost ) -> list[TerminalCatalogEntry]: @@ -679,6 +694,10 @@ def api_terminal_open(session: str, request: TerminalOpenRequest) -> Response: # session, then the WebSocket above attaches to it. L2 moves the leaf-claim + ensure + upsert # composition into the shared `open_terminal_session` so this route and the agent-facing # `spawn_agent_session` MCP tool spawn through ONE opener (no parallel spawn path). + try: + leaf_key = _resolve_request_leaf_key(config, request.leaf_key) + except LeafRefResolutionError as exc: + return _leaf_ref_response(exc, request.leaf_key or "") shell = os.environ.get("SHELL") or DEFAULT_SHELL result = open_terminal_session( catalog=catalog, @@ -690,7 +709,7 @@ def api_terminal_open(session: str, request: TerminalOpenRequest) -> Response: harness=request.harness, label=request.label, lifecycle_id=request.lifecycle_id, - leaf_key=request.leaf_key, + leaf_key=leaf_key, # 260703-L16: resolve harness ids against the effective GLOBAL registry (builtin merged # with orchestration.harnesses) so dashboard launches and MCP dispatches agree on argv. # Loaded only for harness-kind opens (review L16R-1): a malformed settings file must @@ -711,7 +730,7 @@ def api_terminal_open(session: str, request: TerminalOpenRequest) -> Response: return JSONResponse( content={ "status": "leaf-taken", - "leafKey": request.leaf_key, + "leafKey": leaf_key, "session": result.owner_session_id, }, status_code=409, @@ -738,10 +757,15 @@ def api_terminal_attach_leaf(session: str, request: TerminalAttachLeafRequest) - # L5: claim a leaf for an EXISTING session from the Chats page (enclosure-free, no respawn). # 404 if the session is unknown or terminated (a terminated chat cannot hold a leaf); 409 if a # different running chat already owns the leaf; else persist the leaf_key and report it. + try: + leaf_key = _resolve_request_leaf_key(config, request.leaf_key) + except LeafRefResolutionError as exc: + return _leaf_ref_response(exc, request.leaf_key) + assert leaf_key is not None result = assign_terminal_session_to_leaf( catalog, session_id=session, - leaf_key=request.leaf_key, + leaf_key=leaf_key, ) if result.status == "unknown-session": return JSONResponse(content={"status": "unknown-session"}, status_code=404) @@ -750,12 +774,12 @@ def api_terminal_attach_leaf(session: str, request: TerminalAttachLeafRequest) - content={ "session": result.owner_session_id, "status": "leaf-taken", - "leafKey": request.leaf_key, + "leafKey": leaf_key, }, status_code=409, ) return JSONResponse( - content={"session": session, "status": "attached", "leafKey": request.leaf_key}, + content={"session": session, "status": "attached", "leafKey": leaf_key}, status_code=200, ) diff --git a/mcp/src/agents_remember/serving/leaf_ref_validation.py b/mcp/src/agents_remember/serving/leaf_ref_validation.py new file mode 100644 index 00000000..1aee43ac --- /dev/null +++ b/mcp/src/agents_remember/serving/leaf_ref_validation.py @@ -0,0 +1,24 @@ +"""Validate leaf refs at server write boundaries before persistence.""" + +from __future__ import annotations + +from agents_remember.mcp.config import McpRuntimeConfig +from agents_remember.worktrees.leaf_refs import resolve_leaf_ref + + +def repo_scope_for_leaf_key(config: McpRuntimeConfig, leaf_key: str) -> str | None: + """Use a configured repo only for unqualified refs; qualified refs carry their repo.""" + + if len([part for part in leaf_key.split("/") if part]) == 3: + return None + return next(iter(config.repositories)) if len(config.repositories) == 1 else None + + +def resolve_catalog_leaf_key(config: McpRuntimeConfig, leaf_key: str) -> str: + """Normalize a terminal catalog leaf key to ``repo/master/doc-id``.""" + + return resolve_leaf_ref( + config.coordination_root, + repo_scope_for_leaf_key(config, leaf_key), + leaf_key, + ).qualified_id diff --git a/mcp/src/agents_remember/worktrees/leaf_refs.py b/mcp/src/agents_remember/worktrees/leaf_refs.py new file mode 100644 index 00000000..ef697420 --- /dev/null +++ b/mcp/src/agents_remember/worktrees/leaf_refs.py @@ -0,0 +1,399 @@ +"""Resolve task-tree leaf refs to canonical leaf document identities.""" + +from __future__ import annotations + +import json +from collections.abc import Iterable +from dataclasses import dataclass +from difflib import get_close_matches +from pathlib import Path + +from agents_remember.tasks import TASK_DOCUMENT_SCHEMA, TaskDocument, read_task_doc +from agents_remember.worktrees.task_resolver import ( + ARCHIVE_DIR, + ENCLOSURES_DIR, + TaskResolutionError, + is_archived_path, + leaf_enclosure_path, + resolve_active_task_root, + slugify, +) + +LEAF_REF_EXPECTED_FORM = "//" + + +@dataclass(frozen=True) +class ResolvedLeafRef: + repo_name: str + task_root: Path + master_folder: str + doc_id: str + qualified_id: str + aliases: tuple[str, ...] = () + + +class LeafRefResolutionError(TaskResolutionError): + """Raised when a leaf ref cannot resolve to one canonical task-doc id.""" + + def __init__( + self, + ref: str, + *, + repo_name: str | None, + reason: str, + candidates: Iterable[str] = (), + ) -> None: + self.ref = ref + self.repo_name = repo_name + self.reason = reason + self.candidates = tuple(dict.fromkeys(candidates)) + self.status = "leaf-ref-ambiguous" if reason == "ambiguous" else "leaf-ref-not-found" + scope = f" for repo {repo_name!r}" if repo_name else "" + nearest = ", ".join(self.candidates) if self.candidates else "none" + super().__init__( + f"leaf ref {ref!r} is {reason}{scope}; expected " + f"{LEAF_REF_EXPECTED_FORM}; candidates: {nearest}" + ) + + +@dataclass(frozen=True) +class _LeafCandidate: + repo_name: str + task_root: Path + doc_id: str + aliases: tuple[str, ...] + + @property + def qualified_id(self) -> str: + return f"{self.repo_name}/{self.task_root.name}/{self.doc_id}" + + +@dataclass(frozen=True) +class _ParsedLeafRef: + repo_name: str | None + master_folder: str | None + value: str + + +def resolve_leaf_ref( + coordination_root: Path, + repo_name: str | None, + ref: str, + *, + task_name: str | None = None, + parent_task: str | None = None, +) -> ResolvedLeafRef: + """Resolve ``ref`` to the canonical qualified leaf doc id. + + Accepted refs are the canonical qualified id, a unique doc id, and unique + legacy stem/slug aliases. No-match and ambiguous refs raise + :class:`LeafRefResolutionError` with the expected wire form and candidates. + """ + + parsed = _parse_leaf_ref(ref) + resolved_repo = _resolve_repo_name(coordination_root, repo_name, parsed) + candidates = _leaf_candidates( + coordination_root, + resolved_repo, + task_name=task_name, + parent_task=parent_task, + master_folder=parsed.master_folder, + ) + wanted = _normalize_ref(parsed.value) + matches = [ + candidate + for candidate in candidates + if wanted in {_normalize_ref(alias) for alias in candidate.aliases} + ] + unique = {candidate.qualified_id: candidate for candidate in matches} + if len(unique) == 1: + candidate = next(iter(unique.values())) + return ResolvedLeafRef( + repo_name=candidate.repo_name, + task_root=candidate.task_root, + master_folder=candidate.task_root.name, + doc_id=candidate.doc_id, + qualified_id=candidate.qualified_id, + aliases=candidate.aliases, + ) + if len(unique) > 1: + raise LeafRefResolutionError( + ref, + repo_name=resolved_repo, + reason="ambiguous", + candidates=sorted(unique), + ) + raise LeafRefResolutionError( + ref, + repo_name=resolved_repo, + reason="unmatchable", + candidates=_candidate_suggestions(parsed.value, candidates), + ) + + +def leaf_ref_enclosure_aliases( + coordination_root: Path, + repo_name: str, + leaf_ref: str, + *, + task_name: str, + parent_task: str | None = None, +) -> tuple[str, ...]: + resolved = resolve_leaf_ref( + coordination_root, + repo_name, + leaf_ref, + task_name=task_name, + parent_task=parent_task, + ) + return tuple(dict.fromkeys((resolved.doc_id, *resolved.aliases, leaf_ref))) + + +def resolve_leaf_enclosure_contract_for_ref( + coordination_root: Path, + repo_name: str, + task_name: str, + *, + leaf_id: str, + parent_task: str | None = None, +) -> Path | None: + task_root = resolve_active_task_root( + coordination_root, + repo_name, + task_name, + parent_task=parent_task, + ) + aliases = _enclosure_aliases_or_raw( + coordination_root, + repo_name, + leaf_id, + task_name=task_name, + parent_task=parent_task, + ) + for alias in aliases: + path = leaf_enclosure_path(task_root, alias) + if path.exists(): + return path + return None + + +def _enclosure_aliases_or_raw( + coordination_root: Path, + repo_name: str, + leaf_id: str, + *, + task_name: str, + parent_task: str | None, +) -> tuple[str, ...]: + try: + return leaf_ref_enclosure_aliases( + coordination_root, + repo_name, + leaf_id, + task_name=task_name, + parent_task=parent_task, + ) + except LeafRefResolutionError: + # Legacy contract lookup still falls back to the raw enclosure path when a task tree is absent + # or does not prove a unique alias. Malformed task docs still fail loud while indexing aliases. + return (leaf_id,) + + +def _normalize_ref(value: str) -> str: + return slugify(value) + + +def _parse_leaf_ref(ref: str) -> _ParsedLeafRef: + value = ref.strip() + parts = [part.strip() for part in value.split("/")] + if len(parts) == 3 and all(parts): + return _ParsedLeafRef(parts[0], parts[1], parts[2]) + return _ParsedLeafRef(None, None, value) + + +def _single_repo_name(coordination_root: Path) -> str | None: + tasks_root = coordination_root / "tasks" + if not tasks_root.is_dir(): + return None + names = [ + path.name + for path in sorted(tasks_root.iterdir()) + if path.is_dir() and path.name != ARCHIVE_DIR and not is_archived_path(path) + ] + return names[0] if len(names) == 1 else None + + +def _active_task_roots( + coordination_root: Path, + repo_name: str, + *, + task_name: str | None, + parent_task: str | None, + master_folder: str | None, +) -> list[Path]: + repo_task_root = coordination_root / "tasks" / repo_name + if master_folder: + root = repo_task_root / master_folder + if not root.exists() or is_archived_path(root): + return [] + if task_name: + task_root = resolve_active_task_root( + coordination_root, + repo_name, + task_name, + parent_task=parent_task, + ) + if task_root != root: + return [] + return [root] + if task_name: + root = resolve_active_task_root( + coordination_root, + repo_name, + task_name, + parent_task=parent_task, + ) + return [root] if root.exists() and not is_archived_path(root) else [] + if not repo_task_root.is_dir(): + return [] + roots: list[Path] = [] + for path in sorted(repo_task_root.rglob("task.json")): + if is_archived_path(path) or ENCLOSURES_DIR in path.parts: + continue + roots.append(path.parent) + return roots + + +def _read_optional_task_document(path: Path) -> TaskDocument | None: + if not path.exists(): + return None + if not _has_task_doc_schema_marker(path): + return None + try: + return read_task_doc(path) + except FileNotFoundError: + return None + + +def _has_task_doc_schema_marker(path: Path) -> bool: + data = json.loads(path.read_text(encoding="utf-8")) + return isinstance(data, dict) and data.get("schema") == TASK_DOCUMENT_SCHEMA + + +def _candidate_aliases(*values: str) -> tuple[str, ...]: + aliases: list[str] = [] + for value in values: + stripped = value.strip() + if stripped: + aliases.append(stripped) + aliases.append(slugify(stripped)) + return tuple(dict.fromkeys(aliases)) + + +def _leaf_candidates_for_root(repo_name: str, task_root: Path) -> list[_LeafCandidate]: + by_qualified: dict[str, set[str]] = {} + + def add_candidate(doc_id: str, aliases: Iterable[str]) -> None: + clean_id = doc_id.strip() + if not clean_id: + return + qualified = f"{repo_name}/{task_root.name}/{clean_id}" + bucket = by_qualified.setdefault(qualified, set()) + bucket.update(_candidate_aliases(clean_id, *aliases, qualified)) + + root_doc = _read_optional_task_document(task_root / "task.json") + if root_doc is not None: + if root_doc.kind == "master": + for ref in root_doc.subTasks: + file_stem = Path(ref.file).stem if ref.file else "" + add_candidate(ref.number, (file_stem, ref.file)) + else: + enclosure_aliases = [ref.leafId for ref in root_doc.enclosures] + add_candidate(root_doc.id, (root_doc.slug, task_root.name, *enclosure_aliases)) + + for json_path in sorted(task_root.glob("*.json")): + if json_path.name == "task.json": + continue + if not _has_task_doc_schema_marker(json_path): + continue + doc = read_task_doc(json_path) + if doc.kind == "master": + continue + enclosure_aliases = [ref.leafId for ref in doc.enclosures] + add_candidate(doc.id, (doc.slug, json_path.stem, *enclosure_aliases)) + + candidates: list[_LeafCandidate] = [] + for qualified, aliases in by_qualified.items(): + _, _, doc_id = qualified.split("/", 2) + candidates.append( + _LeafCandidate( + repo_name=repo_name, + task_root=task_root, + doc_id=doc_id, + aliases=tuple(sorted(aliases)), + ) + ) + return sorted(candidates, key=lambda candidate: candidate.qualified_id.lower()) + + +def _leaf_candidates( + coordination_root: Path, + repo_name: str, + *, + task_name: str | None = None, + parent_task: str | None = None, + master_folder: str | None = None, +) -> list[_LeafCandidate]: + candidates: list[_LeafCandidate] = [] + for task_root in _active_task_roots( + coordination_root, + repo_name, + task_name=task_name, + parent_task=parent_task, + master_folder=master_folder, + ): + candidates.extend(_leaf_candidates_for_root(repo_name, task_root)) + return candidates + + +def _candidate_suggestions(ref: str, candidates: list[_LeafCandidate]) -> tuple[str, ...]: + if not candidates: + return () + by_alias: dict[str, list[_LeafCandidate]] = {} + for candidate in candidates: + for alias in candidate.aliases: + by_alias.setdefault(_normalize_ref(alias), []).append(candidate) + nearest = get_close_matches(_normalize_ref(ref), sorted(by_alias), n=5, cutoff=0.25) + suggested: list[str] = [] + for alias in nearest: + suggested.extend(candidate.qualified_id for candidate in by_alias[alias]) + if not suggested: + suggested = [candidate.qualified_id for candidate in candidates[:5]] + return tuple(dict.fromkeys(suggested)) + + +def _resolve_repo_name( + coordination_root: Path, + repo_name: str | None, + parsed: _ParsedLeafRef, +) -> str: + if parsed.repo_name and repo_name and parsed.repo_name != repo_name: + candidates = _candidate_suggestions( + parsed.value, + _leaf_candidates(coordination_root, repo_name), + ) + raise LeafRefResolutionError( + "/".join(part for part in (parsed.repo_name, parsed.master_folder, parsed.value) if part), + repo_name=repo_name, + reason="unmatchable", + candidates=candidates, + ) + resolved = parsed.repo_name or repo_name or _single_repo_name(coordination_root) + if resolved: + return resolved + raise LeafRefResolutionError( + parsed.value, + repo_name=None, + reason="ambiguous", + candidates=(), + ) diff --git a/mcp/src/agents_remember/worktrees/modules/leaf_ref_start.py b/mcp/src/agents_remember/worktrees/modules/leaf_ref_start.py new file mode 100644 index 00000000..93f71217 --- /dev/null +++ b/mcp/src/agents_remember/worktrees/modules/leaf_ref_start.py @@ -0,0 +1,34 @@ +"""Start-side adapter for canonical leaf-ref resolution.""" + +from __future__ import annotations + +from agents_remember.worktrees.leaf_refs import ( + LEAF_REF_EXPECTED_FORM, + LeafRefResolutionError, + resolve_leaf_ref, +) +from agents_remember.worktrees.modules.args import WorktreeArgs +from agents_remember.worktrees.modules.models import WorktreeCommandResult + + +def resolve_start_leaf_doc_id(context, args: WorktreeArgs) -> str: + assert args.worktree_name is not None + return resolve_leaf_ref( + context.coordination_root, + context.code_repository_name, + args.leaf_id or args.worktree_name, + task_name=args.task_name, + parent_task=args.parent_task, + ).doc_id + + +def invalid_leaf_ref_result(error: LeafRefResolutionError) -> WorktreeCommandResult: + return WorktreeCommandResult( + 2, + { + "state": error.status, + "summary": str(error), + "expected": LEAF_REF_EXPECTED_FORM, + "candidates": list(error.candidates), + }, + ) diff --git a/mcp/src/agents_remember/worktrees/modules/start.py b/mcp/src/agents_remember/worktrees/modules/start.py index c6add85d..c5dc7b6e 100644 --- a/mcp/src/agents_remember/worktrees/modules/start.py +++ b/mcp/src/agents_remember/worktrees/modules/start.py @@ -15,8 +15,8 @@ write_ledger, ) from agents_remember.providers import provider_setup -from agents_remember.tasks import read_task_doc from agents_remember.tasks.leaf_doc import restamp_leaf_doc_lifecycle +from agents_remember.worktrees.leaf_refs import resolve_leaf_enclosure_contract_for_ref from agents_remember.worktrees.modules import provider_async from agents_remember.worktrees.modules.args import WorktreeArgs from agents_remember.worktrees.modules.context import resolve_context @@ -38,18 +38,14 @@ status_payload, ) from agents_remember.worktrees.modules.models import WorktreeCommandResult -from agents_remember.worktrees.start_progress import clear_start_progress, write_start_progress -from agents_remember.worktrees.task_resolver import ( - resolve_active_task_root, - resolve_leaf_enclosure_contract, - series_contract_path, - slugify, +from agents_remember.worktrees.modules.start_contract import ( + build_start_contract, + memory_base_for_source, ) +from agents_remember.worktrees.start_progress import clear_start_progress, write_start_progress +from agents_remember.worktrees.task_resolver import resolve_leaf_enclosure_contract from agents_remember.worktrees.worktree_contract import ( - ContractError, WorktreeContract, - default_contract, - default_series_contract, load_contract, write_contract, ) @@ -73,13 +69,21 @@ def load_contract_from_args(args: WorktreeArgs) -> WorktreeContract: context = resolve_context(args) if not args.task_name: raise RuntimeError("--task-name or --contract-path is required") - contract_path = resolve_leaf_enclosure_contract( - context.coordination_root, - context.code_repository_name, - args.task_name, - leaf_id=args.leaf_id, - parent_task=args.parent_task, - ) + if args.leaf_id: + contract_path = resolve_leaf_enclosure_contract_for_ref( + context.coordination_root, + context.code_repository_name, + args.task_name, + leaf_id=args.leaf_id, + parent_task=args.parent_task, + ) + else: + contract_path = resolve_leaf_enclosure_contract( + context.coordination_root, + context.code_repository_name, + args.task_name, + parent_task=args.parent_task, + ) if contract_path is None: raise RuntimeError("--task-name resolved no leaf enclosure; pass --leaf-id") return load_contract(contract_path) @@ -97,184 +101,6 @@ def attach_result(args: WorktreeArgs) -> WorktreeCommandResult: ) -def _start_memory_repo(context, memory_mode: str): - if memory_mode != "external": - return None - return context.coordination_root / "memory-repos" / f"ar-{context.code_repository_name}" - - -def _memory_base_commit(memory_repo) -> str: - if memory_repo is None: - return "" - if not memory_repo.exists() or not (memory_repo / ".git").exists(): - return "" - return head_commit(memory_repo) - - -def _memory_base_for_source(memory_repo, memory_source_branch: str) -> str: - """The memory base = the tip of the memory source branch the worktree is created off. - - Mirrors the code-base derivation (``head_commit(repo, source_branch)``) instead of reading the - memory repo's current HEAD, which may be checked out on an unrelated branch (e.g. another in-flight - task) and would record a divergent base that breaks closeout's "memory source branch moved" - preflight. Falls back to the repo HEAD when external memory is off or the source branch is not - present yet (it is auto-created off the official tip during memory start). - """ - if memory_repo is None or not memory_source_branch: - return _memory_base_commit(memory_repo) - if not memory_repo.exists() or not (memory_repo / ".git").exists(): - return "" - if branch_exists(memory_repo, memory_source_branch): - return head_commit(memory_repo, memory_source_branch) - return _memory_base_commit(memory_repo) - - -def _external_memory_value(memory_mode: str, value: str) -> str: - return value if memory_mode == "external" else "" - - -def _task_root_has_master_artifact(task_root: Path) -> bool: - json_path = task_root / "task.json" - if json_path.exists(): - try: - return read_task_doc(json_path).kind == "master" - except ValueError: - return False - markdown_path = task_root / "task.md" - if not markdown_path.exists(): - return False - try: - head = markdown_path.read_text(encoding="utf-8")[:1000] - except OSError: - return False - return "**Type:** Master" in head - - -def _ensure_branch(repo: Path, branch: str, source: str, *, dry_run: bool) -> None: - if branch_exists(repo, branch) or dry_run: - return - require_git(repo, ["branch", branch, source]) - - -def _parent_series_contract( - context, args: WorktreeArgs, memory_mode: str -) -> WorktreeContract | None: - if not args.task_name: - return None - task_root = resolve_active_task_root( - context.coordination_root, - context.code_repository_name, - args.task_name, - parent_task=args.parent_task, - ) - path = series_contract_path(task_root) - if not path.exists(): - if not _task_root_has_master_artifact(task_root): - return None - repo = context.code_repository_root - protected_branch = args.source_branch or current_branch(repo) - integration_branch = f"ar/{slugify(args.task_name)}" - leaf_branch = args.work_branch or f"ar/{args.worktree_name}" - if leaf_branch == integration_branch: - raise RuntimeError( - "master-series leaf work branch would equal the integration branch; " - "choose a distinct worktree_name or work_branch" - ) - _ensure_branch(repo, integration_branch, protected_branch, dry_run=args.dry_run) - memory_repo = _start_memory_repo(context, memory_mode) - memory_source_branch = _external_memory_value(memory_mode, protected_branch) - memory_work_branch = _external_memory_value(memory_mode, integration_branch) - if ( - memory_repo is not None - and (memory_repo / ".git").exists() - and memory_source_branch - and memory_work_branch - ): - _ensure_branch( - memory_repo, - memory_work_branch, - memory_source_branch, - dry_run=args.dry_run, - ) - contract = default_series_contract( - task_name=args.task_name, - repo_name=context.code_repository_name, - workflow_kind=args.workflow_kind, - memory_mode=memory_mode, - coordination_root=context.coordination_root, - code_repo_path=repo, - protected_branch=protected_branch, - integration_branch=integration_branch, - code_base_commit=head_commit(repo, protected_branch), - memory_repo_path=memory_repo, - memory_source_branch=memory_source_branch, - memory_work_branch=memory_work_branch, - memory_base_commit=_memory_base_for_source(memory_repo, memory_source_branch), - parent_task_name=args.parent_task or "", - task_root=task_root, - ) - if not args.dry_run: - write_contract(contract.contract_path, contract) - return contract - try: - contract = load_contract(path) - except ContractError as exc: - raise RuntimeError(f"parent task contract is not readable: {path}") from exc - if contract.kind != "series": - raise RuntimeError(f"parent task contract is not a series contract: {path}") - return contract - - -def _build_start_contract(context, args: WorktreeArgs) -> WorktreeContract: - assert args.task_name is not None - assert args.worktree_name is not None - repo = context.code_repository_root - memory_mode = args.memory_mode or context.memory_mode - parent_series = _parent_series_contract(context, args, memory_mode) - source_branch = args.source_branch or ( - parent_series.code_work_branch if parent_series is not None else current_branch(repo) - ) - work_branch = args.work_branch or f"ar/{args.worktree_name}" - if args.dry_run and parent_series is not None and not branch_exists(repo, source_branch): - base_commit = parent_series.code_base_commit - else: - base_commit = head_commit(repo, source_branch) - memory_repo = _start_memory_repo(context, memory_mode) - memory_source_branch = _external_memory_value(memory_mode, source_branch) - # Memory base = the tip of the memory source branch this worktree is created off (mirroring the - # code base), not the memory repo's current HEAD, which may be on an unrelated branch. - if ( - args.dry_run - and parent_series is not None - and memory_repo is not None - and memory_source_branch - and not branch_exists(memory_repo, memory_source_branch) - ): - memory_base = parent_series.memory_base_commit - else: - memory_base = _memory_base_for_source(memory_repo, memory_source_branch) - return default_contract( - task_name=args.task_name, - repo_name=context.code_repository_name, - workflow_kind=args.workflow_kind, - memory_mode=memory_mode, - coordination_root=context.coordination_root, - code_repo_path=repo, - code_source_branch=source_branch, - code_work_branch=work_branch, - code_base_commit=base_commit, - worktree_name=args.worktree_name, - memory_repo_path=memory_repo, - memory_source_branch=memory_source_branch, - memory_work_branch=_external_memory_value(memory_mode, work_branch), - memory_base_commit=memory_base, - lifecycle_id=args.lifecycle_id, - leaf_id=args.leaf_id or args.worktree_name, - parent_task_name=parent_series.task_name if parent_series is not None else "", - parent_contract_path=parent_series.contract_path if parent_series is not None else None, - ) - - def _blocked_memory_start_result( context, args: WorktreeArgs, code_state: str, memory_state: dict[str, object] ) -> WorktreeCommandResult: @@ -629,7 +455,9 @@ def _record_start_progress( def start_result(args: WorktreeArgs) -> WorktreeCommandResult: context = resolve_context(args) repo = context.code_repository_root - contract = _build_start_contract(context, args) + contract = build_start_contract(context, args) + if isinstance(contract, WorktreeCommandResult): + return contract if contract.contract_path.exists(): existing = load_contract(contract.contract_path) @@ -658,7 +486,9 @@ def start_result(args: WorktreeArgs) -> WorktreeCommandResult: if args.stale_base_choice == "fast-forward": # A fast-forward recovery may have moved the source branches; rebuild the # contract so the recorded base commits reflect the recovered tips. - contract = _build_start_contract(context, args) + contract = build_start_contract(context, args) + if isinstance(contract, WorktreeCommandResult): + return contract long_path_block = _long_path_preflight(contract) if long_path_block is not None: @@ -1243,9 +1073,9 @@ def _reconcile_missing_mapping( ) advanced = replace( contract, - memory_base_commit=_memory_base_for_source( - contract.memory_repo_path, contract.memory_source_branch - ), + memory_base_commit=memory_base_for_source( + contract.memory_repo_path, contract.memory_source_branch + ), ) return advanced, updated diff --git a/mcp/src/agents_remember/worktrees/modules/start_contract.py b/mcp/src/agents_remember/worktrees/modules/start_contract.py new file mode 100644 index 00000000..887481e2 --- /dev/null +++ b/mcp/src/agents_remember/worktrees/modules/start_contract.py @@ -0,0 +1,208 @@ +"""Build worktree-start contracts and normalize their task leaf identity.""" + +from __future__ import annotations + +from pathlib import Path + +from agents_remember.tasks import read_task_doc +from agents_remember.worktrees.leaf_refs import LeafRefResolutionError +from agents_remember.worktrees.modules.args import WorktreeArgs +from agents_remember.worktrees.modules.git import ( + branch_exists, + current_branch, + head_commit, + require_git, +) +from agents_remember.worktrees.modules.leaf_ref_start import ( + invalid_leaf_ref_result, + resolve_start_leaf_doc_id, +) +from agents_remember.worktrees.modules.models import WorktreeCommandResult +from agents_remember.worktrees.task_resolver import ( + resolve_active_task_root, + series_contract_path, + slugify, +) +from agents_remember.worktrees.worktree_contract import ( + ContractError, + WorktreeContract, + default_contract, + default_series_contract, + load_contract, + write_contract, +) + + +def _start_memory_repo(context, memory_mode: str): + if memory_mode != "external": + return None + return context.coordination_root / "memory-repos" / f"ar-{context.code_repository_name}" + + +def _memory_base_commit(memory_repo) -> str: + if memory_repo is None: + return "" + if not memory_repo.exists() or not (memory_repo / ".git").exists(): + return "" + return head_commit(memory_repo) + + +def memory_base_for_source(memory_repo, memory_source_branch: str) -> str: + """Return the tip of the memory source branch a worktree is created from.""" + + if memory_repo is None or not memory_source_branch: + return _memory_base_commit(memory_repo) + if not memory_repo.exists() or not (memory_repo / ".git").exists(): + return "" + if branch_exists(memory_repo, memory_source_branch): + return head_commit(memory_repo, memory_source_branch) + return _memory_base_commit(memory_repo) + + +def _external_memory_value(memory_mode: str, value: str) -> str: + return value if memory_mode == "external" else "" + + +def _task_root_has_master_artifact(task_root: Path) -> bool: + json_path = task_root / "task.json" + if json_path.exists(): + return read_task_doc(json_path).kind == "master" + markdown_path = task_root / "task.md" + if not markdown_path.exists(): + return False + try: + head = markdown_path.read_text(encoding="utf-8")[:1000] + except OSError: + return False + return "**Type:** Master" in head + + +def _ensure_branch(repo: Path, branch: str, source: str, *, dry_run: bool) -> None: + if branch_exists(repo, branch) or dry_run: + return + require_git(repo, ["branch", branch, source]) + + +def _parent_series_contract( + context, args: WorktreeArgs, memory_mode: str +) -> WorktreeContract | None: + if not args.task_name: + return None + task_root = resolve_active_task_root( + context.coordination_root, + context.code_repository_name, + args.task_name, + parent_task=args.parent_task, + ) + path = series_contract_path(task_root) + if not path.exists(): + if not _task_root_has_master_artifact(task_root): + return None + repo = context.code_repository_root + protected_branch = args.source_branch or current_branch(repo) + integration_branch = f"ar/{slugify(args.task_name)}" + leaf_branch = args.work_branch or f"ar/{args.worktree_name}" + if leaf_branch == integration_branch: + raise RuntimeError( + "master-series leaf work branch would equal the integration branch; " + "choose a distinct worktree_name or work_branch" + ) + _ensure_branch(repo, integration_branch, protected_branch, dry_run=args.dry_run) + memory_repo = _start_memory_repo(context, memory_mode) + memory_source_branch = _external_memory_value(memory_mode, protected_branch) + memory_work_branch = _external_memory_value(memory_mode, integration_branch) + if ( + memory_repo is not None + and (memory_repo / ".git").exists() + and memory_source_branch + and memory_work_branch + ): + _ensure_branch( + memory_repo, + memory_work_branch, + memory_source_branch, + dry_run=args.dry_run, + ) + contract = default_series_contract( + task_name=args.task_name, + repo_name=context.code_repository_name, + workflow_kind=args.workflow_kind, + memory_mode=memory_mode, + coordination_root=context.coordination_root, + code_repo_path=repo, + protected_branch=protected_branch, + integration_branch=integration_branch, + code_base_commit=head_commit(repo, protected_branch), + memory_repo_path=memory_repo, + memory_source_branch=memory_source_branch, + memory_work_branch=memory_work_branch, + memory_base_commit=memory_base_for_source(memory_repo, memory_source_branch), + parent_task_name=args.parent_task or "", + task_root=task_root, + ) + if not args.dry_run: + write_contract(contract.contract_path, contract) + return contract + try: + contract = load_contract(path) + except ContractError as exc: + raise RuntimeError(f"parent task contract is not readable: {path}") from exc + if contract.kind != "series": + raise RuntimeError(f"parent task contract is not a series contract: {path}") + return contract + + +def build_start_contract(context, args: WorktreeArgs) -> WorktreeContract | WorktreeCommandResult: + try: + return _build_start_contract(context, args) + except LeafRefResolutionError as exc: + return invalid_leaf_ref_result(exc) + + +def _build_start_contract(context, args: WorktreeArgs) -> WorktreeContract: + assert args.task_name is not None + assert args.worktree_name is not None + leaf_id = resolve_start_leaf_doc_id(context, args) + repo = context.code_repository_root + memory_mode = args.memory_mode or context.memory_mode + parent_series = _parent_series_contract(context, args, memory_mode) + source_branch = args.source_branch or ( + parent_series.code_work_branch if parent_series is not None else current_branch(repo) + ) + work_branch = args.work_branch or f"ar/{args.worktree_name}" + if args.dry_run and parent_series is not None and not branch_exists(repo, source_branch): + base_commit = parent_series.code_base_commit + else: + base_commit = head_commit(repo, source_branch) + memory_repo = _start_memory_repo(context, memory_mode) + memory_source_branch = _external_memory_value(memory_mode, source_branch) + if ( + args.dry_run + and parent_series is not None + and memory_repo is not None + and memory_source_branch + and not branch_exists(memory_repo, memory_source_branch) + ): + memory_base = parent_series.memory_base_commit + else: + memory_base = memory_base_for_source(memory_repo, memory_source_branch) + return default_contract( + task_name=args.task_name, + repo_name=context.code_repository_name, + workflow_kind=args.workflow_kind, + memory_mode=memory_mode, + coordination_root=context.coordination_root, + code_repo_path=repo, + code_source_branch=source_branch, + code_work_branch=work_branch, + code_base_commit=base_commit, + worktree_name=args.worktree_name, + memory_repo_path=memory_repo, + memory_source_branch=memory_source_branch, + memory_work_branch=_external_memory_value(memory_mode, work_branch), + memory_base_commit=memory_base, + lifecycle_id=args.lifecycle_id, + leaf_id=leaf_id, + parent_task_name=parent_series.task_name if parent_series is not None else "", + parent_contract_path=parent_series.contract_path if parent_series is not None else None, + ) diff --git a/mcp/src/agents_remember/worktrees/worktree_contract.py b/mcp/src/agents_remember/worktrees/worktree_contract.py index 514b8dca..26ce1249 100644 --- a/mcp/src/agents_remember/worktrees/worktree_contract.py +++ b/mcp/src/agents_remember/worktrees/worktree_contract.py @@ -8,12 +8,14 @@ from __future__ import annotations import json -from dataclasses import dataclass, field +from dataclasses import dataclass, field, replace from pathlib import Path from agents_remember.errors import AgentsRememberError +from agents_remember.worktrees.leaf_refs import LeafRefResolutionError, resolve_leaf_ref from agents_remember.worktrees.task_resolver import ( SERIES_CONTRACT_FILENAME, + TaskResolutionError, leaf_enclosure_path, resolve_active_task_root, series_contract_path, @@ -117,6 +119,7 @@ def default_contract( task_id = slugify(task_name).upper() task_root = resolve_active_task_root(coordination_root, repo_name, task_name) leaf = leaf_id or worktree_name + persisted_leaf = leaf_id or slugify(worktree_name) contract_path = leaf_enclosure_path(task_root, leaf) task_artifact = task_root / "task.md" worktree_group = worktree_group_for(coordination_root, repo_name, worktree_name) @@ -150,7 +153,7 @@ def default_contract( ledger_path=ledger_path, memory_state="disabled" if memory_mode == "disabled" else "", lifecycle_id=lifecycle_id, - leaf_id=slugify(leaf), + leaf_id=persisted_leaf, parent_task_name=parent_task_name, parent_contract_path=parent_contract_path or series_contract_path(task_root), ) @@ -213,17 +216,44 @@ def load_contract(path: Path) -> WorktreeContract: raise ContractError(f"worktree contract does not exist: {path}") front_matter = _extract_front_matter(path.read_text(encoding="utf-8")) data = _parse_limited_yaml(front_matter) - contract = _contract_from_data(data, path) + contract = normalize_contract_leaf_id(_contract_from_data(data, path), keep_unresolved=True) validate_contract(contract) return contract def write_contract(path: Path, contract: WorktreeContract) -> None: + contract = normalize_contract_leaf_id(contract) validate_contract(contract) path.parent.mkdir(parents=True, exist_ok=True) path.write_text(contract_to_text(contract), encoding="utf-8") +def normalize_contract_leaf_id( + contract: WorktreeContract, *, keep_unresolved: bool = False +) -> WorktreeContract: + """Map legacy stem-shaped leaf ids to doc ids when the task tree proves the mapping.""" + + if contract.kind != "leaf" or not contract.leaf_id: + return contract + try: + resolved = resolve_leaf_ref( + contract.coordination_root, + contract.repo_name, + contract.leaf_id, + task_name=contract.task_name, + parent_task=contract.parent_task_name or None, + ) + except LeafRefResolutionError: + return contract + except TaskResolutionError: + if keep_unresolved: + return contract + raise + if resolved.doc_id == contract.leaf_id: + return contract + return replace(contract, leaf_id=resolved.doc_id) + + def _memory_lines(contract: WorktreeContract) -> list[str]: lines = [ "memory:", diff --git a/mcp/tests/test_leaf_ref_resolution.py b/mcp/tests/test_leaf_ref_resolution.py new file mode 100644 index 00000000..9cd5f86e --- /dev/null +++ b/mcp/tests/test_leaf_ref_resolution.py @@ -0,0 +1,267 @@ +from __future__ import annotations + +import tempfile +import unittest +from dataclasses import replace +from pathlib import Path + +from agents_remember.tasks import TaskDocument, write_task_doc +from agents_remember.worktrees.leaf_refs import LeafRefResolutionError, resolve_leaf_ref +from agents_remember.worktrees.worktree_contract import ( + contract_to_text, + default_contract, + load_contract, +) + + +def _write_leaf( + root: Path, + *, + repo: str = "repo-a", + master: str = "260700_master", + doc_id: str = "260700-L1", + slug: str = "01_legacy-leaf", +) -> None: + task_root = root / "tasks" / repo / master + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": master.upper(), + "slug": "task", + "title": "Master", + "kind": "master", + "repo": repo, + "createdAt": "2026-07-07T10:00", + "subTasks": [ + { + "number": doc_id, + "name": "Leaf", + "file": f"{slug}.md", + "status": "inProgress", + } + ], + } + ), + ) + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": doc_id, + "slug": slug, + "title": "Leaf", + "kind": "subTask", + "repo": repo, + "createdAt": "2026-07-07T10:01", + "master": "task.md", + } + ), + ) + + +class LeafRefResolutionTests(unittest.TestCase): + def test_resolves_qualified_doc_id_doc_id_and_legacy_slug(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + _write_leaf(root) + + qualified = resolve_leaf_ref(root, "repo-a", "repo-a/260700_master/260700-L1") + by_doc_id = resolve_leaf_ref(root, "repo-a", "260700-l1") + by_slug = resolve_leaf_ref(root, "repo-a", "01_legacy-leaf") + + self.assertEqual(qualified.qualified_id, "repo-a/260700_master/260700-L1") + self.assertEqual(by_doc_id.qualified_id, qualified.qualified_id) + self.assertEqual(by_slug.qualified_id, qualified.qualified_id) + + def test_rejects_unmatchable_with_expected_form_and_candidates(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + _write_leaf(root) + + with self.assertRaises(LeafRefResolutionError) as ctx: + resolve_leaf_ref(root, "repo-a", "260700-L9") + + message = str(ctx.exception) + self.assertEqual(ctx.exception.status, "leaf-ref-not-found") + self.assertIn("//", message) + self.assertIn("repo-a/260700_master/260700-L1", message) + + def test_rejects_ambiguous_legacy_slug_with_candidates(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + _write_leaf(root, master="master-a", doc_id="A-L1", slug="01_shared") + _write_leaf(root, master="master-b", doc_id="B-L1", slug="01_shared") + + with self.assertRaises(LeafRefResolutionError) as ctx: + resolve_leaf_ref(root, "repo-a", "01_shared") + + self.assertEqual(ctx.exception.status, "leaf-ref-ambiguous") + self.assertIn("repo-a/master-a/A-L1", str(ctx.exception)) + self.assertIn("repo-a/master-b/B-L1", str(ctx.exception)) + + def test_rejects_qualified_ref_outside_requested_task(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + _write_leaf(root, master="requested-master", doc_id="A-L1", slug="01_first") + _write_leaf(root, master="other-master", doc_id="B-L1", slug="01_second") + + with self.assertRaises(LeafRefResolutionError) as ctx: + resolve_leaf_ref( + root, + "repo-a", + "repo-a/other-master/B-L1", + task_name="requested master", + ) + + self.assertEqual(ctx.exception.status, "leaf-ref-not-found") + + def test_missing_optional_master_doc_is_skipped(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + task_root = root / "tasks" / "repo-a" / "260700_master" + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": "260700-L1", + "slug": "01_legacy-leaf", + "title": "Leaf", + "kind": "subTask", + "repo": "repo-a", + "createdAt": "2026-07-07T10:01", + "master": "task.md", + } + ), + ) + + resolved = resolve_leaf_ref( + root, + "repo-a", + "01_legacy-leaf", + task_name="260700_master", + ) + + self.assertEqual(resolved.qualified_id, "repo-a/260700_master/260700-L1") + + def test_marker_bearing_malformed_leaf_doc_fails_loud(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + _write_leaf(root) + task_root = root / "tasks" / "repo-a" / "260700_master" + (task_root / "bad.json").write_text( + '{"schema":"ar-task-document/v1","id":"bad"}', + encoding="utf-8", + ) + + with self.assertRaises(ValueError): + resolve_leaf_ref(root, "repo-a", "260700-L1") + + def test_sibling_artifact_json_is_ignored(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + _write_leaf(root) + task_root = root / "tasks" / "repo-a" / "260700_master" + (task_root / "lint-inventory-baseline.json").write_text( + '{"summary":{"findings":14},"items":[{"path":"a.py","line":1}]}', + encoding="utf-8", + ) + + resolved = resolve_leaf_ref(root, "repo-a", "01_legacy-leaf") + + self.assertEqual(resolved.qualified_id, "repo-a/260700_master/260700-L1") + + def test_load_contract_ignores_sibling_artifact_json_while_normalizing(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + _write_leaf(root) + task_root = root / "tasks" / "repo-a" / "260700_master" + (task_root / "lint-inventory-baseline.json").write_text( + '{"summary":{"findings":14},"items":[{"path":"a.py","line":1}]}', + encoding="utf-8", + ) + contract = default_contract( + task_name="260700_master", + repo_name="repo-a", + workflow_kind="light-task", + memory_mode="disabled", + coordination_root=root, + code_repo_path=root / "repo-a", + code_source_branch="main", + code_work_branch="ar/legacy", + code_base_commit="abc123", + worktree_name="legacy", + leaf_id="01_legacy-leaf", + ) + contract.contract_path.parent.mkdir(parents=True, exist_ok=True) + contract.contract_path.write_text(contract_to_text(contract), encoding="utf-8") + + loaded = load_contract(contract.contract_path) + + self.assertEqual(loaded.leaf_id, "260700-L1") + + def test_load_contract_keeps_leaf_id_when_task_resolution_is_unproven(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + task_root = root / "tasks" / "repo-a" / "duplicate" + task_root.mkdir(parents=True) + contract = default_contract( + task_name="duplicate", + repo_name="repo-a", + workflow_kind="light-task", + memory_mode="disabled", + coordination_root=root, + code_repo_path=root / "repo-a", + code_source_branch="main", + code_work_branch="ar/legacy", + code_base_commit="abc123", + worktree_name="legacy", + leaf_id="legacy-id", + ) + contract = replace(contract, leaf_id="legacy-id") + contract.contract_path.parent.mkdir(parents=True, exist_ok=True) + contract.contract_path.write_text(contract_to_text(contract), encoding="utf-8") + for parent in ("parent-a", "parent-b"): + active = root / "tasks" / "repo-a" / parent / "duplicate" + active.mkdir(parents=True) + (active / "series-contract.md").write_text("---\n---\n", encoding="utf-8") + + loaded = load_contract(contract.contract_path) + + self.assertEqual(loaded.leaf_id, "legacy-id") + + def test_light_task_doc_is_indexed_as_candidate(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + task_root = root / "tasks" / "repo-a" / "fix-thing" + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": "260707-T1", + "slug": "fix-thing", + "title": "Fix Thing", + "kind": "light", + "repo": "repo-a", + "createdAt": "2026-07-07T10:01", + "enclosures": [ + { + "leafId": "legacy-light", + "enclosurePath": "enclosures/legacy-light/series-contract.md", + } + ], + } + ), + ) + + by_doc_id = resolve_leaf_ref(root, "repo-a", "260707-T1", task_name="fix thing") + by_folder = resolve_leaf_ref(root, "repo-a", "fix-thing", task_name="fix thing") + by_enclosure = resolve_leaf_ref(root, "repo-a", "legacy-light", task_name="fix thing") + + self.assertEqual(by_doc_id.qualified_id, "repo-a/fix-thing/260707-T1") + self.assertEqual(by_folder.qualified_id, by_doc_id.qualified_id) + self.assertEqual(by_enclosure.qualified_id, by_doc_id.qualified_id) + + +if __name__ == "__main__": + unittest.main() diff --git a/mcp/tests/test_provider_async.py b/mcp/tests/test_provider_async.py index a2c5979f..0d02c712 100644 --- a/mcp/tests/test_provider_async.py +++ b/mcp/tests/test_provider_async.py @@ -219,7 +219,7 @@ def fake_launch(context_arg, contract_arg, args_arg, plan_arg): with ( mock.patch.object(worktree_start, "resolve_context", return_value=context), mock.patch.object( - worktree_start, "_build_start_contract", return_value=contract + worktree_start, "build_start_contract", return_value=contract ), mock.patch.object(worktree_start, "ensure_worktree", return_value="created"), mock.patch.object( diff --git a/mcp/tests/test_spawn_agent_session.py b/mcp/tests/test_spawn_agent_session.py index 108e035c..c615c6b7 100644 --- a/mcp/tests/test_spawn_agent_session.py +++ b/mcp/tests/test_spawn_agent_session.py @@ -35,6 +35,7 @@ from agents_remember.serving.terminal import TerminalSessionBinding from agents_remember.serving.terminal_catalog import TerminalCatalog, TerminalCatalogEntry from agents_remember.serving.terminal_paste import PasteResult +from agents_remember.tasks import TaskDocument, write_task_doc def _config(root: Path) -> McpRuntimeConfig: @@ -50,6 +51,52 @@ def _detected(_command: str) -> str | None: return "/usr/bin/harness" +def _write_leaf_task( + coordination_root: Path, + *, + repo: str = "repo", + master: str = "master", + doc_id: str = "leaf-1", + slug: str = "leaf-1", +) -> None: + task_root = coordination_root / "tasks" / repo / master + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": master.upper(), + "slug": "task", + "title": "Master", + "kind": "master", + "repo": repo, + "createdAt": "2026-07-07T10:00", + "subTasks": [ + { + "number": doc_id, + "name": "Leaf", + "file": f"{slug}.md", + "status": "inProgress", + } + ], + } + ), + ) + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": doc_id, + "slug": slug, + "title": "Leaf", + "kind": "subTask", + "repo": repo, + "createdAt": "2026-07-07T10:01", + "master": "task.md", + } + ), + ) + + class _FakeHost: def __init__(self) -> None: self.ensured: list[dict[str, object]] = [] @@ -125,6 +172,7 @@ class SpawnAgentSessionTests(unittest.TestCase): def setUp(self) -> None: self.tmp = Path(tempfile.mkdtemp()) self.config = _config(self.tmp) + _write_leaf_task(self.tmp) self.catalog = TerminalCatalog(self.tmp / "logs" / "dashboard" / "terminal-sessions.json") self.host = _FakeHost() reset_ambient() @@ -185,6 +233,22 @@ def test_spawn_records_role_from_env_and_reports_it(self) -> None: assert row is not None self.assertEqual(row.spawn_role, "manager") + def test_spawn_normalizes_legacy_leaf_slug_before_persisting(self) -> None: + payload = self._spawn(leaf_key="leaf-1") + self.assertEqual(payload["status"], "spawned") + self.assertEqual(payload["leafKey"], "repo/master/leaf-1") + row = self.catalog.get("worker-1") + assert row is not None + self.assertEqual(row.leaf_key, "repo/master/leaf-1") + + def test_spawn_rejects_unmatchable_leaf_ref_before_spawning(self) -> None: + payload = self._spawn(leaf_key="missing-leaf", paster=_FakePaster()) + self.assertFalse(payload["ok"]) + self.assertEqual(payload["status"], "leaf-ref-not-found") + self.assertIn("//", payload["detail"]) + self.assertEqual(self.host.ensured, []) + self.assertIsNone(self.catalog.get("worker-1")) + def test_draft_paste_does_not_submit(self) -> None: paster = _FakePaster(delivered=True, submitted=True) payload = self._spawn(context="draft packet", submit=False, paster=paster) @@ -281,6 +345,7 @@ class SpawnKnobApplicationTests(unittest.TestCase): def setUp(self) -> None: self.tmp = Path(tempfile.mkdtemp()) self.config = _config(self.tmp) + _write_leaf_task(self.tmp) self.catalog = TerminalCatalog(self.tmp / "logs" / "dashboard" / "terminal-sessions.json") self.host = _FakeHost() reset_ambient() @@ -426,6 +491,7 @@ def setUp(self) -> None: self.coordination_root = self.tmp / "ar-coordination" self.repo_root = self.tmp / "workspace" / "repo-a" self.repo_root.mkdir(parents=True) + _write_leaf_task(self.coordination_root, repo="repo-a") self.config = McpRuntimeConfig( config_path=self.tmp / "settings.json", coordination_root=self.coordination_root, @@ -573,6 +639,7 @@ def setUp(self) -> None: self.coordination_root = self.tmp / "ar-coordination" self.repo_root = self.tmp / "workspace" / "repo-a" self.repo_root.mkdir(parents=True) + _write_leaf_task(self.coordination_root, repo="repo-a") self.config = McpRuntimeConfig( config_path=self.tmp / "settings.json", coordination_root=self.coordination_root, @@ -745,6 +812,8 @@ def setUp(self) -> None: self.coordination_root = self.tmp / "ar-coordination" self.repo_root = self.tmp / "workspace" / "repo-a" self.repo_root.mkdir(parents=True) + _write_leaf_task(self.coordination_root, repo="repo-a") + _write_leaf_task(self.coordination_root, repo="not-a-repo", doc_id="leaf-9", slug="leaf-9") self.config = McpRuntimeConfig( config_path=self.tmp / "settings.json", coordination_root=self.coordination_root, diff --git a/mcp/tests/test_task_reopen.py b/mcp/tests/test_task_reopen.py index f7e7ead5..4303f9f1 100644 --- a/mcp/tests/test_task_reopen.py +++ b/mcp/tests/test_task_reopen.py @@ -169,8 +169,9 @@ def test_resets_contract_doc_and_master_index(self) -> None: ), ("pending-review", False, "not-started", "not-started", "reopened", "", "", ""), ) - # The leaf id NEVER changes — that is the whole point. - self.assertEqual(reopened.leaf_id, "260698-l1") + # The leaf identity stays on the same task-doc id; legacy stem contracts + # load through the resolver once the doc exists. + self.assertEqual(reopened.leaf_id, "260698-L1") doc = read_task_doc(doc_path) self.assertEqual((doc.status, doc.lifecycleId), ("planning", None)) diff --git a/mcp/tests/test_terminal_leaf_assignment.py b/mcp/tests/test_terminal_leaf_assignment.py index a5d32087..b40106db 100644 --- a/mcp/tests/test_terminal_leaf_assignment.py +++ b/mcp/tests/test_terminal_leaf_assignment.py @@ -16,6 +16,7 @@ terminal_catalog_path, ) from agents_remember.serving.terminal_leaf_assignment import assign_terminal_session_to_leaf +from agents_remember.tasks import TaskDocument, write_task_doc def _config(root: Path) -> McpRuntimeConfig: @@ -27,6 +28,46 @@ def _config(root: Path) -> McpRuntimeConfig: ) +def _write_leaf(root: Path) -> str: + task_root = root / "tasks" / "repo" / "master" + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": "MASTER", + "slug": "task", + "title": "Master", + "kind": "master", + "repo": "repo", + "createdAt": "2026-07-07T10:00", + "subTasks": [ + { + "number": "leaf-1", + "name": "Leaf 1", + "file": "legacy-leaf.md", + "status": "inProgress", + } + ], + } + ), + ) + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": "leaf-1", + "slug": "legacy-leaf", + "title": "Leaf 1", + "kind": "subTask", + "repo": "repo", + "createdAt": "2026-07-07T10:01", + "master": "task.md", + } + ), + ) + return "repo/master/leaf-1" + + def _entry(session_id: str, *, leaf_key: str | None = None) -> TerminalCatalogEntry: return TerminalCatalogEntry( id=session_id, @@ -89,13 +130,14 @@ def test_attach_terminal_session_to_leaf_payload_uses_dashboard_catalog(self) -> with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) config = _config(root) + canonical = _write_leaf(root) catalog = TerminalCatalog(terminal_catalog_path(root)) catalog.upsert(_entry("chat-1", leaf_key="repo/master/old")) payload = attach_terminal_session_to_leaf_payload( config, session_id="chat-1", - leaf_key="repo/master/new", + leaf_key="legacy-leaf", ) self.assertTrue(payload["ok"]) @@ -105,7 +147,27 @@ def test_attach_terminal_session_to_leaf_payload_uses_dashboard_catalog(self) -> self.assertEqual(payload["previousLeafKey"], "repo/master/old") self.assertEqual(payload["role"], "chat") updated = _require_entry(catalog, "chat-1") - self.assertEqual(updated.leaf_key, "repo/master/new") + self.assertEqual(payload["leafKey"], canonical) + self.assertEqual(updated.leaf_key, canonical) + + def test_attach_payload_rejects_unmatchable_leaf_ref_without_mutating(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + config = _config(root) + _write_leaf(root) + catalog = TerminalCatalog(terminal_catalog_path(root)) + catalog.upsert(_entry("chat-1", leaf_key="repo/master/old")) + + payload = attach_terminal_session_to_leaf_payload( + config, + session_id="chat-1", + leaf_key="missing-leaf", + ) + + self.assertFalse(payload["ok"]) + self.assertEqual(payload["status"], "leaf-ref-not-found") + self.assertIn("//", payload["detail"]) + self.assertEqual(_require_entry(catalog, "chat-1").leaf_key, "repo/master/old") if __name__ == "__main__": diff --git a/mcp/tests/test_terminal_ws.py b/mcp/tests/test_terminal_ws.py index 2a513f9b..0c3d38f4 100644 --- a/mcp/tests/test_terminal_ws.py +++ b/mcp/tests/test_terminal_ws.py @@ -44,6 +44,7 @@ TerminalSessionStatus, ) from agents_remember.serving.terminal_opener import resolve_terminal_launch +from agents_remember.tasks import TaskDocument, write_task_doc def _config(tmp: Path) -> McpRuntimeConfig: @@ -65,6 +66,53 @@ def which(command: str) -> str | None: return which +def _write_leaf_task( + coordination_root: Path, + *, + repo: str, + master: str, + doc_id: str, + slug: str | None = None, +) -> None: + slug = slug or doc_id + task_root = coordination_root / "tasks" / repo / master + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": master.upper(), + "slug": "task", + "title": "Master", + "kind": "master", + "repo": repo, + "createdAt": "2026-07-07T10:00", + "subTasks": [ + { + "number": doc_id, + "name": "Leaf", + "file": f"{slug}.md", + "status": "inProgress", + } + ], + } + ), + ) + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": doc_id, + "slug": slug, + "title": "Leaf", + "kind": "subTask", + "repo": repo, + "createdAt": "2026-07-07T10:01", + "master": "task.md", + } + ), + ) + + def _catalog_entry( session_id: str, *, @@ -416,6 +464,13 @@ class TerminalWebSocketTests(unittest.TestCase): def setUp(self) -> None: self._dir = tempfile.TemporaryDirectory() self.tmp = Path(self._dir.name) + _write_leaf_task(self.tmp, repo="repo", master="master", doc_id="leaf-1") + _write_leaf_task( + self.tmp, + repo="agents-remember", + master="260628_operations-integration", + doc_id="260628-L5", + ) self.host = _FakeTerminalHost(cwd=self.tmp) self.catalog = TerminalCatalog(self.tmp / "terminal-sessions.json") self.app = create_app( @@ -638,6 +693,18 @@ def test_post_open_claims_leaf_and_persists_it(self) -> None: assert entry is not None self.assertEqual(entry.leaf_key, leaf) + def test_post_open_rejects_unmatchable_leaf_ref(self) -> None: + with TestClient(self.app) as client: + response = client.post( + "/api/terminal/term-1", + json={"kind": "terminal", "leafKey": "repo/master/missing-leaf"}, + ) + self.assertEqual(response.status_code, 400) + self.assertEqual(response.json()["status"], "leaf-ref-not-found") + self.assertIn("//", response.json()["detail"]) + self.assertEqual(self.host.ensured, []) + self.assertIsNone(self.catalog.get("term-1")) + def test_post_open_null_leaf_still_works(self) -> None: with TestClient(self.app) as client: response = client.post("/api/terminal/term-1", json={"kind": "terminal"}) @@ -686,6 +753,19 @@ def test_attach_leaf_binds_existing_session_when_free(self) -> None: assert entry is not None self.assertEqual(entry.leaf_key, leaf) + def test_attach_leaf_rejects_unmatchable_ref_without_mutating(self) -> None: + self.catalog.upsert(_catalog_entry("live", cwd=self.tmp)) + with TestClient(self.app) as client: + response = client.post( + "/api/terminal/live/attach-leaf", + json={"leafKey": "repo/master/missing-leaf"}, + ) + self.assertEqual(response.status_code, 400) + self.assertEqual(response.json()["status"], "leaf-ref-not-found") + entry = self.catalog.get("live") + assert entry is not None + self.assertIsNone(entry.leaf_key) + def test_attach_leaf_409_when_taken_by_other_running_session(self) -> None: leaf = "repo/master/leaf-1" self.catalog.upsert(_catalog_entry("owner", cwd=self.tmp, tmux_name="ar-owner")) diff --git a/mcp/tests/test_tool_response_conformance.py b/mcp/tests/test_tool_response_conformance.py index e1453f0b..7ecb41f2 100644 --- a/mcp/tests/test_tool_response_conformance.py +++ b/mcp/tests/test_tool_response_conformance.py @@ -43,6 +43,7 @@ install_ambient, reset_ambient, ) +from agents_remember.tasks import TaskDocument, write_task_doc from test_config import settings_payload from test_worktree_support import ( commit_file, @@ -66,6 +67,53 @@ def _run_git(repo: Path, args: list[str]) -> None: raise AssertionError(result.stderr or result.stdout) +def _write_leaf_task( + coordination_root: Path, + *, + repo: str = REPO, + master: str = "master", + doc_id: str = "leaf-1", + slug: str | None = None, +) -> None: + slug = slug or doc_id + task_root = coordination_root / "tasks" / repo / master + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": master.upper(), + "slug": "task", + "title": "Master", + "kind": "master", + "repo": repo, + "createdAt": "2026-07-07T10:00", + "subTasks": [ + { + "number": doc_id, + "name": "Leaf", + "file": f"{slug}.md", + "status": "inProgress", + } + ], + } + ), + ) + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": doc_id, + "slug": slug, + "title": "Leaf", + "kind": "subTask", + "repo": repo, + "createdAt": "2026-07-07T10:01", + "master": "task.md", + } + ), + ) + + def _base_fixture(root: Path): """Code repo + memory layer + ``.codex/mcp`` settings for the simple tools.""" repo = root / "workspace" / REPO @@ -73,6 +121,7 @@ def _base_fixture(root: Path): (memory / "system").mkdir(parents=True, exist_ok=True) (memory / "onboarding").mkdir(parents=True, exist_ok=True) (memory / "system" / "settings.md").write_text("# Settings\n", encoding="utf-8") + _write_leaf_task(root / "ar-coordination") repo.mkdir(parents=True, exist_ok=True) _run_git(repo, ["init", "-b", "main"]) _run_git(repo, ["config", "user.email", "agents-remember@example.invalid"]) @@ -97,7 +146,7 @@ def _simple_payloads(config) -> dict[str, dict]: "attach_terminal_session_to_leaf": tools.attach_terminal_session_to_leaf_payload( config, session_id="missing-session", - leaf_key="repo/master/leaf-1", + leaf_key=f"{REPO}/master/leaf-1", ), # Representative refusal payload: an unknown harness id short-circuits before any tmux spawn, # so the conformance fixture never touches a real terminal host. @@ -139,6 +188,8 @@ def _worktree_payloads(root: Path) -> dict[str, dict]: (memory_root / "memory.md").write_text("# Memory ledger\n", encoding="utf-8") _run_git(memory_root, ["add", "-A"]) _run_git(memory_root, ["commit", "-m", "seed"]) + _write_leaf_task(config.coordination_root, master="demo-task", doc_id="demo-wt") + _write_leaf_task(config.coordination_root, master="abandon-task", doc_id="abandon-wt") payloads: dict[str, dict] = {} payloads["worktree_start"] = tools.worktree_start_payload( @@ -148,6 +199,7 @@ def _worktree_payloads(root: Path) -> dict[str, dict]: "demo-wt", dry_run=False, skip_provider_setup=True, + memory_mode="disabled", memory_choice="disabled-memory", ) contract_path = payloads["worktree_start"]["contract_path"] @@ -166,6 +218,7 @@ def _worktree_payloads(root: Path) -> dict[str, dict]: payloads["worktree_closeout_apply"] = tools.worktree_closeout_apply_payload( config, contract_path, "intent note", "code commit message", dry_run=False ) + _run_git(config.workspace_root / REPO, ["checkout", "ar/demo-task"]) payloads["worktree_integrate"] = tools.worktree_integrate_payload( config, contract_path, dry_run=False ) @@ -182,6 +235,7 @@ def _worktree_payloads(root: Path) -> dict[str, dict]: "abandon-wt", dry_run=False, skip_provider_setup=True, + memory_mode="disabled", memory_choice="disabled-memory", ) payloads["worktree_abandon"] = tools.worktree_abandon_payload( diff --git a/mcp/tests/test_worktree_support.py b/mcp/tests/test_worktree_support.py index 1dfac72e..b79c7779 100644 --- a/mcp/tests/test_worktree_support.py +++ b/mcp/tests/test_worktree_support.py @@ -39,6 +39,7 @@ from agents_remember.tasks import TaskDocument, write_task_doc from agents_remember.worktrees import git_worktree_manager as worktree_manager from agents_remember.worktrees.modules import start as worktree_start +from agents_remember.worktrees.modules import start_contract from agents_remember.worktrees.modules.integrate import _merge_integrated_commits from agents_remember.worktrees.modules.models import ( PATH_SAMPLE_LIMIT, @@ -476,11 +477,11 @@ def test_memory_base_for_source_uses_source_branch_tip_not_head(self) -> None: head_tip = commit_file(memory_repo, "memory.md", "other\n", "unrelated in-flight work") self.assertNotEqual(main_tip, head_tip) # repo HEAD is on 'other-task', but the base for a 'main'-sourced worktree is main's tip - self.assertEqual(worktree_start._memory_base_for_source(memory_repo, "main"), main_tip) + self.assertEqual(start_contract.memory_base_for_source(memory_repo, "main"), main_tip) # no source branch (internal/disabled memory) -> falls back to current HEAD - self.assertEqual(worktree_start._memory_base_for_source(memory_repo, ""), head_tip) + self.assertEqual(start_contract.memory_base_for_source(memory_repo, ""), head_tip) # no memory repo -> empty - self.assertEqual(worktree_start._memory_base_for_source(None, "main"), "") + self.assertEqual(start_contract.memory_base_for_source(None, "main"), "") def test_master_start_creates_integration_contract_and_leaf_enclosure(self) -> None: with tempfile.TemporaryDirectory() as tmp: @@ -533,13 +534,13 @@ def test_master_start_creates_integration_contract_and_leaf_enclosure(self) -> N self.assertEqual(result.returncode, 0) root_contract = load_contract(series_contract_path(task_root)) - leaf_contract = load_contract(leaf_enclosure_path(task_root, "15_leaf")) + leaf_contract = load_contract(leaf_enclosure_path(task_root, "15")) self.assertEqual( (root_contract.kind, root_contract.code_source_branch), ("series", "main") ) self.assertEqual(root_contract.code_work_branch, "ar/260624_master") self.assertEqual(root_contract.code_worktree, code_repo) - self.assertEqual((leaf_contract.kind, leaf_contract.leaf_id), ("leaf", "15_leaf")) + self.assertEqual((leaf_contract.kind, leaf_contract.leaf_id), ("leaf", "15")) self.assertEqual(leaf_contract.code_source_branch, "ar/260624_master") self.assertEqual(leaf_contract.code_work_branch, "ar/15_leaf") self.assertEqual(leaf_contract.parent_contract_path, root_contract.contract_path) @@ -551,6 +552,94 @@ def test_master_start_creates_integration_contract_and_leaf_enclosure(self) -> N ) self.assertIn("ar/15_leaf", git(code_repo, "branch", "--list", "ar/15_leaf")) + def test_light_task_start_defaults_to_doc_id_leaf(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + workspace = Path(tmp) + code_repo = workspace / "repo-a" + init_repo(code_repo, "main") + coordination_root = workspace / "ar-coordination" + (coordination_root / "memory-repos" / "ar-repo-a" / "system").mkdir(parents=True) + (coordination_root / "memory-repos" / "ar-repo-a" / "onboarding").mkdir() + task_root = coordination_root / "tasks" / "repo-a" / "fix-thing" + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": "260707-T1", + "slug": "fix-thing", + "title": "Fix Thing", + "kind": "light", + "status": "inProgress", + "repo": "repo-a", + "createdAt": "2026-07-07T10:00", + } + ), + ) + + result = worktree_manager.start_result( + worktree_manager.WorktreeArgs( + code_repository_name="repo-a", + workspace_root=workspace, + coordination_root=coordination_root, + code_repository_root=code_repo, + topology="external", + task_name="fix thing", + worktree_name="fix-thing", + memory_mode="disabled", + skip_provider_setup=True, + lifecycle_id="LC-LIGHT", + ) + ) + + self.assertEqual(result.returncode, 0) + contract = load_contract(leaf_enclosure_path(task_root, "260707-T1")) + self.assertEqual((contract.kind, contract.leaf_id), ("leaf", "260707-T1")) + self.assertEqual(result.payload["leaf_id"], "260707-T1") + + def test_light_task_start_rejects_wrong_default_ref_with_candidate(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + workspace = Path(tmp) + code_repo = workspace / "repo-a" + init_repo(code_repo, "main") + coordination_root = workspace / "ar-coordination" + (coordination_root / "memory-repos" / "ar-repo-a" / "system").mkdir(parents=True) + (coordination_root / "memory-repos" / "ar-repo-a" / "onboarding").mkdir() + task_root = coordination_root / "tasks" / "repo-a" / "fix-thing" + write_task_doc( + task_root, + TaskDocument.model_validate( + { + "id": "260707-T1", + "slug": "fix-thing", + "title": "Fix Thing", + "kind": "light", + "status": "inProgress", + "repo": "repo-a", + "createdAt": "2026-07-07T10:00", + } + ), + ) + + result = worktree_manager.start_result( + worktree_manager.WorktreeArgs( + code_repository_name="repo-a", + workspace_root=workspace, + coordination_root=coordination_root, + code_repository_root=code_repo, + topology="external", + task_name="fix thing", + worktree_name="wrong-ref", + memory_mode="disabled", + skip_provider_setup=True, + ) + ) + + self.assertEqual(result.returncode, 2) + self.assertEqual(result.payload["state"], "leaf-ref-not-found") + candidates = result.payload.get("candidates") + assert isinstance(candidates, list) + self.assertIn("repo-a/fix-thing/260707-T1", candidates) + def test_memory_ledger_roundtrip_and_prepend(self) -> None: ledger = create_initial_ledger("repo-a", "c1", "m1") text = ledger_to_text(ledger) From 2c464cf4c29b60165fecae722bf76c307aaac6f1 Mon Sep 17 00:00:00 2001 From: Readone Mohamed Date: Tue, 7 Jul 2026 22:59:19 +0200 Subject: [PATCH 05/35] HFX-L6 ratify architect and curator roles --- .agents/GEMINI.md | 4 +- .agents/skills/l-01-agent-lifecycles/SKILL.md | 76 +++++-- .../l-01-agent-lifecycles/roles/architect.md | 157 +++++++++++++++ .../l-01-agent-lifecycles/roles/curator.md | 90 +++++++++ .../l-01-agent-lifecycles/roles/designer.md | 25 ++- .../l-01-agent-lifecycles/roles/manager.md | 43 ++-- .../roles/orchestrator.md | 189 +++++++++--------- .../l-01-agent-lifecycles/roles/reviewer.md | 20 +- .../l-01-agent-lifecycles/roles/strategist.md | 28 ++- .../l-01-agent-lifecycles/roles/worker.md | 57 +++--- .../templates/manager-brief.md | 4 + .../templates/worker-brief.md | 25 +-- .../master-template.md | 2 +- .../hooks/agents-remember-session-start.md | 4 +- .claude/skills/l-01-agent-lifecycles/SKILL.md | 76 +++++-- .../l-01-agent-lifecycles/roles/architect.md | 157 +++++++++++++++ .../l-01-agent-lifecycles/roles/curator.md | 90 +++++++++ .../l-01-agent-lifecycles/roles/designer.md | 25 ++- .../l-01-agent-lifecycles/roles/manager.md | 43 ++-- .../roles/orchestrator.md | 189 +++++++++--------- .../l-01-agent-lifecycles/roles/reviewer.md | 20 +- .../l-01-agent-lifecycles/roles/strategist.md | 28 ++- .../l-01-agent-lifecycles/roles/worker.md | 57 +++--- .../templates/manager-brief.md | 4 + .../templates/worker-brief.md | 25 +-- .../master-template.md | 2 +- .codex/hooks/agents-remember-session-start.md | 4 +- .codex/skills/l-01-agent-lifecycles/SKILL.md | 76 +++++-- .../l-01-agent-lifecycles/roles/architect.md | 157 +++++++++++++++ .../l-01-agent-lifecycles/roles/curator.md | 90 +++++++++ .../l-01-agent-lifecycles/roles/designer.md | 25 ++- .../l-01-agent-lifecycles/roles/manager.md | 43 ++-- .../roles/orchestrator.md | 189 +++++++++--------- .../l-01-agent-lifecycles/roles/reviewer.md | 20 +- .../l-01-agent-lifecycles/roles/strategist.md | 28 ++- .../l-01-agent-lifecycles/roles/worker.md | 57 +++--- .../templates/manager-brief.md | 4 + .../templates/worker-brief.md | 25 +-- .../master-template.md | 2 +- .../hooks/agents-remember-session-start.md | 4 +- .cursor/rules/agents-remember.mdc | 4 +- .cursor/skills/l-01-agent-lifecycles/SKILL.md | 76 +++++-- .../l-01-agent-lifecycles/roles/architect.md | 157 +++++++++++++++ .../l-01-agent-lifecycles/roles/curator.md | 90 +++++++++ .../l-01-agent-lifecycles/roles/designer.md | 25 ++- .../l-01-agent-lifecycles/roles/manager.md | 43 ++-- .../roles/orchestrator.md | 189 +++++++++--------- .../l-01-agent-lifecycles/roles/reviewer.md | 20 +- .../l-01-agent-lifecycles/roles/strategist.md | 28 ++- .../l-01-agent-lifecycles/roles/worker.md | 57 +++--- .../templates/manager-brief.md | 4 + .../templates/worker-brief.md | 25 +-- .../master-template.md | 2 +- .github-vscode/copilot-instructions.md | 4 +- .../hooks/agents-remember-session-start.md | 4 +- .../skills/l-01-agent-lifecycles/SKILL.md | 76 +++++-- .../l-01-agent-lifecycles/roles/architect.md | 157 +++++++++++++++ .../l-01-agent-lifecycles/roles/curator.md | 90 +++++++++ .../l-01-agent-lifecycles/roles/designer.md | 25 ++- .../l-01-agent-lifecycles/roles/manager.md | 43 ++-- .../roles/orchestrator.md | 189 +++++++++--------- .../l-01-agent-lifecycles/roles/reviewer.md | 20 +- .../l-01-agent-lifecycles/roles/strategist.md | 28 ++- .../l-01-agent-lifecycles/roles/worker.md | 57 +++--- .../templates/manager-brief.md | 4 + .../templates/worker-brief.md | 25 +-- .../master-template.md | 2 +- .hermes/HERMES.md | 4 +- .hermes/skills/l-01-agent-lifecycles/SKILL.md | 76 +++++-- .../l-01-agent-lifecycles/roles/architect.md | 157 +++++++++++++++ .../l-01-agent-lifecycles/roles/curator.md | 90 +++++++++ .../l-01-agent-lifecycles/roles/designer.md | 25 ++- .../l-01-agent-lifecycles/roles/manager.md | 43 ++-- .../roles/orchestrator.md | 189 +++++++++--------- .../l-01-agent-lifecycles/roles/reviewer.md | 20 +- .../l-01-agent-lifecycles/roles/strategist.md | 28 ++- .../l-01-agent-lifecycles/roles/worker.md | 57 +++--- .../templates/manager-brief.md | 4 + .../templates/worker-brief.md | 25 +-- .../master-template.md | 2 +- .openclaw/workspace/AGENTS.md | 4 +- .../skills/l-01-agent-lifecycles/SKILL.md | 76 +++++-- .../l-01-agent-lifecycles/roles/architect.md | 157 +++++++++++++++ .../l-01-agent-lifecycles/roles/curator.md | 90 +++++++++ .../l-01-agent-lifecycles/roles/designer.md | 25 ++- .../l-01-agent-lifecycles/roles/manager.md | 43 ++-- .../roles/orchestrator.md | 189 +++++++++--------- .../l-01-agent-lifecycles/roles/reviewer.md | 20 +- .../l-01-agent-lifecycles/roles/strategist.md | 28 ++- .../l-01-agent-lifecycles/roles/worker.md | 57 +++--- .../templates/manager-brief.md | 4 + .../templates/worker-brief.md | 25 +-- .../master-template.md | 2 +- .pi/extensions/agents-remember-start.ts | 4 +- .pi/skills/l-01-agent-lifecycles/SKILL.md | 76 +++++-- .../l-01-agent-lifecycles/roles/architect.md | 157 +++++++++++++++ .../l-01-agent-lifecycles/roles/curator.md | 90 +++++++++ .../l-01-agent-lifecycles/roles/designer.md | 25 ++- .../l-01-agent-lifecycles/roles/manager.md | 43 ++-- .../roles/orchestrator.md | 189 +++++++++--------- .../l-01-agent-lifecycles/roles/reviewer.md | 20 +- .../l-01-agent-lifecycles/roles/strategist.md | 28 ++- .../l-01-agent-lifecycles/roles/worker.md | 57 +++--- .../templates/manager-brief.md | 4 + .../templates/worker-brief.md | 25 +-- .../master-template.md | 2 +- AGENTS.md | 8 +- README.md | 2 +- agents-md-files/coordinator/AGENTS.md | 8 +- dashboard/src/data/sessionGroups.test.ts | 13 +- dashboard/src/data/sessionGroups.ts | 6 +- dashboard/src/data/terminal.ts | 2 +- dashboard/src/panels/FlowTab.test.tsx | 33 +-- dashboard/src/panels/SessionList.test.tsx | 36 ++++ dashboard/src/panels/SessionList.tsx | 27 ++- dashboard/src/panels/flowModels.ts | 143 ++++++++----- docs/features.md | 2 +- docs/getting-started.md | 2 +- docs/install/claude-code.md | 6 +- docs/llms.txt | 2 +- docs/reference/settings-json.md | 4 +- docs/reference/skills.md | 2 +- docs/workflows.md | 10 +- .../controlplane/orchestration_artifacts.py | 17 +- .../kernel/agentic_settings.py | 15 +- .../agents_remember/mcp/tools/next_step.py | 3 +- .../package_data/dashboard.fingerprint | 2 +- ...minal-CyrgkVUD.js => Terminal-rR8n_HOp.js} | 2 +- .../{dist-BiIHlEw9.js => dist-Blxijm2e.js} | 2 +- .../{dist-DlUN4-j9.js => dist-BsbV-A62.js} | 2 +- .../{dist-B2R-c1vX.js => dist-CT28L0yn.js} | 2 +- .../{dist-17r-i6rR.js => dist-CmkCPezG.js} | 2 +- .../{dist-jYLMKGSZ.js => dist-CwGQmmSf.js} | 2 +- .../{dist-DvbxHIw3.js => dist-DKcsGq7b.js} | 2 +- .../{dist-BJusfjLN.js => dist-Dh1TSPID.js} | 2 +- .../{dist-BxWz473c.js => dist-cLIvjYCL.js} | 2 +- .../{index-CLJ0aycO.js => index-B377xynC.js} | 8 +- .../package_data/dashboard/index.html | 2 +- .../agents-md-files/coordinator/AGENTS.md | 8 +- .../skills/l-01-agent-lifecycles/SKILL.md | 76 +++++-- .../l-01-agent-lifecycles/roles/architect.md | 157 +++++++++++++++ .../l-01-agent-lifecycles/roles/curator.md | 90 +++++++++ .../l-01-agent-lifecycles/roles/designer.md | 25 ++- .../l-01-agent-lifecycles/roles/manager.md | 43 ++-- .../roles/orchestrator.md | 189 +++++++++--------- .../l-01-agent-lifecycles/roles/reviewer.md | 20 +- .../l-01-agent-lifecycles/roles/strategist.md | 28 ++- .../l-01-agent-lifecycles/roles/worker.md | 57 +++--- .../templates/manager-brief.md | 4 + .../templates/worker-brief.md | 25 +-- .../master-template.md | 2 +- mcp/tests/test_agentic_settings.py | 34 ++++ mcp/tests/test_orchestration_comms.py | 27 +++ skills/l-01-agent-lifecycles/SKILL.md | 76 +++++-- .../l-01-agent-lifecycles/roles/architect.md | 157 +++++++++++++++ skills/l-01-agent-lifecycles/roles/curator.md | 90 +++++++++ .../l-01-agent-lifecycles/roles/designer.md | 25 ++- skills/l-01-agent-lifecycles/roles/manager.md | 43 ++-- .../roles/orchestrator.md | 189 +++++++++--------- .../l-01-agent-lifecycles/roles/reviewer.md | 20 +- .../l-01-agent-lifecycles/roles/strategist.md | 28 ++- skills/l-01-agent-lifecycles/roles/worker.md | 57 +++--- .../templates/manager-brief.md | 4 + .../templates/worker-brief.md | 25 +-- .../master-template.md | 2 +- 165 files changed, 5582 insertions(+), 2058 deletions(-) create mode 100644 .agents/skills/l-01-agent-lifecycles/roles/architect.md create mode 100644 .agents/skills/l-01-agent-lifecycles/roles/curator.md create mode 100644 .claude/skills/l-01-agent-lifecycles/roles/architect.md create mode 100644 .claude/skills/l-01-agent-lifecycles/roles/curator.md create mode 100644 .codex/skills/l-01-agent-lifecycles/roles/architect.md create mode 100644 .codex/skills/l-01-agent-lifecycles/roles/curator.md create mode 100644 .cursor/skills/l-01-agent-lifecycles/roles/architect.md create mode 100644 .cursor/skills/l-01-agent-lifecycles/roles/curator.md create mode 100644 .github-vscode/skills/l-01-agent-lifecycles/roles/architect.md create mode 100644 .github-vscode/skills/l-01-agent-lifecycles/roles/curator.md create mode 100644 .hermes/skills/l-01-agent-lifecycles/roles/architect.md create mode 100644 .hermes/skills/l-01-agent-lifecycles/roles/curator.md create mode 100644 .openclaw/workspace/skills/l-01-agent-lifecycles/roles/architect.md create mode 100644 .openclaw/workspace/skills/l-01-agent-lifecycles/roles/curator.md create mode 100644 .pi/skills/l-01-agent-lifecycles/roles/architect.md create mode 100644 .pi/skills/l-01-agent-lifecycles/roles/curator.md rename mcp/src/agents_remember/package_data/dashboard/assets/{Terminal-CyrgkVUD.js => Terminal-rR8n_HOp.js} (99%) rename mcp/src/agents_remember/package_data/dashboard/assets/{dist-BiIHlEw9.js => dist-Blxijm2e.js} (99%) rename mcp/src/agents_remember/package_data/dashboard/assets/{dist-DlUN4-j9.js => dist-BsbV-A62.js} (96%) rename mcp/src/agents_remember/package_data/dashboard/assets/{dist-B2R-c1vX.js => dist-CT28L0yn.js} (99%) rename mcp/src/agents_remember/package_data/dashboard/assets/{dist-17r-i6rR.js => dist-CmkCPezG.js} (99%) rename mcp/src/agents_remember/package_data/dashboard/assets/{dist-jYLMKGSZ.js => dist-CwGQmmSf.js} (99%) rename mcp/src/agents_remember/package_data/dashboard/assets/{dist-DvbxHIw3.js => dist-DKcsGq7b.js} (99%) rename mcp/src/agents_remember/package_data/dashboard/assets/{dist-BJusfjLN.js => dist-Dh1TSPID.js} (99%) rename mcp/src/agents_remember/package_data/dashboard/assets/{dist-BxWz473c.js => dist-cLIvjYCL.js} (99%) rename mcp/src/agents_remember/package_data/dashboard/assets/{index-CLJ0aycO.js => index-B377xynC.js} (94%) create mode 100644 mcp/src/agents_remember/package_data/runtime/skills/l-01-agent-lifecycles/roles/architect.md create mode 100644 mcp/src/agents_remember/package_data/runtime/skills/l-01-agent-lifecycles/roles/curator.md create mode 100644 skills/l-01-agent-lifecycles/roles/architect.md create mode 100644 skills/l-01-agent-lifecycles/roles/curator.md diff --git a/.agents/GEMINI.md b/.agents/GEMINI.md index 7a77eb8e..6a2f5d42 100644 --- a/.agents/GEMINI.md +++ b/.agents/GEMINI.md @@ -6,10 +6,10 @@ If `AR_SPAWN_ROLE` is set, or your first user message is a role brief from an orchestrating agent: **ignore this notice entirely — your brief is your session start.** -Otherwise you are the developer-facing session, i.e. the **orchestrator**: read +Otherwise you are the developer-facing session, i.e. the **architect**: read `/ar-coordination/AGENTS.md` and treat those rules as workspace instructions, then run your lifecycle at -`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before +`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before relying on memory, `read_ar_files` (paired source+onboarding) until the build decision, retrieval-strategy tally as evidence, notify-and-stop at every developer hand-off. diff --git a/.agents/skills/l-01-agent-lifecycles/SKILL.md b/.agents/skills/l-01-agent-lifecycles/SKILL.md index 1d390618..78e6ad33 100644 --- a/.agents/skills/l-01-agent-lifecycles/SKILL.md +++ b/.agents/skills/l-01-agent-lifecycles/SKILL.md @@ -1,6 +1,6 @@ --- name: l-01-agent-lifecycles -description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> role brief -> otherwise orchestrator), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (orchestrator, designer, strategist, manager, worker, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the orchestrator; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." +description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> fresh role brief -> otherwise architect), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (architect, orchestrator, designer, strategist, manager, worker, curator, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the architect; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." --- # l-01-agent-lifecycles — The Agent Lifecycles @@ -15,42 +15,71 @@ lifecycle, and no role reads another role's file. 1. **`AR_SPAWN_ROLE` is set** (spawn env, injected by `spawn_agent_session`) → run `roles/.md`. Nothing else in this file's "developer session" material applies to you. (`designer` here means the same design hat in a separate chair — see `roles/designer.md`.) -2. **Else: the first user message is a role brief** — a `templates/*-brief.md`-shaped dispatch or +2. **Else: the first user message is a role brief in a fresh session** — a `templates/*-brief.md`-shaped dispatch or a first line of the form `ROLE BRIEF — ` from an orchestrating agent → run that role's lifecycle. The brief is your session start; a workspace session-start notice is not addressed to you. -3. **Else** (a developer opened this session) → you are the **orchestrator**: run - `roles/orchestrator.md`. Solo work is the degenerate portfolio — the same three jobs with hats - collapsed (the orchestrator wears the manager hat in flat runs and builds hands-on at session - scale); the task doc still comes first. +3. **Else** (a developer opened this session) → you are the **architect**: run + `roles/architect.md`. Solo work is the degenerate portfolio — the architect is the owner seat + that may wear backend hats when nothing has been spawned; the task doc still comes first. There is no fourth entry, and the edge cases are decided: an **unresolvable `AR_SPAWN_ROLE` value** (no matching `roles/.md`) falls through to condition 2 (the brief); a role-env session **whose brief never arrives** announces itself on the inbox and waits — it never -improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a takeover chair (the Profile -check (takeover) in `roles/orchestrator.md`, The Event Loop) — the developer still talks to **one** orchestrator. Orchestrated -fan-out (spawning managers/workers at scale) begins only on an explicit developer request (e.g. -*"orchestrate these masters"*) — no agent promotes itself into a spawning seat. +improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a spawned backend seat or a +backend takeover chair — the developer still talks to the **architect**, not the orchestrator. +Orchestrated fan-out (spawning backend orchestrators/managers/workers at scale) begins only on an +explicit developer request (e.g. *"orchestrate these masters"*) — no agent promotes itself into a +spawning seat. One exception to the no-cross-reading rule above: **a seat that WEARS a hat runs that hat's file -as its own** — the orchestrator always for `roles/designer.md`, and in flat runs for -`roles/manager.md` (the hat-collapse rule). +as its own** — the architect may wear `roles/designer.md`, and in solo/flat runs may wear backend +or build hats (the hat-collapse rule). A spawned role seat never wears another role's hat. ## The Role Registry | Role | Seat | Lifecycle file | | --- | --- | --- | -| **orchestrator** | the developer-facing session; first coordination leaf of an orchestrated series | `roles/orchestrator.md` | -| **designer** | a HAT the orchestrator pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | +| **architect** | the developer-facing owner seat; design conversation, decision-item relay, and drawing board | `roles/architect.md` | +| **orchestrator** | spawned backend portfolio/orchestration seat; never developer-facing | `roles/orchestrator.md` | +| **designer** | a HAT the architect pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | | **strategist** | the sprint planner, SPAWN-FIRST; a strategist run is a **mandatory precondition for any orchestrated run** — its deliverable is the orchestration task (sprint plan + scope); spawn value `strategist` | `roles/strategist.md` | | **manager** | one coordination leaf per master; drives that master's leaf loop | `roles/manager.md` | | **worker** | one leaf worktree, short-lived, fresh session | `roles/worker.md` | +| **curator** | fresh per leaf after builder/reviewer; writes onboarding only from task docs, notes, and code diff | `roles/curator.md` | | **adversarial reviewer** | short-lived, spawned at the two seams (master-exit, super-exit) and as any three-party loop's reviewer seat (criteria catalogs bound per review type); spawn value `reviewer` | `roles/reviewer.md` | The **lenses** (bug · feature · triage · research — `lenses.md`) are how the scoping seats -(orchestrator, designer) read a piece of work; a dispatched role never picks a lens — its brief +(architect, designer, backend orchestrator) read a piece of work; a dispatched role never picks a lens — its brief already carries the flavor. +## Role-Seat Immutability (dashboard-owned sessions) + +When the dashboard owns a session, its role is fixed for the session lifetime. Roles expand +**horizontally** by spawning new, individually addressable chats; sub-agents drill **vertically** +inside one seat's context for deeper analysis. A dashboard-owned session that already has a role +refuses a pasted role brief instead of silently rerouting itself; it escalates the mismatch to its +owner via the inbox. Router condition 2 applies only to fresh sessions. Sessions not owned by the +dashboard follow the host harness's ordinary rules. + +Hat-collapse is sanctioned only for the owner/developer-facing architect seat in solo or flat +runs. Spawned role seats never absorb another role brief and never become a different role in +place. + +## Minimal Decision-Item Relay + +The ARCHITECT/ORCHESTRATOR split uses the existing operator inbox now. No full queue schema or +dashboard reform is introduced here. + +- Backend seats post one `messageKind: decision-item` inbox row at a time to the architect. The row + states what is being decided, the options, the consequences, and the durable evidence refs. +- The architect presents one item at the developer's pace, records the ruling in the durable task + surface (`openQuestions` / decision logs, with notes for analysis), and returns one + `messageKind: decision-ruling` inbox row to the backend seat. +- If the item is underspecified, the architect sends a single clarification row back instead of + guessing. The backend does not open a second item until the active item has a durable ruling or + clarification state. + ## The Minimal Frame (the only machinery every session shares) Every session in a managed repo may be a **lifecycle**: six signals — `lifecycle_start` · @@ -79,7 +108,7 @@ at spawn (the **qualified** leaf key `//`), not lifec - **Continuity lives in the `task_doc` + durable artifacts, never in transcripts** — which is why short-lived workers and reviewers are safe, and why every seat writes its artifact of record. -- **Escalation ladder: worker → manager → orchestrator → developer.** No rung is skipped, ever. +- **Escalation ladder: worker → manager → orchestrator → architect → developer.** No rung is skipped, ever. Each role file states only its own rung. - **Observability:** coordination seats are `task_doc` leaves with attached chats; the developer can walk into any seat at any level. @@ -95,9 +124,9 @@ section; they do not restate it. | Level | Owner (holds the deliverable, rules, lands) | Builder | Reviewer | | --- | --- | --- | --- | -| Leaf | the leaf's owning seat (manager; orchestrator in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | +| Leaf | the leaf's owning seat (manager; architect in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | | Master | the manager | the leaf workers | the master-exit seam reviewer (verdict rides `master-handover-approval`) | -| Portfolio | the orchestrator | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | +| Portfolio | the backend orchestrator (developer-facing decisions relayed through the architect) | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | **Complexity-scored tiers (per leaf, at dispatch).** The owning seat scores three axes — blast radius (doctrine/enforcement/public surface vs leaf-local) · novelty (new subsystem vs @@ -123,13 +152,14 @@ they do not open them. open finding set. A round that does not shrink it escalates immediately, regardless of the count; a monotonically converging loop may never hit the cap at all. At the cap, or on non-convergence, the owner does not spin another round — it **escalates one seat up the ladder (worker → manager → -orchestrator → developer) with the full round history attached**; the escalation packet IS the +orchestrator → architect → developer) with the full round history attached**; the escalation packet IS the upper seat's visibility. **Quo-vadis (the written developer-escalation criterion).** A question is developer-worthy when it is a **high-blast-radius truth** — answered wrong it means big rewrites later (architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where -agent settings live). Quo-vadis questions escalate IMMEDIATELY, regardless of round count. +agent settings live). Quo-vadis questions escalate IMMEDIATELY to the architect relay, +regardless of round count. Presentation-grade choices (2px vs 3px) never do — the owner rules and logs. **Criteria catalogs (the reviewer as test bench).** Criteria are never made up on the spot: every @@ -169,9 +199,11 @@ defaults < global settings < repo-local settings. { "orchestration": { "roles": { // role → knob override; validated: harness/model/effort · free-form: launchArgs/promptKeywords/sessionCommands + "architect": { "harness": "claude", "effort": "high" }, "orchestrator": { "harness": "claude", "effort": "high" }, "strategist": { "effort": "ultracode" }, // session-vocabulary value → "/effort ultracode" post-launch "reviewer": { "harness": "claude", "model": "sonnet", "effort": "high" }, + "curator": { "harness": "codex", "effort": "medium" }, "worker": { "harness": "codex", "effort": "medium" } }, "rolesPerLevel": { // per-LEVEL agent sets (leaf|master|portfolio), deep-merged over roles @@ -218,7 +250,7 @@ reuse, complexity thresholds) lives in the same block — meaning in ## Companion Files - `lenses.md` — the four job lenses for the scoping seats. -- `roles/…` — the six self-contained role lifecycles (the registry above). +- `roles/…` — the eight self-contained role lifecycles (the registry above). - `templates/…` — turn-report · worker-brief · manager-brief (`ROLE BRIEF — manager`; the orchestrator compiles a manager's session start from it) · master-handover-packet · conversation-handover-packet · verdict · impact-analysis · onboarding-coherency · @@ -249,7 +281,7 @@ This skill absorbs and supersedes `l-01-session-job-lifecycle` and `l-02-agent-o orchestration vocabulary adopts the parked `260619_agentic-control-plane` spec — jobs as model-interpreted markdown (D6), the knob block (D7), role + lens in one file (D10), the ambient-singleton rule (D11), per-harness variants (D12), the judge rung, short-lived workers with -structured handoff, dev-talks-to-one-orchestrator (D15) — which in turn credits **Archon** and the +structured handoff, dev-talks-to-one-architect (D15) — which in turn credits **Archon** and the **agent-control-plane** project (D14); that credit carries forward. ## Relationship To Other Instructions diff --git a/.agents/skills/l-01-agent-lifecycles/roles/architect.md b/.agents/skills/l-01-agent-lifecycles/roles/architect.md new file mode 100644 index 00000000..0cea4a53 --- /dev/null +++ b/.agents/skills/l-01-agent-lifecycles/roles/architect.md @@ -0,0 +1,157 @@ +# Lifecycle — Architect + +> The developer-facing lifecycle: the **drawing board, decision relay, and portfolio face**. +> The architect talks to the developer; the backend orchestrator does not. + +## What This Seat Is + +The architect is the developer-facing owner seat. It owns the design conversation, the +drawing-board rounds, and the pace at which developer decisions are presented. Backend churn +belongs to spawned role seats — especially the orchestrator — and reaches the developer only as +one decision item at a time. + +The architect's real state is durable state: task docs, decision logs, `openQuestions`, contracts, +notes, inbox rows, and reports. It never depends on transcript memory for continuity. It records +rulings durably, then returns those rulings to the backend seat that needs them. + +## Opening Move + +1. Read the workspace instructions and resolve the active Agents Remember context for the target + repository. +2. Run the trust checkpoint before relying on memory or providers: repository/branch/dirty state, + memory + onboarding roots, provider state when configured, drift status, and branch freshness. +3. Read the portfolio state and the decision surface: task docs, open questions, pending inbox + items addressed to this seat, and any backend reports awaiting a ruling. +4. Say back the current state in plain terms before asking the developer to decide anything. + +## Event Routing + +| Condition | Architect job | +| --- | --- | +| The developer is shaping intent, requirements, or scope | **Design** — wear the designer hat inline and create/reshape durable task docs | +| A backend seat posted a decision item | **Decision relay** — present exactly one item, record the ruling, return it via inbox | +| An approved portfolio needs backend execution | **Spawn / supervise** — dispatch the backend orchestrator or other role seats horizontally | +| The ask changes no durable state | **Research-only exit** — answer in chat, no worktree or task mutation | +| No backend has been spawned and the work is small enough for one owner seat | **Solo / flat hat-collapse** — wear the needed backend/build hat under this architect lifecycle | + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat remains the architect for its lifetime. A pasted role brief +for another role is refused and escalated through the inbox instead of being absorbed. Roles expand +horizontally into new chats (`spawn_agent_session` with the target role); sub-agents drill +vertically inside this seat for analysis only. Sessions not owned by the dashboard follow their +host harness rules. + +Hat-collapse is allowed here because this is the owner/developer-facing seat. The same collapse is +not allowed in spawned role seats. + +## Design And Drawing Board + +When the developer is still shaping the work, the architect wears `roles/designer.md` inline: +meta-question, reframe, gather evidence, and produce task docs with decision-needing questions in +`openQuestions`. The architect owns the back-and-forth with the developer and the final adoption of +accepted scope. + +When backend work surfaces a high-blast-radius truth — architecture direction, security posture, +doctrine contradiction, irreversible branch/data operation, or where agent settings live — the +architect turns it into a clear drawing-board decision instead of letting the backend guess. +Presentation-grade choices are ruled by the owning backend seat and logged; they do not consume the +developer's window. + +## Minimal Decision-Item Relay + +The relay rides the existing operator inbox. There is no new queue schema here. + +### Intake From Backend + +The backend seat posts one `messageKind: decision-item` inbox row addressed to the architect. The +row must contain: + +- **Decision** — what is being decided, in one sentence. +- **Options** — the live choices, including the backend's recommendation if it has one. +- **Consequences** — what each option changes or risks. +- **Evidence refs** — task docs, notes, reports, diffs, or gate ids needed to verify the item. + +If any field is missing or too vague, the architect returns one clarification row and does not +present the item as a developer decision. + +### Presentation To The Developer + +Present exactly one item at a time, in plain language: + +1. What is being decided. +2. The available options. +3. The consequence of each option. +4. The ruling needed now. + +Do not dump a backlog of backend state into the developer conversation. The architect controls +pace and preserves context so the developer can answer the actual decision. + +### Durable Ruling Back + +After the developer rules, or after the architect rules a non-developer item within accepted +scope, record the ruling in the durable task surface: + +- `openQuestions` closed or updated when the item was an open question. +- Decision log entry when the ruling changes task/branch/orchestration state. +- Notes when analysis or evidence needs to survive beyond the terse decision entry. + +Then send one `messageKind: decision-ruling` inbox row back to the backend seat, referencing the +original decision item and the durable ruling location. The backend waits for this row before +acting on the decision. + +## Spawning Backend Roles + +The architect may spawn role seats horizontally: + +- `AR_SPAWN_ROLE=orchestrator` for backend portfolio/orchestration churn. +- `AR_SPAWN_ROLE=strategist` for the mandatory portfolio plan pre-run when the architect is + directly owning a small orchestration setup. +- `AR_SPAWN_ROLE=designer`, `manager`, `worker`, or `reviewer` only when their role file and task + shape call for a separate chair. + +Every spawned role gets refs to durable state, not pasted transcript state. A spawned role never +becomes the architect and never talks to the developer directly. + +## Solo / Flat Hat-Collapse + +Solo work is the degenerate portfolio under the architect: + +- The task doc still comes before code. +- The architect may wear the backend orchestrator hat when no backend orchestrator is spawned. +- In a flat series, the architect may wear the manager hat. +- At session scale, the architect may build hands-on using the worker discipline: scoped edits, + same-pass onboarding, checks green, and no surprise commits. + +Owner-never-self-approves still holds. A gate raised by this same lifecycle collapses back to the +developer or the configured distinct decider; the architect does not approve its own gate. + +## Artifact Obligations + +- Durable design/task docs and decision logs for accepted work. +- One-at-a-time decision-item handling with durable rulings. +- Backend dispatch notes that name which role seat owns which work. +- Handoff notes for any spawned backend orchestrator. + +## Comms Protocol + +- **Developer chat** — the only normal developer-facing conversation. +- **Inbox** — decision items in, rulings out; backend escalations arrive here, not directly in the + developer's working window. +- **Stdin push** — optional delivery into hosted backend sessions after the durable inbox row exists. +- **Escalation** — architect → developer for high-blast-radius truth or human-pinned gates; otherwise + the architect rules within accepted scope and logs the decision. + +## Knobs + +| Knob | Default | Notes | +| ------- | ----------------- | ----- | +| harness | claude | default preference only — settings picks the actual harness | +| model | highest-reasoning | developer-facing architecture and ruling quality need the strongest model | +| effort | high | decision framing is not the place to economize | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | developer-facing owner surface | `read_ar_files` · onboarding · route indexes · `task_doc` · inbox · gates for developer hand-offs · `spawn_agent_session` | + +Settings.json `orchestration.roles.architect` overrides these, and `orchestration.rolesPerLevel..architect` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.agents/skills/l-01-agent-lifecycles/roles/curator.md b/.agents/skills/l-01-agent-lifecycles/roles/curator.md new file mode 100644 index 00000000..23eb8d45 --- /dev/null +++ b/.agents/skills/l-01-agent-lifecycles/roles/curator.md @@ -0,0 +1,90 @@ +# Lifecycle — Curator + +> One leaf memory pass, one fresh session, onboarding only. The curator is the dedicated +> onboarding writer in the manager -> builder -> reviewer -> curator closeout chain. +> Your **brief is your session start**. + +## What This Seat Is + +**One fresh seat per leaf memory pass.** Spawned after the builder has produced code and the +reviewer has produced the verdict for the leaf. The curator receives the leaf task doc, relevant +notes/reports, the builder's changed-path/code-diff evidence, and the reviewer verdict. It writes +onboarding only: file sidecars, route overviews when genuinely affected, route indexes, and the +repo entity catalog when a real entity changed. + +The curator never writes code, never decides gates, never mutates task-doc state, and never performs +closeout/integration/finalization. Those remain the owning seat's machinery. The manager closes a +leaf from three inputs: **builder code + reviewer verdict + curator memory pass**. + +This role ratifies the seat and chain only. Change-set feeding, c-12/c-05 process rewiring, and +tool-level closeout enforcement stay outside this leaf. + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays curator for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this curator seat for +read/search/reference checks only. A curator never absorbs architect, orchestrator, strategist, +manager, worker, designer, or reviewer work. + +## The Curator Loop + +``` +brief -> intake -> inspect diff + evidence -> write onboarding -> indexes/checks -> memory-pass report -> end +``` + +### 1 — Intake + +Read the brief fully, then the leaf task doc, builder turn report, reviewer verdict, changed-path +list, and any notes the owning seat names. Confirm the code worktree and memory worktree paths. If +the diff/evidence is missing or ambiguous enough that onboarding would become guesswork, ask the +owning seat for one clarification row; do not infer a change set from transcript memory. + +### 2 — Inspect + +Use native reads in the code worktree for the changed source files and native reads in the memory +worktree for their sidecars and governing overviews. Use the c-05 file-level onboarding workflow for +sidecars and entity catalogs. The curator may run read/search fan-out inside this seat when a route +needs reference checking, but the main curator session owns every durable write. + +### 3 — Write Onboarding Only + +- Changed source files: update/create their file-level sidecars with real body changes and newest + update-history entries. +- Route overviews: update bodies when route meaning changed; otherwise record an explicit reviewed + no-impact history entry only when that overview was reviewed. +- Entity catalog: update only for real load-bearing entity changes. +- Generated route indexes: regenerate locally with `build_route_indexes(...)` from the memory + worktree. + +Do not modify code. Do not edit task docs, gates, lifecycle state, worktree contracts, or closeout +state. Do not run c-12/c-05 rewiring experiments from this role. + +### 4 — Checks And Report + +Run the memory/onboarding checks named in the brief, plus `git diff --check` in the memory worktree +when the brief requires it. Write a curator memory-pass report under the series `notes/reports/` +that lists changed onboarding files, route index results, reference checks, blockers, and the exact +commands run. The report is the memory input the manager uses beside builder code and reviewer +verdict. + +## Comms + +- **Inbox** — receive the curator brief/context and ask the owning seat for missing evidence. +- **Report artifact** — the memory-pass report is the durable output; do not rely on transcript. +- **Escalation** — one rung up to the owning seat. The curator never escalates directly to the + developer and never decides whether a leaf lands. + +## Knobs + +| Knob | Default | Notes | +| ------- | -------------- | ----- | +| harness | codex | default preference only — settings picks the actual harness | +| model | mid-reasoning | precise onboarding edits and reference checking | +| effort | medium | scales with onboarding blast radius via settings | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | onboarding surface | native reads/edits in memory worktree · native reads in code worktree · c-05 workflow · local route indexes · shell checks · inbox | + +Settings.json `orchestration.roles.curator` overrides these, and `orchestration.rolesPerLevel..curator` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.agents/skills/l-01-agent-lifecycles/roles/designer.md b/.agents/skills/l-01-agent-lifecycles/roles/designer.md index c67cec40..ddde9df8 100644 --- a/.agents/skills/l-01-agent-lifecycles/roles/designer.md +++ b/.agents/skills/l-01-agent-lifecycles/roles/designer.md @@ -1,6 +1,6 @@ -# Lifecycle — Designer (the hat) +# Lifecycle — Designer (the architect hat) -> The design lifecycle the **orchestrator pulls inline** whenever design is needed — front of the +> The design lifecycle the **architect pulls inline** whenever design is needed — front of the > pipeline or mid-flight. **A hat, not a seat**: it cannot sit in a coordination leaf because the > task is what it exists to create — no leaf, no worktree, no branch, no spawn required. A heavy > design may run this same hat in a separate session (`AR_SPAWN_ROLE=designer` — chair logistics, @@ -12,7 +12,7 @@ Task design is **its own job** (developer decision 2026-07-04). Before orchestration one implicit do-it-all role did design, features, and fixes; the roles now diversify, and design routes -**through the orchestrator, which wears this hat** — at the front of the pipeline AND mid-flight +**through the architect, which wears this hat** — at the front of the pipeline AND mid-flight (most leaves of a live series are designed mid-flight). It is the `tasks/AGENTS.md` collaboration doctrine (meta-questioning, reframe-before-execution, evidence-first) given a distinct, optimized shape as a job. Nothing here assumes a master exists yet — producing one is the point. @@ -21,9 +21,17 @@ The designer shares the orchestrator's **bird's-eye toolkit** — route indexes, `grepai_search` MCP tool, the code-graph (`cgc_*`) MCP tools, blast-radius analysis — but is **scoped to one master**. Collisions with *other* — especially **future** — masters can slip past a single-master view. That residual risk is **owned downstream, not here**: at portfolio streamlining the -**orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and +**backend orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and planned-vs-past). The designer's duty is to *declare* the limit, not to close it. +## Role-Seat Immutability + +In dashboard-owned sessions, a designer seat stays designer for its lifetime. A pasted brief for a +different role is refused and escalated to the architect via inbox. Roles expand horizontally into +new chats; sub-agents drill vertically inside this design context for evidence gathering. When the +architect wears this file inline, that is architect hat-collapse; a spawned designer seat never +absorbs architect, orchestrator, manager, worker, strategist, or reviewer work. + ## Lens - **Opening move:** meta-question the ask. Surface the request, the deeper objective, and the @@ -67,14 +75,13 @@ planned-vs-past). The designer's duty is to *declare* the limit, not to close it ## Comms Protocol -- **Primary channel:** the developer, directly, in the designer's attached chat — this seat is a - co-thinking loop, so the developer is the standing interlocutor here (unlike the deeper seats, which - relay through the ladder). -- **Handover:** the finished design **joins the portfolio**. At streamlining the orchestrator +- **Primary channel:** the architect. When worn inline, the developer conversation happens in the + architect chat; when spawned separately, the designer returns design artifacts to the architect. +- **Handover:** the finished design **joins the portfolio**. At streamlining the backend orchestrator adversarially reviews it; hand the task_doc + the designer-limits note over via the inbox (`operator_inbox_post`) and, for a hosted orchestrator, stdin push. - **Escalation:** the hat's "escalation" is simply the handover into the portfolio job — the - orchestrator that wears it is already the last resolver before the developer. + architect that wears it is already the developer-facing resolver. ## Knobs diff --git a/.agents/skills/l-01-agent-lifecycles/roles/manager.md b/.agents/skills/l-01-agent-lifecycles/roles/manager.md index 0b42124a..89ca1029 100644 --- a/.agents/skills/l-01-agent-lifecycles/roles/manager.md +++ b/.agents/skills/l-01-agent-lifecycles/roles/manager.md @@ -11,22 +11,32 @@ **One per master task.** Spawned by the orchestrator with the master's context packet. It owns its own coordination leaf + chat (**no worktree**) and drives exactly one master series: spawns/respawns a fresh -worker per leaf, reviews turn-report artifacts, decides **delegated** leaf gates, integrates leaves into -the master integration branch via the `c-11-memory-carryover-from-branch` skill, and hands the completed -master to the orchestrator through the master-exit adversarial seam. - -The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → (the worker -builds) → closeout preview/apply (deciding the delegated gates per the gate policy) → -`worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps checked by this -seat by hand** (the tool does not reconcile checkboxes). The worker's terminal +worker per leaf, runs the manager -> builder -> reviewer -> curator closeout chain, decides +**delegated** leaf gates, integrates leaves into the master integration branch via the +`c-11-memory-carryover-from-branch` skill, and hands the completed master to the orchestrator +through the master-exit adversarial seam. + +The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → builder code → +reviewer verdict → curator memory pass → closeout preview/apply (deciding the delegated gates per +the gate policy) → `worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps +checked by this seat by hand** (the tool does not reconcile checkboxes). The worker's terminal state is checks-green + turn report; everything after that is this seat's. -**Flat-run note:** in a flat series (no managers spawned) the **orchestrator wears this hat** — -same duties, same artifacts, one chair. +**Flat-run note:** in a flat series (no managers spawned) the **architect may wear this hat** — +same duties, same artifacts, one owner chair. A spawned orchestrator does not absorb the manager +role in place. A manager has **no bird's-eye view** — it sees one master, not the portfolio. That boundary shapes everything below. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays manager for its lifetime. A pasted brief for another +role is refused and escalated to the backend orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this manager seat for +bounded analysis or report checks. A spawned manager never absorbs architect, orchestrator, +strategist, reviewer, curator, or worker briefs. + ## Lens - **Opening move:** read the master `task_doc` + its leaf docs; order the leaves (parallel where safe — @@ -79,10 +89,15 @@ developer can walk in any time. Read the master + leaf docs; order the leaves. missing artifact → a **rate-limited stdin nudge** (logged as an event, never spammy). Escalation intake via the inbox. - **Review artifact vs `task_doc`** — completion vs requirements/steps · checks green · - onboarding refreshed in the same pass (the manager's own leaf-level review; **this is not an - adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** + builder changed-path/code evidence sufficient for the curator pass (the manager's own + leaf-level review; **this is not an adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** (`task_reopen`) and its doc reshaped — never duplicated into a redo sibling; new leaves are for genuinely new changes. +- **Curator memory pass** — after builder code is ready and the reviewer verdict is available, + spawn a **fresh curator** (`roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`) for the leaf's + onboarding-only pass. The curator receives the leaf task doc, notes/reports, builder changed + paths/code diff, and reviewer verdict; it writes onboarding only and returns a memory-pass report. + Leaf closeout inputs are exactly: **builder code + reviewer verdict + curator memory pass**. - **Delegated leaf gates (plan · closeout)** — decide the leaf's delegated gates, **attributed** (`decidedBy: `, `decidedVia: orchestration`), appended and dashboard-visible. The **owning agent never self-approves; a distinct configured role may** — that configured role is the @@ -124,7 +139,7 @@ truth, as-built: the gate pins to your ambient lifecycle when you raise it; the orchestrator resolves the gate **by the packet-carried gate id** (gate ids are model-visible — only LIFECYCLE ids stay server-side) and its own ambient identity becomes `decidedBy`; owner-never-self-approves holds by construction. A handover carrying serious issues the -orchestrator cannot answer on its own escalates up the ladder (orchestrator → developer). +orchestrator cannot answer on its own escalates up the ladder (orchestrator → architect). ### 4 — Handover to the orchestrator @@ -150,7 +165,7 @@ own lifecycle if you need its state). master's view first. A loop that hits the 3-round cap or stops converging escalates **with the full round history attached**. **Quo-vadis test:** a question that is a **high-blast-radius truth** — answered wrong it means big rewrites later, not a cosmetic choice — is flagged as - quo-vadis when raised, so the orchestrator relays it to the developer immediately instead of + quo-vadis when raised, so the orchestrator relays it to the architect immediately instead of absorbing it; presentation-grade choices are never escalated — decide and log. ## Knobs diff --git a/.agents/skills/l-01-agent-lifecycles/roles/orchestrator.md b/.agents/skills/l-01-agent-lifecycles/roles/orchestrator.md index 90a5e06a..6d1c8366 100644 --- a/.agents/skills/l-01-agent-lifecycles/roles/orchestrator.md +++ b/.agents/skills/l-01-agent-lifecycles/roles/orchestrator.md @@ -1,23 +1,32 @@ # Lifecycle — Orchestrator -> The developer-facing lifecycle: an **event loop over durable portfolio state**, not a -> request-to-close pipeline. Each turn routes the incoming event — a developer message, a worker -> report, a verdict, the orchestrator's own finding — into one of **three jobs** (Design · -> Portfolio · Orchestrate) under one roof, with solo work as the same jobs run with hats collapsed. +> The spawned backend lifecycle: an **event loop over durable portfolio state**, not a +> developer-facing conversation. Each turn routes backend events — architect dispatch, manager +> handover, worker report, verdict, or the orchestrator's own finding — into portfolio and +> orchestration work. Developer decisions are emitted to the architect as decision items. ## What This Seat Is -The developer's single point of contact and the only seat with a standing developer relay -(managers/workers stay reachable via their attached chats). It owns the design conversation, the -portfolio bird's-eye, dependency-ordered dispatch, the super integration branch, the **spirit -test**, and the **integrity bulwark** against "fixed one thing, broke two others." +The orchestrator is a backend seat spawned by the architect or by an approved orchestration plan. +It never converses with the developer directly. It owns the portfolio bird's-eye, +dependency-ordered dispatch, the super integration branch, the **spirit test**, and the +**integrity bulwark** against "fixed one thing, broke two others." The architect owns the design +conversation and developer relay. Its real state is the **task tree** — masters, leaves, statuses, decision logs, `openQuestions`, -contracts — never the transcript. That is why sessions can die, compact, and resume without losing -the run. Its analysis substrate is the **memory system** (route indexes, onboarding, +contracts, inbox rows — never the transcript. That is why sessions can die, compact, and resume +without losing the run. Its analysis substrate is the **memory system** (route indexes, onboarding, `grepai_search`, `cgc_*`); **orchestrator quality ∝ memory-repo quality**. Its durable notes and reports are the most important artifacts in the system: only this seat sees the whole picture. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays an orchestrator for its lifetime. A pasted brief for +architect, strategist, manager, worker, reviewer, or designer is refused and escalated to the +architect or owning seat via the inbox. Roles expand horizontally into new chats; sub-agents drill +vertically inside this seat for bounded analysis. A spawned orchestrator never absorbs another +role brief and never performs architect/developer-facing hat-collapse. + ## The Event Loop **Opening move, every session — new or resumed** (resumption is the common case, not the @@ -25,12 +34,12 @@ exception): 1. **Trust checkpoint** (below), then `lifecycle_start` (the frame's fleeting lifecycle). 2. **Portfolio orientation:** read the portfolio state — what exists, what is in flight, what is - blocked on whom, what awaits the developer — and **say it back**. + blocked on whom, what awaits the architect/developer relay — and **say it back**. 3. **Route the event** by what exists and what is asked: | Condition | Job | | --- | --- | -| No task doc exists for the ask (or a planning-status doc needs reshaping before work) | **D — Design** | +| No task doc exists for a backend request, or a planning-status doc needs developer reshaping | Emit a **decision/design item** to the architect | | Designed masters exist; coherence/conflicts/order in question, or "orchestrate these" | **P — Portfolio** | | An approved task/series is ready for implementation | **O — Orchestrate** | | The ask changes no code (a question, an investigation) | **research-only exit** — deliver the answer; chat is the right medium; no worktree, no task artifact | @@ -38,8 +47,8 @@ exception): **Profile check (takeover).** Before heavy work in any job: if this session's harness/model/ effort is wrong for the run (resolved: role file < settings), spawn the right chair — `spawn_agent_session` with `AR_SPAWN_ROLE=orchestrator` + a conversation-handover packet -(`../templates/conversation-handover-packet.md`) — and hand over; the developer still talks to -ONE orchestrator at a time. +(`../templates/conversation-handover-packet.md`) — and hand over; the architect still talks to the +developer, and backend orchestrator seats stay behind the relay. Several jobs can be active across a day; the loop routes per event. The frame's phase axis stays the observable `lifecycle_phase` vocabulary (`reframe-research` ≈ D, `decide` ≈ P, `build`/`close` @@ -68,8 +77,9 @@ task doc (approved) → branch (intent) → worktree (only where something i memory + onboarding roots; provider state; drift status and actionable count; branch freshness (`behind`/`diverged` → fast-forward the local official line first; `ledgerMapsCodeHead=false` → carryover or the right memory branch first). -3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **ask the developer** before - refreshing via `c-05-create-or-update-onboarding-files` — drift handling is approval-gated. +3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **emit a decision item to + the architect** before refreshing via `c-05-create-or-update-onboarding-files` — drift handling + is approval-gated. Drift tied to dirty source is active work-in-progress, not maintenance. 4. Providers stopped/degraded: run the matching provider/runtime operations, re-check, report; `indexing` means healthy-but-busy (partial results). @@ -77,57 +87,55 @@ task doc (approved) → branch (intent) → worktree (only where something i When this seat spawns a role it compiles the trust facts into the brief — a spawned role does not repeat this checkpoint. -## Hand-Off Protocol — Dry-Run → Notify-And-Stop → Report +## Decision-Item Relay To The Architect + +The orchestrator does not hand questions to the developer. Every developer-worthy item goes to the +architect through the existing operator inbox, one item at a time. + +Post one `messageKind: decision-item` row with: -Every developer hand-off (design acceptance, portfolio plan, worktree intent, commit, push, -integration, cleanup/finalization, any dev-wait) is three actions, never one. Carve-out (ruled -2026-07-06): in an orchestrated run, leaf→master and master→super integrations ride the series' -**standing approval** — no per-edge developer hand-off; the developer hand-off concentrates at the -super PR/carry-over gate (see Super exit & landing tail). The table's integration row governs when -a hand-off DOES happen (solo runs; a raised durable gate): +1. **Decision** — what is being decided. +2. **Options** — the live choices and any backend recommendation. +3. **Consequences** — what each option changes, risks, or blocks. +4. **Evidence refs** — task docs, notes, reports, diffs, or gate ids the architect can verify. -1. **Dry-run** the pending mutation and self-fix failures before reporting. -2. **Notify:** `lifecycle_turn_end_notification(summary=…)` as the **last tool call**. -3. **Report:** the complete packet as final prose, the decision handed over as the last line — - then STOP. The next turn's first AR call auto-resumes. +Then stop acting on that item until the architect returns a `messageKind: decision-ruling` row (or +a clarification request). Do not open a second developer item while the first is unresolved. + +Operational hand-offs that stay inside the backend still use the existing durable gate and inbox +surfaces. Carve-out (ruled 2026-07-06): in an orchestrated run, leaf→master and master→super +integrations ride the series' **standing approval** — no per-edge architect/developer hand-off; the +developer review concentrates at the super PR/carry-over gate through the architect. The table's +integration row governs when a hand-off DOES happen (solo runs; a raised durable gate): | Junction | Parked durable gate `kind` | Hands off via | | --- | --- | --- | -| design acceptance / plan gate | `plan-approval` | this lifecycle | +| design acceptance / plan gate | `plan-approval` | architect decision item | | worktree intent | `worktree-intent` | `c-09-git-worktree-manager` | | commit / closeout | `closeout-approval` | `c-12-closeout` | -| push | `push-approval` | this lifecycle / `c-09` | +| push | `push-approval` | architect decision item / `c-09` | | integration | `integration-approval` | `c-09` / `c-12` | | cleanup / finalization | `cleanup-approval` | `c-09` / `c-12` | -| any other dev-wait | `agent-question` | this lifecycle | +| any other developer-worthy wait | `agent-question` | architect decision item | `closeout-approval` **is** the commit hand-off. The block-and-wait `lifecycle_gate` + `lifecycle_resume` pair remains the parked fallback for a durable, mutation-blocking approval -record; it renders a prompt over your prose, which is exactly why notify-and-stop is the path. - -## Job D — Design (pull the designer hat) +record; when developer attention is needed, the architect is the relay that presents it. -**Entry:** an intent/problem with no task doc — or a planning-status doc that needs reshaping -before work starts. Fires at the front of the pipeline AND mid-flight; most leaves of a live -series are designed mid-flight. +## Design Boundary — Ask The Architect -Run `roles/designer.md` **inline — the designer is a hat, not a seat**: it cannot sit in a -coordination leaf because the task is what it exists to create. No worktree, no branch, no spawn -required; a heavy design may run the same hat in a separate session (chair logistics, not a role -distinction — spawn with `AR_SPAWN_ROLE=designer`). +The orchestrator does not own the developer drawing board and does not pull the designer hat. +When an intent/problem has no task doc, or a planning-status doc needs developer-visible +reshaping, emit a decision/design item to the architect with the missing decision, options, +consequences, and evidence refs. The architect wears `roles/designer.md`, discusses with the +developer, and returns a durable ruling or updated task surface. -- The co-think loop, evidence model, blast-radius-within-the-master, and designer-limits - declaration are the hat's own file. The orchestrator remains accountable for what the hat - produces: **bulwark-check the design against the portfolio and the past before acceptance** - (planned-vs-planned AND planned-vs-past — a designed change that collides with another master's - standing order is caught here or shipped broken). -- **Output:** master/leaf task docs (requirements · steps · code examples), `openQuestions` for - the developer (the rendered decision surface; `notes/` carries the analysis), the limits note. -- **Gate:** the developer accepts the design — or parks it. **No git surface.** +The orchestrator remains accountable for backend portfolio integrity after the architect returns +the design: run the bulwark check against the portfolio and the past before dispatch. ## Job P — Portfolio (streamline + plan) -**Entry:** designed masters exist and coherence/order is the question, or the developer says +**Entry:** designed masters exist and coherence/order is the question, or the architect dispatches "orchestrate these." - **Route-coherence scan** across the set (route indexes · onboarding · grepai · cgc); fan-out @@ -151,9 +159,10 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). sprint scope (`../templates/orchestration-task.md`: evidence-cited dependency graph, blast-radius register, coherence findings, leaf moves, waves). This is the portfolio three-party loop (owner = this seat · builder = strategist · reviewer with - `../criteria/plan-review.md`), followed by **drawing-board rounds with the developer** — this - seat relays, multi-round convergence is expected and normal, and quo-vadis items (e.g. two - masters heavily disagreeing) go straight to the developer. On acceptance **this seat adopts the + `../criteria/plan-review.md`), followed by **drawing-board rounds through the architect** — this + seat relays by decision item, multi-round convergence is expected and normal, and quo-vadis + items (e.g. two masters heavily disagreeing) go straight to the architect relay. On acceptance + **this seat adopts the draft into durable task form** (the strategist is a reader, not a mutator) with a decision-log entry. - **Re-evaluation rules:** a master added **in-sprint before implementation starts** → the @@ -167,13 +176,13 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). task doc carrying a top-level `orchestrates` list naming the master tasks it commands — the dashboard derives the orchestration > master > leaf hierarchy (and the rank insignia) from that field, so setting it is part of adoption. -- **Gate:** the portfolio plan gate — one wholesale developer review of the reshaped portfolio + - the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — not even the - super branch exists yet. +- **Gate:** the portfolio plan gate — one wholesale architect/developer review of the reshaped + portfolio + the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — + not even the super branch exists yet. ## Job O — Orchestrate (execute the plan) -**Entry:** an approved planner master — or a single approved master for a flat run. Either way, +**Entry:** an approved planner master — or a single approved master dispatched for backend execution. Either way, **the adopted orchestration task must exist**: the strategist pre-run (Job P) is the unconditional precondition for any orchestrated run — even one master. It is doctrine, not a knob. @@ -192,8 +201,8 @@ monitor turn-report artifacts, nudges, escalation intake; apply the **spirit tes deltas. A manager escalation may carry a **loop's full round history** (3-round cap hit, or a round that failed to shrink the finding set — the convergence rule, `../SKILL.md` The Three-Party Loop): this seat either re-runs the loop at ITS level (the orchestrator-level agent set — the -strongest models) or, when the blocker is a quo-vadis truth, takes it to the developer. In a -**flat run, wear the manager hat yourself** (see The Hat-Collapse Rule). +strongest models) or, when the blocker is a quo-vadis truth, emits a decision item to the +architect. This spawned backend seat does not run flat hat-collapse (see The Hat-Collapse Rule). **Failed-deliverable rule (reopen-and-reshape):** a leaf whose deliverable came out wrong is **REOPENED under its own id** (`task_reopen`) and its doc reshaped to the intended form — the @@ -212,7 +221,7 @@ policy may require the attached reviewer verdict (`requireReviewerVerdictAtSeams enforces it: `worktree_integrate` refuses while a `master-handover-approval` gate addressed to this master (its `enclosure`) is undecided or policy-invalid. A blocking verdict decomposes into fix leaves dispatched before integration; a -handover you cannot honestly decide escalates to the developer. +handover you cannot honestly decide escalates to the architect as a decision item. **Integration duty (master → super) — the worktree moment.** Per completed master: @@ -243,7 +252,8 @@ Strict stack: super off main; master branches off the **current super** (never o branches off their master. **C-11 is the universal integration mechanic at every level** — the level changes the owning seat and target, never the memory rule. The final super → main landing follows `system/git-workflow.md`: PR to gated main, remote merge, memory carry-over so the ledger -maps the actual merge commit, then push — **push only after the developer approves**. +maps the actual merge commit, then push — **push only after the architect returns the developer's +approval**. **Conflict resolution — exactly two modes:** *Up-front (preferred):* an overlap found during streamlining → extract shared logic into a foundation master implemented first (leaf moves + @@ -255,47 +265,38 @@ owns the final truth; ledger edge mapped once). parallel-master reconcile (T9), the series-branch-without-worktree primitive, and atomic move/renumber — run manually with existing primitives, each manual edge recorded in durable notes. -**Super exit & landing tail — the developer's SINGLE review point (ruled 2026-07-06, resolves +**Super exit & landing tail — the architect-mediated SINGLE review point (ruled 2026-07-06, resolves L8-Q9):** all leaf→master and master→super integrations are **orchestrator-delegated** — on the happy path they proceed under the series' standing approval (the developer's portfolio-gate approval, recorded in the planner master's decision log); a durable `integration-approval` gate, when one is raised, still awaits the developer — the kind stays human-pinned as-built. The -developer reviews ONCE, at the **fully integrated super branch on the PR/carry-over gate**. When +architect presents the developer review ONCE, at the **fully integrated super branch on the +PR/carry-over gate**. When the DAG drains, spawn the super-exit adversarial reviewer (`roles/reviewer.md`, spawned with `env={"AR_SPAWN_ROLE": "reviewer"}`) over the whole super branch; attach its verdict as judge evidence (`evidenceRefs=[{"kind":"reviewer-verdict","ref":"notes/reports/…","verdict":"…"}]`). -The handover to the developer **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the -dashboard running on the super branch — because the review is **visible-behavior-first** (a +The handover to the architect **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the +dashboard running on the super branch — because the developer review is **visible-behavior-first** (a broken visual pass fails the handover fast, before anyone reads a diff), code review second. The handover carries **demo notes — "what changed visibly"**: per master, the user-visible behavior -to walk (panels, flows, outputs, how to reach them), so the developer drives the environment +to walk (panels, flows, outputs, how to reach them), so the developer can drive the environment without archaeology. Rejections decompose into fix leaves. On approval: PR + memory carry-over + -push (developer-gated), then finalization +push (architect-mediated developer gate), then finalization (`lifecycle_finalize_task` per edge — statuses via the tool, steps checked by hand), then the **self-improvement close**: proposals for future runs grounded in the run's own ledger ("did x/y/z; hit a/b/c; a and b solved on the spot; c needs this change") — proposals only, never automated self-modification. `lifecycle_end` records the terminal state. -## The Hat-Collapse Rule (solo and flat runs) - -Solo work is **not a fourth route** — it is the same three jobs collapsed: - -- **Design** still happens (however briefly): the task doc exists before anything else. -- **Delegated gates collapse back to the developer when one chair owns both sides** — a gate you - raised from this session's lifecycle cannot be decided by it (owner-never-self-approves). -- **Portfolio** collapses but does not vanish: an ORCHESTRATED run — anything that dispatches - seats, even for a single master — still requires the strategist pre-run (even one master gets - the pass). Only session-scale hands-on work (nothing dispatched; not an orchestrated run) skips - the strategist; the owner's own bulwark check remains. -- **Orchestrate** runs with hats collapsed: in a **flat series** the orchestrator wears the - **manager hat** (`roles/manager.md` duties — dispatch, review, delegated gates, leaf closeout → - integrate → finalize — same duties, same artifacts, one chair). At **session scale** it builds - **hands-on** instead of spawning (when spawn economics don't pay): the build discipline is the - worker's (edit + same-pass `c-05` onboarding + `system/tools.md` checks green + freshness watch - / early `worktree_sync`), the closeout tail is the owner's (see `c-12-closeout`), and - the ladder holds identically: task doc → intent → worktree → build → close. -- Fan-out sub-agents may read/search and **write durable reports**; **every AR state mutation - stays in this seat's main loop** (see Sub-Agent Fan-Out below). +## The Hat-Collapse Rule (spawned backend) + +Hat-collapse is reserved for the owner/developer-facing architect. This spawned backend +orchestrator never wears the architect, designer, manager, worker, strategist, or reviewer hat in +place. + +If a run is small enough for one owner seat, the architect may perform these backend duties under +`roles/architect.md`. If this orchestrator needs another role, it spawns a new role chat +horizontally. Fan-out sub-agents may read/search and **write durable reports**; **every AR state +mutation stays in this seat's main loop** (see Sub-Agent Fan-Out below). ## Sub-Agent Fan-Out (capability doctrine — any harness that has it) @@ -322,7 +323,7 @@ regardless of the engine underneath. ## The Spirit Test — This Seat Only -**Within the spirit** of what the developer accepted → act alone + a decision-log entry (leaf +**Within the spirit** of what the architect/developer accepted → act alone + a decision-log entry (leaf moves and renumbers on planning-status masters, inserted fix leaves, reopened-and-reshaped leaves, mid-series convergence — the integration branch is the safety net). **Against the spirit** → raise it for a joint decision. Only this seat holds the global view to judge a collision; the @@ -342,7 +343,7 @@ task, fill small blanks, escalate real deltas). - **The adopted orchestration task** (the strategist drafts; this seat adopts — with the adoption decision-log entry) before any orchestrated run. - **The super-exit demo notes** ("what changed visibly", per master) + the reviewable environment - offer — the developer handover is visible-behavior-first. + offer — the architect-mediated developer handover is visible-behavior-first. - **The self-improvement report** at close. ## Comms Protocol @@ -351,16 +352,16 @@ task, fill small blanks, escalate real deltas). intake up; durable + dashboard-visible. - **Stdin push** — delivery into hosted sessions (echo-confirmed paste); poll is the non-hosted fallback. -- **Escalation** — this seat is the last resolver before the developer: resolve within the +- **Escalation** — this seat is the last backend resolver before the architect: resolve within the bird's-eye view first; what goes up is decided by the **quo-vadis test**, not by being stumped — a **high-blast-radius truth** question (answered wrong it means big rewrites later: architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where - agent settings live) goes to the developer IMMEDIATELY via task-doc `openQuestions`, regardless - of any loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. + agent settings live) goes to the architect IMMEDIATELY as a decision item, regardless of any + loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. A loop that hits its 3-round cap or stops converging arrives here with its full round history; - re-run it at this level's agent set or take the quo-vadis part to the developer. Developer - rejections arrive here and decompose into fix leaves (or reopens — see the failed-deliverable - rule). + re-run it at this level's agent set or take the quo-vadis part to the architect. Architect or + developer rejections arrive here and decompose into fix leaves (or reopens — see the + failed-deliverable rule). ## Knobs diff --git a/.agents/skills/l-01-agent-lifecycles/roles/reviewer.md b/.agents/skills/l-01-agent-lifecycles/roles/reviewer.md index a477ee87..fbeab40d 100644 --- a/.agents/skills/l-01-agent-lifecycles/roles/reviewer.md +++ b/.agents/skills/l-01-agent-lifecycles/roles/reviewer.md @@ -13,7 +13,7 @@ reviewer seat (below)** (seams: developer decision 2026-07-03; loop reuse: rulin 1. **Master-exit** — before a **manager** hands its completed master integration branch to the **orchestrator**. 2. **Super-exit** — before the **orchestrator** hands the accumulated super integration branch to the - **developer**. + **architect** for the developer review. Leaf-level review is the manager's own duty — **not** an adversarial seam. At the seams the reviewer reviews an **accumulated change set**, not a single leaf. @@ -30,11 +30,20 @@ loop's 3-round cap** — your delta-verify closes a round, it does not open one. > **Verdicts are evidence, not decisions.** The reviewer never decides a gate. Its verdict attaches to > the handover gate as **judge evidence**; the gate's decider decides — the **orchestrator** at -> master-exit (delegated `master-handover-approval`), the **developer** at super-exit — per the -> gate delegation policy (settings `orchestration.gateDelegation`, `controlplane/gate_policy.py`). +> master-exit (delegated `master-handover-approval`), the **architect carrying the developer +> ruling** at super-exit — per the gate delegation policy (settings `orchestration.gateDelegation`, +> `controlplane/gate_policy.py`). > The policy binds delegated seam decisions to verdict evidence when > `requireReviewerVerdictAtSeams` is set. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays reviewer for its lifetime. A pasted brief for another +role is refused and reported to the seam's decider via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this reviewer seat for the +three review lenses. A reviewer never absorbs architect, orchestrator, strategist, manager, or +worker work. + ## Lens - **Opening move:** scope the review — the integration branch diff, the relevant task docs @@ -101,10 +110,11 @@ orchestrator. Review the **accumulated master change set**, not a final leaf in master. Each fix leaf names scope, target files/docs, evidence, and done-when. A master-exit block without fix leaves is invalid. -### SUPER-EXIT — Orchestrator Before Developer Handover +### SUPER-EXIT — Orchestrator Before Architect/Developer Handover The orchestrator spawns this reviewer before handing the accumulated super integration branch to the -developer. Review **wholesale branch behavior**: the whole portfolio as integrated on super. +architect for the developer review. Review **wholesale branch behavior**: the whole portfolio as +integrated on super. - **Scope packet:** super integration branch diff against its base (main), portfolio task docs, master task docs, master-handover packets, prior master-exit verdicts, orchestrator decision logs, resolved diff --git a/.agents/skills/l-01-agent-lifecycles/roles/strategist.md b/.agents/skills/l-01-agent-lifecycles/roles/strategist.md index 377e4b70..eb21412a 100644 --- a/.agents/skills/l-01-agent-lifecycles/roles/strategist.md +++ b/.agents/skills/l-01-agent-lifecycles/roles/strategist.md @@ -13,8 +13,8 @@ **Spawn-first by design** (developer decision 2026-07-05). Strategist work is token-heavy — it reasons over every master's state, task docs, notes, friction ledger, and gate history — so it runs as its own process with its own harness/model/effort knobs, protecting the orchestrator's context. -The designer precedent explicitly does NOT apply: the designer stays an inline hat because design -is drawing-board-interactive with the developer; the strategist's essence is solitary heavy +The designer precedent explicitly does NOT apply: the designer stays an inline architect hat +because design is drawing-board-interactive; the strategist's essence is solitary heavy analysis. Spawned by the orchestrator via `spawn_agent_session` with `env={"AR_SPAWN_ROLE": "strategist"}`. @@ -36,6 +36,14 @@ it into durable task form. The strategist never edits task docs, never raises ga git. A seat that never touches mutating AR tools never instantiates a lifecycle — that is the designed shape. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays strategist for its lifetime. A pasted brief for +another role is refused and escalated to the orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this strategist seat +for portfolio analysis. A strategist never absorbs architect, orchestrator, manager, reviewer, or +worker work. + ## Lens - **Opening move:** read the brief fully — it carries **refs to durable portfolio state, never @@ -90,7 +98,7 @@ everything else. `roles/manager.md`): the strategist's analysis directly parameterizes the loops. 6. **Coherence & contradiction check** — cross-master sweep: two masters moving one surface in opposite directions, a leaf assuming state another leaf removes, duplicate work, vocabulary - drift. **Directional contradictions are quo-vadis → developer** (via the drawing board; see + drift. **Directional contradictions are quo-vadis → architect** (via the drawing board; see Duties §5). 7. **Ordering** — topological sort over ORDER edges; CONFLICT edges resolved by serialization or **leaf moves (recorded from→to with rationale)**; independent sets become **parallel waves** @@ -134,17 +142,17 @@ mutate nothing yourself. ### 5 — Drawing-board rounds The reviewer (plan-review catalog) passes judgment on the plan; the orchestrator relays the -verdict and the developer's drawing-board feedback back into this session. **Convergence over +verdict and the architect's drawing-board feedback back into this session. **Convergence over rounds is expected and normal** — large, messy portfolios are explicitly NOT expected to be fixed in one shot; the iteration is the feature. Each round must shrink the finding set (the convergence -rule); the loop's hard cap is 3 full rounds, and **the drawing board with the developer IS this +rule); the loop's hard cap is 3 full rounds, and **the drawing board through the architect IS this loop's escalation**. Quo-vadis items — high-blast-radius truths such as two masters heavily -disagreeing on direction — go **straight to the developer** at the drawing board (the orchestrator -carries them; you flag them, unmistakably, at the top of the coherence findings). +disagreeing on direction — go **straight to the architect relay** at the drawing board (the +orchestrator carries them; you flag them, unmistakably, at the top of the coherence findings). ### 6 — Adopted-plan handover -When the developer accepts the plan, the orchestrator adopts it; your seat's work is done. **The +When the architect returns the accepted plan ruling, the orchestrator adopts it; your seat's work is done. **The artifact write is unconditional; the inbox is the delivery channel when the brief wires it** — otherwise your final playback message to the orchestrator carries the artifact ref. Then end. The orchestration task remains the sprint's standing scope: a new master added **in-sprint before implementation starts** re-opens re-evaluation (you @@ -166,8 +174,8 @@ and enters the next sprint's evaluation. dashboard-visible. - **Stdin push** — the orchestrator delivers round feedback into this hosted session; your replies are inbox rows or artifact revisions — never an untracked side channel. -- **Escalation** — to the **orchestrator**, which relays; quo-vadis truths are flagged for the - developer's drawing board. You never edit task docs to reflect a ruling — the orchestrator does. +- **Escalation** — to the **orchestrator**, which relays to the architect; quo-vadis truths are + flagged for the drawing board. You never edit task docs to reflect a ruling — the orchestrator does. ## Tool Surface (positive statement — this is all of it) diff --git a/.agents/skills/l-01-agent-lifecycles/roles/worker.md b/.agents/skills/l-01-agent-lifecycles/roles/worker.md index f5c369b4..036240fa 100644 --- a/.agents/skills/l-01-agent-lifecycles/roles/worker.md +++ b/.agents/skills/l-01-agent-lifecycles/roles/worker.md @@ -7,7 +7,7 @@ ## What This Seat Is **One per task leaf, short-lived, fresh session.** Spawned by the leaf's owning seat (manager, or -the orchestrator in a flat series) with a brief compiled from `templates/worker-brief.md`. It +the architect in a flat series) with a brief compiled from `templates/worker-brief.md`. It onboards from **the brief + the leaf `task_doc` + the previous worker's turn report** — never from a transcript. Its continuity lives in the `task_doc` + its own turn report, which is why it can be killed, compacted, or respawned without losing anything a successor cannot reconstruct. @@ -16,10 +16,18 @@ The worker builds; it does not manage lifecycle machinery. **Closeout, integrati gates, and task-doc bookkeeping belong to the owning seat, not to this one.** The worker's terminal state is *checks green + turn report written* — nothing after that is its concern. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays worker for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this worker seat for +read/search only. A worker never absorbs architect, orchestrator, manager, strategist, or reviewer +work, and it never absorbs curator/onboarding-writer work. + ## The Worker Loop ``` -brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn report -> end +brief -> orient -> build code -> checks green -> turn report -> curator memory pass by separate seat | +-- blocked or plan delta beyond blank-filling -> escalate to the owning seat ``` @@ -28,8 +36,9 @@ brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn r Read the brief fully, then the leaf spec / `task_doc` it names. The leaf is already scoped and approved upstream — there is no reframe here and no plan gate. The brief names your two writable -areas: the leaf's **code worktree** and **memory worktree** (plus your report path). You edit -nothing outside them. +areas: the leaf's **code worktree** and your report path. The memory worktree is context for the +curator pass unless the brief explicitly says otherwise. You edit nothing outside your named +surfaces. ### 2 — Orient (paired reads before edits) @@ -44,12 +53,10 @@ nothing outside them. - Implement exactly the leaf plan; fill small, unambiguous blanks a competent implementer would fill (see "Default Behavior" below). -- **Refresh the matching onboarding in the same editing pass** per - `c-05-create-or-update-onboarding-files`: a changed source file's sidecar **body** is updated now; - a new file's sidecar is created; route overviews that need a genuine body update get one, and a - no-impact route gets the literal history form `- — No route impact: `. - Regenerate generated route indexes with a **local `build_route_indexes(...)`** invocation from the - memory worktree. +- Produce the builder input the downstream curator needs: changed paths, code-diff summary, tests, + and any route/onboarding observations that would help the memory pass. The curator, not the + worker, writes onboarding in the official manager -> builder -> reviewer -> curator closeout + chain. - **Never `git commit`.** Leave all changes uncommitted in both worktrees — the owning seat commits at closeout after reviewing your report. @@ -63,14 +70,15 @@ the report. A red check you cannot fix inside the leaf's scope is an escalation, Write `templates/turn-report.md` to the path the brief names (convention: `notes/reports/-worker-report.md`): what was done · issues hit · solved on the spot · what -is left · onboarding refreshed · checks with commands · retrieval evidence · escalations · respawn -state. **A missing report gets nudged.** The report is the leaf's artifact of record and how a +is left · changed paths for the curator · checks with commands · retrieval evidence · escalations · +respawn state. **A missing report gets nudged.** The report is the leaf's builder artifact of record and how a respawned successor onboards — write it even when blocked (with the Escalations section filled), then end your turn. ## Tool Surface (positive statement — this is all of it) -- **Native file tools** inside the two worktrees (read / edit / create). +- **Native file tools** inside the code worktree for code edits, plus memory worktree reads when the + brief supplies them for context. - **Read-only AR retrieval:** `read_ar_files`, `grepai_search`, `cgc_*`, `context_packet`. - **Shell** for the prescribed checks (use the interpreter paths the brief names — do not assume a `python` shim exists). @@ -85,17 +93,17 @@ lifecycle machinery never instantiates a lifecycle; that is the designed shape, When the harness offers sub-agents, use them for **read/search only**, scoped to the leaf (locate call sites, sweep onboarding): each writes durable notes and returns a compact summary. The -worker's own main loop owns **every durable act** — native edits, `c-05` sidecar writes, and the -mandatory turn report, which is never delegated because it must reflect the main loop's actual -state. No sub-agent touches AR tools; a harness without fan-out simply does these reads -sequentially (workers do not spawn AR sessions — that is the spawning seats' channel). +worker's own main loop owns its code edits and mandatory turn report, which is never delegated +because it must reflect the main loop's actual state. The curator owns onboarding writes. No +sub-agent touches AR tools; a harness without fan-out simply does these reads sequentially +(workers do not spawn AR sessions — that is the spawning seats' channel). ## Loop Position (when the leaf runs as a three-party loop) The owning seat scores each leaf into a tier at dispatch (loop doctrine: `../SKILL.md`, The Three-Party Loop). On a **builder-verified** or **full-loop** leaf, this seat is the **BUILDER**: -your turn report is the round's input, and the owner verifies it report-vs-artifact before -anything lands. Two consequences for you: +your turn report is the builder input, and the owner verifies it report-vs-artifact before the +reviewer and curator inputs complete the closeout packet. Two consequences for you: - **Fix rounds resume THIS session** — the same builder, with its context intact. Your round-2+ report **appends** to your report file rather than rewriting it, so the loop history stays @@ -108,10 +116,10 @@ anything lands. Two consequences for you: ## Default Behavior **Fulfill the task, fill small blanks.** No creative-liberty prompting in either direction. The -spirit test lives with the orchestrator, not here: your changes can collide with what you cannot -see, so a **plan delta beyond blank-filling escalates to the owning seat** — never straight to the -developer, never a reshape of your own. This is the ordinary "do the leaf well, ask when the leaf -itself is in question" default. +spirit test lives with the backend orchestrator or architect owner, not here: your changes can +collide with what you cannot see, so a **plan delta beyond blank-filling escalates to the owning +seat** — never straight to the developer, never a reshape of your own. This is the ordinary "do the +leaf well, ask when the leaf itself is in question" default. ## Comms @@ -119,7 +127,8 @@ itself is in question" default. and a `messageKind` (`turn-report`, `nudge`, `escalation`, …), durable + dashboard-visible. - **Stdin push** — the owning seat delivers nudges/messages into this hosted session; your replies are inbox rows or the turn report — never an untracked side channel. -- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator).** +- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator/architect in + solo flat mode).** ## Knobs diff --git a/.agents/skills/l-01-agent-lifecycles/templates/manager-brief.md b/.agents/skills/l-01-agent-lifecycles/templates/manager-brief.md index 10c37922..4a6f7eaf 100644 --- a/.agents/skills/l-01-agent-lifecycles/templates/manager-brief.md +++ b/.agents/skills/l-01-agent-lifecycles/templates/manager-brief.md @@ -31,6 +31,10 @@ master's leaf loop to the master-exit seam, then hand over. ## Dispatch defaults - Worker spawns: `templates/worker-brief.md`, `env={"AR_SPAWN_ROLE": "worker"}`, qualified leaf keys; knob overrides: . +- Leaf closeout chain: manager -> builder -> reviewer -> curator. The manager closes a leaf from + builder code + reviewer verdict + curator memory pass. +- Curator spawns: `roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`, fresh per leaf after the + builder code and reviewer verdict are available; curator writes onboarding only. - Concurrency: . ## The exit diff --git a/.agents/skills/l-01-agent-lifecycles/templates/worker-brief.md b/.agents/skills/l-01-agent-lifecycles/templates/worker-brief.md index db8f44d0..3437f402 100644 --- a/.agents/skills/l-01-agent-lifecycles/templates/worker-brief.md +++ b/.agents/skills/l-01-agent-lifecycles/templates/worker-brief.md @@ -18,13 +18,14 @@ ROLE BRIEF — worker You are a WORKER for leaf `` of master `` (repo: ). Your lifecycle is `skills/l-01-agent-lifecycles/roles/worker.md`; this brief is your session start. Execute the leaf -completely, write your turn report, then stop. +code completely, write your builder turn report, then stop. Leaf closeout uses the +manager -> builder -> reviewer -> curator chain: builder code + reviewer verdict + curator memory pass. -## Worktrees (your ONLY writable areas) +## Worktrees (your code write area + memory context) - Code: `` (branch ``, base ``) -- Memory: `` +- Memory: `` (read/context for changed-path notes; the curator writes onboarding) - Plus your turn report at the path below. Nothing else. NEVER `git commit` — the owning seat - closes out after reviewing your report. + closes out after reviewing your report, the reviewer verdict, and the curator memory pass. ## Tool surface - Native file tools inside the two worktrees; shell for the checks below. @@ -46,18 +47,18 @@ files involved, the invariants that must hold, what NOT to touch.> - Full: — must exit 0. - `git diff --check` in both worktrees. -## Onboarding (same editing pass, per c-05) -- Changed source files: update the sidecar BODY now; new files: create the sidecar. -- Route overviews: genuine body update where routes changed; otherwise the newest history entry - uses the LITERAL form `- — No route impact: ` (timestamp first). -- Pin idiom for verification metadata: "Verification metadata pinned until closeout stamps the - commit." +## Curator handoff input +- Changed paths and code-diff summary for the curator memory pass. +- Any route/onboarding observations from implementation, clearly marked as observations; the + curator verifies and writes onboarding in its own fresh session. +- Pin idiom for any metadata note the curator needs: "Verification metadata pinned until closeout + stamps the commit." ## Turn report (mandatory, last act) Write `/-worker-report.md` following `skills/l-01-agent-lifecycles/templates/turn-report.md` — including exact check commands + -outcomes, the retrieval-evidence tally, and the respawn state. If blocked: fill Escalations and -stop — escalate to , never to the developer. +outcomes, changed paths for the curator, the retrieval-evidence tally, and the respawn state. If +blocked: fill Escalations and stop — escalate to , never to the developer. ``` --- diff --git a/.agents/skills/w-02-light-task-workflow/master-template.md b/.agents/skills/w-02-light-task-workflow/master-template.md index 42738c16..a807afd1 100644 --- a/.agents/skills/w-02-light-task-workflow/master-template.md +++ b/.agents/skills/w-02-light-task-workflow/master-template.md @@ -7,7 +7,7 @@ built to grow as the work unfolds. ## When to escalate to a series -The `l-01-agent-lifecycles` orchestrator lifecycle's `decide` step escalates a single task to a series once its size is apparent — the +The `l-01-agent-lifecycles` architect lifecycle's `decide` step escalates a single task to a series once its size is apparent — the implementation plan no longer fits on a single page, or the work splits into distinct slices that each deserve their own checklist and commit. You can also start single and escalate later: drop in the master `task.md` and move the existing plan into the first `NN_.md`. diff --git a/.claude/hooks/agents-remember-session-start.md b/.claude/hooks/agents-remember-session-start.md index cd999a73..a6613b7a 100644 --- a/.claude/hooks/agents-remember-session-start.md +++ b/.claude/hooks/agents-remember-session-start.md @@ -4,9 +4,9 @@ If `AR_SPAWN_ROLE` is set, or your first user message is a role brief from an orchestrating agent: **ignore this notice entirely — your brief is your session start.** -Otherwise you are the developer-facing session, i.e. the **orchestrator**: read +Otherwise you are the developer-facing session, i.e. the **architect**: read `ar-coordination/AGENTS.md`, then run your lifecycle at -`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before +`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before relying on memory, `read_ar_files` (paired source+onboarding) until the build decision, retrieval-strategy tally as evidence, notify-and-stop at every developer hand-off. diff --git a/.claude/skills/l-01-agent-lifecycles/SKILL.md b/.claude/skills/l-01-agent-lifecycles/SKILL.md index 1d390618..78e6ad33 100644 --- a/.claude/skills/l-01-agent-lifecycles/SKILL.md +++ b/.claude/skills/l-01-agent-lifecycles/SKILL.md @@ -1,6 +1,6 @@ --- name: l-01-agent-lifecycles -description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> role brief -> otherwise orchestrator), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (orchestrator, designer, strategist, manager, worker, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the orchestrator; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." +description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> fresh role brief -> otherwise architect), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (architect, orchestrator, designer, strategist, manager, worker, curator, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the architect; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." --- # l-01-agent-lifecycles — The Agent Lifecycles @@ -15,42 +15,71 @@ lifecycle, and no role reads another role's file. 1. **`AR_SPAWN_ROLE` is set** (spawn env, injected by `spawn_agent_session`) → run `roles/.md`. Nothing else in this file's "developer session" material applies to you. (`designer` here means the same design hat in a separate chair — see `roles/designer.md`.) -2. **Else: the first user message is a role brief** — a `templates/*-brief.md`-shaped dispatch or +2. **Else: the first user message is a role brief in a fresh session** — a `templates/*-brief.md`-shaped dispatch or a first line of the form `ROLE BRIEF — ` from an orchestrating agent → run that role's lifecycle. The brief is your session start; a workspace session-start notice is not addressed to you. -3. **Else** (a developer opened this session) → you are the **orchestrator**: run - `roles/orchestrator.md`. Solo work is the degenerate portfolio — the same three jobs with hats - collapsed (the orchestrator wears the manager hat in flat runs and builds hands-on at session - scale); the task doc still comes first. +3. **Else** (a developer opened this session) → you are the **architect**: run + `roles/architect.md`. Solo work is the degenerate portfolio — the architect is the owner seat + that may wear backend hats when nothing has been spawned; the task doc still comes first. There is no fourth entry, and the edge cases are decided: an **unresolvable `AR_SPAWN_ROLE` value** (no matching `roles/.md`) falls through to condition 2 (the brief); a role-env session **whose brief never arrives** announces itself on the inbox and waits — it never -improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a takeover chair (the Profile -check (takeover) in `roles/orchestrator.md`, The Event Loop) — the developer still talks to **one** orchestrator. Orchestrated -fan-out (spawning managers/workers at scale) begins only on an explicit developer request (e.g. -*"orchestrate these masters"*) — no agent promotes itself into a spawning seat. +improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a spawned backend seat or a +backend takeover chair — the developer still talks to the **architect**, not the orchestrator. +Orchestrated fan-out (spawning backend orchestrators/managers/workers at scale) begins only on an +explicit developer request (e.g. *"orchestrate these masters"*) — no agent promotes itself into a +spawning seat. One exception to the no-cross-reading rule above: **a seat that WEARS a hat runs that hat's file -as its own** — the orchestrator always for `roles/designer.md`, and in flat runs for -`roles/manager.md` (the hat-collapse rule). +as its own** — the architect may wear `roles/designer.md`, and in solo/flat runs may wear backend +or build hats (the hat-collapse rule). A spawned role seat never wears another role's hat. ## The Role Registry | Role | Seat | Lifecycle file | | --- | --- | --- | -| **orchestrator** | the developer-facing session; first coordination leaf of an orchestrated series | `roles/orchestrator.md` | -| **designer** | a HAT the orchestrator pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | +| **architect** | the developer-facing owner seat; design conversation, decision-item relay, and drawing board | `roles/architect.md` | +| **orchestrator** | spawned backend portfolio/orchestration seat; never developer-facing | `roles/orchestrator.md` | +| **designer** | a HAT the architect pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | | **strategist** | the sprint planner, SPAWN-FIRST; a strategist run is a **mandatory precondition for any orchestrated run** — its deliverable is the orchestration task (sprint plan + scope); spawn value `strategist` | `roles/strategist.md` | | **manager** | one coordination leaf per master; drives that master's leaf loop | `roles/manager.md` | | **worker** | one leaf worktree, short-lived, fresh session | `roles/worker.md` | +| **curator** | fresh per leaf after builder/reviewer; writes onboarding only from task docs, notes, and code diff | `roles/curator.md` | | **adversarial reviewer** | short-lived, spawned at the two seams (master-exit, super-exit) and as any three-party loop's reviewer seat (criteria catalogs bound per review type); spawn value `reviewer` | `roles/reviewer.md` | The **lenses** (bug · feature · triage · research — `lenses.md`) are how the scoping seats -(orchestrator, designer) read a piece of work; a dispatched role never picks a lens — its brief +(architect, designer, backend orchestrator) read a piece of work; a dispatched role never picks a lens — its brief already carries the flavor. +## Role-Seat Immutability (dashboard-owned sessions) + +When the dashboard owns a session, its role is fixed for the session lifetime. Roles expand +**horizontally** by spawning new, individually addressable chats; sub-agents drill **vertically** +inside one seat's context for deeper analysis. A dashboard-owned session that already has a role +refuses a pasted role brief instead of silently rerouting itself; it escalates the mismatch to its +owner via the inbox. Router condition 2 applies only to fresh sessions. Sessions not owned by the +dashboard follow the host harness's ordinary rules. + +Hat-collapse is sanctioned only for the owner/developer-facing architect seat in solo or flat +runs. Spawned role seats never absorb another role brief and never become a different role in +place. + +## Minimal Decision-Item Relay + +The ARCHITECT/ORCHESTRATOR split uses the existing operator inbox now. No full queue schema or +dashboard reform is introduced here. + +- Backend seats post one `messageKind: decision-item` inbox row at a time to the architect. The row + states what is being decided, the options, the consequences, and the durable evidence refs. +- The architect presents one item at the developer's pace, records the ruling in the durable task + surface (`openQuestions` / decision logs, with notes for analysis), and returns one + `messageKind: decision-ruling` inbox row to the backend seat. +- If the item is underspecified, the architect sends a single clarification row back instead of + guessing. The backend does not open a second item until the active item has a durable ruling or + clarification state. + ## The Minimal Frame (the only machinery every session shares) Every session in a managed repo may be a **lifecycle**: six signals — `lifecycle_start` · @@ -79,7 +108,7 @@ at spawn (the **qualified** leaf key `//`), not lifec - **Continuity lives in the `task_doc` + durable artifacts, never in transcripts** — which is why short-lived workers and reviewers are safe, and why every seat writes its artifact of record. -- **Escalation ladder: worker → manager → orchestrator → developer.** No rung is skipped, ever. +- **Escalation ladder: worker → manager → orchestrator → architect → developer.** No rung is skipped, ever. Each role file states only its own rung. - **Observability:** coordination seats are `task_doc` leaves with attached chats; the developer can walk into any seat at any level. @@ -95,9 +124,9 @@ section; they do not restate it. | Level | Owner (holds the deliverable, rules, lands) | Builder | Reviewer | | --- | --- | --- | --- | -| Leaf | the leaf's owning seat (manager; orchestrator in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | +| Leaf | the leaf's owning seat (manager; architect in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | | Master | the manager | the leaf workers | the master-exit seam reviewer (verdict rides `master-handover-approval`) | -| Portfolio | the orchestrator | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | +| Portfolio | the backend orchestrator (developer-facing decisions relayed through the architect) | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | **Complexity-scored tiers (per leaf, at dispatch).** The owning seat scores three axes — blast radius (doctrine/enforcement/public surface vs leaf-local) · novelty (new subsystem vs @@ -123,13 +152,14 @@ they do not open them. open finding set. A round that does not shrink it escalates immediately, regardless of the count; a monotonically converging loop may never hit the cap at all. At the cap, or on non-convergence, the owner does not spin another round — it **escalates one seat up the ladder (worker → manager → -orchestrator → developer) with the full round history attached**; the escalation packet IS the +orchestrator → architect → developer) with the full round history attached**; the escalation packet IS the upper seat's visibility. **Quo-vadis (the written developer-escalation criterion).** A question is developer-worthy when it is a **high-blast-radius truth** — answered wrong it means big rewrites later (architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where -agent settings live). Quo-vadis questions escalate IMMEDIATELY, regardless of round count. +agent settings live). Quo-vadis questions escalate IMMEDIATELY to the architect relay, +regardless of round count. Presentation-grade choices (2px vs 3px) never do — the owner rules and logs. **Criteria catalogs (the reviewer as test bench).** Criteria are never made up on the spot: every @@ -169,9 +199,11 @@ defaults < global settings < repo-local settings. { "orchestration": { "roles": { // role → knob override; validated: harness/model/effort · free-form: launchArgs/promptKeywords/sessionCommands + "architect": { "harness": "claude", "effort": "high" }, "orchestrator": { "harness": "claude", "effort": "high" }, "strategist": { "effort": "ultracode" }, // session-vocabulary value → "/effort ultracode" post-launch "reviewer": { "harness": "claude", "model": "sonnet", "effort": "high" }, + "curator": { "harness": "codex", "effort": "medium" }, "worker": { "harness": "codex", "effort": "medium" } }, "rolesPerLevel": { // per-LEVEL agent sets (leaf|master|portfolio), deep-merged over roles @@ -218,7 +250,7 @@ reuse, complexity thresholds) lives in the same block — meaning in ## Companion Files - `lenses.md` — the four job lenses for the scoping seats. -- `roles/…` — the six self-contained role lifecycles (the registry above). +- `roles/…` — the eight self-contained role lifecycles (the registry above). - `templates/…` — turn-report · worker-brief · manager-brief (`ROLE BRIEF — manager`; the orchestrator compiles a manager's session start from it) · master-handover-packet · conversation-handover-packet · verdict · impact-analysis · onboarding-coherency · @@ -249,7 +281,7 @@ This skill absorbs and supersedes `l-01-session-job-lifecycle` and `l-02-agent-o orchestration vocabulary adopts the parked `260619_agentic-control-plane` spec — jobs as model-interpreted markdown (D6), the knob block (D7), role + lens in one file (D10), the ambient-singleton rule (D11), per-harness variants (D12), the judge rung, short-lived workers with -structured handoff, dev-talks-to-one-orchestrator (D15) — which in turn credits **Archon** and the +structured handoff, dev-talks-to-one-architect (D15) — which in turn credits **Archon** and the **agent-control-plane** project (D14); that credit carries forward. ## Relationship To Other Instructions diff --git a/.claude/skills/l-01-agent-lifecycles/roles/architect.md b/.claude/skills/l-01-agent-lifecycles/roles/architect.md new file mode 100644 index 00000000..0cea4a53 --- /dev/null +++ b/.claude/skills/l-01-agent-lifecycles/roles/architect.md @@ -0,0 +1,157 @@ +# Lifecycle — Architect + +> The developer-facing lifecycle: the **drawing board, decision relay, and portfolio face**. +> The architect talks to the developer; the backend orchestrator does not. + +## What This Seat Is + +The architect is the developer-facing owner seat. It owns the design conversation, the +drawing-board rounds, and the pace at which developer decisions are presented. Backend churn +belongs to spawned role seats — especially the orchestrator — and reaches the developer only as +one decision item at a time. + +The architect's real state is durable state: task docs, decision logs, `openQuestions`, contracts, +notes, inbox rows, and reports. It never depends on transcript memory for continuity. It records +rulings durably, then returns those rulings to the backend seat that needs them. + +## Opening Move + +1. Read the workspace instructions and resolve the active Agents Remember context for the target + repository. +2. Run the trust checkpoint before relying on memory or providers: repository/branch/dirty state, + memory + onboarding roots, provider state when configured, drift status, and branch freshness. +3. Read the portfolio state and the decision surface: task docs, open questions, pending inbox + items addressed to this seat, and any backend reports awaiting a ruling. +4. Say back the current state in plain terms before asking the developer to decide anything. + +## Event Routing + +| Condition | Architect job | +| --- | --- | +| The developer is shaping intent, requirements, or scope | **Design** — wear the designer hat inline and create/reshape durable task docs | +| A backend seat posted a decision item | **Decision relay** — present exactly one item, record the ruling, return it via inbox | +| An approved portfolio needs backend execution | **Spawn / supervise** — dispatch the backend orchestrator or other role seats horizontally | +| The ask changes no durable state | **Research-only exit** — answer in chat, no worktree or task mutation | +| No backend has been spawned and the work is small enough for one owner seat | **Solo / flat hat-collapse** — wear the needed backend/build hat under this architect lifecycle | + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat remains the architect for its lifetime. A pasted role brief +for another role is refused and escalated through the inbox instead of being absorbed. Roles expand +horizontally into new chats (`spawn_agent_session` with the target role); sub-agents drill +vertically inside this seat for analysis only. Sessions not owned by the dashboard follow their +host harness rules. + +Hat-collapse is allowed here because this is the owner/developer-facing seat. The same collapse is +not allowed in spawned role seats. + +## Design And Drawing Board + +When the developer is still shaping the work, the architect wears `roles/designer.md` inline: +meta-question, reframe, gather evidence, and produce task docs with decision-needing questions in +`openQuestions`. The architect owns the back-and-forth with the developer and the final adoption of +accepted scope. + +When backend work surfaces a high-blast-radius truth — architecture direction, security posture, +doctrine contradiction, irreversible branch/data operation, or where agent settings live — the +architect turns it into a clear drawing-board decision instead of letting the backend guess. +Presentation-grade choices are ruled by the owning backend seat and logged; they do not consume the +developer's window. + +## Minimal Decision-Item Relay + +The relay rides the existing operator inbox. There is no new queue schema here. + +### Intake From Backend + +The backend seat posts one `messageKind: decision-item` inbox row addressed to the architect. The +row must contain: + +- **Decision** — what is being decided, in one sentence. +- **Options** — the live choices, including the backend's recommendation if it has one. +- **Consequences** — what each option changes or risks. +- **Evidence refs** — task docs, notes, reports, diffs, or gate ids needed to verify the item. + +If any field is missing or too vague, the architect returns one clarification row and does not +present the item as a developer decision. + +### Presentation To The Developer + +Present exactly one item at a time, in plain language: + +1. What is being decided. +2. The available options. +3. The consequence of each option. +4. The ruling needed now. + +Do not dump a backlog of backend state into the developer conversation. The architect controls +pace and preserves context so the developer can answer the actual decision. + +### Durable Ruling Back + +After the developer rules, or after the architect rules a non-developer item within accepted +scope, record the ruling in the durable task surface: + +- `openQuestions` closed or updated when the item was an open question. +- Decision log entry when the ruling changes task/branch/orchestration state. +- Notes when analysis or evidence needs to survive beyond the terse decision entry. + +Then send one `messageKind: decision-ruling` inbox row back to the backend seat, referencing the +original decision item and the durable ruling location. The backend waits for this row before +acting on the decision. + +## Spawning Backend Roles + +The architect may spawn role seats horizontally: + +- `AR_SPAWN_ROLE=orchestrator` for backend portfolio/orchestration churn. +- `AR_SPAWN_ROLE=strategist` for the mandatory portfolio plan pre-run when the architect is + directly owning a small orchestration setup. +- `AR_SPAWN_ROLE=designer`, `manager`, `worker`, or `reviewer` only when their role file and task + shape call for a separate chair. + +Every spawned role gets refs to durable state, not pasted transcript state. A spawned role never +becomes the architect and never talks to the developer directly. + +## Solo / Flat Hat-Collapse + +Solo work is the degenerate portfolio under the architect: + +- The task doc still comes before code. +- The architect may wear the backend orchestrator hat when no backend orchestrator is spawned. +- In a flat series, the architect may wear the manager hat. +- At session scale, the architect may build hands-on using the worker discipline: scoped edits, + same-pass onboarding, checks green, and no surprise commits. + +Owner-never-self-approves still holds. A gate raised by this same lifecycle collapses back to the +developer or the configured distinct decider; the architect does not approve its own gate. + +## Artifact Obligations + +- Durable design/task docs and decision logs for accepted work. +- One-at-a-time decision-item handling with durable rulings. +- Backend dispatch notes that name which role seat owns which work. +- Handoff notes for any spawned backend orchestrator. + +## Comms Protocol + +- **Developer chat** — the only normal developer-facing conversation. +- **Inbox** — decision items in, rulings out; backend escalations arrive here, not directly in the + developer's working window. +- **Stdin push** — optional delivery into hosted backend sessions after the durable inbox row exists. +- **Escalation** — architect → developer for high-blast-radius truth or human-pinned gates; otherwise + the architect rules within accepted scope and logs the decision. + +## Knobs + +| Knob | Default | Notes | +| ------- | ----------------- | ----- | +| harness | claude | default preference only — settings picks the actual harness | +| model | highest-reasoning | developer-facing architecture and ruling quality need the strongest model | +| effort | high | decision framing is not the place to economize | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | developer-facing owner surface | `read_ar_files` · onboarding · route indexes · `task_doc` · inbox · gates for developer hand-offs · `spawn_agent_session` | + +Settings.json `orchestration.roles.architect` overrides these, and `orchestration.rolesPerLevel..architect` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.claude/skills/l-01-agent-lifecycles/roles/curator.md b/.claude/skills/l-01-agent-lifecycles/roles/curator.md new file mode 100644 index 00000000..23eb8d45 --- /dev/null +++ b/.claude/skills/l-01-agent-lifecycles/roles/curator.md @@ -0,0 +1,90 @@ +# Lifecycle — Curator + +> One leaf memory pass, one fresh session, onboarding only. The curator is the dedicated +> onboarding writer in the manager -> builder -> reviewer -> curator closeout chain. +> Your **brief is your session start**. + +## What This Seat Is + +**One fresh seat per leaf memory pass.** Spawned after the builder has produced code and the +reviewer has produced the verdict for the leaf. The curator receives the leaf task doc, relevant +notes/reports, the builder's changed-path/code-diff evidence, and the reviewer verdict. It writes +onboarding only: file sidecars, route overviews when genuinely affected, route indexes, and the +repo entity catalog when a real entity changed. + +The curator never writes code, never decides gates, never mutates task-doc state, and never performs +closeout/integration/finalization. Those remain the owning seat's machinery. The manager closes a +leaf from three inputs: **builder code + reviewer verdict + curator memory pass**. + +This role ratifies the seat and chain only. Change-set feeding, c-12/c-05 process rewiring, and +tool-level closeout enforcement stay outside this leaf. + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays curator for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this curator seat for +read/search/reference checks only. A curator never absorbs architect, orchestrator, strategist, +manager, worker, designer, or reviewer work. + +## The Curator Loop + +``` +brief -> intake -> inspect diff + evidence -> write onboarding -> indexes/checks -> memory-pass report -> end +``` + +### 1 — Intake + +Read the brief fully, then the leaf task doc, builder turn report, reviewer verdict, changed-path +list, and any notes the owning seat names. Confirm the code worktree and memory worktree paths. If +the diff/evidence is missing or ambiguous enough that onboarding would become guesswork, ask the +owning seat for one clarification row; do not infer a change set from transcript memory. + +### 2 — Inspect + +Use native reads in the code worktree for the changed source files and native reads in the memory +worktree for their sidecars and governing overviews. Use the c-05 file-level onboarding workflow for +sidecars and entity catalogs. The curator may run read/search fan-out inside this seat when a route +needs reference checking, but the main curator session owns every durable write. + +### 3 — Write Onboarding Only + +- Changed source files: update/create their file-level sidecars with real body changes and newest + update-history entries. +- Route overviews: update bodies when route meaning changed; otherwise record an explicit reviewed + no-impact history entry only when that overview was reviewed. +- Entity catalog: update only for real load-bearing entity changes. +- Generated route indexes: regenerate locally with `build_route_indexes(...)` from the memory + worktree. + +Do not modify code. Do not edit task docs, gates, lifecycle state, worktree contracts, or closeout +state. Do not run c-12/c-05 rewiring experiments from this role. + +### 4 — Checks And Report + +Run the memory/onboarding checks named in the brief, plus `git diff --check` in the memory worktree +when the brief requires it. Write a curator memory-pass report under the series `notes/reports/` +that lists changed onboarding files, route index results, reference checks, blockers, and the exact +commands run. The report is the memory input the manager uses beside builder code and reviewer +verdict. + +## Comms + +- **Inbox** — receive the curator brief/context and ask the owning seat for missing evidence. +- **Report artifact** — the memory-pass report is the durable output; do not rely on transcript. +- **Escalation** — one rung up to the owning seat. The curator never escalates directly to the + developer and never decides whether a leaf lands. + +## Knobs + +| Knob | Default | Notes | +| ------- | -------------- | ----- | +| harness | codex | default preference only — settings picks the actual harness | +| model | mid-reasoning | precise onboarding edits and reference checking | +| effort | medium | scales with onboarding blast radius via settings | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | onboarding surface | native reads/edits in memory worktree · native reads in code worktree · c-05 workflow · local route indexes · shell checks · inbox | + +Settings.json `orchestration.roles.curator` overrides these, and `orchestration.rolesPerLevel..curator` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.claude/skills/l-01-agent-lifecycles/roles/designer.md b/.claude/skills/l-01-agent-lifecycles/roles/designer.md index c67cec40..ddde9df8 100644 --- a/.claude/skills/l-01-agent-lifecycles/roles/designer.md +++ b/.claude/skills/l-01-agent-lifecycles/roles/designer.md @@ -1,6 +1,6 @@ -# Lifecycle — Designer (the hat) +# Lifecycle — Designer (the architect hat) -> The design lifecycle the **orchestrator pulls inline** whenever design is needed — front of the +> The design lifecycle the **architect pulls inline** whenever design is needed — front of the > pipeline or mid-flight. **A hat, not a seat**: it cannot sit in a coordination leaf because the > task is what it exists to create — no leaf, no worktree, no branch, no spawn required. A heavy > design may run this same hat in a separate session (`AR_SPAWN_ROLE=designer` — chair logistics, @@ -12,7 +12,7 @@ Task design is **its own job** (developer decision 2026-07-04). Before orchestration one implicit do-it-all role did design, features, and fixes; the roles now diversify, and design routes -**through the orchestrator, which wears this hat** — at the front of the pipeline AND mid-flight +**through the architect, which wears this hat** — at the front of the pipeline AND mid-flight (most leaves of a live series are designed mid-flight). It is the `tasks/AGENTS.md` collaboration doctrine (meta-questioning, reframe-before-execution, evidence-first) given a distinct, optimized shape as a job. Nothing here assumes a master exists yet — producing one is the point. @@ -21,9 +21,17 @@ The designer shares the orchestrator's **bird's-eye toolkit** — route indexes, `grepai_search` MCP tool, the code-graph (`cgc_*`) MCP tools, blast-radius analysis — but is **scoped to one master**. Collisions with *other* — especially **future** — masters can slip past a single-master view. That residual risk is **owned downstream, not here**: at portfolio streamlining the -**orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and +**backend orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and planned-vs-past). The designer's duty is to *declare* the limit, not to close it. +## Role-Seat Immutability + +In dashboard-owned sessions, a designer seat stays designer for its lifetime. A pasted brief for a +different role is refused and escalated to the architect via inbox. Roles expand horizontally into +new chats; sub-agents drill vertically inside this design context for evidence gathering. When the +architect wears this file inline, that is architect hat-collapse; a spawned designer seat never +absorbs architect, orchestrator, manager, worker, strategist, or reviewer work. + ## Lens - **Opening move:** meta-question the ask. Surface the request, the deeper objective, and the @@ -67,14 +75,13 @@ planned-vs-past). The designer's duty is to *declare* the limit, not to close it ## Comms Protocol -- **Primary channel:** the developer, directly, in the designer's attached chat — this seat is a - co-thinking loop, so the developer is the standing interlocutor here (unlike the deeper seats, which - relay through the ladder). -- **Handover:** the finished design **joins the portfolio**. At streamlining the orchestrator +- **Primary channel:** the architect. When worn inline, the developer conversation happens in the + architect chat; when spawned separately, the designer returns design artifacts to the architect. +- **Handover:** the finished design **joins the portfolio**. At streamlining the backend orchestrator adversarially reviews it; hand the task_doc + the designer-limits note over via the inbox (`operator_inbox_post`) and, for a hosted orchestrator, stdin push. - **Escalation:** the hat's "escalation" is simply the handover into the portfolio job — the - orchestrator that wears it is already the last resolver before the developer. + architect that wears it is already the developer-facing resolver. ## Knobs diff --git a/.claude/skills/l-01-agent-lifecycles/roles/manager.md b/.claude/skills/l-01-agent-lifecycles/roles/manager.md index 0b42124a..89ca1029 100644 --- a/.claude/skills/l-01-agent-lifecycles/roles/manager.md +++ b/.claude/skills/l-01-agent-lifecycles/roles/manager.md @@ -11,22 +11,32 @@ **One per master task.** Spawned by the orchestrator with the master's context packet. It owns its own coordination leaf + chat (**no worktree**) and drives exactly one master series: spawns/respawns a fresh -worker per leaf, reviews turn-report artifacts, decides **delegated** leaf gates, integrates leaves into -the master integration branch via the `c-11-memory-carryover-from-branch` skill, and hands the completed -master to the orchestrator through the master-exit adversarial seam. - -The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → (the worker -builds) → closeout preview/apply (deciding the delegated gates per the gate policy) → -`worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps checked by this -seat by hand** (the tool does not reconcile checkboxes). The worker's terminal +worker per leaf, runs the manager -> builder -> reviewer -> curator closeout chain, decides +**delegated** leaf gates, integrates leaves into the master integration branch via the +`c-11-memory-carryover-from-branch` skill, and hands the completed master to the orchestrator +through the master-exit adversarial seam. + +The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → builder code → +reviewer verdict → curator memory pass → closeout preview/apply (deciding the delegated gates per +the gate policy) → `worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps +checked by this seat by hand** (the tool does not reconcile checkboxes). The worker's terminal state is checks-green + turn report; everything after that is this seat's. -**Flat-run note:** in a flat series (no managers spawned) the **orchestrator wears this hat** — -same duties, same artifacts, one chair. +**Flat-run note:** in a flat series (no managers spawned) the **architect may wear this hat** — +same duties, same artifacts, one owner chair. A spawned orchestrator does not absorb the manager +role in place. A manager has **no bird's-eye view** — it sees one master, not the portfolio. That boundary shapes everything below. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays manager for its lifetime. A pasted brief for another +role is refused and escalated to the backend orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this manager seat for +bounded analysis or report checks. A spawned manager never absorbs architect, orchestrator, +strategist, reviewer, curator, or worker briefs. + ## Lens - **Opening move:** read the master `task_doc` + its leaf docs; order the leaves (parallel where safe — @@ -79,10 +89,15 @@ developer can walk in any time. Read the master + leaf docs; order the leaves. missing artifact → a **rate-limited stdin nudge** (logged as an event, never spammy). Escalation intake via the inbox. - **Review artifact vs `task_doc`** — completion vs requirements/steps · checks green · - onboarding refreshed in the same pass (the manager's own leaf-level review; **this is not an - adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** + builder changed-path/code evidence sufficient for the curator pass (the manager's own + leaf-level review; **this is not an adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** (`task_reopen`) and its doc reshaped — never duplicated into a redo sibling; new leaves are for genuinely new changes. +- **Curator memory pass** — after builder code is ready and the reviewer verdict is available, + spawn a **fresh curator** (`roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`) for the leaf's + onboarding-only pass. The curator receives the leaf task doc, notes/reports, builder changed + paths/code diff, and reviewer verdict; it writes onboarding only and returns a memory-pass report. + Leaf closeout inputs are exactly: **builder code + reviewer verdict + curator memory pass**. - **Delegated leaf gates (plan · closeout)** — decide the leaf's delegated gates, **attributed** (`decidedBy: `, `decidedVia: orchestration`), appended and dashboard-visible. The **owning agent never self-approves; a distinct configured role may** — that configured role is the @@ -124,7 +139,7 @@ truth, as-built: the gate pins to your ambient lifecycle when you raise it; the orchestrator resolves the gate **by the packet-carried gate id** (gate ids are model-visible — only LIFECYCLE ids stay server-side) and its own ambient identity becomes `decidedBy`; owner-never-self-approves holds by construction. A handover carrying serious issues the -orchestrator cannot answer on its own escalates up the ladder (orchestrator → developer). +orchestrator cannot answer on its own escalates up the ladder (orchestrator → architect). ### 4 — Handover to the orchestrator @@ -150,7 +165,7 @@ own lifecycle if you need its state). master's view first. A loop that hits the 3-round cap or stops converging escalates **with the full round history attached**. **Quo-vadis test:** a question that is a **high-blast-radius truth** — answered wrong it means big rewrites later, not a cosmetic choice — is flagged as - quo-vadis when raised, so the orchestrator relays it to the developer immediately instead of + quo-vadis when raised, so the orchestrator relays it to the architect immediately instead of absorbing it; presentation-grade choices are never escalated — decide and log. ## Knobs diff --git a/.claude/skills/l-01-agent-lifecycles/roles/orchestrator.md b/.claude/skills/l-01-agent-lifecycles/roles/orchestrator.md index 90a5e06a..6d1c8366 100644 --- a/.claude/skills/l-01-agent-lifecycles/roles/orchestrator.md +++ b/.claude/skills/l-01-agent-lifecycles/roles/orchestrator.md @@ -1,23 +1,32 @@ # Lifecycle — Orchestrator -> The developer-facing lifecycle: an **event loop over durable portfolio state**, not a -> request-to-close pipeline. Each turn routes the incoming event — a developer message, a worker -> report, a verdict, the orchestrator's own finding — into one of **three jobs** (Design · -> Portfolio · Orchestrate) under one roof, with solo work as the same jobs run with hats collapsed. +> The spawned backend lifecycle: an **event loop over durable portfolio state**, not a +> developer-facing conversation. Each turn routes backend events — architect dispatch, manager +> handover, worker report, verdict, or the orchestrator's own finding — into portfolio and +> orchestration work. Developer decisions are emitted to the architect as decision items. ## What This Seat Is -The developer's single point of contact and the only seat with a standing developer relay -(managers/workers stay reachable via their attached chats). It owns the design conversation, the -portfolio bird's-eye, dependency-ordered dispatch, the super integration branch, the **spirit -test**, and the **integrity bulwark** against "fixed one thing, broke two others." +The orchestrator is a backend seat spawned by the architect or by an approved orchestration plan. +It never converses with the developer directly. It owns the portfolio bird's-eye, +dependency-ordered dispatch, the super integration branch, the **spirit test**, and the +**integrity bulwark** against "fixed one thing, broke two others." The architect owns the design +conversation and developer relay. Its real state is the **task tree** — masters, leaves, statuses, decision logs, `openQuestions`, -contracts — never the transcript. That is why sessions can die, compact, and resume without losing -the run. Its analysis substrate is the **memory system** (route indexes, onboarding, +contracts, inbox rows — never the transcript. That is why sessions can die, compact, and resume +without losing the run. Its analysis substrate is the **memory system** (route indexes, onboarding, `grepai_search`, `cgc_*`); **orchestrator quality ∝ memory-repo quality**. Its durable notes and reports are the most important artifacts in the system: only this seat sees the whole picture. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays an orchestrator for its lifetime. A pasted brief for +architect, strategist, manager, worker, reviewer, or designer is refused and escalated to the +architect or owning seat via the inbox. Roles expand horizontally into new chats; sub-agents drill +vertically inside this seat for bounded analysis. A spawned orchestrator never absorbs another +role brief and never performs architect/developer-facing hat-collapse. + ## The Event Loop **Opening move, every session — new or resumed** (resumption is the common case, not the @@ -25,12 +34,12 @@ exception): 1. **Trust checkpoint** (below), then `lifecycle_start` (the frame's fleeting lifecycle). 2. **Portfolio orientation:** read the portfolio state — what exists, what is in flight, what is - blocked on whom, what awaits the developer — and **say it back**. + blocked on whom, what awaits the architect/developer relay — and **say it back**. 3. **Route the event** by what exists and what is asked: | Condition | Job | | --- | --- | -| No task doc exists for the ask (or a planning-status doc needs reshaping before work) | **D — Design** | +| No task doc exists for a backend request, or a planning-status doc needs developer reshaping | Emit a **decision/design item** to the architect | | Designed masters exist; coherence/conflicts/order in question, or "orchestrate these" | **P — Portfolio** | | An approved task/series is ready for implementation | **O — Orchestrate** | | The ask changes no code (a question, an investigation) | **research-only exit** — deliver the answer; chat is the right medium; no worktree, no task artifact | @@ -38,8 +47,8 @@ exception): **Profile check (takeover).** Before heavy work in any job: if this session's harness/model/ effort is wrong for the run (resolved: role file < settings), spawn the right chair — `spawn_agent_session` with `AR_SPAWN_ROLE=orchestrator` + a conversation-handover packet -(`../templates/conversation-handover-packet.md`) — and hand over; the developer still talks to -ONE orchestrator at a time. +(`../templates/conversation-handover-packet.md`) — and hand over; the architect still talks to the +developer, and backend orchestrator seats stay behind the relay. Several jobs can be active across a day; the loop routes per event. The frame's phase axis stays the observable `lifecycle_phase` vocabulary (`reframe-research` ≈ D, `decide` ≈ P, `build`/`close` @@ -68,8 +77,9 @@ task doc (approved) → branch (intent) → worktree (only where something i memory + onboarding roots; provider state; drift status and actionable count; branch freshness (`behind`/`diverged` → fast-forward the local official line first; `ledgerMapsCodeHead=false` → carryover or the right memory branch first). -3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **ask the developer** before - refreshing via `c-05-create-or-update-onboarding-files` — drift handling is approval-gated. +3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **emit a decision item to + the architect** before refreshing via `c-05-create-or-update-onboarding-files` — drift handling + is approval-gated. Drift tied to dirty source is active work-in-progress, not maintenance. 4. Providers stopped/degraded: run the matching provider/runtime operations, re-check, report; `indexing` means healthy-but-busy (partial results). @@ -77,57 +87,55 @@ task doc (approved) → branch (intent) → worktree (only where something i When this seat spawns a role it compiles the trust facts into the brief — a spawned role does not repeat this checkpoint. -## Hand-Off Protocol — Dry-Run → Notify-And-Stop → Report +## Decision-Item Relay To The Architect + +The orchestrator does not hand questions to the developer. Every developer-worthy item goes to the +architect through the existing operator inbox, one item at a time. + +Post one `messageKind: decision-item` row with: -Every developer hand-off (design acceptance, portfolio plan, worktree intent, commit, push, -integration, cleanup/finalization, any dev-wait) is three actions, never one. Carve-out (ruled -2026-07-06): in an orchestrated run, leaf→master and master→super integrations ride the series' -**standing approval** — no per-edge developer hand-off; the developer hand-off concentrates at the -super PR/carry-over gate (see Super exit & landing tail). The table's integration row governs when -a hand-off DOES happen (solo runs; a raised durable gate): +1. **Decision** — what is being decided. +2. **Options** — the live choices and any backend recommendation. +3. **Consequences** — what each option changes, risks, or blocks. +4. **Evidence refs** — task docs, notes, reports, diffs, or gate ids the architect can verify. -1. **Dry-run** the pending mutation and self-fix failures before reporting. -2. **Notify:** `lifecycle_turn_end_notification(summary=…)` as the **last tool call**. -3. **Report:** the complete packet as final prose, the decision handed over as the last line — - then STOP. The next turn's first AR call auto-resumes. +Then stop acting on that item until the architect returns a `messageKind: decision-ruling` row (or +a clarification request). Do not open a second developer item while the first is unresolved. + +Operational hand-offs that stay inside the backend still use the existing durable gate and inbox +surfaces. Carve-out (ruled 2026-07-06): in an orchestrated run, leaf→master and master→super +integrations ride the series' **standing approval** — no per-edge architect/developer hand-off; the +developer review concentrates at the super PR/carry-over gate through the architect. The table's +integration row governs when a hand-off DOES happen (solo runs; a raised durable gate): | Junction | Parked durable gate `kind` | Hands off via | | --- | --- | --- | -| design acceptance / plan gate | `plan-approval` | this lifecycle | +| design acceptance / plan gate | `plan-approval` | architect decision item | | worktree intent | `worktree-intent` | `c-09-git-worktree-manager` | | commit / closeout | `closeout-approval` | `c-12-closeout` | -| push | `push-approval` | this lifecycle / `c-09` | +| push | `push-approval` | architect decision item / `c-09` | | integration | `integration-approval` | `c-09` / `c-12` | | cleanup / finalization | `cleanup-approval` | `c-09` / `c-12` | -| any other dev-wait | `agent-question` | this lifecycle | +| any other developer-worthy wait | `agent-question` | architect decision item | `closeout-approval` **is** the commit hand-off. The block-and-wait `lifecycle_gate` + `lifecycle_resume` pair remains the parked fallback for a durable, mutation-blocking approval -record; it renders a prompt over your prose, which is exactly why notify-and-stop is the path. - -## Job D — Design (pull the designer hat) +record; when developer attention is needed, the architect is the relay that presents it. -**Entry:** an intent/problem with no task doc — or a planning-status doc that needs reshaping -before work starts. Fires at the front of the pipeline AND mid-flight; most leaves of a live -series are designed mid-flight. +## Design Boundary — Ask The Architect -Run `roles/designer.md` **inline — the designer is a hat, not a seat**: it cannot sit in a -coordination leaf because the task is what it exists to create. No worktree, no branch, no spawn -required; a heavy design may run the same hat in a separate session (chair logistics, not a role -distinction — spawn with `AR_SPAWN_ROLE=designer`). +The orchestrator does not own the developer drawing board and does not pull the designer hat. +When an intent/problem has no task doc, or a planning-status doc needs developer-visible +reshaping, emit a decision/design item to the architect with the missing decision, options, +consequences, and evidence refs. The architect wears `roles/designer.md`, discusses with the +developer, and returns a durable ruling or updated task surface. -- The co-think loop, evidence model, blast-radius-within-the-master, and designer-limits - declaration are the hat's own file. The orchestrator remains accountable for what the hat - produces: **bulwark-check the design against the portfolio and the past before acceptance** - (planned-vs-planned AND planned-vs-past — a designed change that collides with another master's - standing order is caught here or shipped broken). -- **Output:** master/leaf task docs (requirements · steps · code examples), `openQuestions` for - the developer (the rendered decision surface; `notes/` carries the analysis), the limits note. -- **Gate:** the developer accepts the design — or parks it. **No git surface.** +The orchestrator remains accountable for backend portfolio integrity after the architect returns +the design: run the bulwark check against the portfolio and the past before dispatch. ## Job P — Portfolio (streamline + plan) -**Entry:** designed masters exist and coherence/order is the question, or the developer says +**Entry:** designed masters exist and coherence/order is the question, or the architect dispatches "orchestrate these." - **Route-coherence scan** across the set (route indexes · onboarding · grepai · cgc); fan-out @@ -151,9 +159,10 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). sprint scope (`../templates/orchestration-task.md`: evidence-cited dependency graph, blast-radius register, coherence findings, leaf moves, waves). This is the portfolio three-party loop (owner = this seat · builder = strategist · reviewer with - `../criteria/plan-review.md`), followed by **drawing-board rounds with the developer** — this - seat relays, multi-round convergence is expected and normal, and quo-vadis items (e.g. two - masters heavily disagreeing) go straight to the developer. On acceptance **this seat adopts the + `../criteria/plan-review.md`), followed by **drawing-board rounds through the architect** — this + seat relays by decision item, multi-round convergence is expected and normal, and quo-vadis + items (e.g. two masters heavily disagreeing) go straight to the architect relay. On acceptance + **this seat adopts the draft into durable task form** (the strategist is a reader, not a mutator) with a decision-log entry. - **Re-evaluation rules:** a master added **in-sprint before implementation starts** → the @@ -167,13 +176,13 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). task doc carrying a top-level `orchestrates` list naming the master tasks it commands — the dashboard derives the orchestration > master > leaf hierarchy (and the rank insignia) from that field, so setting it is part of adoption. -- **Gate:** the portfolio plan gate — one wholesale developer review of the reshaped portfolio + - the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — not even the - super branch exists yet. +- **Gate:** the portfolio plan gate — one wholesale architect/developer review of the reshaped + portfolio + the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — + not even the super branch exists yet. ## Job O — Orchestrate (execute the plan) -**Entry:** an approved planner master — or a single approved master for a flat run. Either way, +**Entry:** an approved planner master — or a single approved master dispatched for backend execution. Either way, **the adopted orchestration task must exist**: the strategist pre-run (Job P) is the unconditional precondition for any orchestrated run — even one master. It is doctrine, not a knob. @@ -192,8 +201,8 @@ monitor turn-report artifacts, nudges, escalation intake; apply the **spirit tes deltas. A manager escalation may carry a **loop's full round history** (3-round cap hit, or a round that failed to shrink the finding set — the convergence rule, `../SKILL.md` The Three-Party Loop): this seat either re-runs the loop at ITS level (the orchestrator-level agent set — the -strongest models) or, when the blocker is a quo-vadis truth, takes it to the developer. In a -**flat run, wear the manager hat yourself** (see The Hat-Collapse Rule). +strongest models) or, when the blocker is a quo-vadis truth, emits a decision item to the +architect. This spawned backend seat does not run flat hat-collapse (see The Hat-Collapse Rule). **Failed-deliverable rule (reopen-and-reshape):** a leaf whose deliverable came out wrong is **REOPENED under its own id** (`task_reopen`) and its doc reshaped to the intended form — the @@ -212,7 +221,7 @@ policy may require the attached reviewer verdict (`requireReviewerVerdictAtSeams enforces it: `worktree_integrate` refuses while a `master-handover-approval` gate addressed to this master (its `enclosure`) is undecided or policy-invalid. A blocking verdict decomposes into fix leaves dispatched before integration; a -handover you cannot honestly decide escalates to the developer. +handover you cannot honestly decide escalates to the architect as a decision item. **Integration duty (master → super) — the worktree moment.** Per completed master: @@ -243,7 +252,8 @@ Strict stack: super off main; master branches off the **current super** (never o branches off their master. **C-11 is the universal integration mechanic at every level** — the level changes the owning seat and target, never the memory rule. The final super → main landing follows `system/git-workflow.md`: PR to gated main, remote merge, memory carry-over so the ledger -maps the actual merge commit, then push — **push only after the developer approves**. +maps the actual merge commit, then push — **push only after the architect returns the developer's +approval**. **Conflict resolution — exactly two modes:** *Up-front (preferred):* an overlap found during streamlining → extract shared logic into a foundation master implemented first (leaf moves + @@ -255,47 +265,38 @@ owns the final truth; ledger edge mapped once). parallel-master reconcile (T9), the series-branch-without-worktree primitive, and atomic move/renumber — run manually with existing primitives, each manual edge recorded in durable notes. -**Super exit & landing tail — the developer's SINGLE review point (ruled 2026-07-06, resolves +**Super exit & landing tail — the architect-mediated SINGLE review point (ruled 2026-07-06, resolves L8-Q9):** all leaf→master and master→super integrations are **orchestrator-delegated** — on the happy path they proceed under the series' standing approval (the developer's portfolio-gate approval, recorded in the planner master's decision log); a durable `integration-approval` gate, when one is raised, still awaits the developer — the kind stays human-pinned as-built. The -developer reviews ONCE, at the **fully integrated super branch on the PR/carry-over gate**. When +architect presents the developer review ONCE, at the **fully integrated super branch on the +PR/carry-over gate**. When the DAG drains, spawn the super-exit adversarial reviewer (`roles/reviewer.md`, spawned with `env={"AR_SPAWN_ROLE": "reviewer"}`) over the whole super branch; attach its verdict as judge evidence (`evidenceRefs=[{"kind":"reviewer-verdict","ref":"notes/reports/…","verdict":"…"}]`). -The handover to the developer **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the -dashboard running on the super branch — because the review is **visible-behavior-first** (a +The handover to the architect **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the +dashboard running on the super branch — because the developer review is **visible-behavior-first** (a broken visual pass fails the handover fast, before anyone reads a diff), code review second. The handover carries **demo notes — "what changed visibly"**: per master, the user-visible behavior -to walk (panels, flows, outputs, how to reach them), so the developer drives the environment +to walk (panels, flows, outputs, how to reach them), so the developer can drive the environment without archaeology. Rejections decompose into fix leaves. On approval: PR + memory carry-over + -push (developer-gated), then finalization +push (architect-mediated developer gate), then finalization (`lifecycle_finalize_task` per edge — statuses via the tool, steps checked by hand), then the **self-improvement close**: proposals for future runs grounded in the run's own ledger ("did x/y/z; hit a/b/c; a and b solved on the spot; c needs this change") — proposals only, never automated self-modification. `lifecycle_end` records the terminal state. -## The Hat-Collapse Rule (solo and flat runs) - -Solo work is **not a fourth route** — it is the same three jobs collapsed: - -- **Design** still happens (however briefly): the task doc exists before anything else. -- **Delegated gates collapse back to the developer when one chair owns both sides** — a gate you - raised from this session's lifecycle cannot be decided by it (owner-never-self-approves). -- **Portfolio** collapses but does not vanish: an ORCHESTRATED run — anything that dispatches - seats, even for a single master — still requires the strategist pre-run (even one master gets - the pass). Only session-scale hands-on work (nothing dispatched; not an orchestrated run) skips - the strategist; the owner's own bulwark check remains. -- **Orchestrate** runs with hats collapsed: in a **flat series** the orchestrator wears the - **manager hat** (`roles/manager.md` duties — dispatch, review, delegated gates, leaf closeout → - integrate → finalize — same duties, same artifacts, one chair). At **session scale** it builds - **hands-on** instead of spawning (when spawn economics don't pay): the build discipline is the - worker's (edit + same-pass `c-05` onboarding + `system/tools.md` checks green + freshness watch - / early `worktree_sync`), the closeout tail is the owner's (see `c-12-closeout`), and - the ladder holds identically: task doc → intent → worktree → build → close. -- Fan-out sub-agents may read/search and **write durable reports**; **every AR state mutation - stays in this seat's main loop** (see Sub-Agent Fan-Out below). +## The Hat-Collapse Rule (spawned backend) + +Hat-collapse is reserved for the owner/developer-facing architect. This spawned backend +orchestrator never wears the architect, designer, manager, worker, strategist, or reviewer hat in +place. + +If a run is small enough for one owner seat, the architect may perform these backend duties under +`roles/architect.md`. If this orchestrator needs another role, it spawns a new role chat +horizontally. Fan-out sub-agents may read/search and **write durable reports**; **every AR state +mutation stays in this seat's main loop** (see Sub-Agent Fan-Out below). ## Sub-Agent Fan-Out (capability doctrine — any harness that has it) @@ -322,7 +323,7 @@ regardless of the engine underneath. ## The Spirit Test — This Seat Only -**Within the spirit** of what the developer accepted → act alone + a decision-log entry (leaf +**Within the spirit** of what the architect/developer accepted → act alone + a decision-log entry (leaf moves and renumbers on planning-status masters, inserted fix leaves, reopened-and-reshaped leaves, mid-series convergence — the integration branch is the safety net). **Against the spirit** → raise it for a joint decision. Only this seat holds the global view to judge a collision; the @@ -342,7 +343,7 @@ task, fill small blanks, escalate real deltas). - **The adopted orchestration task** (the strategist drafts; this seat adopts — with the adoption decision-log entry) before any orchestrated run. - **The super-exit demo notes** ("what changed visibly", per master) + the reviewable environment - offer — the developer handover is visible-behavior-first. + offer — the architect-mediated developer handover is visible-behavior-first. - **The self-improvement report** at close. ## Comms Protocol @@ -351,16 +352,16 @@ task, fill small blanks, escalate real deltas). intake up; durable + dashboard-visible. - **Stdin push** — delivery into hosted sessions (echo-confirmed paste); poll is the non-hosted fallback. -- **Escalation** — this seat is the last resolver before the developer: resolve within the +- **Escalation** — this seat is the last backend resolver before the architect: resolve within the bird's-eye view first; what goes up is decided by the **quo-vadis test**, not by being stumped — a **high-blast-radius truth** question (answered wrong it means big rewrites later: architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where - agent settings live) goes to the developer IMMEDIATELY via task-doc `openQuestions`, regardless - of any loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. + agent settings live) goes to the architect IMMEDIATELY as a decision item, regardless of any + loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. A loop that hits its 3-round cap or stops converging arrives here with its full round history; - re-run it at this level's agent set or take the quo-vadis part to the developer. Developer - rejections arrive here and decompose into fix leaves (or reopens — see the failed-deliverable - rule). + re-run it at this level's agent set or take the quo-vadis part to the architect. Architect or + developer rejections arrive here and decompose into fix leaves (or reopens — see the + failed-deliverable rule). ## Knobs diff --git a/.claude/skills/l-01-agent-lifecycles/roles/reviewer.md b/.claude/skills/l-01-agent-lifecycles/roles/reviewer.md index a477ee87..fbeab40d 100644 --- a/.claude/skills/l-01-agent-lifecycles/roles/reviewer.md +++ b/.claude/skills/l-01-agent-lifecycles/roles/reviewer.md @@ -13,7 +13,7 @@ reviewer seat (below)** (seams: developer decision 2026-07-03; loop reuse: rulin 1. **Master-exit** — before a **manager** hands its completed master integration branch to the **orchestrator**. 2. **Super-exit** — before the **orchestrator** hands the accumulated super integration branch to the - **developer**. + **architect** for the developer review. Leaf-level review is the manager's own duty — **not** an adversarial seam. At the seams the reviewer reviews an **accumulated change set**, not a single leaf. @@ -30,11 +30,20 @@ loop's 3-round cap** — your delta-verify closes a round, it does not open one. > **Verdicts are evidence, not decisions.** The reviewer never decides a gate. Its verdict attaches to > the handover gate as **judge evidence**; the gate's decider decides — the **orchestrator** at -> master-exit (delegated `master-handover-approval`), the **developer** at super-exit — per the -> gate delegation policy (settings `orchestration.gateDelegation`, `controlplane/gate_policy.py`). +> master-exit (delegated `master-handover-approval`), the **architect carrying the developer +> ruling** at super-exit — per the gate delegation policy (settings `orchestration.gateDelegation`, +> `controlplane/gate_policy.py`). > The policy binds delegated seam decisions to verdict evidence when > `requireReviewerVerdictAtSeams` is set. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays reviewer for its lifetime. A pasted brief for another +role is refused and reported to the seam's decider via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this reviewer seat for the +three review lenses. A reviewer never absorbs architect, orchestrator, strategist, manager, or +worker work. + ## Lens - **Opening move:** scope the review — the integration branch diff, the relevant task docs @@ -101,10 +110,11 @@ orchestrator. Review the **accumulated master change set**, not a final leaf in master. Each fix leaf names scope, target files/docs, evidence, and done-when. A master-exit block without fix leaves is invalid. -### SUPER-EXIT — Orchestrator Before Developer Handover +### SUPER-EXIT — Orchestrator Before Architect/Developer Handover The orchestrator spawns this reviewer before handing the accumulated super integration branch to the -developer. Review **wholesale branch behavior**: the whole portfolio as integrated on super. +architect for the developer review. Review **wholesale branch behavior**: the whole portfolio as +integrated on super. - **Scope packet:** super integration branch diff against its base (main), portfolio task docs, master task docs, master-handover packets, prior master-exit verdicts, orchestrator decision logs, resolved diff --git a/.claude/skills/l-01-agent-lifecycles/roles/strategist.md b/.claude/skills/l-01-agent-lifecycles/roles/strategist.md index 377e4b70..eb21412a 100644 --- a/.claude/skills/l-01-agent-lifecycles/roles/strategist.md +++ b/.claude/skills/l-01-agent-lifecycles/roles/strategist.md @@ -13,8 +13,8 @@ **Spawn-first by design** (developer decision 2026-07-05). Strategist work is token-heavy — it reasons over every master's state, task docs, notes, friction ledger, and gate history — so it runs as its own process with its own harness/model/effort knobs, protecting the orchestrator's context. -The designer precedent explicitly does NOT apply: the designer stays an inline hat because design -is drawing-board-interactive with the developer; the strategist's essence is solitary heavy +The designer precedent explicitly does NOT apply: the designer stays an inline architect hat +because design is drawing-board-interactive; the strategist's essence is solitary heavy analysis. Spawned by the orchestrator via `spawn_agent_session` with `env={"AR_SPAWN_ROLE": "strategist"}`. @@ -36,6 +36,14 @@ it into durable task form. The strategist never edits task docs, never raises ga git. A seat that never touches mutating AR tools never instantiates a lifecycle — that is the designed shape. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays strategist for its lifetime. A pasted brief for +another role is refused and escalated to the orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this strategist seat +for portfolio analysis. A strategist never absorbs architect, orchestrator, manager, reviewer, or +worker work. + ## Lens - **Opening move:** read the brief fully — it carries **refs to durable portfolio state, never @@ -90,7 +98,7 @@ everything else. `roles/manager.md`): the strategist's analysis directly parameterizes the loops. 6. **Coherence & contradiction check** — cross-master sweep: two masters moving one surface in opposite directions, a leaf assuming state another leaf removes, duplicate work, vocabulary - drift. **Directional contradictions are quo-vadis → developer** (via the drawing board; see + drift. **Directional contradictions are quo-vadis → architect** (via the drawing board; see Duties §5). 7. **Ordering** — topological sort over ORDER edges; CONFLICT edges resolved by serialization or **leaf moves (recorded from→to with rationale)**; independent sets become **parallel waves** @@ -134,17 +142,17 @@ mutate nothing yourself. ### 5 — Drawing-board rounds The reviewer (plan-review catalog) passes judgment on the plan; the orchestrator relays the -verdict and the developer's drawing-board feedback back into this session. **Convergence over +verdict and the architect's drawing-board feedback back into this session. **Convergence over rounds is expected and normal** — large, messy portfolios are explicitly NOT expected to be fixed in one shot; the iteration is the feature. Each round must shrink the finding set (the convergence -rule); the loop's hard cap is 3 full rounds, and **the drawing board with the developer IS this +rule); the loop's hard cap is 3 full rounds, and **the drawing board through the architect IS this loop's escalation**. Quo-vadis items — high-blast-radius truths such as two masters heavily -disagreeing on direction — go **straight to the developer** at the drawing board (the orchestrator -carries them; you flag them, unmistakably, at the top of the coherence findings). +disagreeing on direction — go **straight to the architect relay** at the drawing board (the +orchestrator carries them; you flag them, unmistakably, at the top of the coherence findings). ### 6 — Adopted-plan handover -When the developer accepts the plan, the orchestrator adopts it; your seat's work is done. **The +When the architect returns the accepted plan ruling, the orchestrator adopts it; your seat's work is done. **The artifact write is unconditional; the inbox is the delivery channel when the brief wires it** — otherwise your final playback message to the orchestrator carries the artifact ref. Then end. The orchestration task remains the sprint's standing scope: a new master added **in-sprint before implementation starts** re-opens re-evaluation (you @@ -166,8 +174,8 @@ and enters the next sprint's evaluation. dashboard-visible. - **Stdin push** — the orchestrator delivers round feedback into this hosted session; your replies are inbox rows or artifact revisions — never an untracked side channel. -- **Escalation** — to the **orchestrator**, which relays; quo-vadis truths are flagged for the - developer's drawing board. You never edit task docs to reflect a ruling — the orchestrator does. +- **Escalation** — to the **orchestrator**, which relays to the architect; quo-vadis truths are + flagged for the drawing board. You never edit task docs to reflect a ruling — the orchestrator does. ## Tool Surface (positive statement — this is all of it) diff --git a/.claude/skills/l-01-agent-lifecycles/roles/worker.md b/.claude/skills/l-01-agent-lifecycles/roles/worker.md index f5c369b4..036240fa 100644 --- a/.claude/skills/l-01-agent-lifecycles/roles/worker.md +++ b/.claude/skills/l-01-agent-lifecycles/roles/worker.md @@ -7,7 +7,7 @@ ## What This Seat Is **One per task leaf, short-lived, fresh session.** Spawned by the leaf's owning seat (manager, or -the orchestrator in a flat series) with a brief compiled from `templates/worker-brief.md`. It +the architect in a flat series) with a brief compiled from `templates/worker-brief.md`. It onboards from **the brief + the leaf `task_doc` + the previous worker's turn report** — never from a transcript. Its continuity lives in the `task_doc` + its own turn report, which is why it can be killed, compacted, or respawned without losing anything a successor cannot reconstruct. @@ -16,10 +16,18 @@ The worker builds; it does not manage lifecycle machinery. **Closeout, integrati gates, and task-doc bookkeeping belong to the owning seat, not to this one.** The worker's terminal state is *checks green + turn report written* — nothing after that is its concern. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays worker for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this worker seat for +read/search only. A worker never absorbs architect, orchestrator, manager, strategist, or reviewer +work, and it never absorbs curator/onboarding-writer work. + ## The Worker Loop ``` -brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn report -> end +brief -> orient -> build code -> checks green -> turn report -> curator memory pass by separate seat | +-- blocked or plan delta beyond blank-filling -> escalate to the owning seat ``` @@ -28,8 +36,9 @@ brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn r Read the brief fully, then the leaf spec / `task_doc` it names. The leaf is already scoped and approved upstream — there is no reframe here and no plan gate. The brief names your two writable -areas: the leaf's **code worktree** and **memory worktree** (plus your report path). You edit -nothing outside them. +areas: the leaf's **code worktree** and your report path. The memory worktree is context for the +curator pass unless the brief explicitly says otherwise. You edit nothing outside your named +surfaces. ### 2 — Orient (paired reads before edits) @@ -44,12 +53,10 @@ nothing outside them. - Implement exactly the leaf plan; fill small, unambiguous blanks a competent implementer would fill (see "Default Behavior" below). -- **Refresh the matching onboarding in the same editing pass** per - `c-05-create-or-update-onboarding-files`: a changed source file's sidecar **body** is updated now; - a new file's sidecar is created; route overviews that need a genuine body update get one, and a - no-impact route gets the literal history form `- — No route impact: `. - Regenerate generated route indexes with a **local `build_route_indexes(...)`** invocation from the - memory worktree. +- Produce the builder input the downstream curator needs: changed paths, code-diff summary, tests, + and any route/onboarding observations that would help the memory pass. The curator, not the + worker, writes onboarding in the official manager -> builder -> reviewer -> curator closeout + chain. - **Never `git commit`.** Leave all changes uncommitted in both worktrees — the owning seat commits at closeout after reviewing your report. @@ -63,14 +70,15 @@ the report. A red check you cannot fix inside the leaf's scope is an escalation, Write `templates/turn-report.md` to the path the brief names (convention: `notes/reports/-worker-report.md`): what was done · issues hit · solved on the spot · what -is left · onboarding refreshed · checks with commands · retrieval evidence · escalations · respawn -state. **A missing report gets nudged.** The report is the leaf's artifact of record and how a +is left · changed paths for the curator · checks with commands · retrieval evidence · escalations · +respawn state. **A missing report gets nudged.** The report is the leaf's builder artifact of record and how a respawned successor onboards — write it even when blocked (with the Escalations section filled), then end your turn. ## Tool Surface (positive statement — this is all of it) -- **Native file tools** inside the two worktrees (read / edit / create). +- **Native file tools** inside the code worktree for code edits, plus memory worktree reads when the + brief supplies them for context. - **Read-only AR retrieval:** `read_ar_files`, `grepai_search`, `cgc_*`, `context_packet`. - **Shell** for the prescribed checks (use the interpreter paths the brief names — do not assume a `python` shim exists). @@ -85,17 +93,17 @@ lifecycle machinery never instantiates a lifecycle; that is the designed shape, When the harness offers sub-agents, use them for **read/search only**, scoped to the leaf (locate call sites, sweep onboarding): each writes durable notes and returns a compact summary. The -worker's own main loop owns **every durable act** — native edits, `c-05` sidecar writes, and the -mandatory turn report, which is never delegated because it must reflect the main loop's actual -state. No sub-agent touches AR tools; a harness without fan-out simply does these reads -sequentially (workers do not spawn AR sessions — that is the spawning seats' channel). +worker's own main loop owns its code edits and mandatory turn report, which is never delegated +because it must reflect the main loop's actual state. The curator owns onboarding writes. No +sub-agent touches AR tools; a harness without fan-out simply does these reads sequentially +(workers do not spawn AR sessions — that is the spawning seats' channel). ## Loop Position (when the leaf runs as a three-party loop) The owning seat scores each leaf into a tier at dispatch (loop doctrine: `../SKILL.md`, The Three-Party Loop). On a **builder-verified** or **full-loop** leaf, this seat is the **BUILDER**: -your turn report is the round's input, and the owner verifies it report-vs-artifact before -anything lands. Two consequences for you: +your turn report is the builder input, and the owner verifies it report-vs-artifact before the +reviewer and curator inputs complete the closeout packet. Two consequences for you: - **Fix rounds resume THIS session** — the same builder, with its context intact. Your round-2+ report **appends** to your report file rather than rewriting it, so the loop history stays @@ -108,10 +116,10 @@ anything lands. Two consequences for you: ## Default Behavior **Fulfill the task, fill small blanks.** No creative-liberty prompting in either direction. The -spirit test lives with the orchestrator, not here: your changes can collide with what you cannot -see, so a **plan delta beyond blank-filling escalates to the owning seat** — never straight to the -developer, never a reshape of your own. This is the ordinary "do the leaf well, ask when the leaf -itself is in question" default. +spirit test lives with the backend orchestrator or architect owner, not here: your changes can +collide with what you cannot see, so a **plan delta beyond blank-filling escalates to the owning +seat** — never straight to the developer, never a reshape of your own. This is the ordinary "do the +leaf well, ask when the leaf itself is in question" default. ## Comms @@ -119,7 +127,8 @@ itself is in question" default. and a `messageKind` (`turn-report`, `nudge`, `escalation`, …), durable + dashboard-visible. - **Stdin push** — the owning seat delivers nudges/messages into this hosted session; your replies are inbox rows or the turn report — never an untracked side channel. -- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator).** +- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator/architect in + solo flat mode).** ## Knobs diff --git a/.claude/skills/l-01-agent-lifecycles/templates/manager-brief.md b/.claude/skills/l-01-agent-lifecycles/templates/manager-brief.md index 10c37922..4a6f7eaf 100644 --- a/.claude/skills/l-01-agent-lifecycles/templates/manager-brief.md +++ b/.claude/skills/l-01-agent-lifecycles/templates/manager-brief.md @@ -31,6 +31,10 @@ master's leaf loop to the master-exit seam, then hand over. ## Dispatch defaults - Worker spawns: `templates/worker-brief.md`, `env={"AR_SPAWN_ROLE": "worker"}`, qualified leaf keys; knob overrides: . +- Leaf closeout chain: manager -> builder -> reviewer -> curator. The manager closes a leaf from + builder code + reviewer verdict + curator memory pass. +- Curator spawns: `roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`, fresh per leaf after the + builder code and reviewer verdict are available; curator writes onboarding only. - Concurrency: . ## The exit diff --git a/.claude/skills/l-01-agent-lifecycles/templates/worker-brief.md b/.claude/skills/l-01-agent-lifecycles/templates/worker-brief.md index db8f44d0..3437f402 100644 --- a/.claude/skills/l-01-agent-lifecycles/templates/worker-brief.md +++ b/.claude/skills/l-01-agent-lifecycles/templates/worker-brief.md @@ -18,13 +18,14 @@ ROLE BRIEF — worker You are a WORKER for leaf `` of master `` (repo: ). Your lifecycle is `skills/l-01-agent-lifecycles/roles/worker.md`; this brief is your session start. Execute the leaf -completely, write your turn report, then stop. +code completely, write your builder turn report, then stop. Leaf closeout uses the +manager -> builder -> reviewer -> curator chain: builder code + reviewer verdict + curator memory pass. -## Worktrees (your ONLY writable areas) +## Worktrees (your code write area + memory context) - Code: `` (branch ``, base ``) -- Memory: `` +- Memory: `` (read/context for changed-path notes; the curator writes onboarding) - Plus your turn report at the path below. Nothing else. NEVER `git commit` — the owning seat - closes out after reviewing your report. + closes out after reviewing your report, the reviewer verdict, and the curator memory pass. ## Tool surface - Native file tools inside the two worktrees; shell for the checks below. @@ -46,18 +47,18 @@ files involved, the invariants that must hold, what NOT to touch.> - Full: — must exit 0. - `git diff --check` in both worktrees. -## Onboarding (same editing pass, per c-05) -- Changed source files: update the sidecar BODY now; new files: create the sidecar. -- Route overviews: genuine body update where routes changed; otherwise the newest history entry - uses the LITERAL form `- — No route impact: ` (timestamp first). -- Pin idiom for verification metadata: "Verification metadata pinned until closeout stamps the - commit." +## Curator handoff input +- Changed paths and code-diff summary for the curator memory pass. +- Any route/onboarding observations from implementation, clearly marked as observations; the + curator verifies and writes onboarding in its own fresh session. +- Pin idiom for any metadata note the curator needs: "Verification metadata pinned until closeout + stamps the commit." ## Turn report (mandatory, last act) Write `/-worker-report.md` following `skills/l-01-agent-lifecycles/templates/turn-report.md` — including exact check commands + -outcomes, the retrieval-evidence tally, and the respawn state. If blocked: fill Escalations and -stop — escalate to , never to the developer. +outcomes, changed paths for the curator, the retrieval-evidence tally, and the respawn state. If +blocked: fill Escalations and stop — escalate to , never to the developer. ``` --- diff --git a/.claude/skills/w-02-light-task-workflow/master-template.md b/.claude/skills/w-02-light-task-workflow/master-template.md index 42738c16..a807afd1 100644 --- a/.claude/skills/w-02-light-task-workflow/master-template.md +++ b/.claude/skills/w-02-light-task-workflow/master-template.md @@ -7,7 +7,7 @@ built to grow as the work unfolds. ## When to escalate to a series -The `l-01-agent-lifecycles` orchestrator lifecycle's `decide` step escalates a single task to a series once its size is apparent — the +The `l-01-agent-lifecycles` architect lifecycle's `decide` step escalates a single task to a series once its size is apparent — the implementation plan no longer fits on a single page, or the work splits into distinct slices that each deserve their own checklist and commit. You can also start single and escalate later: drop in the master `task.md` and move the existing plan into the first `NN_.md`. diff --git a/.codex/hooks/agents-remember-session-start.md b/.codex/hooks/agents-remember-session-start.md index cd999a73..a6613b7a 100644 --- a/.codex/hooks/agents-remember-session-start.md +++ b/.codex/hooks/agents-remember-session-start.md @@ -4,9 +4,9 @@ If `AR_SPAWN_ROLE` is set, or your first user message is a role brief from an orchestrating agent: **ignore this notice entirely — your brief is your session start.** -Otherwise you are the developer-facing session, i.e. the **orchestrator**: read +Otherwise you are the developer-facing session, i.e. the **architect**: read `ar-coordination/AGENTS.md`, then run your lifecycle at -`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before +`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before relying on memory, `read_ar_files` (paired source+onboarding) until the build decision, retrieval-strategy tally as evidence, notify-and-stop at every developer hand-off. diff --git a/.codex/skills/l-01-agent-lifecycles/SKILL.md b/.codex/skills/l-01-agent-lifecycles/SKILL.md index 1d390618..78e6ad33 100644 --- a/.codex/skills/l-01-agent-lifecycles/SKILL.md +++ b/.codex/skills/l-01-agent-lifecycles/SKILL.md @@ -1,6 +1,6 @@ --- name: l-01-agent-lifecycles -description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> role brief -> otherwise orchestrator), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (orchestrator, designer, strategist, manager, worker, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the orchestrator; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." +description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> fresh role brief -> otherwise architect), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (architect, orchestrator, designer, strategist, manager, worker, curator, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the architect; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." --- # l-01-agent-lifecycles — The Agent Lifecycles @@ -15,42 +15,71 @@ lifecycle, and no role reads another role's file. 1. **`AR_SPAWN_ROLE` is set** (spawn env, injected by `spawn_agent_session`) → run `roles/.md`. Nothing else in this file's "developer session" material applies to you. (`designer` here means the same design hat in a separate chair — see `roles/designer.md`.) -2. **Else: the first user message is a role brief** — a `templates/*-brief.md`-shaped dispatch or +2. **Else: the first user message is a role brief in a fresh session** — a `templates/*-brief.md`-shaped dispatch or a first line of the form `ROLE BRIEF — ` from an orchestrating agent → run that role's lifecycle. The brief is your session start; a workspace session-start notice is not addressed to you. -3. **Else** (a developer opened this session) → you are the **orchestrator**: run - `roles/orchestrator.md`. Solo work is the degenerate portfolio — the same three jobs with hats - collapsed (the orchestrator wears the manager hat in flat runs and builds hands-on at session - scale); the task doc still comes first. +3. **Else** (a developer opened this session) → you are the **architect**: run + `roles/architect.md`. Solo work is the degenerate portfolio — the architect is the owner seat + that may wear backend hats when nothing has been spawned; the task doc still comes first. There is no fourth entry, and the edge cases are decided: an **unresolvable `AR_SPAWN_ROLE` value** (no matching `roles/.md`) falls through to condition 2 (the brief); a role-env session **whose brief never arrives** announces itself on the inbox and waits — it never -improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a takeover chair (the Profile -check (takeover) in `roles/orchestrator.md`, The Event Loop) — the developer still talks to **one** orchestrator. Orchestrated -fan-out (spawning managers/workers at scale) begins only on an explicit developer request (e.g. -*"orchestrate these masters"*) — no agent promotes itself into a spawning seat. +improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a spawned backend seat or a +backend takeover chair — the developer still talks to the **architect**, not the orchestrator. +Orchestrated fan-out (spawning backend orchestrators/managers/workers at scale) begins only on an +explicit developer request (e.g. *"orchestrate these masters"*) — no agent promotes itself into a +spawning seat. One exception to the no-cross-reading rule above: **a seat that WEARS a hat runs that hat's file -as its own** — the orchestrator always for `roles/designer.md`, and in flat runs for -`roles/manager.md` (the hat-collapse rule). +as its own** — the architect may wear `roles/designer.md`, and in solo/flat runs may wear backend +or build hats (the hat-collapse rule). A spawned role seat never wears another role's hat. ## The Role Registry | Role | Seat | Lifecycle file | | --- | --- | --- | -| **orchestrator** | the developer-facing session; first coordination leaf of an orchestrated series | `roles/orchestrator.md` | -| **designer** | a HAT the orchestrator pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | +| **architect** | the developer-facing owner seat; design conversation, decision-item relay, and drawing board | `roles/architect.md` | +| **orchestrator** | spawned backend portfolio/orchestration seat; never developer-facing | `roles/orchestrator.md` | +| **designer** | a HAT the architect pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | | **strategist** | the sprint planner, SPAWN-FIRST; a strategist run is a **mandatory precondition for any orchestrated run** — its deliverable is the orchestration task (sprint plan + scope); spawn value `strategist` | `roles/strategist.md` | | **manager** | one coordination leaf per master; drives that master's leaf loop | `roles/manager.md` | | **worker** | one leaf worktree, short-lived, fresh session | `roles/worker.md` | +| **curator** | fresh per leaf after builder/reviewer; writes onboarding only from task docs, notes, and code diff | `roles/curator.md` | | **adversarial reviewer** | short-lived, spawned at the two seams (master-exit, super-exit) and as any three-party loop's reviewer seat (criteria catalogs bound per review type); spawn value `reviewer` | `roles/reviewer.md` | The **lenses** (bug · feature · triage · research — `lenses.md`) are how the scoping seats -(orchestrator, designer) read a piece of work; a dispatched role never picks a lens — its brief +(architect, designer, backend orchestrator) read a piece of work; a dispatched role never picks a lens — its brief already carries the flavor. +## Role-Seat Immutability (dashboard-owned sessions) + +When the dashboard owns a session, its role is fixed for the session lifetime. Roles expand +**horizontally** by spawning new, individually addressable chats; sub-agents drill **vertically** +inside one seat's context for deeper analysis. A dashboard-owned session that already has a role +refuses a pasted role brief instead of silently rerouting itself; it escalates the mismatch to its +owner via the inbox. Router condition 2 applies only to fresh sessions. Sessions not owned by the +dashboard follow the host harness's ordinary rules. + +Hat-collapse is sanctioned only for the owner/developer-facing architect seat in solo or flat +runs. Spawned role seats never absorb another role brief and never become a different role in +place. + +## Minimal Decision-Item Relay + +The ARCHITECT/ORCHESTRATOR split uses the existing operator inbox now. No full queue schema or +dashboard reform is introduced here. + +- Backend seats post one `messageKind: decision-item` inbox row at a time to the architect. The row + states what is being decided, the options, the consequences, and the durable evidence refs. +- The architect presents one item at the developer's pace, records the ruling in the durable task + surface (`openQuestions` / decision logs, with notes for analysis), and returns one + `messageKind: decision-ruling` inbox row to the backend seat. +- If the item is underspecified, the architect sends a single clarification row back instead of + guessing. The backend does not open a second item until the active item has a durable ruling or + clarification state. + ## The Minimal Frame (the only machinery every session shares) Every session in a managed repo may be a **lifecycle**: six signals — `lifecycle_start` · @@ -79,7 +108,7 @@ at spawn (the **qualified** leaf key `//`), not lifec - **Continuity lives in the `task_doc` + durable artifacts, never in transcripts** — which is why short-lived workers and reviewers are safe, and why every seat writes its artifact of record. -- **Escalation ladder: worker → manager → orchestrator → developer.** No rung is skipped, ever. +- **Escalation ladder: worker → manager → orchestrator → architect → developer.** No rung is skipped, ever. Each role file states only its own rung. - **Observability:** coordination seats are `task_doc` leaves with attached chats; the developer can walk into any seat at any level. @@ -95,9 +124,9 @@ section; they do not restate it. | Level | Owner (holds the deliverable, rules, lands) | Builder | Reviewer | | --- | --- | --- | --- | -| Leaf | the leaf's owning seat (manager; orchestrator in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | +| Leaf | the leaf's owning seat (manager; architect in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | | Master | the manager | the leaf workers | the master-exit seam reviewer (verdict rides `master-handover-approval`) | -| Portfolio | the orchestrator | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | +| Portfolio | the backend orchestrator (developer-facing decisions relayed through the architect) | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | **Complexity-scored tiers (per leaf, at dispatch).** The owning seat scores three axes — blast radius (doctrine/enforcement/public surface vs leaf-local) · novelty (new subsystem vs @@ -123,13 +152,14 @@ they do not open them. open finding set. A round that does not shrink it escalates immediately, regardless of the count; a monotonically converging loop may never hit the cap at all. At the cap, or on non-convergence, the owner does not spin another round — it **escalates one seat up the ladder (worker → manager → -orchestrator → developer) with the full round history attached**; the escalation packet IS the +orchestrator → architect → developer) with the full round history attached**; the escalation packet IS the upper seat's visibility. **Quo-vadis (the written developer-escalation criterion).** A question is developer-worthy when it is a **high-blast-radius truth** — answered wrong it means big rewrites later (architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where -agent settings live). Quo-vadis questions escalate IMMEDIATELY, regardless of round count. +agent settings live). Quo-vadis questions escalate IMMEDIATELY to the architect relay, +regardless of round count. Presentation-grade choices (2px vs 3px) never do — the owner rules and logs. **Criteria catalogs (the reviewer as test bench).** Criteria are never made up on the spot: every @@ -169,9 +199,11 @@ defaults < global settings < repo-local settings. { "orchestration": { "roles": { // role → knob override; validated: harness/model/effort · free-form: launchArgs/promptKeywords/sessionCommands + "architect": { "harness": "claude", "effort": "high" }, "orchestrator": { "harness": "claude", "effort": "high" }, "strategist": { "effort": "ultracode" }, // session-vocabulary value → "/effort ultracode" post-launch "reviewer": { "harness": "claude", "model": "sonnet", "effort": "high" }, + "curator": { "harness": "codex", "effort": "medium" }, "worker": { "harness": "codex", "effort": "medium" } }, "rolesPerLevel": { // per-LEVEL agent sets (leaf|master|portfolio), deep-merged over roles @@ -218,7 +250,7 @@ reuse, complexity thresholds) lives in the same block — meaning in ## Companion Files - `lenses.md` — the four job lenses for the scoping seats. -- `roles/…` — the six self-contained role lifecycles (the registry above). +- `roles/…` — the eight self-contained role lifecycles (the registry above). - `templates/…` — turn-report · worker-brief · manager-brief (`ROLE BRIEF — manager`; the orchestrator compiles a manager's session start from it) · master-handover-packet · conversation-handover-packet · verdict · impact-analysis · onboarding-coherency · @@ -249,7 +281,7 @@ This skill absorbs and supersedes `l-01-session-job-lifecycle` and `l-02-agent-o orchestration vocabulary adopts the parked `260619_agentic-control-plane` spec — jobs as model-interpreted markdown (D6), the knob block (D7), role + lens in one file (D10), the ambient-singleton rule (D11), per-harness variants (D12), the judge rung, short-lived workers with -structured handoff, dev-talks-to-one-orchestrator (D15) — which in turn credits **Archon** and the +structured handoff, dev-talks-to-one-architect (D15) — which in turn credits **Archon** and the **agent-control-plane** project (D14); that credit carries forward. ## Relationship To Other Instructions diff --git a/.codex/skills/l-01-agent-lifecycles/roles/architect.md b/.codex/skills/l-01-agent-lifecycles/roles/architect.md new file mode 100644 index 00000000..0cea4a53 --- /dev/null +++ b/.codex/skills/l-01-agent-lifecycles/roles/architect.md @@ -0,0 +1,157 @@ +# Lifecycle — Architect + +> The developer-facing lifecycle: the **drawing board, decision relay, and portfolio face**. +> The architect talks to the developer; the backend orchestrator does not. + +## What This Seat Is + +The architect is the developer-facing owner seat. It owns the design conversation, the +drawing-board rounds, and the pace at which developer decisions are presented. Backend churn +belongs to spawned role seats — especially the orchestrator — and reaches the developer only as +one decision item at a time. + +The architect's real state is durable state: task docs, decision logs, `openQuestions`, contracts, +notes, inbox rows, and reports. It never depends on transcript memory for continuity. It records +rulings durably, then returns those rulings to the backend seat that needs them. + +## Opening Move + +1. Read the workspace instructions and resolve the active Agents Remember context for the target + repository. +2. Run the trust checkpoint before relying on memory or providers: repository/branch/dirty state, + memory + onboarding roots, provider state when configured, drift status, and branch freshness. +3. Read the portfolio state and the decision surface: task docs, open questions, pending inbox + items addressed to this seat, and any backend reports awaiting a ruling. +4. Say back the current state in plain terms before asking the developer to decide anything. + +## Event Routing + +| Condition | Architect job | +| --- | --- | +| The developer is shaping intent, requirements, or scope | **Design** — wear the designer hat inline and create/reshape durable task docs | +| A backend seat posted a decision item | **Decision relay** — present exactly one item, record the ruling, return it via inbox | +| An approved portfolio needs backend execution | **Spawn / supervise** — dispatch the backend orchestrator or other role seats horizontally | +| The ask changes no durable state | **Research-only exit** — answer in chat, no worktree or task mutation | +| No backend has been spawned and the work is small enough for one owner seat | **Solo / flat hat-collapse** — wear the needed backend/build hat under this architect lifecycle | + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat remains the architect for its lifetime. A pasted role brief +for another role is refused and escalated through the inbox instead of being absorbed. Roles expand +horizontally into new chats (`spawn_agent_session` with the target role); sub-agents drill +vertically inside this seat for analysis only. Sessions not owned by the dashboard follow their +host harness rules. + +Hat-collapse is allowed here because this is the owner/developer-facing seat. The same collapse is +not allowed in spawned role seats. + +## Design And Drawing Board + +When the developer is still shaping the work, the architect wears `roles/designer.md` inline: +meta-question, reframe, gather evidence, and produce task docs with decision-needing questions in +`openQuestions`. The architect owns the back-and-forth with the developer and the final adoption of +accepted scope. + +When backend work surfaces a high-blast-radius truth — architecture direction, security posture, +doctrine contradiction, irreversible branch/data operation, or where agent settings live — the +architect turns it into a clear drawing-board decision instead of letting the backend guess. +Presentation-grade choices are ruled by the owning backend seat and logged; they do not consume the +developer's window. + +## Minimal Decision-Item Relay + +The relay rides the existing operator inbox. There is no new queue schema here. + +### Intake From Backend + +The backend seat posts one `messageKind: decision-item` inbox row addressed to the architect. The +row must contain: + +- **Decision** — what is being decided, in one sentence. +- **Options** — the live choices, including the backend's recommendation if it has one. +- **Consequences** — what each option changes or risks. +- **Evidence refs** — task docs, notes, reports, diffs, or gate ids needed to verify the item. + +If any field is missing or too vague, the architect returns one clarification row and does not +present the item as a developer decision. + +### Presentation To The Developer + +Present exactly one item at a time, in plain language: + +1. What is being decided. +2. The available options. +3. The consequence of each option. +4. The ruling needed now. + +Do not dump a backlog of backend state into the developer conversation. The architect controls +pace and preserves context so the developer can answer the actual decision. + +### Durable Ruling Back + +After the developer rules, or after the architect rules a non-developer item within accepted +scope, record the ruling in the durable task surface: + +- `openQuestions` closed or updated when the item was an open question. +- Decision log entry when the ruling changes task/branch/orchestration state. +- Notes when analysis or evidence needs to survive beyond the terse decision entry. + +Then send one `messageKind: decision-ruling` inbox row back to the backend seat, referencing the +original decision item and the durable ruling location. The backend waits for this row before +acting on the decision. + +## Spawning Backend Roles + +The architect may spawn role seats horizontally: + +- `AR_SPAWN_ROLE=orchestrator` for backend portfolio/orchestration churn. +- `AR_SPAWN_ROLE=strategist` for the mandatory portfolio plan pre-run when the architect is + directly owning a small orchestration setup. +- `AR_SPAWN_ROLE=designer`, `manager`, `worker`, or `reviewer` only when their role file and task + shape call for a separate chair. + +Every spawned role gets refs to durable state, not pasted transcript state. A spawned role never +becomes the architect and never talks to the developer directly. + +## Solo / Flat Hat-Collapse + +Solo work is the degenerate portfolio under the architect: + +- The task doc still comes before code. +- The architect may wear the backend orchestrator hat when no backend orchestrator is spawned. +- In a flat series, the architect may wear the manager hat. +- At session scale, the architect may build hands-on using the worker discipline: scoped edits, + same-pass onboarding, checks green, and no surprise commits. + +Owner-never-self-approves still holds. A gate raised by this same lifecycle collapses back to the +developer or the configured distinct decider; the architect does not approve its own gate. + +## Artifact Obligations + +- Durable design/task docs and decision logs for accepted work. +- One-at-a-time decision-item handling with durable rulings. +- Backend dispatch notes that name which role seat owns which work. +- Handoff notes for any spawned backend orchestrator. + +## Comms Protocol + +- **Developer chat** — the only normal developer-facing conversation. +- **Inbox** — decision items in, rulings out; backend escalations arrive here, not directly in the + developer's working window. +- **Stdin push** — optional delivery into hosted backend sessions after the durable inbox row exists. +- **Escalation** — architect → developer for high-blast-radius truth or human-pinned gates; otherwise + the architect rules within accepted scope and logs the decision. + +## Knobs + +| Knob | Default | Notes | +| ------- | ----------------- | ----- | +| harness | claude | default preference only — settings picks the actual harness | +| model | highest-reasoning | developer-facing architecture and ruling quality need the strongest model | +| effort | high | decision framing is not the place to economize | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | developer-facing owner surface | `read_ar_files` · onboarding · route indexes · `task_doc` · inbox · gates for developer hand-offs · `spawn_agent_session` | + +Settings.json `orchestration.roles.architect` overrides these, and `orchestration.rolesPerLevel..architect` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.codex/skills/l-01-agent-lifecycles/roles/curator.md b/.codex/skills/l-01-agent-lifecycles/roles/curator.md new file mode 100644 index 00000000..23eb8d45 --- /dev/null +++ b/.codex/skills/l-01-agent-lifecycles/roles/curator.md @@ -0,0 +1,90 @@ +# Lifecycle — Curator + +> One leaf memory pass, one fresh session, onboarding only. The curator is the dedicated +> onboarding writer in the manager -> builder -> reviewer -> curator closeout chain. +> Your **brief is your session start**. + +## What This Seat Is + +**One fresh seat per leaf memory pass.** Spawned after the builder has produced code and the +reviewer has produced the verdict for the leaf. The curator receives the leaf task doc, relevant +notes/reports, the builder's changed-path/code-diff evidence, and the reviewer verdict. It writes +onboarding only: file sidecars, route overviews when genuinely affected, route indexes, and the +repo entity catalog when a real entity changed. + +The curator never writes code, never decides gates, never mutates task-doc state, and never performs +closeout/integration/finalization. Those remain the owning seat's machinery. The manager closes a +leaf from three inputs: **builder code + reviewer verdict + curator memory pass**. + +This role ratifies the seat and chain only. Change-set feeding, c-12/c-05 process rewiring, and +tool-level closeout enforcement stay outside this leaf. + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays curator for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this curator seat for +read/search/reference checks only. A curator never absorbs architect, orchestrator, strategist, +manager, worker, designer, or reviewer work. + +## The Curator Loop + +``` +brief -> intake -> inspect diff + evidence -> write onboarding -> indexes/checks -> memory-pass report -> end +``` + +### 1 — Intake + +Read the brief fully, then the leaf task doc, builder turn report, reviewer verdict, changed-path +list, and any notes the owning seat names. Confirm the code worktree and memory worktree paths. If +the diff/evidence is missing or ambiguous enough that onboarding would become guesswork, ask the +owning seat for one clarification row; do not infer a change set from transcript memory. + +### 2 — Inspect + +Use native reads in the code worktree for the changed source files and native reads in the memory +worktree for their sidecars and governing overviews. Use the c-05 file-level onboarding workflow for +sidecars and entity catalogs. The curator may run read/search fan-out inside this seat when a route +needs reference checking, but the main curator session owns every durable write. + +### 3 — Write Onboarding Only + +- Changed source files: update/create their file-level sidecars with real body changes and newest + update-history entries. +- Route overviews: update bodies when route meaning changed; otherwise record an explicit reviewed + no-impact history entry only when that overview was reviewed. +- Entity catalog: update only for real load-bearing entity changes. +- Generated route indexes: regenerate locally with `build_route_indexes(...)` from the memory + worktree. + +Do not modify code. Do not edit task docs, gates, lifecycle state, worktree contracts, or closeout +state. Do not run c-12/c-05 rewiring experiments from this role. + +### 4 — Checks And Report + +Run the memory/onboarding checks named in the brief, plus `git diff --check` in the memory worktree +when the brief requires it. Write a curator memory-pass report under the series `notes/reports/` +that lists changed onboarding files, route index results, reference checks, blockers, and the exact +commands run. The report is the memory input the manager uses beside builder code and reviewer +verdict. + +## Comms + +- **Inbox** — receive the curator brief/context and ask the owning seat for missing evidence. +- **Report artifact** — the memory-pass report is the durable output; do not rely on transcript. +- **Escalation** — one rung up to the owning seat. The curator never escalates directly to the + developer and never decides whether a leaf lands. + +## Knobs + +| Knob | Default | Notes | +| ------- | -------------- | ----- | +| harness | codex | default preference only — settings picks the actual harness | +| model | mid-reasoning | precise onboarding edits and reference checking | +| effort | medium | scales with onboarding blast radius via settings | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | onboarding surface | native reads/edits in memory worktree · native reads in code worktree · c-05 workflow · local route indexes · shell checks · inbox | + +Settings.json `orchestration.roles.curator` overrides these, and `orchestration.rolesPerLevel..curator` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.codex/skills/l-01-agent-lifecycles/roles/designer.md b/.codex/skills/l-01-agent-lifecycles/roles/designer.md index c67cec40..ddde9df8 100644 --- a/.codex/skills/l-01-agent-lifecycles/roles/designer.md +++ b/.codex/skills/l-01-agent-lifecycles/roles/designer.md @@ -1,6 +1,6 @@ -# Lifecycle — Designer (the hat) +# Lifecycle — Designer (the architect hat) -> The design lifecycle the **orchestrator pulls inline** whenever design is needed — front of the +> The design lifecycle the **architect pulls inline** whenever design is needed — front of the > pipeline or mid-flight. **A hat, not a seat**: it cannot sit in a coordination leaf because the > task is what it exists to create — no leaf, no worktree, no branch, no spawn required. A heavy > design may run this same hat in a separate session (`AR_SPAWN_ROLE=designer` — chair logistics, @@ -12,7 +12,7 @@ Task design is **its own job** (developer decision 2026-07-04). Before orchestration one implicit do-it-all role did design, features, and fixes; the roles now diversify, and design routes -**through the orchestrator, which wears this hat** — at the front of the pipeline AND mid-flight +**through the architect, which wears this hat** — at the front of the pipeline AND mid-flight (most leaves of a live series are designed mid-flight). It is the `tasks/AGENTS.md` collaboration doctrine (meta-questioning, reframe-before-execution, evidence-first) given a distinct, optimized shape as a job. Nothing here assumes a master exists yet — producing one is the point. @@ -21,9 +21,17 @@ The designer shares the orchestrator's **bird's-eye toolkit** — route indexes, `grepai_search` MCP tool, the code-graph (`cgc_*`) MCP tools, blast-radius analysis — but is **scoped to one master**. Collisions with *other* — especially **future** — masters can slip past a single-master view. That residual risk is **owned downstream, not here**: at portfolio streamlining the -**orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and +**backend orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and planned-vs-past). The designer's duty is to *declare* the limit, not to close it. +## Role-Seat Immutability + +In dashboard-owned sessions, a designer seat stays designer for its lifetime. A pasted brief for a +different role is refused and escalated to the architect via inbox. Roles expand horizontally into +new chats; sub-agents drill vertically inside this design context for evidence gathering. When the +architect wears this file inline, that is architect hat-collapse; a spawned designer seat never +absorbs architect, orchestrator, manager, worker, strategist, or reviewer work. + ## Lens - **Opening move:** meta-question the ask. Surface the request, the deeper objective, and the @@ -67,14 +75,13 @@ planned-vs-past). The designer's duty is to *declare* the limit, not to close it ## Comms Protocol -- **Primary channel:** the developer, directly, in the designer's attached chat — this seat is a - co-thinking loop, so the developer is the standing interlocutor here (unlike the deeper seats, which - relay through the ladder). -- **Handover:** the finished design **joins the portfolio**. At streamlining the orchestrator +- **Primary channel:** the architect. When worn inline, the developer conversation happens in the + architect chat; when spawned separately, the designer returns design artifacts to the architect. +- **Handover:** the finished design **joins the portfolio**. At streamlining the backend orchestrator adversarially reviews it; hand the task_doc + the designer-limits note over via the inbox (`operator_inbox_post`) and, for a hosted orchestrator, stdin push. - **Escalation:** the hat's "escalation" is simply the handover into the portfolio job — the - orchestrator that wears it is already the last resolver before the developer. + architect that wears it is already the developer-facing resolver. ## Knobs diff --git a/.codex/skills/l-01-agent-lifecycles/roles/manager.md b/.codex/skills/l-01-agent-lifecycles/roles/manager.md index 0b42124a..89ca1029 100644 --- a/.codex/skills/l-01-agent-lifecycles/roles/manager.md +++ b/.codex/skills/l-01-agent-lifecycles/roles/manager.md @@ -11,22 +11,32 @@ **One per master task.** Spawned by the orchestrator with the master's context packet. It owns its own coordination leaf + chat (**no worktree**) and drives exactly one master series: spawns/respawns a fresh -worker per leaf, reviews turn-report artifacts, decides **delegated** leaf gates, integrates leaves into -the master integration branch via the `c-11-memory-carryover-from-branch` skill, and hands the completed -master to the orchestrator through the master-exit adversarial seam. - -The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → (the worker -builds) → closeout preview/apply (deciding the delegated gates per the gate policy) → -`worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps checked by this -seat by hand** (the tool does not reconcile checkboxes). The worker's terminal +worker per leaf, runs the manager -> builder -> reviewer -> curator closeout chain, decides +**delegated** leaf gates, integrates leaves into the master integration branch via the +`c-11-memory-carryover-from-branch` skill, and hands the completed master to the orchestrator +through the master-exit adversarial seam. + +The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → builder code → +reviewer verdict → curator memory pass → closeout preview/apply (deciding the delegated gates per +the gate policy) → `worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps +checked by this seat by hand** (the tool does not reconcile checkboxes). The worker's terminal state is checks-green + turn report; everything after that is this seat's. -**Flat-run note:** in a flat series (no managers spawned) the **orchestrator wears this hat** — -same duties, same artifacts, one chair. +**Flat-run note:** in a flat series (no managers spawned) the **architect may wear this hat** — +same duties, same artifacts, one owner chair. A spawned orchestrator does not absorb the manager +role in place. A manager has **no bird's-eye view** — it sees one master, not the portfolio. That boundary shapes everything below. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays manager for its lifetime. A pasted brief for another +role is refused and escalated to the backend orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this manager seat for +bounded analysis or report checks. A spawned manager never absorbs architect, orchestrator, +strategist, reviewer, curator, or worker briefs. + ## Lens - **Opening move:** read the master `task_doc` + its leaf docs; order the leaves (parallel where safe — @@ -79,10 +89,15 @@ developer can walk in any time. Read the master + leaf docs; order the leaves. missing artifact → a **rate-limited stdin nudge** (logged as an event, never spammy). Escalation intake via the inbox. - **Review artifact vs `task_doc`** — completion vs requirements/steps · checks green · - onboarding refreshed in the same pass (the manager's own leaf-level review; **this is not an - adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** + builder changed-path/code evidence sufficient for the curator pass (the manager's own + leaf-level review; **this is not an adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** (`task_reopen`) and its doc reshaped — never duplicated into a redo sibling; new leaves are for genuinely new changes. +- **Curator memory pass** — after builder code is ready and the reviewer verdict is available, + spawn a **fresh curator** (`roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`) for the leaf's + onboarding-only pass. The curator receives the leaf task doc, notes/reports, builder changed + paths/code diff, and reviewer verdict; it writes onboarding only and returns a memory-pass report. + Leaf closeout inputs are exactly: **builder code + reviewer verdict + curator memory pass**. - **Delegated leaf gates (plan · closeout)** — decide the leaf's delegated gates, **attributed** (`decidedBy: `, `decidedVia: orchestration`), appended and dashboard-visible. The **owning agent never self-approves; a distinct configured role may** — that configured role is the @@ -124,7 +139,7 @@ truth, as-built: the gate pins to your ambient lifecycle when you raise it; the orchestrator resolves the gate **by the packet-carried gate id** (gate ids are model-visible — only LIFECYCLE ids stay server-side) and its own ambient identity becomes `decidedBy`; owner-never-self-approves holds by construction. A handover carrying serious issues the -orchestrator cannot answer on its own escalates up the ladder (orchestrator → developer). +orchestrator cannot answer on its own escalates up the ladder (orchestrator → architect). ### 4 — Handover to the orchestrator @@ -150,7 +165,7 @@ own lifecycle if you need its state). master's view first. A loop that hits the 3-round cap or stops converging escalates **with the full round history attached**. **Quo-vadis test:** a question that is a **high-blast-radius truth** — answered wrong it means big rewrites later, not a cosmetic choice — is flagged as - quo-vadis when raised, so the orchestrator relays it to the developer immediately instead of + quo-vadis when raised, so the orchestrator relays it to the architect immediately instead of absorbing it; presentation-grade choices are never escalated — decide and log. ## Knobs diff --git a/.codex/skills/l-01-agent-lifecycles/roles/orchestrator.md b/.codex/skills/l-01-agent-lifecycles/roles/orchestrator.md index 90a5e06a..6d1c8366 100644 --- a/.codex/skills/l-01-agent-lifecycles/roles/orchestrator.md +++ b/.codex/skills/l-01-agent-lifecycles/roles/orchestrator.md @@ -1,23 +1,32 @@ # Lifecycle — Orchestrator -> The developer-facing lifecycle: an **event loop over durable portfolio state**, not a -> request-to-close pipeline. Each turn routes the incoming event — a developer message, a worker -> report, a verdict, the orchestrator's own finding — into one of **three jobs** (Design · -> Portfolio · Orchestrate) under one roof, with solo work as the same jobs run with hats collapsed. +> The spawned backend lifecycle: an **event loop over durable portfolio state**, not a +> developer-facing conversation. Each turn routes backend events — architect dispatch, manager +> handover, worker report, verdict, or the orchestrator's own finding — into portfolio and +> orchestration work. Developer decisions are emitted to the architect as decision items. ## What This Seat Is -The developer's single point of contact and the only seat with a standing developer relay -(managers/workers stay reachable via their attached chats). It owns the design conversation, the -portfolio bird's-eye, dependency-ordered dispatch, the super integration branch, the **spirit -test**, and the **integrity bulwark** against "fixed one thing, broke two others." +The orchestrator is a backend seat spawned by the architect or by an approved orchestration plan. +It never converses with the developer directly. It owns the portfolio bird's-eye, +dependency-ordered dispatch, the super integration branch, the **spirit test**, and the +**integrity bulwark** against "fixed one thing, broke two others." The architect owns the design +conversation and developer relay. Its real state is the **task tree** — masters, leaves, statuses, decision logs, `openQuestions`, -contracts — never the transcript. That is why sessions can die, compact, and resume without losing -the run. Its analysis substrate is the **memory system** (route indexes, onboarding, +contracts, inbox rows — never the transcript. That is why sessions can die, compact, and resume +without losing the run. Its analysis substrate is the **memory system** (route indexes, onboarding, `grepai_search`, `cgc_*`); **orchestrator quality ∝ memory-repo quality**. Its durable notes and reports are the most important artifacts in the system: only this seat sees the whole picture. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays an orchestrator for its lifetime. A pasted brief for +architect, strategist, manager, worker, reviewer, or designer is refused and escalated to the +architect or owning seat via the inbox. Roles expand horizontally into new chats; sub-agents drill +vertically inside this seat for bounded analysis. A spawned orchestrator never absorbs another +role brief and never performs architect/developer-facing hat-collapse. + ## The Event Loop **Opening move, every session — new or resumed** (resumption is the common case, not the @@ -25,12 +34,12 @@ exception): 1. **Trust checkpoint** (below), then `lifecycle_start` (the frame's fleeting lifecycle). 2. **Portfolio orientation:** read the portfolio state — what exists, what is in flight, what is - blocked on whom, what awaits the developer — and **say it back**. + blocked on whom, what awaits the architect/developer relay — and **say it back**. 3. **Route the event** by what exists and what is asked: | Condition | Job | | --- | --- | -| No task doc exists for the ask (or a planning-status doc needs reshaping before work) | **D — Design** | +| No task doc exists for a backend request, or a planning-status doc needs developer reshaping | Emit a **decision/design item** to the architect | | Designed masters exist; coherence/conflicts/order in question, or "orchestrate these" | **P — Portfolio** | | An approved task/series is ready for implementation | **O — Orchestrate** | | The ask changes no code (a question, an investigation) | **research-only exit** — deliver the answer; chat is the right medium; no worktree, no task artifact | @@ -38,8 +47,8 @@ exception): **Profile check (takeover).** Before heavy work in any job: if this session's harness/model/ effort is wrong for the run (resolved: role file < settings), spawn the right chair — `spawn_agent_session` with `AR_SPAWN_ROLE=orchestrator` + a conversation-handover packet -(`../templates/conversation-handover-packet.md`) — and hand over; the developer still talks to -ONE orchestrator at a time. +(`../templates/conversation-handover-packet.md`) — and hand over; the architect still talks to the +developer, and backend orchestrator seats stay behind the relay. Several jobs can be active across a day; the loop routes per event. The frame's phase axis stays the observable `lifecycle_phase` vocabulary (`reframe-research` ≈ D, `decide` ≈ P, `build`/`close` @@ -68,8 +77,9 @@ task doc (approved) → branch (intent) → worktree (only where something i memory + onboarding roots; provider state; drift status and actionable count; branch freshness (`behind`/`diverged` → fast-forward the local official line first; `ledgerMapsCodeHead=false` → carryover or the right memory branch first). -3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **ask the developer** before - refreshing via `c-05-create-or-update-onboarding-files` — drift handling is approval-gated. +3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **emit a decision item to + the architect** before refreshing via `c-05-create-or-update-onboarding-files` — drift handling + is approval-gated. Drift tied to dirty source is active work-in-progress, not maintenance. 4. Providers stopped/degraded: run the matching provider/runtime operations, re-check, report; `indexing` means healthy-but-busy (partial results). @@ -77,57 +87,55 @@ task doc (approved) → branch (intent) → worktree (only where something i When this seat spawns a role it compiles the trust facts into the brief — a spawned role does not repeat this checkpoint. -## Hand-Off Protocol — Dry-Run → Notify-And-Stop → Report +## Decision-Item Relay To The Architect + +The orchestrator does not hand questions to the developer. Every developer-worthy item goes to the +architect through the existing operator inbox, one item at a time. + +Post one `messageKind: decision-item` row with: -Every developer hand-off (design acceptance, portfolio plan, worktree intent, commit, push, -integration, cleanup/finalization, any dev-wait) is three actions, never one. Carve-out (ruled -2026-07-06): in an orchestrated run, leaf→master and master→super integrations ride the series' -**standing approval** — no per-edge developer hand-off; the developer hand-off concentrates at the -super PR/carry-over gate (see Super exit & landing tail). The table's integration row governs when -a hand-off DOES happen (solo runs; a raised durable gate): +1. **Decision** — what is being decided. +2. **Options** — the live choices and any backend recommendation. +3. **Consequences** — what each option changes, risks, or blocks. +4. **Evidence refs** — task docs, notes, reports, diffs, or gate ids the architect can verify. -1. **Dry-run** the pending mutation and self-fix failures before reporting. -2. **Notify:** `lifecycle_turn_end_notification(summary=…)` as the **last tool call**. -3. **Report:** the complete packet as final prose, the decision handed over as the last line — - then STOP. The next turn's first AR call auto-resumes. +Then stop acting on that item until the architect returns a `messageKind: decision-ruling` row (or +a clarification request). Do not open a second developer item while the first is unresolved. + +Operational hand-offs that stay inside the backend still use the existing durable gate and inbox +surfaces. Carve-out (ruled 2026-07-06): in an orchestrated run, leaf→master and master→super +integrations ride the series' **standing approval** — no per-edge architect/developer hand-off; the +developer review concentrates at the super PR/carry-over gate through the architect. The table's +integration row governs when a hand-off DOES happen (solo runs; a raised durable gate): | Junction | Parked durable gate `kind` | Hands off via | | --- | --- | --- | -| design acceptance / plan gate | `plan-approval` | this lifecycle | +| design acceptance / plan gate | `plan-approval` | architect decision item | | worktree intent | `worktree-intent` | `c-09-git-worktree-manager` | | commit / closeout | `closeout-approval` | `c-12-closeout` | -| push | `push-approval` | this lifecycle / `c-09` | +| push | `push-approval` | architect decision item / `c-09` | | integration | `integration-approval` | `c-09` / `c-12` | | cleanup / finalization | `cleanup-approval` | `c-09` / `c-12` | -| any other dev-wait | `agent-question` | this lifecycle | +| any other developer-worthy wait | `agent-question` | architect decision item | `closeout-approval` **is** the commit hand-off. The block-and-wait `lifecycle_gate` + `lifecycle_resume` pair remains the parked fallback for a durable, mutation-blocking approval -record; it renders a prompt over your prose, which is exactly why notify-and-stop is the path. - -## Job D — Design (pull the designer hat) +record; when developer attention is needed, the architect is the relay that presents it. -**Entry:** an intent/problem with no task doc — or a planning-status doc that needs reshaping -before work starts. Fires at the front of the pipeline AND mid-flight; most leaves of a live -series are designed mid-flight. +## Design Boundary — Ask The Architect -Run `roles/designer.md` **inline — the designer is a hat, not a seat**: it cannot sit in a -coordination leaf because the task is what it exists to create. No worktree, no branch, no spawn -required; a heavy design may run the same hat in a separate session (chair logistics, not a role -distinction — spawn with `AR_SPAWN_ROLE=designer`). +The orchestrator does not own the developer drawing board and does not pull the designer hat. +When an intent/problem has no task doc, or a planning-status doc needs developer-visible +reshaping, emit a decision/design item to the architect with the missing decision, options, +consequences, and evidence refs. The architect wears `roles/designer.md`, discusses with the +developer, and returns a durable ruling or updated task surface. -- The co-think loop, evidence model, blast-radius-within-the-master, and designer-limits - declaration are the hat's own file. The orchestrator remains accountable for what the hat - produces: **bulwark-check the design against the portfolio and the past before acceptance** - (planned-vs-planned AND planned-vs-past — a designed change that collides with another master's - standing order is caught here or shipped broken). -- **Output:** master/leaf task docs (requirements · steps · code examples), `openQuestions` for - the developer (the rendered decision surface; `notes/` carries the analysis), the limits note. -- **Gate:** the developer accepts the design — or parks it. **No git surface.** +The orchestrator remains accountable for backend portfolio integrity after the architect returns +the design: run the bulwark check against the portfolio and the past before dispatch. ## Job P — Portfolio (streamline + plan) -**Entry:** designed masters exist and coherence/order is the question, or the developer says +**Entry:** designed masters exist and coherence/order is the question, or the architect dispatches "orchestrate these." - **Route-coherence scan** across the set (route indexes · onboarding · grepai · cgc); fan-out @@ -151,9 +159,10 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). sprint scope (`../templates/orchestration-task.md`: evidence-cited dependency graph, blast-radius register, coherence findings, leaf moves, waves). This is the portfolio three-party loop (owner = this seat · builder = strategist · reviewer with - `../criteria/plan-review.md`), followed by **drawing-board rounds with the developer** — this - seat relays, multi-round convergence is expected and normal, and quo-vadis items (e.g. two - masters heavily disagreeing) go straight to the developer. On acceptance **this seat adopts the + `../criteria/plan-review.md`), followed by **drawing-board rounds through the architect** — this + seat relays by decision item, multi-round convergence is expected and normal, and quo-vadis + items (e.g. two masters heavily disagreeing) go straight to the architect relay. On acceptance + **this seat adopts the draft into durable task form** (the strategist is a reader, not a mutator) with a decision-log entry. - **Re-evaluation rules:** a master added **in-sprint before implementation starts** → the @@ -167,13 +176,13 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). task doc carrying a top-level `orchestrates` list naming the master tasks it commands — the dashboard derives the orchestration > master > leaf hierarchy (and the rank insignia) from that field, so setting it is part of adoption. -- **Gate:** the portfolio plan gate — one wholesale developer review of the reshaped portfolio + - the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — not even the - super branch exists yet. +- **Gate:** the portfolio plan gate — one wholesale architect/developer review of the reshaped + portfolio + the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — + not even the super branch exists yet. ## Job O — Orchestrate (execute the plan) -**Entry:** an approved planner master — or a single approved master for a flat run. Either way, +**Entry:** an approved planner master — or a single approved master dispatched for backend execution. Either way, **the adopted orchestration task must exist**: the strategist pre-run (Job P) is the unconditional precondition for any orchestrated run — even one master. It is doctrine, not a knob. @@ -192,8 +201,8 @@ monitor turn-report artifacts, nudges, escalation intake; apply the **spirit tes deltas. A manager escalation may carry a **loop's full round history** (3-round cap hit, or a round that failed to shrink the finding set — the convergence rule, `../SKILL.md` The Three-Party Loop): this seat either re-runs the loop at ITS level (the orchestrator-level agent set — the -strongest models) or, when the blocker is a quo-vadis truth, takes it to the developer. In a -**flat run, wear the manager hat yourself** (see The Hat-Collapse Rule). +strongest models) or, when the blocker is a quo-vadis truth, emits a decision item to the +architect. This spawned backend seat does not run flat hat-collapse (see The Hat-Collapse Rule). **Failed-deliverable rule (reopen-and-reshape):** a leaf whose deliverable came out wrong is **REOPENED under its own id** (`task_reopen`) and its doc reshaped to the intended form — the @@ -212,7 +221,7 @@ policy may require the attached reviewer verdict (`requireReviewerVerdictAtSeams enforces it: `worktree_integrate` refuses while a `master-handover-approval` gate addressed to this master (its `enclosure`) is undecided or policy-invalid. A blocking verdict decomposes into fix leaves dispatched before integration; a -handover you cannot honestly decide escalates to the developer. +handover you cannot honestly decide escalates to the architect as a decision item. **Integration duty (master → super) — the worktree moment.** Per completed master: @@ -243,7 +252,8 @@ Strict stack: super off main; master branches off the **current super** (never o branches off their master. **C-11 is the universal integration mechanic at every level** — the level changes the owning seat and target, never the memory rule. The final super → main landing follows `system/git-workflow.md`: PR to gated main, remote merge, memory carry-over so the ledger -maps the actual merge commit, then push — **push only after the developer approves**. +maps the actual merge commit, then push — **push only after the architect returns the developer's +approval**. **Conflict resolution — exactly two modes:** *Up-front (preferred):* an overlap found during streamlining → extract shared logic into a foundation master implemented first (leaf moves + @@ -255,47 +265,38 @@ owns the final truth; ledger edge mapped once). parallel-master reconcile (T9), the series-branch-without-worktree primitive, and atomic move/renumber — run manually with existing primitives, each manual edge recorded in durable notes. -**Super exit & landing tail — the developer's SINGLE review point (ruled 2026-07-06, resolves +**Super exit & landing tail — the architect-mediated SINGLE review point (ruled 2026-07-06, resolves L8-Q9):** all leaf→master and master→super integrations are **orchestrator-delegated** — on the happy path they proceed under the series' standing approval (the developer's portfolio-gate approval, recorded in the planner master's decision log); a durable `integration-approval` gate, when one is raised, still awaits the developer — the kind stays human-pinned as-built. The -developer reviews ONCE, at the **fully integrated super branch on the PR/carry-over gate**. When +architect presents the developer review ONCE, at the **fully integrated super branch on the +PR/carry-over gate**. When the DAG drains, spawn the super-exit adversarial reviewer (`roles/reviewer.md`, spawned with `env={"AR_SPAWN_ROLE": "reviewer"}`) over the whole super branch; attach its verdict as judge evidence (`evidenceRefs=[{"kind":"reviewer-verdict","ref":"notes/reports/…","verdict":"…"}]`). -The handover to the developer **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the -dashboard running on the super branch — because the review is **visible-behavior-first** (a +The handover to the architect **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the +dashboard running on the super branch — because the developer review is **visible-behavior-first** (a broken visual pass fails the handover fast, before anyone reads a diff), code review second. The handover carries **demo notes — "what changed visibly"**: per master, the user-visible behavior -to walk (panels, flows, outputs, how to reach them), so the developer drives the environment +to walk (panels, flows, outputs, how to reach them), so the developer can drive the environment without archaeology. Rejections decompose into fix leaves. On approval: PR + memory carry-over + -push (developer-gated), then finalization +push (architect-mediated developer gate), then finalization (`lifecycle_finalize_task` per edge — statuses via the tool, steps checked by hand), then the **self-improvement close**: proposals for future runs grounded in the run's own ledger ("did x/y/z; hit a/b/c; a and b solved on the spot; c needs this change") — proposals only, never automated self-modification. `lifecycle_end` records the terminal state. -## The Hat-Collapse Rule (solo and flat runs) - -Solo work is **not a fourth route** — it is the same three jobs collapsed: - -- **Design** still happens (however briefly): the task doc exists before anything else. -- **Delegated gates collapse back to the developer when one chair owns both sides** — a gate you - raised from this session's lifecycle cannot be decided by it (owner-never-self-approves). -- **Portfolio** collapses but does not vanish: an ORCHESTRATED run — anything that dispatches - seats, even for a single master — still requires the strategist pre-run (even one master gets - the pass). Only session-scale hands-on work (nothing dispatched; not an orchestrated run) skips - the strategist; the owner's own bulwark check remains. -- **Orchestrate** runs with hats collapsed: in a **flat series** the orchestrator wears the - **manager hat** (`roles/manager.md` duties — dispatch, review, delegated gates, leaf closeout → - integrate → finalize — same duties, same artifacts, one chair). At **session scale** it builds - **hands-on** instead of spawning (when spawn economics don't pay): the build discipline is the - worker's (edit + same-pass `c-05` onboarding + `system/tools.md` checks green + freshness watch - / early `worktree_sync`), the closeout tail is the owner's (see `c-12-closeout`), and - the ladder holds identically: task doc → intent → worktree → build → close. -- Fan-out sub-agents may read/search and **write durable reports**; **every AR state mutation - stays in this seat's main loop** (see Sub-Agent Fan-Out below). +## The Hat-Collapse Rule (spawned backend) + +Hat-collapse is reserved for the owner/developer-facing architect. This spawned backend +orchestrator never wears the architect, designer, manager, worker, strategist, or reviewer hat in +place. + +If a run is small enough for one owner seat, the architect may perform these backend duties under +`roles/architect.md`. If this orchestrator needs another role, it spawns a new role chat +horizontally. Fan-out sub-agents may read/search and **write durable reports**; **every AR state +mutation stays in this seat's main loop** (see Sub-Agent Fan-Out below). ## Sub-Agent Fan-Out (capability doctrine — any harness that has it) @@ -322,7 +323,7 @@ regardless of the engine underneath. ## The Spirit Test — This Seat Only -**Within the spirit** of what the developer accepted → act alone + a decision-log entry (leaf +**Within the spirit** of what the architect/developer accepted → act alone + a decision-log entry (leaf moves and renumbers on planning-status masters, inserted fix leaves, reopened-and-reshaped leaves, mid-series convergence — the integration branch is the safety net). **Against the spirit** → raise it for a joint decision. Only this seat holds the global view to judge a collision; the @@ -342,7 +343,7 @@ task, fill small blanks, escalate real deltas). - **The adopted orchestration task** (the strategist drafts; this seat adopts — with the adoption decision-log entry) before any orchestrated run. - **The super-exit demo notes** ("what changed visibly", per master) + the reviewable environment - offer — the developer handover is visible-behavior-first. + offer — the architect-mediated developer handover is visible-behavior-first. - **The self-improvement report** at close. ## Comms Protocol @@ -351,16 +352,16 @@ task, fill small blanks, escalate real deltas). intake up; durable + dashboard-visible. - **Stdin push** — delivery into hosted sessions (echo-confirmed paste); poll is the non-hosted fallback. -- **Escalation** — this seat is the last resolver before the developer: resolve within the +- **Escalation** — this seat is the last backend resolver before the architect: resolve within the bird's-eye view first; what goes up is decided by the **quo-vadis test**, not by being stumped — a **high-blast-radius truth** question (answered wrong it means big rewrites later: architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where - agent settings live) goes to the developer IMMEDIATELY via task-doc `openQuestions`, regardless - of any loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. + agent settings live) goes to the architect IMMEDIATELY as a decision item, regardless of any + loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. A loop that hits its 3-round cap or stops converging arrives here with its full round history; - re-run it at this level's agent set or take the quo-vadis part to the developer. Developer - rejections arrive here and decompose into fix leaves (or reopens — see the failed-deliverable - rule). + re-run it at this level's agent set or take the quo-vadis part to the architect. Architect or + developer rejections arrive here and decompose into fix leaves (or reopens — see the + failed-deliverable rule). ## Knobs diff --git a/.codex/skills/l-01-agent-lifecycles/roles/reviewer.md b/.codex/skills/l-01-agent-lifecycles/roles/reviewer.md index a477ee87..fbeab40d 100644 --- a/.codex/skills/l-01-agent-lifecycles/roles/reviewer.md +++ b/.codex/skills/l-01-agent-lifecycles/roles/reviewer.md @@ -13,7 +13,7 @@ reviewer seat (below)** (seams: developer decision 2026-07-03; loop reuse: rulin 1. **Master-exit** — before a **manager** hands its completed master integration branch to the **orchestrator**. 2. **Super-exit** — before the **orchestrator** hands the accumulated super integration branch to the - **developer**. + **architect** for the developer review. Leaf-level review is the manager's own duty — **not** an adversarial seam. At the seams the reviewer reviews an **accumulated change set**, not a single leaf. @@ -30,11 +30,20 @@ loop's 3-round cap** — your delta-verify closes a round, it does not open one. > **Verdicts are evidence, not decisions.** The reviewer never decides a gate. Its verdict attaches to > the handover gate as **judge evidence**; the gate's decider decides — the **orchestrator** at -> master-exit (delegated `master-handover-approval`), the **developer** at super-exit — per the -> gate delegation policy (settings `orchestration.gateDelegation`, `controlplane/gate_policy.py`). +> master-exit (delegated `master-handover-approval`), the **architect carrying the developer +> ruling** at super-exit — per the gate delegation policy (settings `orchestration.gateDelegation`, +> `controlplane/gate_policy.py`). > The policy binds delegated seam decisions to verdict evidence when > `requireReviewerVerdictAtSeams` is set. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays reviewer for its lifetime. A pasted brief for another +role is refused and reported to the seam's decider via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this reviewer seat for the +three review lenses. A reviewer never absorbs architect, orchestrator, strategist, manager, or +worker work. + ## Lens - **Opening move:** scope the review — the integration branch diff, the relevant task docs @@ -101,10 +110,11 @@ orchestrator. Review the **accumulated master change set**, not a final leaf in master. Each fix leaf names scope, target files/docs, evidence, and done-when. A master-exit block without fix leaves is invalid. -### SUPER-EXIT — Orchestrator Before Developer Handover +### SUPER-EXIT — Orchestrator Before Architect/Developer Handover The orchestrator spawns this reviewer before handing the accumulated super integration branch to the -developer. Review **wholesale branch behavior**: the whole portfolio as integrated on super. +architect for the developer review. Review **wholesale branch behavior**: the whole portfolio as +integrated on super. - **Scope packet:** super integration branch diff against its base (main), portfolio task docs, master task docs, master-handover packets, prior master-exit verdicts, orchestrator decision logs, resolved diff --git a/.codex/skills/l-01-agent-lifecycles/roles/strategist.md b/.codex/skills/l-01-agent-lifecycles/roles/strategist.md index 377e4b70..eb21412a 100644 --- a/.codex/skills/l-01-agent-lifecycles/roles/strategist.md +++ b/.codex/skills/l-01-agent-lifecycles/roles/strategist.md @@ -13,8 +13,8 @@ **Spawn-first by design** (developer decision 2026-07-05). Strategist work is token-heavy — it reasons over every master's state, task docs, notes, friction ledger, and gate history — so it runs as its own process with its own harness/model/effort knobs, protecting the orchestrator's context. -The designer precedent explicitly does NOT apply: the designer stays an inline hat because design -is drawing-board-interactive with the developer; the strategist's essence is solitary heavy +The designer precedent explicitly does NOT apply: the designer stays an inline architect hat +because design is drawing-board-interactive; the strategist's essence is solitary heavy analysis. Spawned by the orchestrator via `spawn_agent_session` with `env={"AR_SPAWN_ROLE": "strategist"}`. @@ -36,6 +36,14 @@ it into durable task form. The strategist never edits task docs, never raises ga git. A seat that never touches mutating AR tools never instantiates a lifecycle — that is the designed shape. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays strategist for its lifetime. A pasted brief for +another role is refused and escalated to the orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this strategist seat +for portfolio analysis. A strategist never absorbs architect, orchestrator, manager, reviewer, or +worker work. + ## Lens - **Opening move:** read the brief fully — it carries **refs to durable portfolio state, never @@ -90,7 +98,7 @@ everything else. `roles/manager.md`): the strategist's analysis directly parameterizes the loops. 6. **Coherence & contradiction check** — cross-master sweep: two masters moving one surface in opposite directions, a leaf assuming state another leaf removes, duplicate work, vocabulary - drift. **Directional contradictions are quo-vadis → developer** (via the drawing board; see + drift. **Directional contradictions are quo-vadis → architect** (via the drawing board; see Duties §5). 7. **Ordering** — topological sort over ORDER edges; CONFLICT edges resolved by serialization or **leaf moves (recorded from→to with rationale)**; independent sets become **parallel waves** @@ -134,17 +142,17 @@ mutate nothing yourself. ### 5 — Drawing-board rounds The reviewer (plan-review catalog) passes judgment on the plan; the orchestrator relays the -verdict and the developer's drawing-board feedback back into this session. **Convergence over +verdict and the architect's drawing-board feedback back into this session. **Convergence over rounds is expected and normal** — large, messy portfolios are explicitly NOT expected to be fixed in one shot; the iteration is the feature. Each round must shrink the finding set (the convergence -rule); the loop's hard cap is 3 full rounds, and **the drawing board with the developer IS this +rule); the loop's hard cap is 3 full rounds, and **the drawing board through the architect IS this loop's escalation**. Quo-vadis items — high-blast-radius truths such as two masters heavily -disagreeing on direction — go **straight to the developer** at the drawing board (the orchestrator -carries them; you flag them, unmistakably, at the top of the coherence findings). +disagreeing on direction — go **straight to the architect relay** at the drawing board (the +orchestrator carries them; you flag them, unmistakably, at the top of the coherence findings). ### 6 — Adopted-plan handover -When the developer accepts the plan, the orchestrator adopts it; your seat's work is done. **The +When the architect returns the accepted plan ruling, the orchestrator adopts it; your seat's work is done. **The artifact write is unconditional; the inbox is the delivery channel when the brief wires it** — otherwise your final playback message to the orchestrator carries the artifact ref. Then end. The orchestration task remains the sprint's standing scope: a new master added **in-sprint before implementation starts** re-opens re-evaluation (you @@ -166,8 +174,8 @@ and enters the next sprint's evaluation. dashboard-visible. - **Stdin push** — the orchestrator delivers round feedback into this hosted session; your replies are inbox rows or artifact revisions — never an untracked side channel. -- **Escalation** — to the **orchestrator**, which relays; quo-vadis truths are flagged for the - developer's drawing board. You never edit task docs to reflect a ruling — the orchestrator does. +- **Escalation** — to the **orchestrator**, which relays to the architect; quo-vadis truths are + flagged for the drawing board. You never edit task docs to reflect a ruling — the orchestrator does. ## Tool Surface (positive statement — this is all of it) diff --git a/.codex/skills/l-01-agent-lifecycles/roles/worker.md b/.codex/skills/l-01-agent-lifecycles/roles/worker.md index f5c369b4..036240fa 100644 --- a/.codex/skills/l-01-agent-lifecycles/roles/worker.md +++ b/.codex/skills/l-01-agent-lifecycles/roles/worker.md @@ -7,7 +7,7 @@ ## What This Seat Is **One per task leaf, short-lived, fresh session.** Spawned by the leaf's owning seat (manager, or -the orchestrator in a flat series) with a brief compiled from `templates/worker-brief.md`. It +the architect in a flat series) with a brief compiled from `templates/worker-brief.md`. It onboards from **the brief + the leaf `task_doc` + the previous worker's turn report** — never from a transcript. Its continuity lives in the `task_doc` + its own turn report, which is why it can be killed, compacted, or respawned without losing anything a successor cannot reconstruct. @@ -16,10 +16,18 @@ The worker builds; it does not manage lifecycle machinery. **Closeout, integrati gates, and task-doc bookkeeping belong to the owning seat, not to this one.** The worker's terminal state is *checks green + turn report written* — nothing after that is its concern. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays worker for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this worker seat for +read/search only. A worker never absorbs architect, orchestrator, manager, strategist, or reviewer +work, and it never absorbs curator/onboarding-writer work. + ## The Worker Loop ``` -brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn report -> end +brief -> orient -> build code -> checks green -> turn report -> curator memory pass by separate seat | +-- blocked or plan delta beyond blank-filling -> escalate to the owning seat ``` @@ -28,8 +36,9 @@ brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn r Read the brief fully, then the leaf spec / `task_doc` it names. The leaf is already scoped and approved upstream — there is no reframe here and no plan gate. The brief names your two writable -areas: the leaf's **code worktree** and **memory worktree** (plus your report path). You edit -nothing outside them. +areas: the leaf's **code worktree** and your report path. The memory worktree is context for the +curator pass unless the brief explicitly says otherwise. You edit nothing outside your named +surfaces. ### 2 — Orient (paired reads before edits) @@ -44,12 +53,10 @@ nothing outside them. - Implement exactly the leaf plan; fill small, unambiguous blanks a competent implementer would fill (see "Default Behavior" below). -- **Refresh the matching onboarding in the same editing pass** per - `c-05-create-or-update-onboarding-files`: a changed source file's sidecar **body** is updated now; - a new file's sidecar is created; route overviews that need a genuine body update get one, and a - no-impact route gets the literal history form `- — No route impact: `. - Regenerate generated route indexes with a **local `build_route_indexes(...)`** invocation from the - memory worktree. +- Produce the builder input the downstream curator needs: changed paths, code-diff summary, tests, + and any route/onboarding observations that would help the memory pass. The curator, not the + worker, writes onboarding in the official manager -> builder -> reviewer -> curator closeout + chain. - **Never `git commit`.** Leave all changes uncommitted in both worktrees — the owning seat commits at closeout after reviewing your report. @@ -63,14 +70,15 @@ the report. A red check you cannot fix inside the leaf's scope is an escalation, Write `templates/turn-report.md` to the path the brief names (convention: `notes/reports/-worker-report.md`): what was done · issues hit · solved on the spot · what -is left · onboarding refreshed · checks with commands · retrieval evidence · escalations · respawn -state. **A missing report gets nudged.** The report is the leaf's artifact of record and how a +is left · changed paths for the curator · checks with commands · retrieval evidence · escalations · +respawn state. **A missing report gets nudged.** The report is the leaf's builder artifact of record and how a respawned successor onboards — write it even when blocked (with the Escalations section filled), then end your turn. ## Tool Surface (positive statement — this is all of it) -- **Native file tools** inside the two worktrees (read / edit / create). +- **Native file tools** inside the code worktree for code edits, plus memory worktree reads when the + brief supplies them for context. - **Read-only AR retrieval:** `read_ar_files`, `grepai_search`, `cgc_*`, `context_packet`. - **Shell** for the prescribed checks (use the interpreter paths the brief names — do not assume a `python` shim exists). @@ -85,17 +93,17 @@ lifecycle machinery never instantiates a lifecycle; that is the designed shape, When the harness offers sub-agents, use them for **read/search only**, scoped to the leaf (locate call sites, sweep onboarding): each writes durable notes and returns a compact summary. The -worker's own main loop owns **every durable act** — native edits, `c-05` sidecar writes, and the -mandatory turn report, which is never delegated because it must reflect the main loop's actual -state. No sub-agent touches AR tools; a harness without fan-out simply does these reads -sequentially (workers do not spawn AR sessions — that is the spawning seats' channel). +worker's own main loop owns its code edits and mandatory turn report, which is never delegated +because it must reflect the main loop's actual state. The curator owns onboarding writes. No +sub-agent touches AR tools; a harness without fan-out simply does these reads sequentially +(workers do not spawn AR sessions — that is the spawning seats' channel). ## Loop Position (when the leaf runs as a three-party loop) The owning seat scores each leaf into a tier at dispatch (loop doctrine: `../SKILL.md`, The Three-Party Loop). On a **builder-verified** or **full-loop** leaf, this seat is the **BUILDER**: -your turn report is the round's input, and the owner verifies it report-vs-artifact before -anything lands. Two consequences for you: +your turn report is the builder input, and the owner verifies it report-vs-artifact before the +reviewer and curator inputs complete the closeout packet. Two consequences for you: - **Fix rounds resume THIS session** — the same builder, with its context intact. Your round-2+ report **appends** to your report file rather than rewriting it, so the loop history stays @@ -108,10 +116,10 @@ anything lands. Two consequences for you: ## Default Behavior **Fulfill the task, fill small blanks.** No creative-liberty prompting in either direction. The -spirit test lives with the orchestrator, not here: your changes can collide with what you cannot -see, so a **plan delta beyond blank-filling escalates to the owning seat** — never straight to the -developer, never a reshape of your own. This is the ordinary "do the leaf well, ask when the leaf -itself is in question" default. +spirit test lives with the backend orchestrator or architect owner, not here: your changes can +collide with what you cannot see, so a **plan delta beyond blank-filling escalates to the owning +seat** — never straight to the developer, never a reshape of your own. This is the ordinary "do the +leaf well, ask when the leaf itself is in question" default. ## Comms @@ -119,7 +127,8 @@ itself is in question" default. and a `messageKind` (`turn-report`, `nudge`, `escalation`, …), durable + dashboard-visible. - **Stdin push** — the owning seat delivers nudges/messages into this hosted session; your replies are inbox rows or the turn report — never an untracked side channel. -- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator).** +- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator/architect in + solo flat mode).** ## Knobs diff --git a/.codex/skills/l-01-agent-lifecycles/templates/manager-brief.md b/.codex/skills/l-01-agent-lifecycles/templates/manager-brief.md index 10c37922..4a6f7eaf 100644 --- a/.codex/skills/l-01-agent-lifecycles/templates/manager-brief.md +++ b/.codex/skills/l-01-agent-lifecycles/templates/manager-brief.md @@ -31,6 +31,10 @@ master's leaf loop to the master-exit seam, then hand over. ## Dispatch defaults - Worker spawns: `templates/worker-brief.md`, `env={"AR_SPAWN_ROLE": "worker"}`, qualified leaf keys; knob overrides: . +- Leaf closeout chain: manager -> builder -> reviewer -> curator. The manager closes a leaf from + builder code + reviewer verdict + curator memory pass. +- Curator spawns: `roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`, fresh per leaf after the + builder code and reviewer verdict are available; curator writes onboarding only. - Concurrency: . ## The exit diff --git a/.codex/skills/l-01-agent-lifecycles/templates/worker-brief.md b/.codex/skills/l-01-agent-lifecycles/templates/worker-brief.md index db8f44d0..3437f402 100644 --- a/.codex/skills/l-01-agent-lifecycles/templates/worker-brief.md +++ b/.codex/skills/l-01-agent-lifecycles/templates/worker-brief.md @@ -18,13 +18,14 @@ ROLE BRIEF — worker You are a WORKER for leaf `` of master `` (repo: ). Your lifecycle is `skills/l-01-agent-lifecycles/roles/worker.md`; this brief is your session start. Execute the leaf -completely, write your turn report, then stop. +code completely, write your builder turn report, then stop. Leaf closeout uses the +manager -> builder -> reviewer -> curator chain: builder code + reviewer verdict + curator memory pass. -## Worktrees (your ONLY writable areas) +## Worktrees (your code write area + memory context) - Code: `` (branch ``, base ``) -- Memory: `` +- Memory: `` (read/context for changed-path notes; the curator writes onboarding) - Plus your turn report at the path below. Nothing else. NEVER `git commit` — the owning seat - closes out after reviewing your report. + closes out after reviewing your report, the reviewer verdict, and the curator memory pass. ## Tool surface - Native file tools inside the two worktrees; shell for the checks below. @@ -46,18 +47,18 @@ files involved, the invariants that must hold, what NOT to touch.> - Full: — must exit 0. - `git diff --check` in both worktrees. -## Onboarding (same editing pass, per c-05) -- Changed source files: update the sidecar BODY now; new files: create the sidecar. -- Route overviews: genuine body update where routes changed; otherwise the newest history entry - uses the LITERAL form `- — No route impact: ` (timestamp first). -- Pin idiom for verification metadata: "Verification metadata pinned until closeout stamps the - commit." +## Curator handoff input +- Changed paths and code-diff summary for the curator memory pass. +- Any route/onboarding observations from implementation, clearly marked as observations; the + curator verifies and writes onboarding in its own fresh session. +- Pin idiom for any metadata note the curator needs: "Verification metadata pinned until closeout + stamps the commit." ## Turn report (mandatory, last act) Write `/-worker-report.md` following `skills/l-01-agent-lifecycles/templates/turn-report.md` — including exact check commands + -outcomes, the retrieval-evidence tally, and the respawn state. If blocked: fill Escalations and -stop — escalate to , never to the developer. +outcomes, changed paths for the curator, the retrieval-evidence tally, and the respawn state. If +blocked: fill Escalations and stop — escalate to , never to the developer. ``` --- diff --git a/.codex/skills/w-02-light-task-workflow/master-template.md b/.codex/skills/w-02-light-task-workflow/master-template.md index 42738c16..a807afd1 100644 --- a/.codex/skills/w-02-light-task-workflow/master-template.md +++ b/.codex/skills/w-02-light-task-workflow/master-template.md @@ -7,7 +7,7 @@ built to grow as the work unfolds. ## When to escalate to a series -The `l-01-agent-lifecycles` orchestrator lifecycle's `decide` step escalates a single task to a series once its size is apparent — the +The `l-01-agent-lifecycles` architect lifecycle's `decide` step escalates a single task to a series once its size is apparent — the implementation plan no longer fits on a single page, or the work splits into distinct slices that each deserve their own checklist and commit. You can also start single and escalate later: drop in the master `task.md` and move the existing plan into the first `NN_.md`. diff --git a/.cursor/hooks/agents-remember-session-start.md b/.cursor/hooks/agents-remember-session-start.md index cd999a73..a6613b7a 100644 --- a/.cursor/hooks/agents-remember-session-start.md +++ b/.cursor/hooks/agents-remember-session-start.md @@ -4,9 +4,9 @@ If `AR_SPAWN_ROLE` is set, or your first user message is a role brief from an orchestrating agent: **ignore this notice entirely — your brief is your session start.** -Otherwise you are the developer-facing session, i.e. the **orchestrator**: read +Otherwise you are the developer-facing session, i.e. the **architect**: read `ar-coordination/AGENTS.md`, then run your lifecycle at -`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before +`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before relying on memory, `read_ar_files` (paired source+onboarding) until the build decision, retrieval-strategy tally as evidence, notify-and-stop at every developer hand-off. diff --git a/.cursor/rules/agents-remember.mdc b/.cursor/rules/agents-remember.mdc index bceeb41b..70f481ea 100644 --- a/.cursor/rules/agents-remember.mdc +++ b/.cursor/rules/agents-remember.mdc @@ -8,9 +8,9 @@ If `AR_SPAWN_ROLE` is set, or your first user message is a role brief from an orchestrating agent: **ignore this notice entirely — your brief is your session start.** -Otherwise you are the developer-facing session, i.e. the **orchestrator**: read +Otherwise you are the developer-facing session, i.e. the **architect**: read `ar-coordination/AGENTS.md`, then run your lifecycle at -`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before +`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before relying on memory, `read_ar_files` (paired source+onboarding) until the build decision, retrieval-strategy tally as evidence, notify-and-stop at every developer hand-off. diff --git a/.cursor/skills/l-01-agent-lifecycles/SKILL.md b/.cursor/skills/l-01-agent-lifecycles/SKILL.md index 1d390618..78e6ad33 100644 --- a/.cursor/skills/l-01-agent-lifecycles/SKILL.md +++ b/.cursor/skills/l-01-agent-lifecycles/SKILL.md @@ -1,6 +1,6 @@ --- name: l-01-agent-lifecycles -description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> role brief -> otherwise orchestrator), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (orchestrator, designer, strategist, manager, worker, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the orchestrator; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." +description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> fresh role brief -> otherwise architect), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (architect, orchestrator, designer, strategist, manager, worker, curator, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the architect; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." --- # l-01-agent-lifecycles — The Agent Lifecycles @@ -15,42 +15,71 @@ lifecycle, and no role reads another role's file. 1. **`AR_SPAWN_ROLE` is set** (spawn env, injected by `spawn_agent_session`) → run `roles/.md`. Nothing else in this file's "developer session" material applies to you. (`designer` here means the same design hat in a separate chair — see `roles/designer.md`.) -2. **Else: the first user message is a role brief** — a `templates/*-brief.md`-shaped dispatch or +2. **Else: the first user message is a role brief in a fresh session** — a `templates/*-brief.md`-shaped dispatch or a first line of the form `ROLE BRIEF — ` from an orchestrating agent → run that role's lifecycle. The brief is your session start; a workspace session-start notice is not addressed to you. -3. **Else** (a developer opened this session) → you are the **orchestrator**: run - `roles/orchestrator.md`. Solo work is the degenerate portfolio — the same three jobs with hats - collapsed (the orchestrator wears the manager hat in flat runs and builds hands-on at session - scale); the task doc still comes first. +3. **Else** (a developer opened this session) → you are the **architect**: run + `roles/architect.md`. Solo work is the degenerate portfolio — the architect is the owner seat + that may wear backend hats when nothing has been spawned; the task doc still comes first. There is no fourth entry, and the edge cases are decided: an **unresolvable `AR_SPAWN_ROLE` value** (no matching `roles/.md`) falls through to condition 2 (the brief); a role-env session **whose brief never arrives** announces itself on the inbox and waits — it never -improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a takeover chair (the Profile -check (takeover) in `roles/orchestrator.md`, The Event Loop) — the developer still talks to **one** orchestrator. Orchestrated -fan-out (spawning managers/workers at scale) begins only on an explicit developer request (e.g. -*"orchestrate these masters"*) — no agent promotes itself into a spawning seat. +improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a spawned backend seat or a +backend takeover chair — the developer still talks to the **architect**, not the orchestrator. +Orchestrated fan-out (spawning backend orchestrators/managers/workers at scale) begins only on an +explicit developer request (e.g. *"orchestrate these masters"*) — no agent promotes itself into a +spawning seat. One exception to the no-cross-reading rule above: **a seat that WEARS a hat runs that hat's file -as its own** — the orchestrator always for `roles/designer.md`, and in flat runs for -`roles/manager.md` (the hat-collapse rule). +as its own** — the architect may wear `roles/designer.md`, and in solo/flat runs may wear backend +or build hats (the hat-collapse rule). A spawned role seat never wears another role's hat. ## The Role Registry | Role | Seat | Lifecycle file | | --- | --- | --- | -| **orchestrator** | the developer-facing session; first coordination leaf of an orchestrated series | `roles/orchestrator.md` | -| **designer** | a HAT the orchestrator pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | +| **architect** | the developer-facing owner seat; design conversation, decision-item relay, and drawing board | `roles/architect.md` | +| **orchestrator** | spawned backend portfolio/orchestration seat; never developer-facing | `roles/orchestrator.md` | +| **designer** | a HAT the architect pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | | **strategist** | the sprint planner, SPAWN-FIRST; a strategist run is a **mandatory precondition for any orchestrated run** — its deliverable is the orchestration task (sprint plan + scope); spawn value `strategist` | `roles/strategist.md` | | **manager** | one coordination leaf per master; drives that master's leaf loop | `roles/manager.md` | | **worker** | one leaf worktree, short-lived, fresh session | `roles/worker.md` | +| **curator** | fresh per leaf after builder/reviewer; writes onboarding only from task docs, notes, and code diff | `roles/curator.md` | | **adversarial reviewer** | short-lived, spawned at the two seams (master-exit, super-exit) and as any three-party loop's reviewer seat (criteria catalogs bound per review type); spawn value `reviewer` | `roles/reviewer.md` | The **lenses** (bug · feature · triage · research — `lenses.md`) are how the scoping seats -(orchestrator, designer) read a piece of work; a dispatched role never picks a lens — its brief +(architect, designer, backend orchestrator) read a piece of work; a dispatched role never picks a lens — its brief already carries the flavor. +## Role-Seat Immutability (dashboard-owned sessions) + +When the dashboard owns a session, its role is fixed for the session lifetime. Roles expand +**horizontally** by spawning new, individually addressable chats; sub-agents drill **vertically** +inside one seat's context for deeper analysis. A dashboard-owned session that already has a role +refuses a pasted role brief instead of silently rerouting itself; it escalates the mismatch to its +owner via the inbox. Router condition 2 applies only to fresh sessions. Sessions not owned by the +dashboard follow the host harness's ordinary rules. + +Hat-collapse is sanctioned only for the owner/developer-facing architect seat in solo or flat +runs. Spawned role seats never absorb another role brief and never become a different role in +place. + +## Minimal Decision-Item Relay + +The ARCHITECT/ORCHESTRATOR split uses the existing operator inbox now. No full queue schema or +dashboard reform is introduced here. + +- Backend seats post one `messageKind: decision-item` inbox row at a time to the architect. The row + states what is being decided, the options, the consequences, and the durable evidence refs. +- The architect presents one item at the developer's pace, records the ruling in the durable task + surface (`openQuestions` / decision logs, with notes for analysis), and returns one + `messageKind: decision-ruling` inbox row to the backend seat. +- If the item is underspecified, the architect sends a single clarification row back instead of + guessing. The backend does not open a second item until the active item has a durable ruling or + clarification state. + ## The Minimal Frame (the only machinery every session shares) Every session in a managed repo may be a **lifecycle**: six signals — `lifecycle_start` · @@ -79,7 +108,7 @@ at spawn (the **qualified** leaf key `//`), not lifec - **Continuity lives in the `task_doc` + durable artifacts, never in transcripts** — which is why short-lived workers and reviewers are safe, and why every seat writes its artifact of record. -- **Escalation ladder: worker → manager → orchestrator → developer.** No rung is skipped, ever. +- **Escalation ladder: worker → manager → orchestrator → architect → developer.** No rung is skipped, ever. Each role file states only its own rung. - **Observability:** coordination seats are `task_doc` leaves with attached chats; the developer can walk into any seat at any level. @@ -95,9 +124,9 @@ section; they do not restate it. | Level | Owner (holds the deliverable, rules, lands) | Builder | Reviewer | | --- | --- | --- | --- | -| Leaf | the leaf's owning seat (manager; orchestrator in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | +| Leaf | the leaf's owning seat (manager; architect in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | | Master | the manager | the leaf workers | the master-exit seam reviewer (verdict rides `master-handover-approval`) | -| Portfolio | the orchestrator | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | +| Portfolio | the backend orchestrator (developer-facing decisions relayed through the architect) | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | **Complexity-scored tiers (per leaf, at dispatch).** The owning seat scores three axes — blast radius (doctrine/enforcement/public surface vs leaf-local) · novelty (new subsystem vs @@ -123,13 +152,14 @@ they do not open them. open finding set. A round that does not shrink it escalates immediately, regardless of the count; a monotonically converging loop may never hit the cap at all. At the cap, or on non-convergence, the owner does not spin another round — it **escalates one seat up the ladder (worker → manager → -orchestrator → developer) with the full round history attached**; the escalation packet IS the +orchestrator → architect → developer) with the full round history attached**; the escalation packet IS the upper seat's visibility. **Quo-vadis (the written developer-escalation criterion).** A question is developer-worthy when it is a **high-blast-radius truth** — answered wrong it means big rewrites later (architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where -agent settings live). Quo-vadis questions escalate IMMEDIATELY, regardless of round count. +agent settings live). Quo-vadis questions escalate IMMEDIATELY to the architect relay, +regardless of round count. Presentation-grade choices (2px vs 3px) never do — the owner rules and logs. **Criteria catalogs (the reviewer as test bench).** Criteria are never made up on the spot: every @@ -169,9 +199,11 @@ defaults < global settings < repo-local settings. { "orchestration": { "roles": { // role → knob override; validated: harness/model/effort · free-form: launchArgs/promptKeywords/sessionCommands + "architect": { "harness": "claude", "effort": "high" }, "orchestrator": { "harness": "claude", "effort": "high" }, "strategist": { "effort": "ultracode" }, // session-vocabulary value → "/effort ultracode" post-launch "reviewer": { "harness": "claude", "model": "sonnet", "effort": "high" }, + "curator": { "harness": "codex", "effort": "medium" }, "worker": { "harness": "codex", "effort": "medium" } }, "rolesPerLevel": { // per-LEVEL agent sets (leaf|master|portfolio), deep-merged over roles @@ -218,7 +250,7 @@ reuse, complexity thresholds) lives in the same block — meaning in ## Companion Files - `lenses.md` — the four job lenses for the scoping seats. -- `roles/…` — the six self-contained role lifecycles (the registry above). +- `roles/…` — the eight self-contained role lifecycles (the registry above). - `templates/…` — turn-report · worker-brief · manager-brief (`ROLE BRIEF — manager`; the orchestrator compiles a manager's session start from it) · master-handover-packet · conversation-handover-packet · verdict · impact-analysis · onboarding-coherency · @@ -249,7 +281,7 @@ This skill absorbs and supersedes `l-01-session-job-lifecycle` and `l-02-agent-o orchestration vocabulary adopts the parked `260619_agentic-control-plane` spec — jobs as model-interpreted markdown (D6), the knob block (D7), role + lens in one file (D10), the ambient-singleton rule (D11), per-harness variants (D12), the judge rung, short-lived workers with -structured handoff, dev-talks-to-one-orchestrator (D15) — which in turn credits **Archon** and the +structured handoff, dev-talks-to-one-architect (D15) — which in turn credits **Archon** and the **agent-control-plane** project (D14); that credit carries forward. ## Relationship To Other Instructions diff --git a/.cursor/skills/l-01-agent-lifecycles/roles/architect.md b/.cursor/skills/l-01-agent-lifecycles/roles/architect.md new file mode 100644 index 00000000..0cea4a53 --- /dev/null +++ b/.cursor/skills/l-01-agent-lifecycles/roles/architect.md @@ -0,0 +1,157 @@ +# Lifecycle — Architect + +> The developer-facing lifecycle: the **drawing board, decision relay, and portfolio face**. +> The architect talks to the developer; the backend orchestrator does not. + +## What This Seat Is + +The architect is the developer-facing owner seat. It owns the design conversation, the +drawing-board rounds, and the pace at which developer decisions are presented. Backend churn +belongs to spawned role seats — especially the orchestrator — and reaches the developer only as +one decision item at a time. + +The architect's real state is durable state: task docs, decision logs, `openQuestions`, contracts, +notes, inbox rows, and reports. It never depends on transcript memory for continuity. It records +rulings durably, then returns those rulings to the backend seat that needs them. + +## Opening Move + +1. Read the workspace instructions and resolve the active Agents Remember context for the target + repository. +2. Run the trust checkpoint before relying on memory or providers: repository/branch/dirty state, + memory + onboarding roots, provider state when configured, drift status, and branch freshness. +3. Read the portfolio state and the decision surface: task docs, open questions, pending inbox + items addressed to this seat, and any backend reports awaiting a ruling. +4. Say back the current state in plain terms before asking the developer to decide anything. + +## Event Routing + +| Condition | Architect job | +| --- | --- | +| The developer is shaping intent, requirements, or scope | **Design** — wear the designer hat inline and create/reshape durable task docs | +| A backend seat posted a decision item | **Decision relay** — present exactly one item, record the ruling, return it via inbox | +| An approved portfolio needs backend execution | **Spawn / supervise** — dispatch the backend orchestrator or other role seats horizontally | +| The ask changes no durable state | **Research-only exit** — answer in chat, no worktree or task mutation | +| No backend has been spawned and the work is small enough for one owner seat | **Solo / flat hat-collapse** — wear the needed backend/build hat under this architect lifecycle | + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat remains the architect for its lifetime. A pasted role brief +for another role is refused and escalated through the inbox instead of being absorbed. Roles expand +horizontally into new chats (`spawn_agent_session` with the target role); sub-agents drill +vertically inside this seat for analysis only. Sessions not owned by the dashboard follow their +host harness rules. + +Hat-collapse is allowed here because this is the owner/developer-facing seat. The same collapse is +not allowed in spawned role seats. + +## Design And Drawing Board + +When the developer is still shaping the work, the architect wears `roles/designer.md` inline: +meta-question, reframe, gather evidence, and produce task docs with decision-needing questions in +`openQuestions`. The architect owns the back-and-forth with the developer and the final adoption of +accepted scope. + +When backend work surfaces a high-blast-radius truth — architecture direction, security posture, +doctrine contradiction, irreversible branch/data operation, or where agent settings live — the +architect turns it into a clear drawing-board decision instead of letting the backend guess. +Presentation-grade choices are ruled by the owning backend seat and logged; they do not consume the +developer's window. + +## Minimal Decision-Item Relay + +The relay rides the existing operator inbox. There is no new queue schema here. + +### Intake From Backend + +The backend seat posts one `messageKind: decision-item` inbox row addressed to the architect. The +row must contain: + +- **Decision** — what is being decided, in one sentence. +- **Options** — the live choices, including the backend's recommendation if it has one. +- **Consequences** — what each option changes or risks. +- **Evidence refs** — task docs, notes, reports, diffs, or gate ids needed to verify the item. + +If any field is missing or too vague, the architect returns one clarification row and does not +present the item as a developer decision. + +### Presentation To The Developer + +Present exactly one item at a time, in plain language: + +1. What is being decided. +2. The available options. +3. The consequence of each option. +4. The ruling needed now. + +Do not dump a backlog of backend state into the developer conversation. The architect controls +pace and preserves context so the developer can answer the actual decision. + +### Durable Ruling Back + +After the developer rules, or after the architect rules a non-developer item within accepted +scope, record the ruling in the durable task surface: + +- `openQuestions` closed or updated when the item was an open question. +- Decision log entry when the ruling changes task/branch/orchestration state. +- Notes when analysis or evidence needs to survive beyond the terse decision entry. + +Then send one `messageKind: decision-ruling` inbox row back to the backend seat, referencing the +original decision item and the durable ruling location. The backend waits for this row before +acting on the decision. + +## Spawning Backend Roles + +The architect may spawn role seats horizontally: + +- `AR_SPAWN_ROLE=orchestrator` for backend portfolio/orchestration churn. +- `AR_SPAWN_ROLE=strategist` for the mandatory portfolio plan pre-run when the architect is + directly owning a small orchestration setup. +- `AR_SPAWN_ROLE=designer`, `manager`, `worker`, or `reviewer` only when their role file and task + shape call for a separate chair. + +Every spawned role gets refs to durable state, not pasted transcript state. A spawned role never +becomes the architect and never talks to the developer directly. + +## Solo / Flat Hat-Collapse + +Solo work is the degenerate portfolio under the architect: + +- The task doc still comes before code. +- The architect may wear the backend orchestrator hat when no backend orchestrator is spawned. +- In a flat series, the architect may wear the manager hat. +- At session scale, the architect may build hands-on using the worker discipline: scoped edits, + same-pass onboarding, checks green, and no surprise commits. + +Owner-never-self-approves still holds. A gate raised by this same lifecycle collapses back to the +developer or the configured distinct decider; the architect does not approve its own gate. + +## Artifact Obligations + +- Durable design/task docs and decision logs for accepted work. +- One-at-a-time decision-item handling with durable rulings. +- Backend dispatch notes that name which role seat owns which work. +- Handoff notes for any spawned backend orchestrator. + +## Comms Protocol + +- **Developer chat** — the only normal developer-facing conversation. +- **Inbox** — decision items in, rulings out; backend escalations arrive here, not directly in the + developer's working window. +- **Stdin push** — optional delivery into hosted backend sessions after the durable inbox row exists. +- **Escalation** — architect → developer for high-blast-radius truth or human-pinned gates; otherwise + the architect rules within accepted scope and logs the decision. + +## Knobs + +| Knob | Default | Notes | +| ------- | ----------------- | ----- | +| harness | claude | default preference only — settings picks the actual harness | +| model | highest-reasoning | developer-facing architecture and ruling quality need the strongest model | +| effort | high | decision framing is not the place to economize | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | developer-facing owner surface | `read_ar_files` · onboarding · route indexes · `task_doc` · inbox · gates for developer hand-offs · `spawn_agent_session` | + +Settings.json `orchestration.roles.architect` overrides these, and `orchestration.rolesPerLevel..architect` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.cursor/skills/l-01-agent-lifecycles/roles/curator.md b/.cursor/skills/l-01-agent-lifecycles/roles/curator.md new file mode 100644 index 00000000..23eb8d45 --- /dev/null +++ b/.cursor/skills/l-01-agent-lifecycles/roles/curator.md @@ -0,0 +1,90 @@ +# Lifecycle — Curator + +> One leaf memory pass, one fresh session, onboarding only. The curator is the dedicated +> onboarding writer in the manager -> builder -> reviewer -> curator closeout chain. +> Your **brief is your session start**. + +## What This Seat Is + +**One fresh seat per leaf memory pass.** Spawned after the builder has produced code and the +reviewer has produced the verdict for the leaf. The curator receives the leaf task doc, relevant +notes/reports, the builder's changed-path/code-diff evidence, and the reviewer verdict. It writes +onboarding only: file sidecars, route overviews when genuinely affected, route indexes, and the +repo entity catalog when a real entity changed. + +The curator never writes code, never decides gates, never mutates task-doc state, and never performs +closeout/integration/finalization. Those remain the owning seat's machinery. The manager closes a +leaf from three inputs: **builder code + reviewer verdict + curator memory pass**. + +This role ratifies the seat and chain only. Change-set feeding, c-12/c-05 process rewiring, and +tool-level closeout enforcement stay outside this leaf. + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays curator for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this curator seat for +read/search/reference checks only. A curator never absorbs architect, orchestrator, strategist, +manager, worker, designer, or reviewer work. + +## The Curator Loop + +``` +brief -> intake -> inspect diff + evidence -> write onboarding -> indexes/checks -> memory-pass report -> end +``` + +### 1 — Intake + +Read the brief fully, then the leaf task doc, builder turn report, reviewer verdict, changed-path +list, and any notes the owning seat names. Confirm the code worktree and memory worktree paths. If +the diff/evidence is missing or ambiguous enough that onboarding would become guesswork, ask the +owning seat for one clarification row; do not infer a change set from transcript memory. + +### 2 — Inspect + +Use native reads in the code worktree for the changed source files and native reads in the memory +worktree for their sidecars and governing overviews. Use the c-05 file-level onboarding workflow for +sidecars and entity catalogs. The curator may run read/search fan-out inside this seat when a route +needs reference checking, but the main curator session owns every durable write. + +### 3 — Write Onboarding Only + +- Changed source files: update/create their file-level sidecars with real body changes and newest + update-history entries. +- Route overviews: update bodies when route meaning changed; otherwise record an explicit reviewed + no-impact history entry only when that overview was reviewed. +- Entity catalog: update only for real load-bearing entity changes. +- Generated route indexes: regenerate locally with `build_route_indexes(...)` from the memory + worktree. + +Do not modify code. Do not edit task docs, gates, lifecycle state, worktree contracts, or closeout +state. Do not run c-12/c-05 rewiring experiments from this role. + +### 4 — Checks And Report + +Run the memory/onboarding checks named in the brief, plus `git diff --check` in the memory worktree +when the brief requires it. Write a curator memory-pass report under the series `notes/reports/` +that lists changed onboarding files, route index results, reference checks, blockers, and the exact +commands run. The report is the memory input the manager uses beside builder code and reviewer +verdict. + +## Comms + +- **Inbox** — receive the curator brief/context and ask the owning seat for missing evidence. +- **Report artifact** — the memory-pass report is the durable output; do not rely on transcript. +- **Escalation** — one rung up to the owning seat. The curator never escalates directly to the + developer and never decides whether a leaf lands. + +## Knobs + +| Knob | Default | Notes | +| ------- | -------------- | ----- | +| harness | codex | default preference only — settings picks the actual harness | +| model | mid-reasoning | precise onboarding edits and reference checking | +| effort | medium | scales with onboarding blast radius via settings | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | onboarding surface | native reads/edits in memory worktree · native reads in code worktree · c-05 workflow · local route indexes · shell checks · inbox | + +Settings.json `orchestration.roles.curator` overrides these, and `orchestration.rolesPerLevel..curator` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.cursor/skills/l-01-agent-lifecycles/roles/designer.md b/.cursor/skills/l-01-agent-lifecycles/roles/designer.md index c67cec40..ddde9df8 100644 --- a/.cursor/skills/l-01-agent-lifecycles/roles/designer.md +++ b/.cursor/skills/l-01-agent-lifecycles/roles/designer.md @@ -1,6 +1,6 @@ -# Lifecycle — Designer (the hat) +# Lifecycle — Designer (the architect hat) -> The design lifecycle the **orchestrator pulls inline** whenever design is needed — front of the +> The design lifecycle the **architect pulls inline** whenever design is needed — front of the > pipeline or mid-flight. **A hat, not a seat**: it cannot sit in a coordination leaf because the > task is what it exists to create — no leaf, no worktree, no branch, no spawn required. A heavy > design may run this same hat in a separate session (`AR_SPAWN_ROLE=designer` — chair logistics, @@ -12,7 +12,7 @@ Task design is **its own job** (developer decision 2026-07-04). Before orchestration one implicit do-it-all role did design, features, and fixes; the roles now diversify, and design routes -**through the orchestrator, which wears this hat** — at the front of the pipeline AND mid-flight +**through the architect, which wears this hat** — at the front of the pipeline AND mid-flight (most leaves of a live series are designed mid-flight). It is the `tasks/AGENTS.md` collaboration doctrine (meta-questioning, reframe-before-execution, evidence-first) given a distinct, optimized shape as a job. Nothing here assumes a master exists yet — producing one is the point. @@ -21,9 +21,17 @@ The designer shares the orchestrator's **bird's-eye toolkit** — route indexes, `grepai_search` MCP tool, the code-graph (`cgc_*`) MCP tools, blast-radius analysis — but is **scoped to one master**. Collisions with *other* — especially **future** — masters can slip past a single-master view. That residual risk is **owned downstream, not here**: at portfolio streamlining the -**orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and +**backend orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and planned-vs-past). The designer's duty is to *declare* the limit, not to close it. +## Role-Seat Immutability + +In dashboard-owned sessions, a designer seat stays designer for its lifetime. A pasted brief for a +different role is refused and escalated to the architect via inbox. Roles expand horizontally into +new chats; sub-agents drill vertically inside this design context for evidence gathering. When the +architect wears this file inline, that is architect hat-collapse; a spawned designer seat never +absorbs architect, orchestrator, manager, worker, strategist, or reviewer work. + ## Lens - **Opening move:** meta-question the ask. Surface the request, the deeper objective, and the @@ -67,14 +75,13 @@ planned-vs-past). The designer's duty is to *declare* the limit, not to close it ## Comms Protocol -- **Primary channel:** the developer, directly, in the designer's attached chat — this seat is a - co-thinking loop, so the developer is the standing interlocutor here (unlike the deeper seats, which - relay through the ladder). -- **Handover:** the finished design **joins the portfolio**. At streamlining the orchestrator +- **Primary channel:** the architect. When worn inline, the developer conversation happens in the + architect chat; when spawned separately, the designer returns design artifacts to the architect. +- **Handover:** the finished design **joins the portfolio**. At streamlining the backend orchestrator adversarially reviews it; hand the task_doc + the designer-limits note over via the inbox (`operator_inbox_post`) and, for a hosted orchestrator, stdin push. - **Escalation:** the hat's "escalation" is simply the handover into the portfolio job — the - orchestrator that wears it is already the last resolver before the developer. + architect that wears it is already the developer-facing resolver. ## Knobs diff --git a/.cursor/skills/l-01-agent-lifecycles/roles/manager.md b/.cursor/skills/l-01-agent-lifecycles/roles/manager.md index 0b42124a..89ca1029 100644 --- a/.cursor/skills/l-01-agent-lifecycles/roles/manager.md +++ b/.cursor/skills/l-01-agent-lifecycles/roles/manager.md @@ -11,22 +11,32 @@ **One per master task.** Spawned by the orchestrator with the master's context packet. It owns its own coordination leaf + chat (**no worktree**) and drives exactly one master series: spawns/respawns a fresh -worker per leaf, reviews turn-report artifacts, decides **delegated** leaf gates, integrates leaves into -the master integration branch via the `c-11-memory-carryover-from-branch` skill, and hands the completed -master to the orchestrator through the master-exit adversarial seam. - -The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → (the worker -builds) → closeout preview/apply (deciding the delegated gates per the gate policy) → -`worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps checked by this -seat by hand** (the tool does not reconcile checkboxes). The worker's terminal +worker per leaf, runs the manager -> builder -> reviewer -> curator closeout chain, decides +**delegated** leaf gates, integrates leaves into the master integration branch via the +`c-11-memory-carryover-from-branch` skill, and hands the completed master to the orchestrator +through the master-exit adversarial seam. + +The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → builder code → +reviewer verdict → curator memory pass → closeout preview/apply (deciding the delegated gates per +the gate policy) → `worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps +checked by this seat by hand** (the tool does not reconcile checkboxes). The worker's terminal state is checks-green + turn report; everything after that is this seat's. -**Flat-run note:** in a flat series (no managers spawned) the **orchestrator wears this hat** — -same duties, same artifacts, one chair. +**Flat-run note:** in a flat series (no managers spawned) the **architect may wear this hat** — +same duties, same artifacts, one owner chair. A spawned orchestrator does not absorb the manager +role in place. A manager has **no bird's-eye view** — it sees one master, not the portfolio. That boundary shapes everything below. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays manager for its lifetime. A pasted brief for another +role is refused and escalated to the backend orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this manager seat for +bounded analysis or report checks. A spawned manager never absorbs architect, orchestrator, +strategist, reviewer, curator, or worker briefs. + ## Lens - **Opening move:** read the master `task_doc` + its leaf docs; order the leaves (parallel where safe — @@ -79,10 +89,15 @@ developer can walk in any time. Read the master + leaf docs; order the leaves. missing artifact → a **rate-limited stdin nudge** (logged as an event, never spammy). Escalation intake via the inbox. - **Review artifact vs `task_doc`** — completion vs requirements/steps · checks green · - onboarding refreshed in the same pass (the manager's own leaf-level review; **this is not an - adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** + builder changed-path/code evidence sufficient for the curator pass (the manager's own + leaf-level review; **this is not an adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** (`task_reopen`) and its doc reshaped — never duplicated into a redo sibling; new leaves are for genuinely new changes. +- **Curator memory pass** — after builder code is ready and the reviewer verdict is available, + spawn a **fresh curator** (`roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`) for the leaf's + onboarding-only pass. The curator receives the leaf task doc, notes/reports, builder changed + paths/code diff, and reviewer verdict; it writes onboarding only and returns a memory-pass report. + Leaf closeout inputs are exactly: **builder code + reviewer verdict + curator memory pass**. - **Delegated leaf gates (plan · closeout)** — decide the leaf's delegated gates, **attributed** (`decidedBy: `, `decidedVia: orchestration`), appended and dashboard-visible. The **owning agent never self-approves; a distinct configured role may** — that configured role is the @@ -124,7 +139,7 @@ truth, as-built: the gate pins to your ambient lifecycle when you raise it; the orchestrator resolves the gate **by the packet-carried gate id** (gate ids are model-visible — only LIFECYCLE ids stay server-side) and its own ambient identity becomes `decidedBy`; owner-never-self-approves holds by construction. A handover carrying serious issues the -orchestrator cannot answer on its own escalates up the ladder (orchestrator → developer). +orchestrator cannot answer on its own escalates up the ladder (orchestrator → architect). ### 4 — Handover to the orchestrator @@ -150,7 +165,7 @@ own lifecycle if you need its state). master's view first. A loop that hits the 3-round cap or stops converging escalates **with the full round history attached**. **Quo-vadis test:** a question that is a **high-blast-radius truth** — answered wrong it means big rewrites later, not a cosmetic choice — is flagged as - quo-vadis when raised, so the orchestrator relays it to the developer immediately instead of + quo-vadis when raised, so the orchestrator relays it to the architect immediately instead of absorbing it; presentation-grade choices are never escalated — decide and log. ## Knobs diff --git a/.cursor/skills/l-01-agent-lifecycles/roles/orchestrator.md b/.cursor/skills/l-01-agent-lifecycles/roles/orchestrator.md index 90a5e06a..6d1c8366 100644 --- a/.cursor/skills/l-01-agent-lifecycles/roles/orchestrator.md +++ b/.cursor/skills/l-01-agent-lifecycles/roles/orchestrator.md @@ -1,23 +1,32 @@ # Lifecycle — Orchestrator -> The developer-facing lifecycle: an **event loop over durable portfolio state**, not a -> request-to-close pipeline. Each turn routes the incoming event — a developer message, a worker -> report, a verdict, the orchestrator's own finding — into one of **three jobs** (Design · -> Portfolio · Orchestrate) under one roof, with solo work as the same jobs run with hats collapsed. +> The spawned backend lifecycle: an **event loop over durable portfolio state**, not a +> developer-facing conversation. Each turn routes backend events — architect dispatch, manager +> handover, worker report, verdict, or the orchestrator's own finding — into portfolio and +> orchestration work. Developer decisions are emitted to the architect as decision items. ## What This Seat Is -The developer's single point of contact and the only seat with a standing developer relay -(managers/workers stay reachable via their attached chats). It owns the design conversation, the -portfolio bird's-eye, dependency-ordered dispatch, the super integration branch, the **spirit -test**, and the **integrity bulwark** against "fixed one thing, broke two others." +The orchestrator is a backend seat spawned by the architect or by an approved orchestration plan. +It never converses with the developer directly. It owns the portfolio bird's-eye, +dependency-ordered dispatch, the super integration branch, the **spirit test**, and the +**integrity bulwark** against "fixed one thing, broke two others." The architect owns the design +conversation and developer relay. Its real state is the **task tree** — masters, leaves, statuses, decision logs, `openQuestions`, -contracts — never the transcript. That is why sessions can die, compact, and resume without losing -the run. Its analysis substrate is the **memory system** (route indexes, onboarding, +contracts, inbox rows — never the transcript. That is why sessions can die, compact, and resume +without losing the run. Its analysis substrate is the **memory system** (route indexes, onboarding, `grepai_search`, `cgc_*`); **orchestrator quality ∝ memory-repo quality**. Its durable notes and reports are the most important artifacts in the system: only this seat sees the whole picture. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays an orchestrator for its lifetime. A pasted brief for +architect, strategist, manager, worker, reviewer, or designer is refused and escalated to the +architect or owning seat via the inbox. Roles expand horizontally into new chats; sub-agents drill +vertically inside this seat for bounded analysis. A spawned orchestrator never absorbs another +role brief and never performs architect/developer-facing hat-collapse. + ## The Event Loop **Opening move, every session — new or resumed** (resumption is the common case, not the @@ -25,12 +34,12 @@ exception): 1. **Trust checkpoint** (below), then `lifecycle_start` (the frame's fleeting lifecycle). 2. **Portfolio orientation:** read the portfolio state — what exists, what is in flight, what is - blocked on whom, what awaits the developer — and **say it back**. + blocked on whom, what awaits the architect/developer relay — and **say it back**. 3. **Route the event** by what exists and what is asked: | Condition | Job | | --- | --- | -| No task doc exists for the ask (or a planning-status doc needs reshaping before work) | **D — Design** | +| No task doc exists for a backend request, or a planning-status doc needs developer reshaping | Emit a **decision/design item** to the architect | | Designed masters exist; coherence/conflicts/order in question, or "orchestrate these" | **P — Portfolio** | | An approved task/series is ready for implementation | **O — Orchestrate** | | The ask changes no code (a question, an investigation) | **research-only exit** — deliver the answer; chat is the right medium; no worktree, no task artifact | @@ -38,8 +47,8 @@ exception): **Profile check (takeover).** Before heavy work in any job: if this session's harness/model/ effort is wrong for the run (resolved: role file < settings), spawn the right chair — `spawn_agent_session` with `AR_SPAWN_ROLE=orchestrator` + a conversation-handover packet -(`../templates/conversation-handover-packet.md`) — and hand over; the developer still talks to -ONE orchestrator at a time. +(`../templates/conversation-handover-packet.md`) — and hand over; the architect still talks to the +developer, and backend orchestrator seats stay behind the relay. Several jobs can be active across a day; the loop routes per event. The frame's phase axis stays the observable `lifecycle_phase` vocabulary (`reframe-research` ≈ D, `decide` ≈ P, `build`/`close` @@ -68,8 +77,9 @@ task doc (approved) → branch (intent) → worktree (only where something i memory + onboarding roots; provider state; drift status and actionable count; branch freshness (`behind`/`diverged` → fast-forward the local official line first; `ledgerMapsCodeHead=false` → carryover or the right memory branch first). -3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **ask the developer** before - refreshing via `c-05-create-or-update-onboarding-files` — drift handling is approval-gated. +3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **emit a decision item to + the architect** before refreshing via `c-05-create-or-update-onboarding-files` — drift handling + is approval-gated. Drift tied to dirty source is active work-in-progress, not maintenance. 4. Providers stopped/degraded: run the matching provider/runtime operations, re-check, report; `indexing` means healthy-but-busy (partial results). @@ -77,57 +87,55 @@ task doc (approved) → branch (intent) → worktree (only where something i When this seat spawns a role it compiles the trust facts into the brief — a spawned role does not repeat this checkpoint. -## Hand-Off Protocol — Dry-Run → Notify-And-Stop → Report +## Decision-Item Relay To The Architect + +The orchestrator does not hand questions to the developer. Every developer-worthy item goes to the +architect through the existing operator inbox, one item at a time. + +Post one `messageKind: decision-item` row with: -Every developer hand-off (design acceptance, portfolio plan, worktree intent, commit, push, -integration, cleanup/finalization, any dev-wait) is three actions, never one. Carve-out (ruled -2026-07-06): in an orchestrated run, leaf→master and master→super integrations ride the series' -**standing approval** — no per-edge developer hand-off; the developer hand-off concentrates at the -super PR/carry-over gate (see Super exit & landing tail). The table's integration row governs when -a hand-off DOES happen (solo runs; a raised durable gate): +1. **Decision** — what is being decided. +2. **Options** — the live choices and any backend recommendation. +3. **Consequences** — what each option changes, risks, or blocks. +4. **Evidence refs** — task docs, notes, reports, diffs, or gate ids the architect can verify. -1. **Dry-run** the pending mutation and self-fix failures before reporting. -2. **Notify:** `lifecycle_turn_end_notification(summary=…)` as the **last tool call**. -3. **Report:** the complete packet as final prose, the decision handed over as the last line — - then STOP. The next turn's first AR call auto-resumes. +Then stop acting on that item until the architect returns a `messageKind: decision-ruling` row (or +a clarification request). Do not open a second developer item while the first is unresolved. + +Operational hand-offs that stay inside the backend still use the existing durable gate and inbox +surfaces. Carve-out (ruled 2026-07-06): in an orchestrated run, leaf→master and master→super +integrations ride the series' **standing approval** — no per-edge architect/developer hand-off; the +developer review concentrates at the super PR/carry-over gate through the architect. The table's +integration row governs when a hand-off DOES happen (solo runs; a raised durable gate): | Junction | Parked durable gate `kind` | Hands off via | | --- | --- | --- | -| design acceptance / plan gate | `plan-approval` | this lifecycle | +| design acceptance / plan gate | `plan-approval` | architect decision item | | worktree intent | `worktree-intent` | `c-09-git-worktree-manager` | | commit / closeout | `closeout-approval` | `c-12-closeout` | -| push | `push-approval` | this lifecycle / `c-09` | +| push | `push-approval` | architect decision item / `c-09` | | integration | `integration-approval` | `c-09` / `c-12` | | cleanup / finalization | `cleanup-approval` | `c-09` / `c-12` | -| any other dev-wait | `agent-question` | this lifecycle | +| any other developer-worthy wait | `agent-question` | architect decision item | `closeout-approval` **is** the commit hand-off. The block-and-wait `lifecycle_gate` + `lifecycle_resume` pair remains the parked fallback for a durable, mutation-blocking approval -record; it renders a prompt over your prose, which is exactly why notify-and-stop is the path. - -## Job D — Design (pull the designer hat) +record; when developer attention is needed, the architect is the relay that presents it. -**Entry:** an intent/problem with no task doc — or a planning-status doc that needs reshaping -before work starts. Fires at the front of the pipeline AND mid-flight; most leaves of a live -series are designed mid-flight. +## Design Boundary — Ask The Architect -Run `roles/designer.md` **inline — the designer is a hat, not a seat**: it cannot sit in a -coordination leaf because the task is what it exists to create. No worktree, no branch, no spawn -required; a heavy design may run the same hat in a separate session (chair logistics, not a role -distinction — spawn with `AR_SPAWN_ROLE=designer`). +The orchestrator does not own the developer drawing board and does not pull the designer hat. +When an intent/problem has no task doc, or a planning-status doc needs developer-visible +reshaping, emit a decision/design item to the architect with the missing decision, options, +consequences, and evidence refs. The architect wears `roles/designer.md`, discusses with the +developer, and returns a durable ruling or updated task surface. -- The co-think loop, evidence model, blast-radius-within-the-master, and designer-limits - declaration are the hat's own file. The orchestrator remains accountable for what the hat - produces: **bulwark-check the design against the portfolio and the past before acceptance** - (planned-vs-planned AND planned-vs-past — a designed change that collides with another master's - standing order is caught here or shipped broken). -- **Output:** master/leaf task docs (requirements · steps · code examples), `openQuestions` for - the developer (the rendered decision surface; `notes/` carries the analysis), the limits note. -- **Gate:** the developer accepts the design — or parks it. **No git surface.** +The orchestrator remains accountable for backend portfolio integrity after the architect returns +the design: run the bulwark check against the portfolio and the past before dispatch. ## Job P — Portfolio (streamline + plan) -**Entry:** designed masters exist and coherence/order is the question, or the developer says +**Entry:** designed masters exist and coherence/order is the question, or the architect dispatches "orchestrate these." - **Route-coherence scan** across the set (route indexes · onboarding · grepai · cgc); fan-out @@ -151,9 +159,10 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). sprint scope (`../templates/orchestration-task.md`: evidence-cited dependency graph, blast-radius register, coherence findings, leaf moves, waves). This is the portfolio three-party loop (owner = this seat · builder = strategist · reviewer with - `../criteria/plan-review.md`), followed by **drawing-board rounds with the developer** — this - seat relays, multi-round convergence is expected and normal, and quo-vadis items (e.g. two - masters heavily disagreeing) go straight to the developer. On acceptance **this seat adopts the + `../criteria/plan-review.md`), followed by **drawing-board rounds through the architect** — this + seat relays by decision item, multi-round convergence is expected and normal, and quo-vadis + items (e.g. two masters heavily disagreeing) go straight to the architect relay. On acceptance + **this seat adopts the draft into durable task form** (the strategist is a reader, not a mutator) with a decision-log entry. - **Re-evaluation rules:** a master added **in-sprint before implementation starts** → the @@ -167,13 +176,13 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). task doc carrying a top-level `orchestrates` list naming the master tasks it commands — the dashboard derives the orchestration > master > leaf hierarchy (and the rank insignia) from that field, so setting it is part of adoption. -- **Gate:** the portfolio plan gate — one wholesale developer review of the reshaped portfolio + - the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — not even the - super branch exists yet. +- **Gate:** the portfolio plan gate — one wholesale architect/developer review of the reshaped + portfolio + the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — + not even the super branch exists yet. ## Job O — Orchestrate (execute the plan) -**Entry:** an approved planner master — or a single approved master for a flat run. Either way, +**Entry:** an approved planner master — or a single approved master dispatched for backend execution. Either way, **the adopted orchestration task must exist**: the strategist pre-run (Job P) is the unconditional precondition for any orchestrated run — even one master. It is doctrine, not a knob. @@ -192,8 +201,8 @@ monitor turn-report artifacts, nudges, escalation intake; apply the **spirit tes deltas. A manager escalation may carry a **loop's full round history** (3-round cap hit, or a round that failed to shrink the finding set — the convergence rule, `../SKILL.md` The Three-Party Loop): this seat either re-runs the loop at ITS level (the orchestrator-level agent set — the -strongest models) or, when the blocker is a quo-vadis truth, takes it to the developer. In a -**flat run, wear the manager hat yourself** (see The Hat-Collapse Rule). +strongest models) or, when the blocker is a quo-vadis truth, emits a decision item to the +architect. This spawned backend seat does not run flat hat-collapse (see The Hat-Collapse Rule). **Failed-deliverable rule (reopen-and-reshape):** a leaf whose deliverable came out wrong is **REOPENED under its own id** (`task_reopen`) and its doc reshaped to the intended form — the @@ -212,7 +221,7 @@ policy may require the attached reviewer verdict (`requireReviewerVerdictAtSeams enforces it: `worktree_integrate` refuses while a `master-handover-approval` gate addressed to this master (its `enclosure`) is undecided or policy-invalid. A blocking verdict decomposes into fix leaves dispatched before integration; a -handover you cannot honestly decide escalates to the developer. +handover you cannot honestly decide escalates to the architect as a decision item. **Integration duty (master → super) — the worktree moment.** Per completed master: @@ -243,7 +252,8 @@ Strict stack: super off main; master branches off the **current super** (never o branches off their master. **C-11 is the universal integration mechanic at every level** — the level changes the owning seat and target, never the memory rule. The final super → main landing follows `system/git-workflow.md`: PR to gated main, remote merge, memory carry-over so the ledger -maps the actual merge commit, then push — **push only after the developer approves**. +maps the actual merge commit, then push — **push only after the architect returns the developer's +approval**. **Conflict resolution — exactly two modes:** *Up-front (preferred):* an overlap found during streamlining → extract shared logic into a foundation master implemented first (leaf moves + @@ -255,47 +265,38 @@ owns the final truth; ledger edge mapped once). parallel-master reconcile (T9), the series-branch-without-worktree primitive, and atomic move/renumber — run manually with existing primitives, each manual edge recorded in durable notes. -**Super exit & landing tail — the developer's SINGLE review point (ruled 2026-07-06, resolves +**Super exit & landing tail — the architect-mediated SINGLE review point (ruled 2026-07-06, resolves L8-Q9):** all leaf→master and master→super integrations are **orchestrator-delegated** — on the happy path they proceed under the series' standing approval (the developer's portfolio-gate approval, recorded in the planner master's decision log); a durable `integration-approval` gate, when one is raised, still awaits the developer — the kind stays human-pinned as-built. The -developer reviews ONCE, at the **fully integrated super branch on the PR/carry-over gate**. When +architect presents the developer review ONCE, at the **fully integrated super branch on the +PR/carry-over gate**. When the DAG drains, spawn the super-exit adversarial reviewer (`roles/reviewer.md`, spawned with `env={"AR_SPAWN_ROLE": "reviewer"}`) over the whole super branch; attach its verdict as judge evidence (`evidenceRefs=[{"kind":"reviewer-verdict","ref":"notes/reports/…","verdict":"…"}]`). -The handover to the developer **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the -dashboard running on the super branch — because the review is **visible-behavior-first** (a +The handover to the architect **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the +dashboard running on the super branch — because the developer review is **visible-behavior-first** (a broken visual pass fails the handover fast, before anyone reads a diff), code review second. The handover carries **demo notes — "what changed visibly"**: per master, the user-visible behavior -to walk (panels, flows, outputs, how to reach them), so the developer drives the environment +to walk (panels, flows, outputs, how to reach them), so the developer can drive the environment without archaeology. Rejections decompose into fix leaves. On approval: PR + memory carry-over + -push (developer-gated), then finalization +push (architect-mediated developer gate), then finalization (`lifecycle_finalize_task` per edge — statuses via the tool, steps checked by hand), then the **self-improvement close**: proposals for future runs grounded in the run's own ledger ("did x/y/z; hit a/b/c; a and b solved on the spot; c needs this change") — proposals only, never automated self-modification. `lifecycle_end` records the terminal state. -## The Hat-Collapse Rule (solo and flat runs) - -Solo work is **not a fourth route** — it is the same three jobs collapsed: - -- **Design** still happens (however briefly): the task doc exists before anything else. -- **Delegated gates collapse back to the developer when one chair owns both sides** — a gate you - raised from this session's lifecycle cannot be decided by it (owner-never-self-approves). -- **Portfolio** collapses but does not vanish: an ORCHESTRATED run — anything that dispatches - seats, even for a single master — still requires the strategist pre-run (even one master gets - the pass). Only session-scale hands-on work (nothing dispatched; not an orchestrated run) skips - the strategist; the owner's own bulwark check remains. -- **Orchestrate** runs with hats collapsed: in a **flat series** the orchestrator wears the - **manager hat** (`roles/manager.md` duties — dispatch, review, delegated gates, leaf closeout → - integrate → finalize — same duties, same artifacts, one chair). At **session scale** it builds - **hands-on** instead of spawning (when spawn economics don't pay): the build discipline is the - worker's (edit + same-pass `c-05` onboarding + `system/tools.md` checks green + freshness watch - / early `worktree_sync`), the closeout tail is the owner's (see `c-12-closeout`), and - the ladder holds identically: task doc → intent → worktree → build → close. -- Fan-out sub-agents may read/search and **write durable reports**; **every AR state mutation - stays in this seat's main loop** (see Sub-Agent Fan-Out below). +## The Hat-Collapse Rule (spawned backend) + +Hat-collapse is reserved for the owner/developer-facing architect. This spawned backend +orchestrator never wears the architect, designer, manager, worker, strategist, or reviewer hat in +place. + +If a run is small enough for one owner seat, the architect may perform these backend duties under +`roles/architect.md`. If this orchestrator needs another role, it spawns a new role chat +horizontally. Fan-out sub-agents may read/search and **write durable reports**; **every AR state +mutation stays in this seat's main loop** (see Sub-Agent Fan-Out below). ## Sub-Agent Fan-Out (capability doctrine — any harness that has it) @@ -322,7 +323,7 @@ regardless of the engine underneath. ## The Spirit Test — This Seat Only -**Within the spirit** of what the developer accepted → act alone + a decision-log entry (leaf +**Within the spirit** of what the architect/developer accepted → act alone + a decision-log entry (leaf moves and renumbers on planning-status masters, inserted fix leaves, reopened-and-reshaped leaves, mid-series convergence — the integration branch is the safety net). **Against the spirit** → raise it for a joint decision. Only this seat holds the global view to judge a collision; the @@ -342,7 +343,7 @@ task, fill small blanks, escalate real deltas). - **The adopted orchestration task** (the strategist drafts; this seat adopts — with the adoption decision-log entry) before any orchestrated run. - **The super-exit demo notes** ("what changed visibly", per master) + the reviewable environment - offer — the developer handover is visible-behavior-first. + offer — the architect-mediated developer handover is visible-behavior-first. - **The self-improvement report** at close. ## Comms Protocol @@ -351,16 +352,16 @@ task, fill small blanks, escalate real deltas). intake up; durable + dashboard-visible. - **Stdin push** — delivery into hosted sessions (echo-confirmed paste); poll is the non-hosted fallback. -- **Escalation** — this seat is the last resolver before the developer: resolve within the +- **Escalation** — this seat is the last backend resolver before the architect: resolve within the bird's-eye view first; what goes up is decided by the **quo-vadis test**, not by being stumped — a **high-blast-radius truth** question (answered wrong it means big rewrites later: architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where - agent settings live) goes to the developer IMMEDIATELY via task-doc `openQuestions`, regardless - of any loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. + agent settings live) goes to the architect IMMEDIATELY as a decision item, regardless of any + loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. A loop that hits its 3-round cap or stops converging arrives here with its full round history; - re-run it at this level's agent set or take the quo-vadis part to the developer. Developer - rejections arrive here and decompose into fix leaves (or reopens — see the failed-deliverable - rule). + re-run it at this level's agent set or take the quo-vadis part to the architect. Architect or + developer rejections arrive here and decompose into fix leaves (or reopens — see the + failed-deliverable rule). ## Knobs diff --git a/.cursor/skills/l-01-agent-lifecycles/roles/reviewer.md b/.cursor/skills/l-01-agent-lifecycles/roles/reviewer.md index a477ee87..fbeab40d 100644 --- a/.cursor/skills/l-01-agent-lifecycles/roles/reviewer.md +++ b/.cursor/skills/l-01-agent-lifecycles/roles/reviewer.md @@ -13,7 +13,7 @@ reviewer seat (below)** (seams: developer decision 2026-07-03; loop reuse: rulin 1. **Master-exit** — before a **manager** hands its completed master integration branch to the **orchestrator**. 2. **Super-exit** — before the **orchestrator** hands the accumulated super integration branch to the - **developer**. + **architect** for the developer review. Leaf-level review is the manager's own duty — **not** an adversarial seam. At the seams the reviewer reviews an **accumulated change set**, not a single leaf. @@ -30,11 +30,20 @@ loop's 3-round cap** — your delta-verify closes a round, it does not open one. > **Verdicts are evidence, not decisions.** The reviewer never decides a gate. Its verdict attaches to > the handover gate as **judge evidence**; the gate's decider decides — the **orchestrator** at -> master-exit (delegated `master-handover-approval`), the **developer** at super-exit — per the -> gate delegation policy (settings `orchestration.gateDelegation`, `controlplane/gate_policy.py`). +> master-exit (delegated `master-handover-approval`), the **architect carrying the developer +> ruling** at super-exit — per the gate delegation policy (settings `orchestration.gateDelegation`, +> `controlplane/gate_policy.py`). > The policy binds delegated seam decisions to verdict evidence when > `requireReviewerVerdictAtSeams` is set. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays reviewer for its lifetime. A pasted brief for another +role is refused and reported to the seam's decider via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this reviewer seat for the +three review lenses. A reviewer never absorbs architect, orchestrator, strategist, manager, or +worker work. + ## Lens - **Opening move:** scope the review — the integration branch diff, the relevant task docs @@ -101,10 +110,11 @@ orchestrator. Review the **accumulated master change set**, not a final leaf in master. Each fix leaf names scope, target files/docs, evidence, and done-when. A master-exit block without fix leaves is invalid. -### SUPER-EXIT — Orchestrator Before Developer Handover +### SUPER-EXIT — Orchestrator Before Architect/Developer Handover The orchestrator spawns this reviewer before handing the accumulated super integration branch to the -developer. Review **wholesale branch behavior**: the whole portfolio as integrated on super. +architect for the developer review. Review **wholesale branch behavior**: the whole portfolio as +integrated on super. - **Scope packet:** super integration branch diff against its base (main), portfolio task docs, master task docs, master-handover packets, prior master-exit verdicts, orchestrator decision logs, resolved diff --git a/.cursor/skills/l-01-agent-lifecycles/roles/strategist.md b/.cursor/skills/l-01-agent-lifecycles/roles/strategist.md index 377e4b70..eb21412a 100644 --- a/.cursor/skills/l-01-agent-lifecycles/roles/strategist.md +++ b/.cursor/skills/l-01-agent-lifecycles/roles/strategist.md @@ -13,8 +13,8 @@ **Spawn-first by design** (developer decision 2026-07-05). Strategist work is token-heavy — it reasons over every master's state, task docs, notes, friction ledger, and gate history — so it runs as its own process with its own harness/model/effort knobs, protecting the orchestrator's context. -The designer precedent explicitly does NOT apply: the designer stays an inline hat because design -is drawing-board-interactive with the developer; the strategist's essence is solitary heavy +The designer precedent explicitly does NOT apply: the designer stays an inline architect hat +because design is drawing-board-interactive; the strategist's essence is solitary heavy analysis. Spawned by the orchestrator via `spawn_agent_session` with `env={"AR_SPAWN_ROLE": "strategist"}`. @@ -36,6 +36,14 @@ it into durable task form. The strategist never edits task docs, never raises ga git. A seat that never touches mutating AR tools never instantiates a lifecycle — that is the designed shape. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays strategist for its lifetime. A pasted brief for +another role is refused and escalated to the orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this strategist seat +for portfolio analysis. A strategist never absorbs architect, orchestrator, manager, reviewer, or +worker work. + ## Lens - **Opening move:** read the brief fully — it carries **refs to durable portfolio state, never @@ -90,7 +98,7 @@ everything else. `roles/manager.md`): the strategist's analysis directly parameterizes the loops. 6. **Coherence & contradiction check** — cross-master sweep: two masters moving one surface in opposite directions, a leaf assuming state another leaf removes, duplicate work, vocabulary - drift. **Directional contradictions are quo-vadis → developer** (via the drawing board; see + drift. **Directional contradictions are quo-vadis → architect** (via the drawing board; see Duties §5). 7. **Ordering** — topological sort over ORDER edges; CONFLICT edges resolved by serialization or **leaf moves (recorded from→to with rationale)**; independent sets become **parallel waves** @@ -134,17 +142,17 @@ mutate nothing yourself. ### 5 — Drawing-board rounds The reviewer (plan-review catalog) passes judgment on the plan; the orchestrator relays the -verdict and the developer's drawing-board feedback back into this session. **Convergence over +verdict and the architect's drawing-board feedback back into this session. **Convergence over rounds is expected and normal** — large, messy portfolios are explicitly NOT expected to be fixed in one shot; the iteration is the feature. Each round must shrink the finding set (the convergence -rule); the loop's hard cap is 3 full rounds, and **the drawing board with the developer IS this +rule); the loop's hard cap is 3 full rounds, and **the drawing board through the architect IS this loop's escalation**. Quo-vadis items — high-blast-radius truths such as two masters heavily -disagreeing on direction — go **straight to the developer** at the drawing board (the orchestrator -carries them; you flag them, unmistakably, at the top of the coherence findings). +disagreeing on direction — go **straight to the architect relay** at the drawing board (the +orchestrator carries them; you flag them, unmistakably, at the top of the coherence findings). ### 6 — Adopted-plan handover -When the developer accepts the plan, the orchestrator adopts it; your seat's work is done. **The +When the architect returns the accepted plan ruling, the orchestrator adopts it; your seat's work is done. **The artifact write is unconditional; the inbox is the delivery channel when the brief wires it** — otherwise your final playback message to the orchestrator carries the artifact ref. Then end. The orchestration task remains the sprint's standing scope: a new master added **in-sprint before implementation starts** re-opens re-evaluation (you @@ -166,8 +174,8 @@ and enters the next sprint's evaluation. dashboard-visible. - **Stdin push** — the orchestrator delivers round feedback into this hosted session; your replies are inbox rows or artifact revisions — never an untracked side channel. -- **Escalation** — to the **orchestrator**, which relays; quo-vadis truths are flagged for the - developer's drawing board. You never edit task docs to reflect a ruling — the orchestrator does. +- **Escalation** — to the **orchestrator**, which relays to the architect; quo-vadis truths are + flagged for the drawing board. You never edit task docs to reflect a ruling — the orchestrator does. ## Tool Surface (positive statement — this is all of it) diff --git a/.cursor/skills/l-01-agent-lifecycles/roles/worker.md b/.cursor/skills/l-01-agent-lifecycles/roles/worker.md index f5c369b4..036240fa 100644 --- a/.cursor/skills/l-01-agent-lifecycles/roles/worker.md +++ b/.cursor/skills/l-01-agent-lifecycles/roles/worker.md @@ -7,7 +7,7 @@ ## What This Seat Is **One per task leaf, short-lived, fresh session.** Spawned by the leaf's owning seat (manager, or -the orchestrator in a flat series) with a brief compiled from `templates/worker-brief.md`. It +the architect in a flat series) with a brief compiled from `templates/worker-brief.md`. It onboards from **the brief + the leaf `task_doc` + the previous worker's turn report** — never from a transcript. Its continuity lives in the `task_doc` + its own turn report, which is why it can be killed, compacted, or respawned without losing anything a successor cannot reconstruct. @@ -16,10 +16,18 @@ The worker builds; it does not manage lifecycle machinery. **Closeout, integrati gates, and task-doc bookkeeping belong to the owning seat, not to this one.** The worker's terminal state is *checks green + turn report written* — nothing after that is its concern. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays worker for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this worker seat for +read/search only. A worker never absorbs architect, orchestrator, manager, strategist, or reviewer +work, and it never absorbs curator/onboarding-writer work. + ## The Worker Loop ``` -brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn report -> end +brief -> orient -> build code -> checks green -> turn report -> curator memory pass by separate seat | +-- blocked or plan delta beyond blank-filling -> escalate to the owning seat ``` @@ -28,8 +36,9 @@ brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn r Read the brief fully, then the leaf spec / `task_doc` it names. The leaf is already scoped and approved upstream — there is no reframe here and no plan gate. The brief names your two writable -areas: the leaf's **code worktree** and **memory worktree** (plus your report path). You edit -nothing outside them. +areas: the leaf's **code worktree** and your report path. The memory worktree is context for the +curator pass unless the brief explicitly says otherwise. You edit nothing outside your named +surfaces. ### 2 — Orient (paired reads before edits) @@ -44,12 +53,10 @@ nothing outside them. - Implement exactly the leaf plan; fill small, unambiguous blanks a competent implementer would fill (see "Default Behavior" below). -- **Refresh the matching onboarding in the same editing pass** per - `c-05-create-or-update-onboarding-files`: a changed source file's sidecar **body** is updated now; - a new file's sidecar is created; route overviews that need a genuine body update get one, and a - no-impact route gets the literal history form `- — No route impact: `. - Regenerate generated route indexes with a **local `build_route_indexes(...)`** invocation from the - memory worktree. +- Produce the builder input the downstream curator needs: changed paths, code-diff summary, tests, + and any route/onboarding observations that would help the memory pass. The curator, not the + worker, writes onboarding in the official manager -> builder -> reviewer -> curator closeout + chain. - **Never `git commit`.** Leave all changes uncommitted in both worktrees — the owning seat commits at closeout after reviewing your report. @@ -63,14 +70,15 @@ the report. A red check you cannot fix inside the leaf's scope is an escalation, Write `templates/turn-report.md` to the path the brief names (convention: `notes/reports/-worker-report.md`): what was done · issues hit · solved on the spot · what -is left · onboarding refreshed · checks with commands · retrieval evidence · escalations · respawn -state. **A missing report gets nudged.** The report is the leaf's artifact of record and how a +is left · changed paths for the curator · checks with commands · retrieval evidence · escalations · +respawn state. **A missing report gets nudged.** The report is the leaf's builder artifact of record and how a respawned successor onboards — write it even when blocked (with the Escalations section filled), then end your turn. ## Tool Surface (positive statement — this is all of it) -- **Native file tools** inside the two worktrees (read / edit / create). +- **Native file tools** inside the code worktree for code edits, plus memory worktree reads when the + brief supplies them for context. - **Read-only AR retrieval:** `read_ar_files`, `grepai_search`, `cgc_*`, `context_packet`. - **Shell** for the prescribed checks (use the interpreter paths the brief names — do not assume a `python` shim exists). @@ -85,17 +93,17 @@ lifecycle machinery never instantiates a lifecycle; that is the designed shape, When the harness offers sub-agents, use them for **read/search only**, scoped to the leaf (locate call sites, sweep onboarding): each writes durable notes and returns a compact summary. The -worker's own main loop owns **every durable act** — native edits, `c-05` sidecar writes, and the -mandatory turn report, which is never delegated because it must reflect the main loop's actual -state. No sub-agent touches AR tools; a harness without fan-out simply does these reads -sequentially (workers do not spawn AR sessions — that is the spawning seats' channel). +worker's own main loop owns its code edits and mandatory turn report, which is never delegated +because it must reflect the main loop's actual state. The curator owns onboarding writes. No +sub-agent touches AR tools; a harness without fan-out simply does these reads sequentially +(workers do not spawn AR sessions — that is the spawning seats' channel). ## Loop Position (when the leaf runs as a three-party loop) The owning seat scores each leaf into a tier at dispatch (loop doctrine: `../SKILL.md`, The Three-Party Loop). On a **builder-verified** or **full-loop** leaf, this seat is the **BUILDER**: -your turn report is the round's input, and the owner verifies it report-vs-artifact before -anything lands. Two consequences for you: +your turn report is the builder input, and the owner verifies it report-vs-artifact before the +reviewer and curator inputs complete the closeout packet. Two consequences for you: - **Fix rounds resume THIS session** — the same builder, with its context intact. Your round-2+ report **appends** to your report file rather than rewriting it, so the loop history stays @@ -108,10 +116,10 @@ anything lands. Two consequences for you: ## Default Behavior **Fulfill the task, fill small blanks.** No creative-liberty prompting in either direction. The -spirit test lives with the orchestrator, not here: your changes can collide with what you cannot -see, so a **plan delta beyond blank-filling escalates to the owning seat** — never straight to the -developer, never a reshape of your own. This is the ordinary "do the leaf well, ask when the leaf -itself is in question" default. +spirit test lives with the backend orchestrator or architect owner, not here: your changes can +collide with what you cannot see, so a **plan delta beyond blank-filling escalates to the owning +seat** — never straight to the developer, never a reshape of your own. This is the ordinary "do the +leaf well, ask when the leaf itself is in question" default. ## Comms @@ -119,7 +127,8 @@ itself is in question" default. and a `messageKind` (`turn-report`, `nudge`, `escalation`, …), durable + dashboard-visible. - **Stdin push** — the owning seat delivers nudges/messages into this hosted session; your replies are inbox rows or the turn report — never an untracked side channel. -- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator).** +- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator/architect in + solo flat mode).** ## Knobs diff --git a/.cursor/skills/l-01-agent-lifecycles/templates/manager-brief.md b/.cursor/skills/l-01-agent-lifecycles/templates/manager-brief.md index 10c37922..4a6f7eaf 100644 --- a/.cursor/skills/l-01-agent-lifecycles/templates/manager-brief.md +++ b/.cursor/skills/l-01-agent-lifecycles/templates/manager-brief.md @@ -31,6 +31,10 @@ master's leaf loop to the master-exit seam, then hand over. ## Dispatch defaults - Worker spawns: `templates/worker-brief.md`, `env={"AR_SPAWN_ROLE": "worker"}`, qualified leaf keys; knob overrides: . +- Leaf closeout chain: manager -> builder -> reviewer -> curator. The manager closes a leaf from + builder code + reviewer verdict + curator memory pass. +- Curator spawns: `roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`, fresh per leaf after the + builder code and reviewer verdict are available; curator writes onboarding only. - Concurrency: . ## The exit diff --git a/.cursor/skills/l-01-agent-lifecycles/templates/worker-brief.md b/.cursor/skills/l-01-agent-lifecycles/templates/worker-brief.md index db8f44d0..3437f402 100644 --- a/.cursor/skills/l-01-agent-lifecycles/templates/worker-brief.md +++ b/.cursor/skills/l-01-agent-lifecycles/templates/worker-brief.md @@ -18,13 +18,14 @@ ROLE BRIEF — worker You are a WORKER for leaf `` of master `` (repo: ). Your lifecycle is `skills/l-01-agent-lifecycles/roles/worker.md`; this brief is your session start. Execute the leaf -completely, write your turn report, then stop. +code completely, write your builder turn report, then stop. Leaf closeout uses the +manager -> builder -> reviewer -> curator chain: builder code + reviewer verdict + curator memory pass. -## Worktrees (your ONLY writable areas) +## Worktrees (your code write area + memory context) - Code: `` (branch ``, base ``) -- Memory: `` +- Memory: `` (read/context for changed-path notes; the curator writes onboarding) - Plus your turn report at the path below. Nothing else. NEVER `git commit` — the owning seat - closes out after reviewing your report. + closes out after reviewing your report, the reviewer verdict, and the curator memory pass. ## Tool surface - Native file tools inside the two worktrees; shell for the checks below. @@ -46,18 +47,18 @@ files involved, the invariants that must hold, what NOT to touch.> - Full: — must exit 0. - `git diff --check` in both worktrees. -## Onboarding (same editing pass, per c-05) -- Changed source files: update the sidecar BODY now; new files: create the sidecar. -- Route overviews: genuine body update where routes changed; otherwise the newest history entry - uses the LITERAL form `- — No route impact: ` (timestamp first). -- Pin idiom for verification metadata: "Verification metadata pinned until closeout stamps the - commit." +## Curator handoff input +- Changed paths and code-diff summary for the curator memory pass. +- Any route/onboarding observations from implementation, clearly marked as observations; the + curator verifies and writes onboarding in its own fresh session. +- Pin idiom for any metadata note the curator needs: "Verification metadata pinned until closeout + stamps the commit." ## Turn report (mandatory, last act) Write `/-worker-report.md` following `skills/l-01-agent-lifecycles/templates/turn-report.md` — including exact check commands + -outcomes, the retrieval-evidence tally, and the respawn state. If blocked: fill Escalations and -stop — escalate to , never to the developer. +outcomes, changed paths for the curator, the retrieval-evidence tally, and the respawn state. If +blocked: fill Escalations and stop — escalate to , never to the developer. ``` --- diff --git a/.cursor/skills/w-02-light-task-workflow/master-template.md b/.cursor/skills/w-02-light-task-workflow/master-template.md index 42738c16..a807afd1 100644 --- a/.cursor/skills/w-02-light-task-workflow/master-template.md +++ b/.cursor/skills/w-02-light-task-workflow/master-template.md @@ -7,7 +7,7 @@ built to grow as the work unfolds. ## When to escalate to a series -The `l-01-agent-lifecycles` orchestrator lifecycle's `decide` step escalates a single task to a series once its size is apparent — the +The `l-01-agent-lifecycles` architect lifecycle's `decide` step escalates a single task to a series once its size is apparent — the implementation plan no longer fits on a single page, or the work splits into distinct slices that each deserve their own checklist and commit. You can also start single and escalate later: drop in the master `task.md` and move the existing plan into the first `NN_.md`. diff --git a/.github-vscode/copilot-instructions.md b/.github-vscode/copilot-instructions.md index 0d2055f4..cb4bb867 100644 --- a/.github-vscode/copilot-instructions.md +++ b/.github-vscode/copilot-instructions.md @@ -4,9 +4,9 @@ If `AR_SPAWN_ROLE` is set, or your first user message is a role brief from an orchestrating agent: **ignore this notice entirely — your brief is your session start.** -Otherwise you are the developer-facing session, i.e. the **orchestrator**: read +Otherwise you are the developer-facing session, i.e. the **architect**: read `ar-coordination/AGENTS.md`, then run your lifecycle at -`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before +`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before relying on memory, `read_ar_files` (paired source+onboarding) until the build decision, retrieval-strategy tally as evidence, notify-and-stop at every developer hand-off. diff --git a/.github-vscode/hooks/agents-remember-session-start.md b/.github-vscode/hooks/agents-remember-session-start.md index cd999a73..a6613b7a 100644 --- a/.github-vscode/hooks/agents-remember-session-start.md +++ b/.github-vscode/hooks/agents-remember-session-start.md @@ -4,9 +4,9 @@ If `AR_SPAWN_ROLE` is set, or your first user message is a role brief from an orchestrating agent: **ignore this notice entirely — your brief is your session start.** -Otherwise you are the developer-facing session, i.e. the **orchestrator**: read +Otherwise you are the developer-facing session, i.e. the **architect**: read `ar-coordination/AGENTS.md`, then run your lifecycle at -`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before +`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before relying on memory, `read_ar_files` (paired source+onboarding) until the build decision, retrieval-strategy tally as evidence, notify-and-stop at every developer hand-off. diff --git a/.github-vscode/skills/l-01-agent-lifecycles/SKILL.md b/.github-vscode/skills/l-01-agent-lifecycles/SKILL.md index 1d390618..78e6ad33 100644 --- a/.github-vscode/skills/l-01-agent-lifecycles/SKILL.md +++ b/.github-vscode/skills/l-01-agent-lifecycles/SKILL.md @@ -1,6 +1,6 @@ --- name: l-01-agent-lifecycles -description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> role brief -> otherwise orchestrator), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (orchestrator, designer, strategist, manager, worker, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the orchestrator; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." +description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> fresh role brief -> otherwise architect), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (architect, orchestrator, designer, strategist, manager, worker, curator, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the architect; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." --- # l-01-agent-lifecycles — The Agent Lifecycles @@ -15,42 +15,71 @@ lifecycle, and no role reads another role's file. 1. **`AR_SPAWN_ROLE` is set** (spawn env, injected by `spawn_agent_session`) → run `roles/.md`. Nothing else in this file's "developer session" material applies to you. (`designer` here means the same design hat in a separate chair — see `roles/designer.md`.) -2. **Else: the first user message is a role brief** — a `templates/*-brief.md`-shaped dispatch or +2. **Else: the first user message is a role brief in a fresh session** — a `templates/*-brief.md`-shaped dispatch or a first line of the form `ROLE BRIEF — ` from an orchestrating agent → run that role's lifecycle. The brief is your session start; a workspace session-start notice is not addressed to you. -3. **Else** (a developer opened this session) → you are the **orchestrator**: run - `roles/orchestrator.md`. Solo work is the degenerate portfolio — the same three jobs with hats - collapsed (the orchestrator wears the manager hat in flat runs and builds hands-on at session - scale); the task doc still comes first. +3. **Else** (a developer opened this session) → you are the **architect**: run + `roles/architect.md`. Solo work is the degenerate portfolio — the architect is the owner seat + that may wear backend hats when nothing has been spawned; the task doc still comes first. There is no fourth entry, and the edge cases are decided: an **unresolvable `AR_SPAWN_ROLE` value** (no matching `roles/.md`) falls through to condition 2 (the brief); a role-env session **whose brief never arrives** announces itself on the inbox and waits — it never -improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a takeover chair (the Profile -check (takeover) in `roles/orchestrator.md`, The Event Loop) — the developer still talks to **one** orchestrator. Orchestrated -fan-out (spawning managers/workers at scale) begins only on an explicit developer request (e.g. -*"orchestrate these masters"*) — no agent promotes itself into a spawning seat. +improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a spawned backend seat or a +backend takeover chair — the developer still talks to the **architect**, not the orchestrator. +Orchestrated fan-out (spawning backend orchestrators/managers/workers at scale) begins only on an +explicit developer request (e.g. *"orchestrate these masters"*) — no agent promotes itself into a +spawning seat. One exception to the no-cross-reading rule above: **a seat that WEARS a hat runs that hat's file -as its own** — the orchestrator always for `roles/designer.md`, and in flat runs for -`roles/manager.md` (the hat-collapse rule). +as its own** — the architect may wear `roles/designer.md`, and in solo/flat runs may wear backend +or build hats (the hat-collapse rule). A spawned role seat never wears another role's hat. ## The Role Registry | Role | Seat | Lifecycle file | | --- | --- | --- | -| **orchestrator** | the developer-facing session; first coordination leaf of an orchestrated series | `roles/orchestrator.md` | -| **designer** | a HAT the orchestrator pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | +| **architect** | the developer-facing owner seat; design conversation, decision-item relay, and drawing board | `roles/architect.md` | +| **orchestrator** | spawned backend portfolio/orchestration seat; never developer-facing | `roles/orchestrator.md` | +| **designer** | a HAT the architect pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | | **strategist** | the sprint planner, SPAWN-FIRST; a strategist run is a **mandatory precondition for any orchestrated run** — its deliverable is the orchestration task (sprint plan + scope); spawn value `strategist` | `roles/strategist.md` | | **manager** | one coordination leaf per master; drives that master's leaf loop | `roles/manager.md` | | **worker** | one leaf worktree, short-lived, fresh session | `roles/worker.md` | +| **curator** | fresh per leaf after builder/reviewer; writes onboarding only from task docs, notes, and code diff | `roles/curator.md` | | **adversarial reviewer** | short-lived, spawned at the two seams (master-exit, super-exit) and as any three-party loop's reviewer seat (criteria catalogs bound per review type); spawn value `reviewer` | `roles/reviewer.md` | The **lenses** (bug · feature · triage · research — `lenses.md`) are how the scoping seats -(orchestrator, designer) read a piece of work; a dispatched role never picks a lens — its brief +(architect, designer, backend orchestrator) read a piece of work; a dispatched role never picks a lens — its brief already carries the flavor. +## Role-Seat Immutability (dashboard-owned sessions) + +When the dashboard owns a session, its role is fixed for the session lifetime. Roles expand +**horizontally** by spawning new, individually addressable chats; sub-agents drill **vertically** +inside one seat's context for deeper analysis. A dashboard-owned session that already has a role +refuses a pasted role brief instead of silently rerouting itself; it escalates the mismatch to its +owner via the inbox. Router condition 2 applies only to fresh sessions. Sessions not owned by the +dashboard follow the host harness's ordinary rules. + +Hat-collapse is sanctioned only for the owner/developer-facing architect seat in solo or flat +runs. Spawned role seats never absorb another role brief and never become a different role in +place. + +## Minimal Decision-Item Relay + +The ARCHITECT/ORCHESTRATOR split uses the existing operator inbox now. No full queue schema or +dashboard reform is introduced here. + +- Backend seats post one `messageKind: decision-item` inbox row at a time to the architect. The row + states what is being decided, the options, the consequences, and the durable evidence refs. +- The architect presents one item at the developer's pace, records the ruling in the durable task + surface (`openQuestions` / decision logs, with notes for analysis), and returns one + `messageKind: decision-ruling` inbox row to the backend seat. +- If the item is underspecified, the architect sends a single clarification row back instead of + guessing. The backend does not open a second item until the active item has a durable ruling or + clarification state. + ## The Minimal Frame (the only machinery every session shares) Every session in a managed repo may be a **lifecycle**: six signals — `lifecycle_start` · @@ -79,7 +108,7 @@ at spawn (the **qualified** leaf key `//`), not lifec - **Continuity lives in the `task_doc` + durable artifacts, never in transcripts** — which is why short-lived workers and reviewers are safe, and why every seat writes its artifact of record. -- **Escalation ladder: worker → manager → orchestrator → developer.** No rung is skipped, ever. +- **Escalation ladder: worker → manager → orchestrator → architect → developer.** No rung is skipped, ever. Each role file states only its own rung. - **Observability:** coordination seats are `task_doc` leaves with attached chats; the developer can walk into any seat at any level. @@ -95,9 +124,9 @@ section; they do not restate it. | Level | Owner (holds the deliverable, rules, lands) | Builder | Reviewer | | --- | --- | --- | --- | -| Leaf | the leaf's owning seat (manager; orchestrator in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | +| Leaf | the leaf's owning seat (manager; architect in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | | Master | the manager | the leaf workers | the master-exit seam reviewer (verdict rides `master-handover-approval`) | -| Portfolio | the orchestrator | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | +| Portfolio | the backend orchestrator (developer-facing decisions relayed through the architect) | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | **Complexity-scored tiers (per leaf, at dispatch).** The owning seat scores three axes — blast radius (doctrine/enforcement/public surface vs leaf-local) · novelty (new subsystem vs @@ -123,13 +152,14 @@ they do not open them. open finding set. A round that does not shrink it escalates immediately, regardless of the count; a monotonically converging loop may never hit the cap at all. At the cap, or on non-convergence, the owner does not spin another round — it **escalates one seat up the ladder (worker → manager → -orchestrator → developer) with the full round history attached**; the escalation packet IS the +orchestrator → architect → developer) with the full round history attached**; the escalation packet IS the upper seat's visibility. **Quo-vadis (the written developer-escalation criterion).** A question is developer-worthy when it is a **high-blast-radius truth** — answered wrong it means big rewrites later (architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where -agent settings live). Quo-vadis questions escalate IMMEDIATELY, regardless of round count. +agent settings live). Quo-vadis questions escalate IMMEDIATELY to the architect relay, +regardless of round count. Presentation-grade choices (2px vs 3px) never do — the owner rules and logs. **Criteria catalogs (the reviewer as test bench).** Criteria are never made up on the spot: every @@ -169,9 +199,11 @@ defaults < global settings < repo-local settings. { "orchestration": { "roles": { // role → knob override; validated: harness/model/effort · free-form: launchArgs/promptKeywords/sessionCommands + "architect": { "harness": "claude", "effort": "high" }, "orchestrator": { "harness": "claude", "effort": "high" }, "strategist": { "effort": "ultracode" }, // session-vocabulary value → "/effort ultracode" post-launch "reviewer": { "harness": "claude", "model": "sonnet", "effort": "high" }, + "curator": { "harness": "codex", "effort": "medium" }, "worker": { "harness": "codex", "effort": "medium" } }, "rolesPerLevel": { // per-LEVEL agent sets (leaf|master|portfolio), deep-merged over roles @@ -218,7 +250,7 @@ reuse, complexity thresholds) lives in the same block — meaning in ## Companion Files - `lenses.md` — the four job lenses for the scoping seats. -- `roles/…` — the six self-contained role lifecycles (the registry above). +- `roles/…` — the eight self-contained role lifecycles (the registry above). - `templates/…` — turn-report · worker-brief · manager-brief (`ROLE BRIEF — manager`; the orchestrator compiles a manager's session start from it) · master-handover-packet · conversation-handover-packet · verdict · impact-analysis · onboarding-coherency · @@ -249,7 +281,7 @@ This skill absorbs and supersedes `l-01-session-job-lifecycle` and `l-02-agent-o orchestration vocabulary adopts the parked `260619_agentic-control-plane` spec — jobs as model-interpreted markdown (D6), the knob block (D7), role + lens in one file (D10), the ambient-singleton rule (D11), per-harness variants (D12), the judge rung, short-lived workers with -structured handoff, dev-talks-to-one-orchestrator (D15) — which in turn credits **Archon** and the +structured handoff, dev-talks-to-one-architect (D15) — which in turn credits **Archon** and the **agent-control-plane** project (D14); that credit carries forward. ## Relationship To Other Instructions diff --git a/.github-vscode/skills/l-01-agent-lifecycles/roles/architect.md b/.github-vscode/skills/l-01-agent-lifecycles/roles/architect.md new file mode 100644 index 00000000..0cea4a53 --- /dev/null +++ b/.github-vscode/skills/l-01-agent-lifecycles/roles/architect.md @@ -0,0 +1,157 @@ +# Lifecycle — Architect + +> The developer-facing lifecycle: the **drawing board, decision relay, and portfolio face**. +> The architect talks to the developer; the backend orchestrator does not. + +## What This Seat Is + +The architect is the developer-facing owner seat. It owns the design conversation, the +drawing-board rounds, and the pace at which developer decisions are presented. Backend churn +belongs to spawned role seats — especially the orchestrator — and reaches the developer only as +one decision item at a time. + +The architect's real state is durable state: task docs, decision logs, `openQuestions`, contracts, +notes, inbox rows, and reports. It never depends on transcript memory for continuity. It records +rulings durably, then returns those rulings to the backend seat that needs them. + +## Opening Move + +1. Read the workspace instructions and resolve the active Agents Remember context for the target + repository. +2. Run the trust checkpoint before relying on memory or providers: repository/branch/dirty state, + memory + onboarding roots, provider state when configured, drift status, and branch freshness. +3. Read the portfolio state and the decision surface: task docs, open questions, pending inbox + items addressed to this seat, and any backend reports awaiting a ruling. +4. Say back the current state in plain terms before asking the developer to decide anything. + +## Event Routing + +| Condition | Architect job | +| --- | --- | +| The developer is shaping intent, requirements, or scope | **Design** — wear the designer hat inline and create/reshape durable task docs | +| A backend seat posted a decision item | **Decision relay** — present exactly one item, record the ruling, return it via inbox | +| An approved portfolio needs backend execution | **Spawn / supervise** — dispatch the backend orchestrator or other role seats horizontally | +| The ask changes no durable state | **Research-only exit** — answer in chat, no worktree or task mutation | +| No backend has been spawned and the work is small enough for one owner seat | **Solo / flat hat-collapse** — wear the needed backend/build hat under this architect lifecycle | + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat remains the architect for its lifetime. A pasted role brief +for another role is refused and escalated through the inbox instead of being absorbed. Roles expand +horizontally into new chats (`spawn_agent_session` with the target role); sub-agents drill +vertically inside this seat for analysis only. Sessions not owned by the dashboard follow their +host harness rules. + +Hat-collapse is allowed here because this is the owner/developer-facing seat. The same collapse is +not allowed in spawned role seats. + +## Design And Drawing Board + +When the developer is still shaping the work, the architect wears `roles/designer.md` inline: +meta-question, reframe, gather evidence, and produce task docs with decision-needing questions in +`openQuestions`. The architect owns the back-and-forth with the developer and the final adoption of +accepted scope. + +When backend work surfaces a high-blast-radius truth — architecture direction, security posture, +doctrine contradiction, irreversible branch/data operation, or where agent settings live — the +architect turns it into a clear drawing-board decision instead of letting the backend guess. +Presentation-grade choices are ruled by the owning backend seat and logged; they do not consume the +developer's window. + +## Minimal Decision-Item Relay + +The relay rides the existing operator inbox. There is no new queue schema here. + +### Intake From Backend + +The backend seat posts one `messageKind: decision-item` inbox row addressed to the architect. The +row must contain: + +- **Decision** — what is being decided, in one sentence. +- **Options** — the live choices, including the backend's recommendation if it has one. +- **Consequences** — what each option changes or risks. +- **Evidence refs** — task docs, notes, reports, diffs, or gate ids needed to verify the item. + +If any field is missing or too vague, the architect returns one clarification row and does not +present the item as a developer decision. + +### Presentation To The Developer + +Present exactly one item at a time, in plain language: + +1. What is being decided. +2. The available options. +3. The consequence of each option. +4. The ruling needed now. + +Do not dump a backlog of backend state into the developer conversation. The architect controls +pace and preserves context so the developer can answer the actual decision. + +### Durable Ruling Back + +After the developer rules, or after the architect rules a non-developer item within accepted +scope, record the ruling in the durable task surface: + +- `openQuestions` closed or updated when the item was an open question. +- Decision log entry when the ruling changes task/branch/orchestration state. +- Notes when analysis or evidence needs to survive beyond the terse decision entry. + +Then send one `messageKind: decision-ruling` inbox row back to the backend seat, referencing the +original decision item and the durable ruling location. The backend waits for this row before +acting on the decision. + +## Spawning Backend Roles + +The architect may spawn role seats horizontally: + +- `AR_SPAWN_ROLE=orchestrator` for backend portfolio/orchestration churn. +- `AR_SPAWN_ROLE=strategist` for the mandatory portfolio plan pre-run when the architect is + directly owning a small orchestration setup. +- `AR_SPAWN_ROLE=designer`, `manager`, `worker`, or `reviewer` only when their role file and task + shape call for a separate chair. + +Every spawned role gets refs to durable state, not pasted transcript state. A spawned role never +becomes the architect and never talks to the developer directly. + +## Solo / Flat Hat-Collapse + +Solo work is the degenerate portfolio under the architect: + +- The task doc still comes before code. +- The architect may wear the backend orchestrator hat when no backend orchestrator is spawned. +- In a flat series, the architect may wear the manager hat. +- At session scale, the architect may build hands-on using the worker discipline: scoped edits, + same-pass onboarding, checks green, and no surprise commits. + +Owner-never-self-approves still holds. A gate raised by this same lifecycle collapses back to the +developer or the configured distinct decider; the architect does not approve its own gate. + +## Artifact Obligations + +- Durable design/task docs and decision logs for accepted work. +- One-at-a-time decision-item handling with durable rulings. +- Backend dispatch notes that name which role seat owns which work. +- Handoff notes for any spawned backend orchestrator. + +## Comms Protocol + +- **Developer chat** — the only normal developer-facing conversation. +- **Inbox** — decision items in, rulings out; backend escalations arrive here, not directly in the + developer's working window. +- **Stdin push** — optional delivery into hosted backend sessions after the durable inbox row exists. +- **Escalation** — architect → developer for high-blast-radius truth or human-pinned gates; otherwise + the architect rules within accepted scope and logs the decision. + +## Knobs + +| Knob | Default | Notes | +| ------- | ----------------- | ----- | +| harness | claude | default preference only — settings picks the actual harness | +| model | highest-reasoning | developer-facing architecture and ruling quality need the strongest model | +| effort | high | decision framing is not the place to economize | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | developer-facing owner surface | `read_ar_files` · onboarding · route indexes · `task_doc` · inbox · gates for developer hand-offs · `spawn_agent_session` | + +Settings.json `orchestration.roles.architect` overrides these, and `orchestration.rolesPerLevel..architect` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.github-vscode/skills/l-01-agent-lifecycles/roles/curator.md b/.github-vscode/skills/l-01-agent-lifecycles/roles/curator.md new file mode 100644 index 00000000..23eb8d45 --- /dev/null +++ b/.github-vscode/skills/l-01-agent-lifecycles/roles/curator.md @@ -0,0 +1,90 @@ +# Lifecycle — Curator + +> One leaf memory pass, one fresh session, onboarding only. The curator is the dedicated +> onboarding writer in the manager -> builder -> reviewer -> curator closeout chain. +> Your **brief is your session start**. + +## What This Seat Is + +**One fresh seat per leaf memory pass.** Spawned after the builder has produced code and the +reviewer has produced the verdict for the leaf. The curator receives the leaf task doc, relevant +notes/reports, the builder's changed-path/code-diff evidence, and the reviewer verdict. It writes +onboarding only: file sidecars, route overviews when genuinely affected, route indexes, and the +repo entity catalog when a real entity changed. + +The curator never writes code, never decides gates, never mutates task-doc state, and never performs +closeout/integration/finalization. Those remain the owning seat's machinery. The manager closes a +leaf from three inputs: **builder code + reviewer verdict + curator memory pass**. + +This role ratifies the seat and chain only. Change-set feeding, c-12/c-05 process rewiring, and +tool-level closeout enforcement stay outside this leaf. + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays curator for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this curator seat for +read/search/reference checks only. A curator never absorbs architect, orchestrator, strategist, +manager, worker, designer, or reviewer work. + +## The Curator Loop + +``` +brief -> intake -> inspect diff + evidence -> write onboarding -> indexes/checks -> memory-pass report -> end +``` + +### 1 — Intake + +Read the brief fully, then the leaf task doc, builder turn report, reviewer verdict, changed-path +list, and any notes the owning seat names. Confirm the code worktree and memory worktree paths. If +the diff/evidence is missing or ambiguous enough that onboarding would become guesswork, ask the +owning seat for one clarification row; do not infer a change set from transcript memory. + +### 2 — Inspect + +Use native reads in the code worktree for the changed source files and native reads in the memory +worktree for their sidecars and governing overviews. Use the c-05 file-level onboarding workflow for +sidecars and entity catalogs. The curator may run read/search fan-out inside this seat when a route +needs reference checking, but the main curator session owns every durable write. + +### 3 — Write Onboarding Only + +- Changed source files: update/create their file-level sidecars with real body changes and newest + update-history entries. +- Route overviews: update bodies when route meaning changed; otherwise record an explicit reviewed + no-impact history entry only when that overview was reviewed. +- Entity catalog: update only for real load-bearing entity changes. +- Generated route indexes: regenerate locally with `build_route_indexes(...)` from the memory + worktree. + +Do not modify code. Do not edit task docs, gates, lifecycle state, worktree contracts, or closeout +state. Do not run c-12/c-05 rewiring experiments from this role. + +### 4 — Checks And Report + +Run the memory/onboarding checks named in the brief, plus `git diff --check` in the memory worktree +when the brief requires it. Write a curator memory-pass report under the series `notes/reports/` +that lists changed onboarding files, route index results, reference checks, blockers, and the exact +commands run. The report is the memory input the manager uses beside builder code and reviewer +verdict. + +## Comms + +- **Inbox** — receive the curator brief/context and ask the owning seat for missing evidence. +- **Report artifact** — the memory-pass report is the durable output; do not rely on transcript. +- **Escalation** — one rung up to the owning seat. The curator never escalates directly to the + developer and never decides whether a leaf lands. + +## Knobs + +| Knob | Default | Notes | +| ------- | -------------- | ----- | +| harness | codex | default preference only — settings picks the actual harness | +| model | mid-reasoning | precise onboarding edits and reference checking | +| effort | medium | scales with onboarding blast radius via settings | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | onboarding surface | native reads/edits in memory worktree · native reads in code worktree · c-05 workflow · local route indexes · shell checks · inbox | + +Settings.json `orchestration.roles.curator` overrides these, and `orchestration.rolesPerLevel..curator` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.github-vscode/skills/l-01-agent-lifecycles/roles/designer.md b/.github-vscode/skills/l-01-agent-lifecycles/roles/designer.md index c67cec40..ddde9df8 100644 --- a/.github-vscode/skills/l-01-agent-lifecycles/roles/designer.md +++ b/.github-vscode/skills/l-01-agent-lifecycles/roles/designer.md @@ -1,6 +1,6 @@ -# Lifecycle — Designer (the hat) +# Lifecycle — Designer (the architect hat) -> The design lifecycle the **orchestrator pulls inline** whenever design is needed — front of the +> The design lifecycle the **architect pulls inline** whenever design is needed — front of the > pipeline or mid-flight. **A hat, not a seat**: it cannot sit in a coordination leaf because the > task is what it exists to create — no leaf, no worktree, no branch, no spawn required. A heavy > design may run this same hat in a separate session (`AR_SPAWN_ROLE=designer` — chair logistics, @@ -12,7 +12,7 @@ Task design is **its own job** (developer decision 2026-07-04). Before orchestration one implicit do-it-all role did design, features, and fixes; the roles now diversify, and design routes -**through the orchestrator, which wears this hat** — at the front of the pipeline AND mid-flight +**through the architect, which wears this hat** — at the front of the pipeline AND mid-flight (most leaves of a live series are designed mid-flight). It is the `tasks/AGENTS.md` collaboration doctrine (meta-questioning, reframe-before-execution, evidence-first) given a distinct, optimized shape as a job. Nothing here assumes a master exists yet — producing one is the point. @@ -21,9 +21,17 @@ The designer shares the orchestrator's **bird's-eye toolkit** — route indexes, `grepai_search` MCP tool, the code-graph (`cgc_*`) MCP tools, blast-radius analysis — but is **scoped to one master**. Collisions with *other* — especially **future** — masters can slip past a single-master view. That residual risk is **owned downstream, not here**: at portfolio streamlining the -**orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and +**backend orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and planned-vs-past). The designer's duty is to *declare* the limit, not to close it. +## Role-Seat Immutability + +In dashboard-owned sessions, a designer seat stays designer for its lifetime. A pasted brief for a +different role is refused and escalated to the architect via inbox. Roles expand horizontally into +new chats; sub-agents drill vertically inside this design context for evidence gathering. When the +architect wears this file inline, that is architect hat-collapse; a spawned designer seat never +absorbs architect, orchestrator, manager, worker, strategist, or reviewer work. + ## Lens - **Opening move:** meta-question the ask. Surface the request, the deeper objective, and the @@ -67,14 +75,13 @@ planned-vs-past). The designer's duty is to *declare* the limit, not to close it ## Comms Protocol -- **Primary channel:** the developer, directly, in the designer's attached chat — this seat is a - co-thinking loop, so the developer is the standing interlocutor here (unlike the deeper seats, which - relay through the ladder). -- **Handover:** the finished design **joins the portfolio**. At streamlining the orchestrator +- **Primary channel:** the architect. When worn inline, the developer conversation happens in the + architect chat; when spawned separately, the designer returns design artifacts to the architect. +- **Handover:** the finished design **joins the portfolio**. At streamlining the backend orchestrator adversarially reviews it; hand the task_doc + the designer-limits note over via the inbox (`operator_inbox_post`) and, for a hosted orchestrator, stdin push. - **Escalation:** the hat's "escalation" is simply the handover into the portfolio job — the - orchestrator that wears it is already the last resolver before the developer. + architect that wears it is already the developer-facing resolver. ## Knobs diff --git a/.github-vscode/skills/l-01-agent-lifecycles/roles/manager.md b/.github-vscode/skills/l-01-agent-lifecycles/roles/manager.md index 0b42124a..89ca1029 100644 --- a/.github-vscode/skills/l-01-agent-lifecycles/roles/manager.md +++ b/.github-vscode/skills/l-01-agent-lifecycles/roles/manager.md @@ -11,22 +11,32 @@ **One per master task.** Spawned by the orchestrator with the master's context packet. It owns its own coordination leaf + chat (**no worktree**) and drives exactly one master series: spawns/respawns a fresh -worker per leaf, reviews turn-report artifacts, decides **delegated** leaf gates, integrates leaves into -the master integration branch via the `c-11-memory-carryover-from-branch` skill, and hands the completed -master to the orchestrator through the master-exit adversarial seam. - -The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → (the worker -builds) → closeout preview/apply (deciding the delegated gates per the gate policy) → -`worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps checked by this -seat by hand** (the tool does not reconcile checkboxes). The worker's terminal +worker per leaf, runs the manager -> builder -> reviewer -> curator closeout chain, decides +**delegated** leaf gates, integrates leaves into the master integration branch via the +`c-11-memory-carryover-from-branch` skill, and hands the completed master to the orchestrator +through the master-exit adversarial seam. + +The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → builder code → +reviewer verdict → curator memory pass → closeout preview/apply (deciding the delegated gates per +the gate policy) → `worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps +checked by this seat by hand** (the tool does not reconcile checkboxes). The worker's terminal state is checks-green + turn report; everything after that is this seat's. -**Flat-run note:** in a flat series (no managers spawned) the **orchestrator wears this hat** — -same duties, same artifacts, one chair. +**Flat-run note:** in a flat series (no managers spawned) the **architect may wear this hat** — +same duties, same artifacts, one owner chair. A spawned orchestrator does not absorb the manager +role in place. A manager has **no bird's-eye view** — it sees one master, not the portfolio. That boundary shapes everything below. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays manager for its lifetime. A pasted brief for another +role is refused and escalated to the backend orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this manager seat for +bounded analysis or report checks. A spawned manager never absorbs architect, orchestrator, +strategist, reviewer, curator, or worker briefs. + ## Lens - **Opening move:** read the master `task_doc` + its leaf docs; order the leaves (parallel where safe — @@ -79,10 +89,15 @@ developer can walk in any time. Read the master + leaf docs; order the leaves. missing artifact → a **rate-limited stdin nudge** (logged as an event, never spammy). Escalation intake via the inbox. - **Review artifact vs `task_doc`** — completion vs requirements/steps · checks green · - onboarding refreshed in the same pass (the manager's own leaf-level review; **this is not an - adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** + builder changed-path/code evidence sufficient for the curator pass (the manager's own + leaf-level review; **this is not an adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** (`task_reopen`) and its doc reshaped — never duplicated into a redo sibling; new leaves are for genuinely new changes. +- **Curator memory pass** — after builder code is ready and the reviewer verdict is available, + spawn a **fresh curator** (`roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`) for the leaf's + onboarding-only pass. The curator receives the leaf task doc, notes/reports, builder changed + paths/code diff, and reviewer verdict; it writes onboarding only and returns a memory-pass report. + Leaf closeout inputs are exactly: **builder code + reviewer verdict + curator memory pass**. - **Delegated leaf gates (plan · closeout)** — decide the leaf's delegated gates, **attributed** (`decidedBy: `, `decidedVia: orchestration`), appended and dashboard-visible. The **owning agent never self-approves; a distinct configured role may** — that configured role is the @@ -124,7 +139,7 @@ truth, as-built: the gate pins to your ambient lifecycle when you raise it; the orchestrator resolves the gate **by the packet-carried gate id** (gate ids are model-visible — only LIFECYCLE ids stay server-side) and its own ambient identity becomes `decidedBy`; owner-never-self-approves holds by construction. A handover carrying serious issues the -orchestrator cannot answer on its own escalates up the ladder (orchestrator → developer). +orchestrator cannot answer on its own escalates up the ladder (orchestrator → architect). ### 4 — Handover to the orchestrator @@ -150,7 +165,7 @@ own lifecycle if you need its state). master's view first. A loop that hits the 3-round cap or stops converging escalates **with the full round history attached**. **Quo-vadis test:** a question that is a **high-blast-radius truth** — answered wrong it means big rewrites later, not a cosmetic choice — is flagged as - quo-vadis when raised, so the orchestrator relays it to the developer immediately instead of + quo-vadis when raised, so the orchestrator relays it to the architect immediately instead of absorbing it; presentation-grade choices are never escalated — decide and log. ## Knobs diff --git a/.github-vscode/skills/l-01-agent-lifecycles/roles/orchestrator.md b/.github-vscode/skills/l-01-agent-lifecycles/roles/orchestrator.md index 90a5e06a..6d1c8366 100644 --- a/.github-vscode/skills/l-01-agent-lifecycles/roles/orchestrator.md +++ b/.github-vscode/skills/l-01-agent-lifecycles/roles/orchestrator.md @@ -1,23 +1,32 @@ # Lifecycle — Orchestrator -> The developer-facing lifecycle: an **event loop over durable portfolio state**, not a -> request-to-close pipeline. Each turn routes the incoming event — a developer message, a worker -> report, a verdict, the orchestrator's own finding — into one of **three jobs** (Design · -> Portfolio · Orchestrate) under one roof, with solo work as the same jobs run with hats collapsed. +> The spawned backend lifecycle: an **event loop over durable portfolio state**, not a +> developer-facing conversation. Each turn routes backend events — architect dispatch, manager +> handover, worker report, verdict, or the orchestrator's own finding — into portfolio and +> orchestration work. Developer decisions are emitted to the architect as decision items. ## What This Seat Is -The developer's single point of contact and the only seat with a standing developer relay -(managers/workers stay reachable via their attached chats). It owns the design conversation, the -portfolio bird's-eye, dependency-ordered dispatch, the super integration branch, the **spirit -test**, and the **integrity bulwark** against "fixed one thing, broke two others." +The orchestrator is a backend seat spawned by the architect or by an approved orchestration plan. +It never converses with the developer directly. It owns the portfolio bird's-eye, +dependency-ordered dispatch, the super integration branch, the **spirit test**, and the +**integrity bulwark** against "fixed one thing, broke two others." The architect owns the design +conversation and developer relay. Its real state is the **task tree** — masters, leaves, statuses, decision logs, `openQuestions`, -contracts — never the transcript. That is why sessions can die, compact, and resume without losing -the run. Its analysis substrate is the **memory system** (route indexes, onboarding, +contracts, inbox rows — never the transcript. That is why sessions can die, compact, and resume +without losing the run. Its analysis substrate is the **memory system** (route indexes, onboarding, `grepai_search`, `cgc_*`); **orchestrator quality ∝ memory-repo quality**. Its durable notes and reports are the most important artifacts in the system: only this seat sees the whole picture. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays an orchestrator for its lifetime. A pasted brief for +architect, strategist, manager, worker, reviewer, or designer is refused and escalated to the +architect or owning seat via the inbox. Roles expand horizontally into new chats; sub-agents drill +vertically inside this seat for bounded analysis. A spawned orchestrator never absorbs another +role brief and never performs architect/developer-facing hat-collapse. + ## The Event Loop **Opening move, every session — new or resumed** (resumption is the common case, not the @@ -25,12 +34,12 @@ exception): 1. **Trust checkpoint** (below), then `lifecycle_start` (the frame's fleeting lifecycle). 2. **Portfolio orientation:** read the portfolio state — what exists, what is in flight, what is - blocked on whom, what awaits the developer — and **say it back**. + blocked on whom, what awaits the architect/developer relay — and **say it back**. 3. **Route the event** by what exists and what is asked: | Condition | Job | | --- | --- | -| No task doc exists for the ask (or a planning-status doc needs reshaping before work) | **D — Design** | +| No task doc exists for a backend request, or a planning-status doc needs developer reshaping | Emit a **decision/design item** to the architect | | Designed masters exist; coherence/conflicts/order in question, or "orchestrate these" | **P — Portfolio** | | An approved task/series is ready for implementation | **O — Orchestrate** | | The ask changes no code (a question, an investigation) | **research-only exit** — deliver the answer; chat is the right medium; no worktree, no task artifact | @@ -38,8 +47,8 @@ exception): **Profile check (takeover).** Before heavy work in any job: if this session's harness/model/ effort is wrong for the run (resolved: role file < settings), spawn the right chair — `spawn_agent_session` with `AR_SPAWN_ROLE=orchestrator` + a conversation-handover packet -(`../templates/conversation-handover-packet.md`) — and hand over; the developer still talks to -ONE orchestrator at a time. +(`../templates/conversation-handover-packet.md`) — and hand over; the architect still talks to the +developer, and backend orchestrator seats stay behind the relay. Several jobs can be active across a day; the loop routes per event. The frame's phase axis stays the observable `lifecycle_phase` vocabulary (`reframe-research` ≈ D, `decide` ≈ P, `build`/`close` @@ -68,8 +77,9 @@ task doc (approved) → branch (intent) → worktree (only where something i memory + onboarding roots; provider state; drift status and actionable count; branch freshness (`behind`/`diverged` → fast-forward the local official line first; `ledgerMapsCodeHead=false` → carryover or the right memory branch first). -3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **ask the developer** before - refreshing via `c-05-create-or-update-onboarding-files` — drift handling is approval-gated. +3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **emit a decision item to + the architect** before refreshing via `c-05-create-or-update-onboarding-files` — drift handling + is approval-gated. Drift tied to dirty source is active work-in-progress, not maintenance. 4. Providers stopped/degraded: run the matching provider/runtime operations, re-check, report; `indexing` means healthy-but-busy (partial results). @@ -77,57 +87,55 @@ task doc (approved) → branch (intent) → worktree (only where something i When this seat spawns a role it compiles the trust facts into the brief — a spawned role does not repeat this checkpoint. -## Hand-Off Protocol — Dry-Run → Notify-And-Stop → Report +## Decision-Item Relay To The Architect + +The orchestrator does not hand questions to the developer. Every developer-worthy item goes to the +architect through the existing operator inbox, one item at a time. + +Post one `messageKind: decision-item` row with: -Every developer hand-off (design acceptance, portfolio plan, worktree intent, commit, push, -integration, cleanup/finalization, any dev-wait) is three actions, never one. Carve-out (ruled -2026-07-06): in an orchestrated run, leaf→master and master→super integrations ride the series' -**standing approval** — no per-edge developer hand-off; the developer hand-off concentrates at the -super PR/carry-over gate (see Super exit & landing tail). The table's integration row governs when -a hand-off DOES happen (solo runs; a raised durable gate): +1. **Decision** — what is being decided. +2. **Options** — the live choices and any backend recommendation. +3. **Consequences** — what each option changes, risks, or blocks. +4. **Evidence refs** — task docs, notes, reports, diffs, or gate ids the architect can verify. -1. **Dry-run** the pending mutation and self-fix failures before reporting. -2. **Notify:** `lifecycle_turn_end_notification(summary=…)` as the **last tool call**. -3. **Report:** the complete packet as final prose, the decision handed over as the last line — - then STOP. The next turn's first AR call auto-resumes. +Then stop acting on that item until the architect returns a `messageKind: decision-ruling` row (or +a clarification request). Do not open a second developer item while the first is unresolved. + +Operational hand-offs that stay inside the backend still use the existing durable gate and inbox +surfaces. Carve-out (ruled 2026-07-06): in an orchestrated run, leaf→master and master→super +integrations ride the series' **standing approval** — no per-edge architect/developer hand-off; the +developer review concentrates at the super PR/carry-over gate through the architect. The table's +integration row governs when a hand-off DOES happen (solo runs; a raised durable gate): | Junction | Parked durable gate `kind` | Hands off via | | --- | --- | --- | -| design acceptance / plan gate | `plan-approval` | this lifecycle | +| design acceptance / plan gate | `plan-approval` | architect decision item | | worktree intent | `worktree-intent` | `c-09-git-worktree-manager` | | commit / closeout | `closeout-approval` | `c-12-closeout` | -| push | `push-approval` | this lifecycle / `c-09` | +| push | `push-approval` | architect decision item / `c-09` | | integration | `integration-approval` | `c-09` / `c-12` | | cleanup / finalization | `cleanup-approval` | `c-09` / `c-12` | -| any other dev-wait | `agent-question` | this lifecycle | +| any other developer-worthy wait | `agent-question` | architect decision item | `closeout-approval` **is** the commit hand-off. The block-and-wait `lifecycle_gate` + `lifecycle_resume` pair remains the parked fallback for a durable, mutation-blocking approval -record; it renders a prompt over your prose, which is exactly why notify-and-stop is the path. - -## Job D — Design (pull the designer hat) +record; when developer attention is needed, the architect is the relay that presents it. -**Entry:** an intent/problem with no task doc — or a planning-status doc that needs reshaping -before work starts. Fires at the front of the pipeline AND mid-flight; most leaves of a live -series are designed mid-flight. +## Design Boundary — Ask The Architect -Run `roles/designer.md` **inline — the designer is a hat, not a seat**: it cannot sit in a -coordination leaf because the task is what it exists to create. No worktree, no branch, no spawn -required; a heavy design may run the same hat in a separate session (chair logistics, not a role -distinction — spawn with `AR_SPAWN_ROLE=designer`). +The orchestrator does not own the developer drawing board and does not pull the designer hat. +When an intent/problem has no task doc, or a planning-status doc needs developer-visible +reshaping, emit a decision/design item to the architect with the missing decision, options, +consequences, and evidence refs. The architect wears `roles/designer.md`, discusses with the +developer, and returns a durable ruling or updated task surface. -- The co-think loop, evidence model, blast-radius-within-the-master, and designer-limits - declaration are the hat's own file. The orchestrator remains accountable for what the hat - produces: **bulwark-check the design against the portfolio and the past before acceptance** - (planned-vs-planned AND planned-vs-past — a designed change that collides with another master's - standing order is caught here or shipped broken). -- **Output:** master/leaf task docs (requirements · steps · code examples), `openQuestions` for - the developer (the rendered decision surface; `notes/` carries the analysis), the limits note. -- **Gate:** the developer accepts the design — or parks it. **No git surface.** +The orchestrator remains accountable for backend portfolio integrity after the architect returns +the design: run the bulwark check against the portfolio and the past before dispatch. ## Job P — Portfolio (streamline + plan) -**Entry:** designed masters exist and coherence/order is the question, or the developer says +**Entry:** designed masters exist and coherence/order is the question, or the architect dispatches "orchestrate these." - **Route-coherence scan** across the set (route indexes · onboarding · grepai · cgc); fan-out @@ -151,9 +159,10 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). sprint scope (`../templates/orchestration-task.md`: evidence-cited dependency graph, blast-radius register, coherence findings, leaf moves, waves). This is the portfolio three-party loop (owner = this seat · builder = strategist · reviewer with - `../criteria/plan-review.md`), followed by **drawing-board rounds with the developer** — this - seat relays, multi-round convergence is expected and normal, and quo-vadis items (e.g. two - masters heavily disagreeing) go straight to the developer. On acceptance **this seat adopts the + `../criteria/plan-review.md`), followed by **drawing-board rounds through the architect** — this + seat relays by decision item, multi-round convergence is expected and normal, and quo-vadis + items (e.g. two masters heavily disagreeing) go straight to the architect relay. On acceptance + **this seat adopts the draft into durable task form** (the strategist is a reader, not a mutator) with a decision-log entry. - **Re-evaluation rules:** a master added **in-sprint before implementation starts** → the @@ -167,13 +176,13 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). task doc carrying a top-level `orchestrates` list naming the master tasks it commands — the dashboard derives the orchestration > master > leaf hierarchy (and the rank insignia) from that field, so setting it is part of adoption. -- **Gate:** the portfolio plan gate — one wholesale developer review of the reshaped portfolio + - the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — not even the - super branch exists yet. +- **Gate:** the portfolio plan gate — one wholesale architect/developer review of the reshaped + portfolio + the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — + not even the super branch exists yet. ## Job O — Orchestrate (execute the plan) -**Entry:** an approved planner master — or a single approved master for a flat run. Either way, +**Entry:** an approved planner master — or a single approved master dispatched for backend execution. Either way, **the adopted orchestration task must exist**: the strategist pre-run (Job P) is the unconditional precondition for any orchestrated run — even one master. It is doctrine, not a knob. @@ -192,8 +201,8 @@ monitor turn-report artifacts, nudges, escalation intake; apply the **spirit tes deltas. A manager escalation may carry a **loop's full round history** (3-round cap hit, or a round that failed to shrink the finding set — the convergence rule, `../SKILL.md` The Three-Party Loop): this seat either re-runs the loop at ITS level (the orchestrator-level agent set — the -strongest models) or, when the blocker is a quo-vadis truth, takes it to the developer. In a -**flat run, wear the manager hat yourself** (see The Hat-Collapse Rule). +strongest models) or, when the blocker is a quo-vadis truth, emits a decision item to the +architect. This spawned backend seat does not run flat hat-collapse (see The Hat-Collapse Rule). **Failed-deliverable rule (reopen-and-reshape):** a leaf whose deliverable came out wrong is **REOPENED under its own id** (`task_reopen`) and its doc reshaped to the intended form — the @@ -212,7 +221,7 @@ policy may require the attached reviewer verdict (`requireReviewerVerdictAtSeams enforces it: `worktree_integrate` refuses while a `master-handover-approval` gate addressed to this master (its `enclosure`) is undecided or policy-invalid. A blocking verdict decomposes into fix leaves dispatched before integration; a -handover you cannot honestly decide escalates to the developer. +handover you cannot honestly decide escalates to the architect as a decision item. **Integration duty (master → super) — the worktree moment.** Per completed master: @@ -243,7 +252,8 @@ Strict stack: super off main; master branches off the **current super** (never o branches off their master. **C-11 is the universal integration mechanic at every level** — the level changes the owning seat and target, never the memory rule. The final super → main landing follows `system/git-workflow.md`: PR to gated main, remote merge, memory carry-over so the ledger -maps the actual merge commit, then push — **push only after the developer approves**. +maps the actual merge commit, then push — **push only after the architect returns the developer's +approval**. **Conflict resolution — exactly two modes:** *Up-front (preferred):* an overlap found during streamlining → extract shared logic into a foundation master implemented first (leaf moves + @@ -255,47 +265,38 @@ owns the final truth; ledger edge mapped once). parallel-master reconcile (T9), the series-branch-without-worktree primitive, and atomic move/renumber — run manually with existing primitives, each manual edge recorded in durable notes. -**Super exit & landing tail — the developer's SINGLE review point (ruled 2026-07-06, resolves +**Super exit & landing tail — the architect-mediated SINGLE review point (ruled 2026-07-06, resolves L8-Q9):** all leaf→master and master→super integrations are **orchestrator-delegated** — on the happy path they proceed under the series' standing approval (the developer's portfolio-gate approval, recorded in the planner master's decision log); a durable `integration-approval` gate, when one is raised, still awaits the developer — the kind stays human-pinned as-built. The -developer reviews ONCE, at the **fully integrated super branch on the PR/carry-over gate**. When +architect presents the developer review ONCE, at the **fully integrated super branch on the +PR/carry-over gate**. When the DAG drains, spawn the super-exit adversarial reviewer (`roles/reviewer.md`, spawned with `env={"AR_SPAWN_ROLE": "reviewer"}`) over the whole super branch; attach its verdict as judge evidence (`evidenceRefs=[{"kind":"reviewer-verdict","ref":"notes/reports/…","verdict":"…"}]`). -The handover to the developer **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the -dashboard running on the super branch — because the review is **visible-behavior-first** (a +The handover to the architect **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the +dashboard running on the super branch — because the developer review is **visible-behavior-first** (a broken visual pass fails the handover fast, before anyone reads a diff), code review second. The handover carries **demo notes — "what changed visibly"**: per master, the user-visible behavior -to walk (panels, flows, outputs, how to reach them), so the developer drives the environment +to walk (panels, flows, outputs, how to reach them), so the developer can drive the environment without archaeology. Rejections decompose into fix leaves. On approval: PR + memory carry-over + -push (developer-gated), then finalization +push (architect-mediated developer gate), then finalization (`lifecycle_finalize_task` per edge — statuses via the tool, steps checked by hand), then the **self-improvement close**: proposals for future runs grounded in the run's own ledger ("did x/y/z; hit a/b/c; a and b solved on the spot; c needs this change") — proposals only, never automated self-modification. `lifecycle_end` records the terminal state. -## The Hat-Collapse Rule (solo and flat runs) - -Solo work is **not a fourth route** — it is the same three jobs collapsed: - -- **Design** still happens (however briefly): the task doc exists before anything else. -- **Delegated gates collapse back to the developer when one chair owns both sides** — a gate you - raised from this session's lifecycle cannot be decided by it (owner-never-self-approves). -- **Portfolio** collapses but does not vanish: an ORCHESTRATED run — anything that dispatches - seats, even for a single master — still requires the strategist pre-run (even one master gets - the pass). Only session-scale hands-on work (nothing dispatched; not an orchestrated run) skips - the strategist; the owner's own bulwark check remains. -- **Orchestrate** runs with hats collapsed: in a **flat series** the orchestrator wears the - **manager hat** (`roles/manager.md` duties — dispatch, review, delegated gates, leaf closeout → - integrate → finalize — same duties, same artifacts, one chair). At **session scale** it builds - **hands-on** instead of spawning (when spawn economics don't pay): the build discipline is the - worker's (edit + same-pass `c-05` onboarding + `system/tools.md` checks green + freshness watch - / early `worktree_sync`), the closeout tail is the owner's (see `c-12-closeout`), and - the ladder holds identically: task doc → intent → worktree → build → close. -- Fan-out sub-agents may read/search and **write durable reports**; **every AR state mutation - stays in this seat's main loop** (see Sub-Agent Fan-Out below). +## The Hat-Collapse Rule (spawned backend) + +Hat-collapse is reserved for the owner/developer-facing architect. This spawned backend +orchestrator never wears the architect, designer, manager, worker, strategist, or reviewer hat in +place. + +If a run is small enough for one owner seat, the architect may perform these backend duties under +`roles/architect.md`. If this orchestrator needs another role, it spawns a new role chat +horizontally. Fan-out sub-agents may read/search and **write durable reports**; **every AR state +mutation stays in this seat's main loop** (see Sub-Agent Fan-Out below). ## Sub-Agent Fan-Out (capability doctrine — any harness that has it) @@ -322,7 +323,7 @@ regardless of the engine underneath. ## The Spirit Test — This Seat Only -**Within the spirit** of what the developer accepted → act alone + a decision-log entry (leaf +**Within the spirit** of what the architect/developer accepted → act alone + a decision-log entry (leaf moves and renumbers on planning-status masters, inserted fix leaves, reopened-and-reshaped leaves, mid-series convergence — the integration branch is the safety net). **Against the spirit** → raise it for a joint decision. Only this seat holds the global view to judge a collision; the @@ -342,7 +343,7 @@ task, fill small blanks, escalate real deltas). - **The adopted orchestration task** (the strategist drafts; this seat adopts — with the adoption decision-log entry) before any orchestrated run. - **The super-exit demo notes** ("what changed visibly", per master) + the reviewable environment - offer — the developer handover is visible-behavior-first. + offer — the architect-mediated developer handover is visible-behavior-first. - **The self-improvement report** at close. ## Comms Protocol @@ -351,16 +352,16 @@ task, fill small blanks, escalate real deltas). intake up; durable + dashboard-visible. - **Stdin push** — delivery into hosted sessions (echo-confirmed paste); poll is the non-hosted fallback. -- **Escalation** — this seat is the last resolver before the developer: resolve within the +- **Escalation** — this seat is the last backend resolver before the architect: resolve within the bird's-eye view first; what goes up is decided by the **quo-vadis test**, not by being stumped — a **high-blast-radius truth** question (answered wrong it means big rewrites later: architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where - agent settings live) goes to the developer IMMEDIATELY via task-doc `openQuestions`, regardless - of any loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. + agent settings live) goes to the architect IMMEDIATELY as a decision item, regardless of any + loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. A loop that hits its 3-round cap or stops converging arrives here with its full round history; - re-run it at this level's agent set or take the quo-vadis part to the developer. Developer - rejections arrive here and decompose into fix leaves (or reopens — see the failed-deliverable - rule). + re-run it at this level's agent set or take the quo-vadis part to the architect. Architect or + developer rejections arrive here and decompose into fix leaves (or reopens — see the + failed-deliverable rule). ## Knobs diff --git a/.github-vscode/skills/l-01-agent-lifecycles/roles/reviewer.md b/.github-vscode/skills/l-01-agent-lifecycles/roles/reviewer.md index a477ee87..fbeab40d 100644 --- a/.github-vscode/skills/l-01-agent-lifecycles/roles/reviewer.md +++ b/.github-vscode/skills/l-01-agent-lifecycles/roles/reviewer.md @@ -13,7 +13,7 @@ reviewer seat (below)** (seams: developer decision 2026-07-03; loop reuse: rulin 1. **Master-exit** — before a **manager** hands its completed master integration branch to the **orchestrator**. 2. **Super-exit** — before the **orchestrator** hands the accumulated super integration branch to the - **developer**. + **architect** for the developer review. Leaf-level review is the manager's own duty — **not** an adversarial seam. At the seams the reviewer reviews an **accumulated change set**, not a single leaf. @@ -30,11 +30,20 @@ loop's 3-round cap** — your delta-verify closes a round, it does not open one. > **Verdicts are evidence, not decisions.** The reviewer never decides a gate. Its verdict attaches to > the handover gate as **judge evidence**; the gate's decider decides — the **orchestrator** at -> master-exit (delegated `master-handover-approval`), the **developer** at super-exit — per the -> gate delegation policy (settings `orchestration.gateDelegation`, `controlplane/gate_policy.py`). +> master-exit (delegated `master-handover-approval`), the **architect carrying the developer +> ruling** at super-exit — per the gate delegation policy (settings `orchestration.gateDelegation`, +> `controlplane/gate_policy.py`). > The policy binds delegated seam decisions to verdict evidence when > `requireReviewerVerdictAtSeams` is set. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays reviewer for its lifetime. A pasted brief for another +role is refused and reported to the seam's decider via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this reviewer seat for the +three review lenses. A reviewer never absorbs architect, orchestrator, strategist, manager, or +worker work. + ## Lens - **Opening move:** scope the review — the integration branch diff, the relevant task docs @@ -101,10 +110,11 @@ orchestrator. Review the **accumulated master change set**, not a final leaf in master. Each fix leaf names scope, target files/docs, evidence, and done-when. A master-exit block without fix leaves is invalid. -### SUPER-EXIT — Orchestrator Before Developer Handover +### SUPER-EXIT — Orchestrator Before Architect/Developer Handover The orchestrator spawns this reviewer before handing the accumulated super integration branch to the -developer. Review **wholesale branch behavior**: the whole portfolio as integrated on super. +architect for the developer review. Review **wholesale branch behavior**: the whole portfolio as +integrated on super. - **Scope packet:** super integration branch diff against its base (main), portfolio task docs, master task docs, master-handover packets, prior master-exit verdicts, orchestrator decision logs, resolved diff --git a/.github-vscode/skills/l-01-agent-lifecycles/roles/strategist.md b/.github-vscode/skills/l-01-agent-lifecycles/roles/strategist.md index 377e4b70..eb21412a 100644 --- a/.github-vscode/skills/l-01-agent-lifecycles/roles/strategist.md +++ b/.github-vscode/skills/l-01-agent-lifecycles/roles/strategist.md @@ -13,8 +13,8 @@ **Spawn-first by design** (developer decision 2026-07-05). Strategist work is token-heavy — it reasons over every master's state, task docs, notes, friction ledger, and gate history — so it runs as its own process with its own harness/model/effort knobs, protecting the orchestrator's context. -The designer precedent explicitly does NOT apply: the designer stays an inline hat because design -is drawing-board-interactive with the developer; the strategist's essence is solitary heavy +The designer precedent explicitly does NOT apply: the designer stays an inline architect hat +because design is drawing-board-interactive; the strategist's essence is solitary heavy analysis. Spawned by the orchestrator via `spawn_agent_session` with `env={"AR_SPAWN_ROLE": "strategist"}`. @@ -36,6 +36,14 @@ it into durable task form. The strategist never edits task docs, never raises ga git. A seat that never touches mutating AR tools never instantiates a lifecycle — that is the designed shape. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays strategist for its lifetime. A pasted brief for +another role is refused and escalated to the orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this strategist seat +for portfolio analysis. A strategist never absorbs architect, orchestrator, manager, reviewer, or +worker work. + ## Lens - **Opening move:** read the brief fully — it carries **refs to durable portfolio state, never @@ -90,7 +98,7 @@ everything else. `roles/manager.md`): the strategist's analysis directly parameterizes the loops. 6. **Coherence & contradiction check** — cross-master sweep: two masters moving one surface in opposite directions, a leaf assuming state another leaf removes, duplicate work, vocabulary - drift. **Directional contradictions are quo-vadis → developer** (via the drawing board; see + drift. **Directional contradictions are quo-vadis → architect** (via the drawing board; see Duties §5). 7. **Ordering** — topological sort over ORDER edges; CONFLICT edges resolved by serialization or **leaf moves (recorded from→to with rationale)**; independent sets become **parallel waves** @@ -134,17 +142,17 @@ mutate nothing yourself. ### 5 — Drawing-board rounds The reviewer (plan-review catalog) passes judgment on the plan; the orchestrator relays the -verdict and the developer's drawing-board feedback back into this session. **Convergence over +verdict and the architect's drawing-board feedback back into this session. **Convergence over rounds is expected and normal** — large, messy portfolios are explicitly NOT expected to be fixed in one shot; the iteration is the feature. Each round must shrink the finding set (the convergence -rule); the loop's hard cap is 3 full rounds, and **the drawing board with the developer IS this +rule); the loop's hard cap is 3 full rounds, and **the drawing board through the architect IS this loop's escalation**. Quo-vadis items — high-blast-radius truths such as two masters heavily -disagreeing on direction — go **straight to the developer** at the drawing board (the orchestrator -carries them; you flag them, unmistakably, at the top of the coherence findings). +disagreeing on direction — go **straight to the architect relay** at the drawing board (the +orchestrator carries them; you flag them, unmistakably, at the top of the coherence findings). ### 6 — Adopted-plan handover -When the developer accepts the plan, the orchestrator adopts it; your seat's work is done. **The +When the architect returns the accepted plan ruling, the orchestrator adopts it; your seat's work is done. **The artifact write is unconditional; the inbox is the delivery channel when the brief wires it** — otherwise your final playback message to the orchestrator carries the artifact ref. Then end. The orchestration task remains the sprint's standing scope: a new master added **in-sprint before implementation starts** re-opens re-evaluation (you @@ -166,8 +174,8 @@ and enters the next sprint's evaluation. dashboard-visible. - **Stdin push** — the orchestrator delivers round feedback into this hosted session; your replies are inbox rows or artifact revisions — never an untracked side channel. -- **Escalation** — to the **orchestrator**, which relays; quo-vadis truths are flagged for the - developer's drawing board. You never edit task docs to reflect a ruling — the orchestrator does. +- **Escalation** — to the **orchestrator**, which relays to the architect; quo-vadis truths are + flagged for the drawing board. You never edit task docs to reflect a ruling — the orchestrator does. ## Tool Surface (positive statement — this is all of it) diff --git a/.github-vscode/skills/l-01-agent-lifecycles/roles/worker.md b/.github-vscode/skills/l-01-agent-lifecycles/roles/worker.md index f5c369b4..036240fa 100644 --- a/.github-vscode/skills/l-01-agent-lifecycles/roles/worker.md +++ b/.github-vscode/skills/l-01-agent-lifecycles/roles/worker.md @@ -7,7 +7,7 @@ ## What This Seat Is **One per task leaf, short-lived, fresh session.** Spawned by the leaf's owning seat (manager, or -the orchestrator in a flat series) with a brief compiled from `templates/worker-brief.md`. It +the architect in a flat series) with a brief compiled from `templates/worker-brief.md`. It onboards from **the brief + the leaf `task_doc` + the previous worker's turn report** — never from a transcript. Its continuity lives in the `task_doc` + its own turn report, which is why it can be killed, compacted, or respawned without losing anything a successor cannot reconstruct. @@ -16,10 +16,18 @@ The worker builds; it does not manage lifecycle machinery. **Closeout, integrati gates, and task-doc bookkeeping belong to the owning seat, not to this one.** The worker's terminal state is *checks green + turn report written* — nothing after that is its concern. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays worker for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this worker seat for +read/search only. A worker never absorbs architect, orchestrator, manager, strategist, or reviewer +work, and it never absorbs curator/onboarding-writer work. + ## The Worker Loop ``` -brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn report -> end +brief -> orient -> build code -> checks green -> turn report -> curator memory pass by separate seat | +-- blocked or plan delta beyond blank-filling -> escalate to the owning seat ``` @@ -28,8 +36,9 @@ brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn r Read the brief fully, then the leaf spec / `task_doc` it names. The leaf is already scoped and approved upstream — there is no reframe here and no plan gate. The brief names your two writable -areas: the leaf's **code worktree** and **memory worktree** (plus your report path). You edit -nothing outside them. +areas: the leaf's **code worktree** and your report path. The memory worktree is context for the +curator pass unless the brief explicitly says otherwise. You edit nothing outside your named +surfaces. ### 2 — Orient (paired reads before edits) @@ -44,12 +53,10 @@ nothing outside them. - Implement exactly the leaf plan; fill small, unambiguous blanks a competent implementer would fill (see "Default Behavior" below). -- **Refresh the matching onboarding in the same editing pass** per - `c-05-create-or-update-onboarding-files`: a changed source file's sidecar **body** is updated now; - a new file's sidecar is created; route overviews that need a genuine body update get one, and a - no-impact route gets the literal history form `- — No route impact: `. - Regenerate generated route indexes with a **local `build_route_indexes(...)`** invocation from the - memory worktree. +- Produce the builder input the downstream curator needs: changed paths, code-diff summary, tests, + and any route/onboarding observations that would help the memory pass. The curator, not the + worker, writes onboarding in the official manager -> builder -> reviewer -> curator closeout + chain. - **Never `git commit`.** Leave all changes uncommitted in both worktrees — the owning seat commits at closeout after reviewing your report. @@ -63,14 +70,15 @@ the report. A red check you cannot fix inside the leaf's scope is an escalation, Write `templates/turn-report.md` to the path the brief names (convention: `notes/reports/-worker-report.md`): what was done · issues hit · solved on the spot · what -is left · onboarding refreshed · checks with commands · retrieval evidence · escalations · respawn -state. **A missing report gets nudged.** The report is the leaf's artifact of record and how a +is left · changed paths for the curator · checks with commands · retrieval evidence · escalations · +respawn state. **A missing report gets nudged.** The report is the leaf's builder artifact of record and how a respawned successor onboards — write it even when blocked (with the Escalations section filled), then end your turn. ## Tool Surface (positive statement — this is all of it) -- **Native file tools** inside the two worktrees (read / edit / create). +- **Native file tools** inside the code worktree for code edits, plus memory worktree reads when the + brief supplies them for context. - **Read-only AR retrieval:** `read_ar_files`, `grepai_search`, `cgc_*`, `context_packet`. - **Shell** for the prescribed checks (use the interpreter paths the brief names — do not assume a `python` shim exists). @@ -85,17 +93,17 @@ lifecycle machinery never instantiates a lifecycle; that is the designed shape, When the harness offers sub-agents, use them for **read/search only**, scoped to the leaf (locate call sites, sweep onboarding): each writes durable notes and returns a compact summary. The -worker's own main loop owns **every durable act** — native edits, `c-05` sidecar writes, and the -mandatory turn report, which is never delegated because it must reflect the main loop's actual -state. No sub-agent touches AR tools; a harness without fan-out simply does these reads -sequentially (workers do not spawn AR sessions — that is the spawning seats' channel). +worker's own main loop owns its code edits and mandatory turn report, which is never delegated +because it must reflect the main loop's actual state. The curator owns onboarding writes. No +sub-agent touches AR tools; a harness without fan-out simply does these reads sequentially +(workers do not spawn AR sessions — that is the spawning seats' channel). ## Loop Position (when the leaf runs as a three-party loop) The owning seat scores each leaf into a tier at dispatch (loop doctrine: `../SKILL.md`, The Three-Party Loop). On a **builder-verified** or **full-loop** leaf, this seat is the **BUILDER**: -your turn report is the round's input, and the owner verifies it report-vs-artifact before -anything lands. Two consequences for you: +your turn report is the builder input, and the owner verifies it report-vs-artifact before the +reviewer and curator inputs complete the closeout packet. Two consequences for you: - **Fix rounds resume THIS session** — the same builder, with its context intact. Your round-2+ report **appends** to your report file rather than rewriting it, so the loop history stays @@ -108,10 +116,10 @@ anything lands. Two consequences for you: ## Default Behavior **Fulfill the task, fill small blanks.** No creative-liberty prompting in either direction. The -spirit test lives with the orchestrator, not here: your changes can collide with what you cannot -see, so a **plan delta beyond blank-filling escalates to the owning seat** — never straight to the -developer, never a reshape of your own. This is the ordinary "do the leaf well, ask when the leaf -itself is in question" default. +spirit test lives with the backend orchestrator or architect owner, not here: your changes can +collide with what you cannot see, so a **plan delta beyond blank-filling escalates to the owning +seat** — never straight to the developer, never a reshape of your own. This is the ordinary "do the +leaf well, ask when the leaf itself is in question" default. ## Comms @@ -119,7 +127,8 @@ itself is in question" default. and a `messageKind` (`turn-report`, `nudge`, `escalation`, …), durable + dashboard-visible. - **Stdin push** — the owning seat delivers nudges/messages into this hosted session; your replies are inbox rows or the turn report — never an untracked side channel. -- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator).** +- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator/architect in + solo flat mode).** ## Knobs diff --git a/.github-vscode/skills/l-01-agent-lifecycles/templates/manager-brief.md b/.github-vscode/skills/l-01-agent-lifecycles/templates/manager-brief.md index 10c37922..4a6f7eaf 100644 --- a/.github-vscode/skills/l-01-agent-lifecycles/templates/manager-brief.md +++ b/.github-vscode/skills/l-01-agent-lifecycles/templates/manager-brief.md @@ -31,6 +31,10 @@ master's leaf loop to the master-exit seam, then hand over. ## Dispatch defaults - Worker spawns: `templates/worker-brief.md`, `env={"AR_SPAWN_ROLE": "worker"}`, qualified leaf keys; knob overrides: . +- Leaf closeout chain: manager -> builder -> reviewer -> curator. The manager closes a leaf from + builder code + reviewer verdict + curator memory pass. +- Curator spawns: `roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`, fresh per leaf after the + builder code and reviewer verdict are available; curator writes onboarding only. - Concurrency: . ## The exit diff --git a/.github-vscode/skills/l-01-agent-lifecycles/templates/worker-brief.md b/.github-vscode/skills/l-01-agent-lifecycles/templates/worker-brief.md index db8f44d0..3437f402 100644 --- a/.github-vscode/skills/l-01-agent-lifecycles/templates/worker-brief.md +++ b/.github-vscode/skills/l-01-agent-lifecycles/templates/worker-brief.md @@ -18,13 +18,14 @@ ROLE BRIEF — worker You are a WORKER for leaf `` of master `` (repo: ). Your lifecycle is `skills/l-01-agent-lifecycles/roles/worker.md`; this brief is your session start. Execute the leaf -completely, write your turn report, then stop. +code completely, write your builder turn report, then stop. Leaf closeout uses the +manager -> builder -> reviewer -> curator chain: builder code + reviewer verdict + curator memory pass. -## Worktrees (your ONLY writable areas) +## Worktrees (your code write area + memory context) - Code: `` (branch ``, base ``) -- Memory: `` +- Memory: `` (read/context for changed-path notes; the curator writes onboarding) - Plus your turn report at the path below. Nothing else. NEVER `git commit` — the owning seat - closes out after reviewing your report. + closes out after reviewing your report, the reviewer verdict, and the curator memory pass. ## Tool surface - Native file tools inside the two worktrees; shell for the checks below. @@ -46,18 +47,18 @@ files involved, the invariants that must hold, what NOT to touch.> - Full: — must exit 0. - `git diff --check` in both worktrees. -## Onboarding (same editing pass, per c-05) -- Changed source files: update the sidecar BODY now; new files: create the sidecar. -- Route overviews: genuine body update where routes changed; otherwise the newest history entry - uses the LITERAL form `- — No route impact: ` (timestamp first). -- Pin idiom for verification metadata: "Verification metadata pinned until closeout stamps the - commit." +## Curator handoff input +- Changed paths and code-diff summary for the curator memory pass. +- Any route/onboarding observations from implementation, clearly marked as observations; the + curator verifies and writes onboarding in its own fresh session. +- Pin idiom for any metadata note the curator needs: "Verification metadata pinned until closeout + stamps the commit." ## Turn report (mandatory, last act) Write `/-worker-report.md` following `skills/l-01-agent-lifecycles/templates/turn-report.md` — including exact check commands + -outcomes, the retrieval-evidence tally, and the respawn state. If blocked: fill Escalations and -stop — escalate to , never to the developer. +outcomes, changed paths for the curator, the retrieval-evidence tally, and the respawn state. If +blocked: fill Escalations and stop — escalate to , never to the developer. ``` --- diff --git a/.github-vscode/skills/w-02-light-task-workflow/master-template.md b/.github-vscode/skills/w-02-light-task-workflow/master-template.md index 42738c16..a807afd1 100644 --- a/.github-vscode/skills/w-02-light-task-workflow/master-template.md +++ b/.github-vscode/skills/w-02-light-task-workflow/master-template.md @@ -7,7 +7,7 @@ built to grow as the work unfolds. ## When to escalate to a series -The `l-01-agent-lifecycles` orchestrator lifecycle's `decide` step escalates a single task to a series once its size is apparent — the +The `l-01-agent-lifecycles` architect lifecycle's `decide` step escalates a single task to a series once its size is apparent — the implementation plan no longer fits on a single page, or the work splits into distinct slices that each deserve their own checklist and commit. You can also start single and escalate later: drop in the master `task.md` and move the existing plan into the first `NN_.md`. diff --git a/.hermes/HERMES.md b/.hermes/HERMES.md index 98580af1..a688526f 100644 --- a/.hermes/HERMES.md +++ b/.hermes/HERMES.md @@ -4,10 +4,10 @@ If `AR_SPAWN_ROLE` is set, or your first user message is a role brief from an orchestrating agent: **ignore this notice entirely — your brief is your session start.** -Otherwise you are the developer-facing session, i.e. the **orchestrator**: read +Otherwise you are the developer-facing session, i.e. the **architect**: read `/ar-coordination/AGENTS.md` and treat those rules as workspace instructions, then run your lifecycle at -`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before +`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before relying on memory, `read_ar_files` (paired source+onboarding) until the build decision, retrieval-strategy tally as evidence, notify-and-stop at every developer hand-off. diff --git a/.hermes/skills/l-01-agent-lifecycles/SKILL.md b/.hermes/skills/l-01-agent-lifecycles/SKILL.md index 1d390618..78e6ad33 100644 --- a/.hermes/skills/l-01-agent-lifecycles/SKILL.md +++ b/.hermes/skills/l-01-agent-lifecycles/SKILL.md @@ -1,6 +1,6 @@ --- name: l-01-agent-lifecycles -description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> role brief -> otherwise orchestrator), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (orchestrator, designer, strategist, manager, worker, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the orchestrator; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." +description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> fresh role brief -> otherwise architect), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (architect, orchestrator, designer, strategist, manager, worker, curator, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the architect; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." --- # l-01-agent-lifecycles — The Agent Lifecycles @@ -15,42 +15,71 @@ lifecycle, and no role reads another role's file. 1. **`AR_SPAWN_ROLE` is set** (spawn env, injected by `spawn_agent_session`) → run `roles/.md`. Nothing else in this file's "developer session" material applies to you. (`designer` here means the same design hat in a separate chair — see `roles/designer.md`.) -2. **Else: the first user message is a role brief** — a `templates/*-brief.md`-shaped dispatch or +2. **Else: the first user message is a role brief in a fresh session** — a `templates/*-brief.md`-shaped dispatch or a first line of the form `ROLE BRIEF — ` from an orchestrating agent → run that role's lifecycle. The brief is your session start; a workspace session-start notice is not addressed to you. -3. **Else** (a developer opened this session) → you are the **orchestrator**: run - `roles/orchestrator.md`. Solo work is the degenerate portfolio — the same three jobs with hats - collapsed (the orchestrator wears the manager hat in flat runs and builds hands-on at session - scale); the task doc still comes first. +3. **Else** (a developer opened this session) → you are the **architect**: run + `roles/architect.md`. Solo work is the degenerate portfolio — the architect is the owner seat + that may wear backend hats when nothing has been spawned; the task doc still comes first. There is no fourth entry, and the edge cases are decided: an **unresolvable `AR_SPAWN_ROLE` value** (no matching `roles/.md`) falls through to condition 2 (the brief); a role-env session **whose brief never arrives** announces itself on the inbox and waits — it never -improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a takeover chair (the Profile -check (takeover) in `roles/orchestrator.md`, The Event Loop) — the developer still talks to **one** orchestrator. Orchestrated -fan-out (spawning managers/workers at scale) begins only on an explicit developer request (e.g. -*"orchestrate these masters"*) — no agent promotes itself into a spawning seat. +improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a spawned backend seat or a +backend takeover chair — the developer still talks to the **architect**, not the orchestrator. +Orchestrated fan-out (spawning backend orchestrators/managers/workers at scale) begins only on an +explicit developer request (e.g. *"orchestrate these masters"*) — no agent promotes itself into a +spawning seat. One exception to the no-cross-reading rule above: **a seat that WEARS a hat runs that hat's file -as its own** — the orchestrator always for `roles/designer.md`, and in flat runs for -`roles/manager.md` (the hat-collapse rule). +as its own** — the architect may wear `roles/designer.md`, and in solo/flat runs may wear backend +or build hats (the hat-collapse rule). A spawned role seat never wears another role's hat. ## The Role Registry | Role | Seat | Lifecycle file | | --- | --- | --- | -| **orchestrator** | the developer-facing session; first coordination leaf of an orchestrated series | `roles/orchestrator.md` | -| **designer** | a HAT the orchestrator pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | +| **architect** | the developer-facing owner seat; design conversation, decision-item relay, and drawing board | `roles/architect.md` | +| **orchestrator** | spawned backend portfolio/orchestration seat; never developer-facing | `roles/orchestrator.md` | +| **designer** | a HAT the architect pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | | **strategist** | the sprint planner, SPAWN-FIRST; a strategist run is a **mandatory precondition for any orchestrated run** — its deliverable is the orchestration task (sprint plan + scope); spawn value `strategist` | `roles/strategist.md` | | **manager** | one coordination leaf per master; drives that master's leaf loop | `roles/manager.md` | | **worker** | one leaf worktree, short-lived, fresh session | `roles/worker.md` | +| **curator** | fresh per leaf after builder/reviewer; writes onboarding only from task docs, notes, and code diff | `roles/curator.md` | | **adversarial reviewer** | short-lived, spawned at the two seams (master-exit, super-exit) and as any three-party loop's reviewer seat (criteria catalogs bound per review type); spawn value `reviewer` | `roles/reviewer.md` | The **lenses** (bug · feature · triage · research — `lenses.md`) are how the scoping seats -(orchestrator, designer) read a piece of work; a dispatched role never picks a lens — its brief +(architect, designer, backend orchestrator) read a piece of work; a dispatched role never picks a lens — its brief already carries the flavor. +## Role-Seat Immutability (dashboard-owned sessions) + +When the dashboard owns a session, its role is fixed for the session lifetime. Roles expand +**horizontally** by spawning new, individually addressable chats; sub-agents drill **vertically** +inside one seat's context for deeper analysis. A dashboard-owned session that already has a role +refuses a pasted role brief instead of silently rerouting itself; it escalates the mismatch to its +owner via the inbox. Router condition 2 applies only to fresh sessions. Sessions not owned by the +dashboard follow the host harness's ordinary rules. + +Hat-collapse is sanctioned only for the owner/developer-facing architect seat in solo or flat +runs. Spawned role seats never absorb another role brief and never become a different role in +place. + +## Minimal Decision-Item Relay + +The ARCHITECT/ORCHESTRATOR split uses the existing operator inbox now. No full queue schema or +dashboard reform is introduced here. + +- Backend seats post one `messageKind: decision-item` inbox row at a time to the architect. The row + states what is being decided, the options, the consequences, and the durable evidence refs. +- The architect presents one item at the developer's pace, records the ruling in the durable task + surface (`openQuestions` / decision logs, with notes for analysis), and returns one + `messageKind: decision-ruling` inbox row to the backend seat. +- If the item is underspecified, the architect sends a single clarification row back instead of + guessing. The backend does not open a second item until the active item has a durable ruling or + clarification state. + ## The Minimal Frame (the only machinery every session shares) Every session in a managed repo may be a **lifecycle**: six signals — `lifecycle_start` · @@ -79,7 +108,7 @@ at spawn (the **qualified** leaf key `//`), not lifec - **Continuity lives in the `task_doc` + durable artifacts, never in transcripts** — which is why short-lived workers and reviewers are safe, and why every seat writes its artifact of record. -- **Escalation ladder: worker → manager → orchestrator → developer.** No rung is skipped, ever. +- **Escalation ladder: worker → manager → orchestrator → architect → developer.** No rung is skipped, ever. Each role file states only its own rung. - **Observability:** coordination seats are `task_doc` leaves with attached chats; the developer can walk into any seat at any level. @@ -95,9 +124,9 @@ section; they do not restate it. | Level | Owner (holds the deliverable, rules, lands) | Builder | Reviewer | | --- | --- | --- | --- | -| Leaf | the leaf's owning seat (manager; orchestrator in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | +| Leaf | the leaf's owning seat (manager; architect in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | | Master | the manager | the leaf workers | the master-exit seam reviewer (verdict rides `master-handover-approval`) | -| Portfolio | the orchestrator | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | +| Portfolio | the backend orchestrator (developer-facing decisions relayed through the architect) | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | **Complexity-scored tiers (per leaf, at dispatch).** The owning seat scores three axes — blast radius (doctrine/enforcement/public surface vs leaf-local) · novelty (new subsystem vs @@ -123,13 +152,14 @@ they do not open them. open finding set. A round that does not shrink it escalates immediately, regardless of the count; a monotonically converging loop may never hit the cap at all. At the cap, or on non-convergence, the owner does not spin another round — it **escalates one seat up the ladder (worker → manager → -orchestrator → developer) with the full round history attached**; the escalation packet IS the +orchestrator → architect → developer) with the full round history attached**; the escalation packet IS the upper seat's visibility. **Quo-vadis (the written developer-escalation criterion).** A question is developer-worthy when it is a **high-blast-radius truth** — answered wrong it means big rewrites later (architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where -agent settings live). Quo-vadis questions escalate IMMEDIATELY, regardless of round count. +agent settings live). Quo-vadis questions escalate IMMEDIATELY to the architect relay, +regardless of round count. Presentation-grade choices (2px vs 3px) never do — the owner rules and logs. **Criteria catalogs (the reviewer as test bench).** Criteria are never made up on the spot: every @@ -169,9 +199,11 @@ defaults < global settings < repo-local settings. { "orchestration": { "roles": { // role → knob override; validated: harness/model/effort · free-form: launchArgs/promptKeywords/sessionCommands + "architect": { "harness": "claude", "effort": "high" }, "orchestrator": { "harness": "claude", "effort": "high" }, "strategist": { "effort": "ultracode" }, // session-vocabulary value → "/effort ultracode" post-launch "reviewer": { "harness": "claude", "model": "sonnet", "effort": "high" }, + "curator": { "harness": "codex", "effort": "medium" }, "worker": { "harness": "codex", "effort": "medium" } }, "rolesPerLevel": { // per-LEVEL agent sets (leaf|master|portfolio), deep-merged over roles @@ -218,7 +250,7 @@ reuse, complexity thresholds) lives in the same block — meaning in ## Companion Files - `lenses.md` — the four job lenses for the scoping seats. -- `roles/…` — the six self-contained role lifecycles (the registry above). +- `roles/…` — the eight self-contained role lifecycles (the registry above). - `templates/…` — turn-report · worker-brief · manager-brief (`ROLE BRIEF — manager`; the orchestrator compiles a manager's session start from it) · master-handover-packet · conversation-handover-packet · verdict · impact-analysis · onboarding-coherency · @@ -249,7 +281,7 @@ This skill absorbs and supersedes `l-01-session-job-lifecycle` and `l-02-agent-o orchestration vocabulary adopts the parked `260619_agentic-control-plane` spec — jobs as model-interpreted markdown (D6), the knob block (D7), role + lens in one file (D10), the ambient-singleton rule (D11), per-harness variants (D12), the judge rung, short-lived workers with -structured handoff, dev-talks-to-one-orchestrator (D15) — which in turn credits **Archon** and the +structured handoff, dev-talks-to-one-architect (D15) — which in turn credits **Archon** and the **agent-control-plane** project (D14); that credit carries forward. ## Relationship To Other Instructions diff --git a/.hermes/skills/l-01-agent-lifecycles/roles/architect.md b/.hermes/skills/l-01-agent-lifecycles/roles/architect.md new file mode 100644 index 00000000..0cea4a53 --- /dev/null +++ b/.hermes/skills/l-01-agent-lifecycles/roles/architect.md @@ -0,0 +1,157 @@ +# Lifecycle — Architect + +> The developer-facing lifecycle: the **drawing board, decision relay, and portfolio face**. +> The architect talks to the developer; the backend orchestrator does not. + +## What This Seat Is + +The architect is the developer-facing owner seat. It owns the design conversation, the +drawing-board rounds, and the pace at which developer decisions are presented. Backend churn +belongs to spawned role seats — especially the orchestrator — and reaches the developer only as +one decision item at a time. + +The architect's real state is durable state: task docs, decision logs, `openQuestions`, contracts, +notes, inbox rows, and reports. It never depends on transcript memory for continuity. It records +rulings durably, then returns those rulings to the backend seat that needs them. + +## Opening Move + +1. Read the workspace instructions and resolve the active Agents Remember context for the target + repository. +2. Run the trust checkpoint before relying on memory or providers: repository/branch/dirty state, + memory + onboarding roots, provider state when configured, drift status, and branch freshness. +3. Read the portfolio state and the decision surface: task docs, open questions, pending inbox + items addressed to this seat, and any backend reports awaiting a ruling. +4. Say back the current state in plain terms before asking the developer to decide anything. + +## Event Routing + +| Condition | Architect job | +| --- | --- | +| The developer is shaping intent, requirements, or scope | **Design** — wear the designer hat inline and create/reshape durable task docs | +| A backend seat posted a decision item | **Decision relay** — present exactly one item, record the ruling, return it via inbox | +| An approved portfolio needs backend execution | **Spawn / supervise** — dispatch the backend orchestrator or other role seats horizontally | +| The ask changes no durable state | **Research-only exit** — answer in chat, no worktree or task mutation | +| No backend has been spawned and the work is small enough for one owner seat | **Solo / flat hat-collapse** — wear the needed backend/build hat under this architect lifecycle | + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat remains the architect for its lifetime. A pasted role brief +for another role is refused and escalated through the inbox instead of being absorbed. Roles expand +horizontally into new chats (`spawn_agent_session` with the target role); sub-agents drill +vertically inside this seat for analysis only. Sessions not owned by the dashboard follow their +host harness rules. + +Hat-collapse is allowed here because this is the owner/developer-facing seat. The same collapse is +not allowed in spawned role seats. + +## Design And Drawing Board + +When the developer is still shaping the work, the architect wears `roles/designer.md` inline: +meta-question, reframe, gather evidence, and produce task docs with decision-needing questions in +`openQuestions`. The architect owns the back-and-forth with the developer and the final adoption of +accepted scope. + +When backend work surfaces a high-blast-radius truth — architecture direction, security posture, +doctrine contradiction, irreversible branch/data operation, or where agent settings live — the +architect turns it into a clear drawing-board decision instead of letting the backend guess. +Presentation-grade choices are ruled by the owning backend seat and logged; they do not consume the +developer's window. + +## Minimal Decision-Item Relay + +The relay rides the existing operator inbox. There is no new queue schema here. + +### Intake From Backend + +The backend seat posts one `messageKind: decision-item` inbox row addressed to the architect. The +row must contain: + +- **Decision** — what is being decided, in one sentence. +- **Options** — the live choices, including the backend's recommendation if it has one. +- **Consequences** — what each option changes or risks. +- **Evidence refs** — task docs, notes, reports, diffs, or gate ids needed to verify the item. + +If any field is missing or too vague, the architect returns one clarification row and does not +present the item as a developer decision. + +### Presentation To The Developer + +Present exactly one item at a time, in plain language: + +1. What is being decided. +2. The available options. +3. The consequence of each option. +4. The ruling needed now. + +Do not dump a backlog of backend state into the developer conversation. The architect controls +pace and preserves context so the developer can answer the actual decision. + +### Durable Ruling Back + +After the developer rules, or after the architect rules a non-developer item within accepted +scope, record the ruling in the durable task surface: + +- `openQuestions` closed or updated when the item was an open question. +- Decision log entry when the ruling changes task/branch/orchestration state. +- Notes when analysis or evidence needs to survive beyond the terse decision entry. + +Then send one `messageKind: decision-ruling` inbox row back to the backend seat, referencing the +original decision item and the durable ruling location. The backend waits for this row before +acting on the decision. + +## Spawning Backend Roles + +The architect may spawn role seats horizontally: + +- `AR_SPAWN_ROLE=orchestrator` for backend portfolio/orchestration churn. +- `AR_SPAWN_ROLE=strategist` for the mandatory portfolio plan pre-run when the architect is + directly owning a small orchestration setup. +- `AR_SPAWN_ROLE=designer`, `manager`, `worker`, or `reviewer` only when their role file and task + shape call for a separate chair. + +Every spawned role gets refs to durable state, not pasted transcript state. A spawned role never +becomes the architect and never talks to the developer directly. + +## Solo / Flat Hat-Collapse + +Solo work is the degenerate portfolio under the architect: + +- The task doc still comes before code. +- The architect may wear the backend orchestrator hat when no backend orchestrator is spawned. +- In a flat series, the architect may wear the manager hat. +- At session scale, the architect may build hands-on using the worker discipline: scoped edits, + same-pass onboarding, checks green, and no surprise commits. + +Owner-never-self-approves still holds. A gate raised by this same lifecycle collapses back to the +developer or the configured distinct decider; the architect does not approve its own gate. + +## Artifact Obligations + +- Durable design/task docs and decision logs for accepted work. +- One-at-a-time decision-item handling with durable rulings. +- Backend dispatch notes that name which role seat owns which work. +- Handoff notes for any spawned backend orchestrator. + +## Comms Protocol + +- **Developer chat** — the only normal developer-facing conversation. +- **Inbox** — decision items in, rulings out; backend escalations arrive here, not directly in the + developer's working window. +- **Stdin push** — optional delivery into hosted backend sessions after the durable inbox row exists. +- **Escalation** — architect → developer for high-blast-radius truth or human-pinned gates; otherwise + the architect rules within accepted scope and logs the decision. + +## Knobs + +| Knob | Default | Notes | +| ------- | ----------------- | ----- | +| harness | claude | default preference only — settings picks the actual harness | +| model | highest-reasoning | developer-facing architecture and ruling quality need the strongest model | +| effort | high | decision framing is not the place to economize | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | developer-facing owner surface | `read_ar_files` · onboarding · route indexes · `task_doc` · inbox · gates for developer hand-offs · `spawn_agent_session` | + +Settings.json `orchestration.roles.architect` overrides these, and `orchestration.rolesPerLevel..architect` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.hermes/skills/l-01-agent-lifecycles/roles/curator.md b/.hermes/skills/l-01-agent-lifecycles/roles/curator.md new file mode 100644 index 00000000..23eb8d45 --- /dev/null +++ b/.hermes/skills/l-01-agent-lifecycles/roles/curator.md @@ -0,0 +1,90 @@ +# Lifecycle — Curator + +> One leaf memory pass, one fresh session, onboarding only. The curator is the dedicated +> onboarding writer in the manager -> builder -> reviewer -> curator closeout chain. +> Your **brief is your session start**. + +## What This Seat Is + +**One fresh seat per leaf memory pass.** Spawned after the builder has produced code and the +reviewer has produced the verdict for the leaf. The curator receives the leaf task doc, relevant +notes/reports, the builder's changed-path/code-diff evidence, and the reviewer verdict. It writes +onboarding only: file sidecars, route overviews when genuinely affected, route indexes, and the +repo entity catalog when a real entity changed. + +The curator never writes code, never decides gates, never mutates task-doc state, and never performs +closeout/integration/finalization. Those remain the owning seat's machinery. The manager closes a +leaf from three inputs: **builder code + reviewer verdict + curator memory pass**. + +This role ratifies the seat and chain only. Change-set feeding, c-12/c-05 process rewiring, and +tool-level closeout enforcement stay outside this leaf. + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays curator for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this curator seat for +read/search/reference checks only. A curator never absorbs architect, orchestrator, strategist, +manager, worker, designer, or reviewer work. + +## The Curator Loop + +``` +brief -> intake -> inspect diff + evidence -> write onboarding -> indexes/checks -> memory-pass report -> end +``` + +### 1 — Intake + +Read the brief fully, then the leaf task doc, builder turn report, reviewer verdict, changed-path +list, and any notes the owning seat names. Confirm the code worktree and memory worktree paths. If +the diff/evidence is missing or ambiguous enough that onboarding would become guesswork, ask the +owning seat for one clarification row; do not infer a change set from transcript memory. + +### 2 — Inspect + +Use native reads in the code worktree for the changed source files and native reads in the memory +worktree for their sidecars and governing overviews. Use the c-05 file-level onboarding workflow for +sidecars and entity catalogs. The curator may run read/search fan-out inside this seat when a route +needs reference checking, but the main curator session owns every durable write. + +### 3 — Write Onboarding Only + +- Changed source files: update/create their file-level sidecars with real body changes and newest + update-history entries. +- Route overviews: update bodies when route meaning changed; otherwise record an explicit reviewed + no-impact history entry only when that overview was reviewed. +- Entity catalog: update only for real load-bearing entity changes. +- Generated route indexes: regenerate locally with `build_route_indexes(...)` from the memory + worktree. + +Do not modify code. Do not edit task docs, gates, lifecycle state, worktree contracts, or closeout +state. Do not run c-12/c-05 rewiring experiments from this role. + +### 4 — Checks And Report + +Run the memory/onboarding checks named in the brief, plus `git diff --check` in the memory worktree +when the brief requires it. Write a curator memory-pass report under the series `notes/reports/` +that lists changed onboarding files, route index results, reference checks, blockers, and the exact +commands run. The report is the memory input the manager uses beside builder code and reviewer +verdict. + +## Comms + +- **Inbox** — receive the curator brief/context and ask the owning seat for missing evidence. +- **Report artifact** — the memory-pass report is the durable output; do not rely on transcript. +- **Escalation** — one rung up to the owning seat. The curator never escalates directly to the + developer and never decides whether a leaf lands. + +## Knobs + +| Knob | Default | Notes | +| ------- | -------------- | ----- | +| harness | codex | default preference only — settings picks the actual harness | +| model | mid-reasoning | precise onboarding edits and reference checking | +| effort | medium | scales with onboarding blast radius via settings | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | onboarding surface | native reads/edits in memory worktree · native reads in code worktree · c-05 workflow · local route indexes · shell checks · inbox | + +Settings.json `orchestration.roles.curator` overrides these, and `orchestration.rolesPerLevel..curator` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.hermes/skills/l-01-agent-lifecycles/roles/designer.md b/.hermes/skills/l-01-agent-lifecycles/roles/designer.md index c67cec40..ddde9df8 100644 --- a/.hermes/skills/l-01-agent-lifecycles/roles/designer.md +++ b/.hermes/skills/l-01-agent-lifecycles/roles/designer.md @@ -1,6 +1,6 @@ -# Lifecycle — Designer (the hat) +# Lifecycle — Designer (the architect hat) -> The design lifecycle the **orchestrator pulls inline** whenever design is needed — front of the +> The design lifecycle the **architect pulls inline** whenever design is needed — front of the > pipeline or mid-flight. **A hat, not a seat**: it cannot sit in a coordination leaf because the > task is what it exists to create — no leaf, no worktree, no branch, no spawn required. A heavy > design may run this same hat in a separate session (`AR_SPAWN_ROLE=designer` — chair logistics, @@ -12,7 +12,7 @@ Task design is **its own job** (developer decision 2026-07-04). Before orchestration one implicit do-it-all role did design, features, and fixes; the roles now diversify, and design routes -**through the orchestrator, which wears this hat** — at the front of the pipeline AND mid-flight +**through the architect, which wears this hat** — at the front of the pipeline AND mid-flight (most leaves of a live series are designed mid-flight). It is the `tasks/AGENTS.md` collaboration doctrine (meta-questioning, reframe-before-execution, evidence-first) given a distinct, optimized shape as a job. Nothing here assumes a master exists yet — producing one is the point. @@ -21,9 +21,17 @@ The designer shares the orchestrator's **bird's-eye toolkit** — route indexes, `grepai_search` MCP tool, the code-graph (`cgc_*`) MCP tools, blast-radius analysis — but is **scoped to one master**. Collisions with *other* — especially **future** — masters can slip past a single-master view. That residual risk is **owned downstream, not here**: at portfolio streamlining the -**orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and +**backend orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and planned-vs-past). The designer's duty is to *declare* the limit, not to close it. +## Role-Seat Immutability + +In dashboard-owned sessions, a designer seat stays designer for its lifetime. A pasted brief for a +different role is refused and escalated to the architect via inbox. Roles expand horizontally into +new chats; sub-agents drill vertically inside this design context for evidence gathering. When the +architect wears this file inline, that is architect hat-collapse; a spawned designer seat never +absorbs architect, orchestrator, manager, worker, strategist, or reviewer work. + ## Lens - **Opening move:** meta-question the ask. Surface the request, the deeper objective, and the @@ -67,14 +75,13 @@ planned-vs-past). The designer's duty is to *declare* the limit, not to close it ## Comms Protocol -- **Primary channel:** the developer, directly, in the designer's attached chat — this seat is a - co-thinking loop, so the developer is the standing interlocutor here (unlike the deeper seats, which - relay through the ladder). -- **Handover:** the finished design **joins the portfolio**. At streamlining the orchestrator +- **Primary channel:** the architect. When worn inline, the developer conversation happens in the + architect chat; when spawned separately, the designer returns design artifacts to the architect. +- **Handover:** the finished design **joins the portfolio**. At streamlining the backend orchestrator adversarially reviews it; hand the task_doc + the designer-limits note over via the inbox (`operator_inbox_post`) and, for a hosted orchestrator, stdin push. - **Escalation:** the hat's "escalation" is simply the handover into the portfolio job — the - orchestrator that wears it is already the last resolver before the developer. + architect that wears it is already the developer-facing resolver. ## Knobs diff --git a/.hermes/skills/l-01-agent-lifecycles/roles/manager.md b/.hermes/skills/l-01-agent-lifecycles/roles/manager.md index 0b42124a..89ca1029 100644 --- a/.hermes/skills/l-01-agent-lifecycles/roles/manager.md +++ b/.hermes/skills/l-01-agent-lifecycles/roles/manager.md @@ -11,22 +11,32 @@ **One per master task.** Spawned by the orchestrator with the master's context packet. It owns its own coordination leaf + chat (**no worktree**) and drives exactly one master series: spawns/respawns a fresh -worker per leaf, reviews turn-report artifacts, decides **delegated** leaf gates, integrates leaves into -the master integration branch via the `c-11-memory-carryover-from-branch` skill, and hands the completed -master to the orchestrator through the master-exit adversarial seam. - -The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → (the worker -builds) → closeout preview/apply (deciding the delegated gates per the gate policy) → -`worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps checked by this -seat by hand** (the tool does not reconcile checkboxes). The worker's terminal +worker per leaf, runs the manager -> builder -> reviewer -> curator closeout chain, decides +**delegated** leaf gates, integrates leaves into the master integration branch via the +`c-11-memory-carryover-from-branch` skill, and hands the completed master to the orchestrator +through the master-exit adversarial seam. + +The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → builder code → +reviewer verdict → curator memory pass → closeout preview/apply (deciding the delegated gates per +the gate policy) → `worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps +checked by this seat by hand** (the tool does not reconcile checkboxes). The worker's terminal state is checks-green + turn report; everything after that is this seat's. -**Flat-run note:** in a flat series (no managers spawned) the **orchestrator wears this hat** — -same duties, same artifacts, one chair. +**Flat-run note:** in a flat series (no managers spawned) the **architect may wear this hat** — +same duties, same artifacts, one owner chair. A spawned orchestrator does not absorb the manager +role in place. A manager has **no bird's-eye view** — it sees one master, not the portfolio. That boundary shapes everything below. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays manager for its lifetime. A pasted brief for another +role is refused and escalated to the backend orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this manager seat for +bounded analysis or report checks. A spawned manager never absorbs architect, orchestrator, +strategist, reviewer, curator, or worker briefs. + ## Lens - **Opening move:** read the master `task_doc` + its leaf docs; order the leaves (parallel where safe — @@ -79,10 +89,15 @@ developer can walk in any time. Read the master + leaf docs; order the leaves. missing artifact → a **rate-limited stdin nudge** (logged as an event, never spammy). Escalation intake via the inbox. - **Review artifact vs `task_doc`** — completion vs requirements/steps · checks green · - onboarding refreshed in the same pass (the manager's own leaf-level review; **this is not an - adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** + builder changed-path/code evidence sufficient for the curator pass (the manager's own + leaf-level review; **this is not an adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** (`task_reopen`) and its doc reshaped — never duplicated into a redo sibling; new leaves are for genuinely new changes. +- **Curator memory pass** — after builder code is ready and the reviewer verdict is available, + spawn a **fresh curator** (`roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`) for the leaf's + onboarding-only pass. The curator receives the leaf task doc, notes/reports, builder changed + paths/code diff, and reviewer verdict; it writes onboarding only and returns a memory-pass report. + Leaf closeout inputs are exactly: **builder code + reviewer verdict + curator memory pass**. - **Delegated leaf gates (plan · closeout)** — decide the leaf's delegated gates, **attributed** (`decidedBy: `, `decidedVia: orchestration`), appended and dashboard-visible. The **owning agent never self-approves; a distinct configured role may** — that configured role is the @@ -124,7 +139,7 @@ truth, as-built: the gate pins to your ambient lifecycle when you raise it; the orchestrator resolves the gate **by the packet-carried gate id** (gate ids are model-visible — only LIFECYCLE ids stay server-side) and its own ambient identity becomes `decidedBy`; owner-never-self-approves holds by construction. A handover carrying serious issues the -orchestrator cannot answer on its own escalates up the ladder (orchestrator → developer). +orchestrator cannot answer on its own escalates up the ladder (orchestrator → architect). ### 4 — Handover to the orchestrator @@ -150,7 +165,7 @@ own lifecycle if you need its state). master's view first. A loop that hits the 3-round cap or stops converging escalates **with the full round history attached**. **Quo-vadis test:** a question that is a **high-blast-radius truth** — answered wrong it means big rewrites later, not a cosmetic choice — is flagged as - quo-vadis when raised, so the orchestrator relays it to the developer immediately instead of + quo-vadis when raised, so the orchestrator relays it to the architect immediately instead of absorbing it; presentation-grade choices are never escalated — decide and log. ## Knobs diff --git a/.hermes/skills/l-01-agent-lifecycles/roles/orchestrator.md b/.hermes/skills/l-01-agent-lifecycles/roles/orchestrator.md index 90a5e06a..6d1c8366 100644 --- a/.hermes/skills/l-01-agent-lifecycles/roles/orchestrator.md +++ b/.hermes/skills/l-01-agent-lifecycles/roles/orchestrator.md @@ -1,23 +1,32 @@ # Lifecycle — Orchestrator -> The developer-facing lifecycle: an **event loop over durable portfolio state**, not a -> request-to-close pipeline. Each turn routes the incoming event — a developer message, a worker -> report, a verdict, the orchestrator's own finding — into one of **three jobs** (Design · -> Portfolio · Orchestrate) under one roof, with solo work as the same jobs run with hats collapsed. +> The spawned backend lifecycle: an **event loop over durable portfolio state**, not a +> developer-facing conversation. Each turn routes backend events — architect dispatch, manager +> handover, worker report, verdict, or the orchestrator's own finding — into portfolio and +> orchestration work. Developer decisions are emitted to the architect as decision items. ## What This Seat Is -The developer's single point of contact and the only seat with a standing developer relay -(managers/workers stay reachable via their attached chats). It owns the design conversation, the -portfolio bird's-eye, dependency-ordered dispatch, the super integration branch, the **spirit -test**, and the **integrity bulwark** against "fixed one thing, broke two others." +The orchestrator is a backend seat spawned by the architect or by an approved orchestration plan. +It never converses with the developer directly. It owns the portfolio bird's-eye, +dependency-ordered dispatch, the super integration branch, the **spirit test**, and the +**integrity bulwark** against "fixed one thing, broke two others." The architect owns the design +conversation and developer relay. Its real state is the **task tree** — masters, leaves, statuses, decision logs, `openQuestions`, -contracts — never the transcript. That is why sessions can die, compact, and resume without losing -the run. Its analysis substrate is the **memory system** (route indexes, onboarding, +contracts, inbox rows — never the transcript. That is why sessions can die, compact, and resume +without losing the run. Its analysis substrate is the **memory system** (route indexes, onboarding, `grepai_search`, `cgc_*`); **orchestrator quality ∝ memory-repo quality**. Its durable notes and reports are the most important artifacts in the system: only this seat sees the whole picture. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays an orchestrator for its lifetime. A pasted brief for +architect, strategist, manager, worker, reviewer, or designer is refused and escalated to the +architect or owning seat via the inbox. Roles expand horizontally into new chats; sub-agents drill +vertically inside this seat for bounded analysis. A spawned orchestrator never absorbs another +role brief and never performs architect/developer-facing hat-collapse. + ## The Event Loop **Opening move, every session — new or resumed** (resumption is the common case, not the @@ -25,12 +34,12 @@ exception): 1. **Trust checkpoint** (below), then `lifecycle_start` (the frame's fleeting lifecycle). 2. **Portfolio orientation:** read the portfolio state — what exists, what is in flight, what is - blocked on whom, what awaits the developer — and **say it back**. + blocked on whom, what awaits the architect/developer relay — and **say it back**. 3. **Route the event** by what exists and what is asked: | Condition | Job | | --- | --- | -| No task doc exists for the ask (or a planning-status doc needs reshaping before work) | **D — Design** | +| No task doc exists for a backend request, or a planning-status doc needs developer reshaping | Emit a **decision/design item** to the architect | | Designed masters exist; coherence/conflicts/order in question, or "orchestrate these" | **P — Portfolio** | | An approved task/series is ready for implementation | **O — Orchestrate** | | The ask changes no code (a question, an investigation) | **research-only exit** — deliver the answer; chat is the right medium; no worktree, no task artifact | @@ -38,8 +47,8 @@ exception): **Profile check (takeover).** Before heavy work in any job: if this session's harness/model/ effort is wrong for the run (resolved: role file < settings), spawn the right chair — `spawn_agent_session` with `AR_SPAWN_ROLE=orchestrator` + a conversation-handover packet -(`../templates/conversation-handover-packet.md`) — and hand over; the developer still talks to -ONE orchestrator at a time. +(`../templates/conversation-handover-packet.md`) — and hand over; the architect still talks to the +developer, and backend orchestrator seats stay behind the relay. Several jobs can be active across a day; the loop routes per event. The frame's phase axis stays the observable `lifecycle_phase` vocabulary (`reframe-research` ≈ D, `decide` ≈ P, `build`/`close` @@ -68,8 +77,9 @@ task doc (approved) → branch (intent) → worktree (only where something i memory + onboarding roots; provider state; drift status and actionable count; branch freshness (`behind`/`diverged` → fast-forward the local official line first; `ledgerMapsCodeHead=false` → carryover or the right memory branch first). -3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **ask the developer** before - refreshing via `c-05-create-or-update-onboarding-files` — drift handling is approval-gated. +3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **emit a decision item to + the architect** before refreshing via `c-05-create-or-update-onboarding-files` — drift handling + is approval-gated. Drift tied to dirty source is active work-in-progress, not maintenance. 4. Providers stopped/degraded: run the matching provider/runtime operations, re-check, report; `indexing` means healthy-but-busy (partial results). @@ -77,57 +87,55 @@ task doc (approved) → branch (intent) → worktree (only where something i When this seat spawns a role it compiles the trust facts into the brief — a spawned role does not repeat this checkpoint. -## Hand-Off Protocol — Dry-Run → Notify-And-Stop → Report +## Decision-Item Relay To The Architect + +The orchestrator does not hand questions to the developer. Every developer-worthy item goes to the +architect through the existing operator inbox, one item at a time. + +Post one `messageKind: decision-item` row with: -Every developer hand-off (design acceptance, portfolio plan, worktree intent, commit, push, -integration, cleanup/finalization, any dev-wait) is three actions, never one. Carve-out (ruled -2026-07-06): in an orchestrated run, leaf→master and master→super integrations ride the series' -**standing approval** — no per-edge developer hand-off; the developer hand-off concentrates at the -super PR/carry-over gate (see Super exit & landing tail). The table's integration row governs when -a hand-off DOES happen (solo runs; a raised durable gate): +1. **Decision** — what is being decided. +2. **Options** — the live choices and any backend recommendation. +3. **Consequences** — what each option changes, risks, or blocks. +4. **Evidence refs** — task docs, notes, reports, diffs, or gate ids the architect can verify. -1. **Dry-run** the pending mutation and self-fix failures before reporting. -2. **Notify:** `lifecycle_turn_end_notification(summary=…)` as the **last tool call**. -3. **Report:** the complete packet as final prose, the decision handed over as the last line — - then STOP. The next turn's first AR call auto-resumes. +Then stop acting on that item until the architect returns a `messageKind: decision-ruling` row (or +a clarification request). Do not open a second developer item while the first is unresolved. + +Operational hand-offs that stay inside the backend still use the existing durable gate and inbox +surfaces. Carve-out (ruled 2026-07-06): in an orchestrated run, leaf→master and master→super +integrations ride the series' **standing approval** — no per-edge architect/developer hand-off; the +developer review concentrates at the super PR/carry-over gate through the architect. The table's +integration row governs when a hand-off DOES happen (solo runs; a raised durable gate): | Junction | Parked durable gate `kind` | Hands off via | | --- | --- | --- | -| design acceptance / plan gate | `plan-approval` | this lifecycle | +| design acceptance / plan gate | `plan-approval` | architect decision item | | worktree intent | `worktree-intent` | `c-09-git-worktree-manager` | | commit / closeout | `closeout-approval` | `c-12-closeout` | -| push | `push-approval` | this lifecycle / `c-09` | +| push | `push-approval` | architect decision item / `c-09` | | integration | `integration-approval` | `c-09` / `c-12` | | cleanup / finalization | `cleanup-approval` | `c-09` / `c-12` | -| any other dev-wait | `agent-question` | this lifecycle | +| any other developer-worthy wait | `agent-question` | architect decision item | `closeout-approval` **is** the commit hand-off. The block-and-wait `lifecycle_gate` + `lifecycle_resume` pair remains the parked fallback for a durable, mutation-blocking approval -record; it renders a prompt over your prose, which is exactly why notify-and-stop is the path. - -## Job D — Design (pull the designer hat) +record; when developer attention is needed, the architect is the relay that presents it. -**Entry:** an intent/problem with no task doc — or a planning-status doc that needs reshaping -before work starts. Fires at the front of the pipeline AND mid-flight; most leaves of a live -series are designed mid-flight. +## Design Boundary — Ask The Architect -Run `roles/designer.md` **inline — the designer is a hat, not a seat**: it cannot sit in a -coordination leaf because the task is what it exists to create. No worktree, no branch, no spawn -required; a heavy design may run the same hat in a separate session (chair logistics, not a role -distinction — spawn with `AR_SPAWN_ROLE=designer`). +The orchestrator does not own the developer drawing board and does not pull the designer hat. +When an intent/problem has no task doc, or a planning-status doc needs developer-visible +reshaping, emit a decision/design item to the architect with the missing decision, options, +consequences, and evidence refs. The architect wears `roles/designer.md`, discusses with the +developer, and returns a durable ruling or updated task surface. -- The co-think loop, evidence model, blast-radius-within-the-master, and designer-limits - declaration are the hat's own file. The orchestrator remains accountable for what the hat - produces: **bulwark-check the design against the portfolio and the past before acceptance** - (planned-vs-planned AND planned-vs-past — a designed change that collides with another master's - standing order is caught here or shipped broken). -- **Output:** master/leaf task docs (requirements · steps · code examples), `openQuestions` for - the developer (the rendered decision surface; `notes/` carries the analysis), the limits note. -- **Gate:** the developer accepts the design — or parks it. **No git surface.** +The orchestrator remains accountable for backend portfolio integrity after the architect returns +the design: run the bulwark check against the portfolio and the past before dispatch. ## Job P — Portfolio (streamline + plan) -**Entry:** designed masters exist and coherence/order is the question, or the developer says +**Entry:** designed masters exist and coherence/order is the question, or the architect dispatches "orchestrate these." - **Route-coherence scan** across the set (route indexes · onboarding · grepai · cgc); fan-out @@ -151,9 +159,10 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). sprint scope (`../templates/orchestration-task.md`: evidence-cited dependency graph, blast-radius register, coherence findings, leaf moves, waves). This is the portfolio three-party loop (owner = this seat · builder = strategist · reviewer with - `../criteria/plan-review.md`), followed by **drawing-board rounds with the developer** — this - seat relays, multi-round convergence is expected and normal, and quo-vadis items (e.g. two - masters heavily disagreeing) go straight to the developer. On acceptance **this seat adopts the + `../criteria/plan-review.md`), followed by **drawing-board rounds through the architect** — this + seat relays by decision item, multi-round convergence is expected and normal, and quo-vadis + items (e.g. two masters heavily disagreeing) go straight to the architect relay. On acceptance + **this seat adopts the draft into durable task form** (the strategist is a reader, not a mutator) with a decision-log entry. - **Re-evaluation rules:** a master added **in-sprint before implementation starts** → the @@ -167,13 +176,13 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). task doc carrying a top-level `orchestrates` list naming the master tasks it commands — the dashboard derives the orchestration > master > leaf hierarchy (and the rank insignia) from that field, so setting it is part of adoption. -- **Gate:** the portfolio plan gate — one wholesale developer review of the reshaped portfolio + - the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — not even the - super branch exists yet. +- **Gate:** the portfolio plan gate — one wholesale architect/developer review of the reshaped + portfolio + the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — + not even the super branch exists yet. ## Job O — Orchestrate (execute the plan) -**Entry:** an approved planner master — or a single approved master for a flat run. Either way, +**Entry:** an approved planner master — or a single approved master dispatched for backend execution. Either way, **the adopted orchestration task must exist**: the strategist pre-run (Job P) is the unconditional precondition for any orchestrated run — even one master. It is doctrine, not a knob. @@ -192,8 +201,8 @@ monitor turn-report artifacts, nudges, escalation intake; apply the **spirit tes deltas. A manager escalation may carry a **loop's full round history** (3-round cap hit, or a round that failed to shrink the finding set — the convergence rule, `../SKILL.md` The Three-Party Loop): this seat either re-runs the loop at ITS level (the orchestrator-level agent set — the -strongest models) or, when the blocker is a quo-vadis truth, takes it to the developer. In a -**flat run, wear the manager hat yourself** (see The Hat-Collapse Rule). +strongest models) or, when the blocker is a quo-vadis truth, emits a decision item to the +architect. This spawned backend seat does not run flat hat-collapse (see The Hat-Collapse Rule). **Failed-deliverable rule (reopen-and-reshape):** a leaf whose deliverable came out wrong is **REOPENED under its own id** (`task_reopen`) and its doc reshaped to the intended form — the @@ -212,7 +221,7 @@ policy may require the attached reviewer verdict (`requireReviewerVerdictAtSeams enforces it: `worktree_integrate` refuses while a `master-handover-approval` gate addressed to this master (its `enclosure`) is undecided or policy-invalid. A blocking verdict decomposes into fix leaves dispatched before integration; a -handover you cannot honestly decide escalates to the developer. +handover you cannot honestly decide escalates to the architect as a decision item. **Integration duty (master → super) — the worktree moment.** Per completed master: @@ -243,7 +252,8 @@ Strict stack: super off main; master branches off the **current super** (never o branches off their master. **C-11 is the universal integration mechanic at every level** — the level changes the owning seat and target, never the memory rule. The final super → main landing follows `system/git-workflow.md`: PR to gated main, remote merge, memory carry-over so the ledger -maps the actual merge commit, then push — **push only after the developer approves**. +maps the actual merge commit, then push — **push only after the architect returns the developer's +approval**. **Conflict resolution — exactly two modes:** *Up-front (preferred):* an overlap found during streamlining → extract shared logic into a foundation master implemented first (leaf moves + @@ -255,47 +265,38 @@ owns the final truth; ledger edge mapped once). parallel-master reconcile (T9), the series-branch-without-worktree primitive, and atomic move/renumber — run manually with existing primitives, each manual edge recorded in durable notes. -**Super exit & landing tail — the developer's SINGLE review point (ruled 2026-07-06, resolves +**Super exit & landing tail — the architect-mediated SINGLE review point (ruled 2026-07-06, resolves L8-Q9):** all leaf→master and master→super integrations are **orchestrator-delegated** — on the happy path they proceed under the series' standing approval (the developer's portfolio-gate approval, recorded in the planner master's decision log); a durable `integration-approval` gate, when one is raised, still awaits the developer — the kind stays human-pinned as-built. The -developer reviews ONCE, at the **fully integrated super branch on the PR/carry-over gate**. When +architect presents the developer review ONCE, at the **fully integrated super branch on the +PR/carry-over gate**. When the DAG drains, spawn the super-exit adversarial reviewer (`roles/reviewer.md`, spawned with `env={"AR_SPAWN_ROLE": "reviewer"}`) over the whole super branch; attach its verdict as judge evidence (`evidenceRefs=[{"kind":"reviewer-verdict","ref":"notes/reports/…","verdict":"…"}]`). -The handover to the developer **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the -dashboard running on the super branch — because the review is **visible-behavior-first** (a +The handover to the architect **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the +dashboard running on the super branch — because the developer review is **visible-behavior-first** (a broken visual pass fails the handover fast, before anyone reads a diff), code review second. The handover carries **demo notes — "what changed visibly"**: per master, the user-visible behavior -to walk (panels, flows, outputs, how to reach them), so the developer drives the environment +to walk (panels, flows, outputs, how to reach them), so the developer can drive the environment without archaeology. Rejections decompose into fix leaves. On approval: PR + memory carry-over + -push (developer-gated), then finalization +push (architect-mediated developer gate), then finalization (`lifecycle_finalize_task` per edge — statuses via the tool, steps checked by hand), then the **self-improvement close**: proposals for future runs grounded in the run's own ledger ("did x/y/z; hit a/b/c; a and b solved on the spot; c needs this change") — proposals only, never automated self-modification. `lifecycle_end` records the terminal state. -## The Hat-Collapse Rule (solo and flat runs) - -Solo work is **not a fourth route** — it is the same three jobs collapsed: - -- **Design** still happens (however briefly): the task doc exists before anything else. -- **Delegated gates collapse back to the developer when one chair owns both sides** — a gate you - raised from this session's lifecycle cannot be decided by it (owner-never-self-approves). -- **Portfolio** collapses but does not vanish: an ORCHESTRATED run — anything that dispatches - seats, even for a single master — still requires the strategist pre-run (even one master gets - the pass). Only session-scale hands-on work (nothing dispatched; not an orchestrated run) skips - the strategist; the owner's own bulwark check remains. -- **Orchestrate** runs with hats collapsed: in a **flat series** the orchestrator wears the - **manager hat** (`roles/manager.md` duties — dispatch, review, delegated gates, leaf closeout → - integrate → finalize — same duties, same artifacts, one chair). At **session scale** it builds - **hands-on** instead of spawning (when spawn economics don't pay): the build discipline is the - worker's (edit + same-pass `c-05` onboarding + `system/tools.md` checks green + freshness watch - / early `worktree_sync`), the closeout tail is the owner's (see `c-12-closeout`), and - the ladder holds identically: task doc → intent → worktree → build → close. -- Fan-out sub-agents may read/search and **write durable reports**; **every AR state mutation - stays in this seat's main loop** (see Sub-Agent Fan-Out below). +## The Hat-Collapse Rule (spawned backend) + +Hat-collapse is reserved for the owner/developer-facing architect. This spawned backend +orchestrator never wears the architect, designer, manager, worker, strategist, or reviewer hat in +place. + +If a run is small enough for one owner seat, the architect may perform these backend duties under +`roles/architect.md`. If this orchestrator needs another role, it spawns a new role chat +horizontally. Fan-out sub-agents may read/search and **write durable reports**; **every AR state +mutation stays in this seat's main loop** (see Sub-Agent Fan-Out below). ## Sub-Agent Fan-Out (capability doctrine — any harness that has it) @@ -322,7 +323,7 @@ regardless of the engine underneath. ## The Spirit Test — This Seat Only -**Within the spirit** of what the developer accepted → act alone + a decision-log entry (leaf +**Within the spirit** of what the architect/developer accepted → act alone + a decision-log entry (leaf moves and renumbers on planning-status masters, inserted fix leaves, reopened-and-reshaped leaves, mid-series convergence — the integration branch is the safety net). **Against the spirit** → raise it for a joint decision. Only this seat holds the global view to judge a collision; the @@ -342,7 +343,7 @@ task, fill small blanks, escalate real deltas). - **The adopted orchestration task** (the strategist drafts; this seat adopts — with the adoption decision-log entry) before any orchestrated run. - **The super-exit demo notes** ("what changed visibly", per master) + the reviewable environment - offer — the developer handover is visible-behavior-first. + offer — the architect-mediated developer handover is visible-behavior-first. - **The self-improvement report** at close. ## Comms Protocol @@ -351,16 +352,16 @@ task, fill small blanks, escalate real deltas). intake up; durable + dashboard-visible. - **Stdin push** — delivery into hosted sessions (echo-confirmed paste); poll is the non-hosted fallback. -- **Escalation** — this seat is the last resolver before the developer: resolve within the +- **Escalation** — this seat is the last backend resolver before the architect: resolve within the bird's-eye view first; what goes up is decided by the **quo-vadis test**, not by being stumped — a **high-blast-radius truth** question (answered wrong it means big rewrites later: architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where - agent settings live) goes to the developer IMMEDIATELY via task-doc `openQuestions`, regardless - of any loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. + agent settings live) goes to the architect IMMEDIATELY as a decision item, regardless of any + loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. A loop that hits its 3-round cap or stops converging arrives here with its full round history; - re-run it at this level's agent set or take the quo-vadis part to the developer. Developer - rejections arrive here and decompose into fix leaves (or reopens — see the failed-deliverable - rule). + re-run it at this level's agent set or take the quo-vadis part to the architect. Architect or + developer rejections arrive here and decompose into fix leaves (or reopens — see the + failed-deliverable rule). ## Knobs diff --git a/.hermes/skills/l-01-agent-lifecycles/roles/reviewer.md b/.hermes/skills/l-01-agent-lifecycles/roles/reviewer.md index a477ee87..fbeab40d 100644 --- a/.hermes/skills/l-01-agent-lifecycles/roles/reviewer.md +++ b/.hermes/skills/l-01-agent-lifecycles/roles/reviewer.md @@ -13,7 +13,7 @@ reviewer seat (below)** (seams: developer decision 2026-07-03; loop reuse: rulin 1. **Master-exit** — before a **manager** hands its completed master integration branch to the **orchestrator**. 2. **Super-exit** — before the **orchestrator** hands the accumulated super integration branch to the - **developer**. + **architect** for the developer review. Leaf-level review is the manager's own duty — **not** an adversarial seam. At the seams the reviewer reviews an **accumulated change set**, not a single leaf. @@ -30,11 +30,20 @@ loop's 3-round cap** — your delta-verify closes a round, it does not open one. > **Verdicts are evidence, not decisions.** The reviewer never decides a gate. Its verdict attaches to > the handover gate as **judge evidence**; the gate's decider decides — the **orchestrator** at -> master-exit (delegated `master-handover-approval`), the **developer** at super-exit — per the -> gate delegation policy (settings `orchestration.gateDelegation`, `controlplane/gate_policy.py`). +> master-exit (delegated `master-handover-approval`), the **architect carrying the developer +> ruling** at super-exit — per the gate delegation policy (settings `orchestration.gateDelegation`, +> `controlplane/gate_policy.py`). > The policy binds delegated seam decisions to verdict evidence when > `requireReviewerVerdictAtSeams` is set. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays reviewer for its lifetime. A pasted brief for another +role is refused and reported to the seam's decider via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this reviewer seat for the +three review lenses. A reviewer never absorbs architect, orchestrator, strategist, manager, or +worker work. + ## Lens - **Opening move:** scope the review — the integration branch diff, the relevant task docs @@ -101,10 +110,11 @@ orchestrator. Review the **accumulated master change set**, not a final leaf in master. Each fix leaf names scope, target files/docs, evidence, and done-when. A master-exit block without fix leaves is invalid. -### SUPER-EXIT — Orchestrator Before Developer Handover +### SUPER-EXIT — Orchestrator Before Architect/Developer Handover The orchestrator spawns this reviewer before handing the accumulated super integration branch to the -developer. Review **wholesale branch behavior**: the whole portfolio as integrated on super. +architect for the developer review. Review **wholesale branch behavior**: the whole portfolio as +integrated on super. - **Scope packet:** super integration branch diff against its base (main), portfolio task docs, master task docs, master-handover packets, prior master-exit verdicts, orchestrator decision logs, resolved diff --git a/.hermes/skills/l-01-agent-lifecycles/roles/strategist.md b/.hermes/skills/l-01-agent-lifecycles/roles/strategist.md index 377e4b70..eb21412a 100644 --- a/.hermes/skills/l-01-agent-lifecycles/roles/strategist.md +++ b/.hermes/skills/l-01-agent-lifecycles/roles/strategist.md @@ -13,8 +13,8 @@ **Spawn-first by design** (developer decision 2026-07-05). Strategist work is token-heavy — it reasons over every master's state, task docs, notes, friction ledger, and gate history — so it runs as its own process with its own harness/model/effort knobs, protecting the orchestrator's context. -The designer precedent explicitly does NOT apply: the designer stays an inline hat because design -is drawing-board-interactive with the developer; the strategist's essence is solitary heavy +The designer precedent explicitly does NOT apply: the designer stays an inline architect hat +because design is drawing-board-interactive; the strategist's essence is solitary heavy analysis. Spawned by the orchestrator via `spawn_agent_session` with `env={"AR_SPAWN_ROLE": "strategist"}`. @@ -36,6 +36,14 @@ it into durable task form. The strategist never edits task docs, never raises ga git. A seat that never touches mutating AR tools never instantiates a lifecycle — that is the designed shape. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays strategist for its lifetime. A pasted brief for +another role is refused and escalated to the orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this strategist seat +for portfolio analysis. A strategist never absorbs architect, orchestrator, manager, reviewer, or +worker work. + ## Lens - **Opening move:** read the brief fully — it carries **refs to durable portfolio state, never @@ -90,7 +98,7 @@ everything else. `roles/manager.md`): the strategist's analysis directly parameterizes the loops. 6. **Coherence & contradiction check** — cross-master sweep: two masters moving one surface in opposite directions, a leaf assuming state another leaf removes, duplicate work, vocabulary - drift. **Directional contradictions are quo-vadis → developer** (via the drawing board; see + drift. **Directional contradictions are quo-vadis → architect** (via the drawing board; see Duties §5). 7. **Ordering** — topological sort over ORDER edges; CONFLICT edges resolved by serialization or **leaf moves (recorded from→to with rationale)**; independent sets become **parallel waves** @@ -134,17 +142,17 @@ mutate nothing yourself. ### 5 — Drawing-board rounds The reviewer (plan-review catalog) passes judgment on the plan; the orchestrator relays the -verdict and the developer's drawing-board feedback back into this session. **Convergence over +verdict and the architect's drawing-board feedback back into this session. **Convergence over rounds is expected and normal** — large, messy portfolios are explicitly NOT expected to be fixed in one shot; the iteration is the feature. Each round must shrink the finding set (the convergence -rule); the loop's hard cap is 3 full rounds, and **the drawing board with the developer IS this +rule); the loop's hard cap is 3 full rounds, and **the drawing board through the architect IS this loop's escalation**. Quo-vadis items — high-blast-radius truths such as two masters heavily -disagreeing on direction — go **straight to the developer** at the drawing board (the orchestrator -carries them; you flag them, unmistakably, at the top of the coherence findings). +disagreeing on direction — go **straight to the architect relay** at the drawing board (the +orchestrator carries them; you flag them, unmistakably, at the top of the coherence findings). ### 6 — Adopted-plan handover -When the developer accepts the plan, the orchestrator adopts it; your seat's work is done. **The +When the architect returns the accepted plan ruling, the orchestrator adopts it; your seat's work is done. **The artifact write is unconditional; the inbox is the delivery channel when the brief wires it** — otherwise your final playback message to the orchestrator carries the artifact ref. Then end. The orchestration task remains the sprint's standing scope: a new master added **in-sprint before implementation starts** re-opens re-evaluation (you @@ -166,8 +174,8 @@ and enters the next sprint's evaluation. dashboard-visible. - **Stdin push** — the orchestrator delivers round feedback into this hosted session; your replies are inbox rows or artifact revisions — never an untracked side channel. -- **Escalation** — to the **orchestrator**, which relays; quo-vadis truths are flagged for the - developer's drawing board. You never edit task docs to reflect a ruling — the orchestrator does. +- **Escalation** — to the **orchestrator**, which relays to the architect; quo-vadis truths are + flagged for the drawing board. You never edit task docs to reflect a ruling — the orchestrator does. ## Tool Surface (positive statement — this is all of it) diff --git a/.hermes/skills/l-01-agent-lifecycles/roles/worker.md b/.hermes/skills/l-01-agent-lifecycles/roles/worker.md index f5c369b4..036240fa 100644 --- a/.hermes/skills/l-01-agent-lifecycles/roles/worker.md +++ b/.hermes/skills/l-01-agent-lifecycles/roles/worker.md @@ -7,7 +7,7 @@ ## What This Seat Is **One per task leaf, short-lived, fresh session.** Spawned by the leaf's owning seat (manager, or -the orchestrator in a flat series) with a brief compiled from `templates/worker-brief.md`. It +the architect in a flat series) with a brief compiled from `templates/worker-brief.md`. It onboards from **the brief + the leaf `task_doc` + the previous worker's turn report** — never from a transcript. Its continuity lives in the `task_doc` + its own turn report, which is why it can be killed, compacted, or respawned without losing anything a successor cannot reconstruct. @@ -16,10 +16,18 @@ The worker builds; it does not manage lifecycle machinery. **Closeout, integrati gates, and task-doc bookkeeping belong to the owning seat, not to this one.** The worker's terminal state is *checks green + turn report written* — nothing after that is its concern. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays worker for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this worker seat for +read/search only. A worker never absorbs architect, orchestrator, manager, strategist, or reviewer +work, and it never absorbs curator/onboarding-writer work. + ## The Worker Loop ``` -brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn report -> end +brief -> orient -> build code -> checks green -> turn report -> curator memory pass by separate seat | +-- blocked or plan delta beyond blank-filling -> escalate to the owning seat ``` @@ -28,8 +36,9 @@ brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn r Read the brief fully, then the leaf spec / `task_doc` it names. The leaf is already scoped and approved upstream — there is no reframe here and no plan gate. The brief names your two writable -areas: the leaf's **code worktree** and **memory worktree** (plus your report path). You edit -nothing outside them. +areas: the leaf's **code worktree** and your report path. The memory worktree is context for the +curator pass unless the brief explicitly says otherwise. You edit nothing outside your named +surfaces. ### 2 — Orient (paired reads before edits) @@ -44,12 +53,10 @@ nothing outside them. - Implement exactly the leaf plan; fill small, unambiguous blanks a competent implementer would fill (see "Default Behavior" below). -- **Refresh the matching onboarding in the same editing pass** per - `c-05-create-or-update-onboarding-files`: a changed source file's sidecar **body** is updated now; - a new file's sidecar is created; route overviews that need a genuine body update get one, and a - no-impact route gets the literal history form `- — No route impact: `. - Regenerate generated route indexes with a **local `build_route_indexes(...)`** invocation from the - memory worktree. +- Produce the builder input the downstream curator needs: changed paths, code-diff summary, tests, + and any route/onboarding observations that would help the memory pass. The curator, not the + worker, writes onboarding in the official manager -> builder -> reviewer -> curator closeout + chain. - **Never `git commit`.** Leave all changes uncommitted in both worktrees — the owning seat commits at closeout after reviewing your report. @@ -63,14 +70,15 @@ the report. A red check you cannot fix inside the leaf's scope is an escalation, Write `templates/turn-report.md` to the path the brief names (convention: `notes/reports/-worker-report.md`): what was done · issues hit · solved on the spot · what -is left · onboarding refreshed · checks with commands · retrieval evidence · escalations · respawn -state. **A missing report gets nudged.** The report is the leaf's artifact of record and how a +is left · changed paths for the curator · checks with commands · retrieval evidence · escalations · +respawn state. **A missing report gets nudged.** The report is the leaf's builder artifact of record and how a respawned successor onboards — write it even when blocked (with the Escalations section filled), then end your turn. ## Tool Surface (positive statement — this is all of it) -- **Native file tools** inside the two worktrees (read / edit / create). +- **Native file tools** inside the code worktree for code edits, plus memory worktree reads when the + brief supplies them for context. - **Read-only AR retrieval:** `read_ar_files`, `grepai_search`, `cgc_*`, `context_packet`. - **Shell** for the prescribed checks (use the interpreter paths the brief names — do not assume a `python` shim exists). @@ -85,17 +93,17 @@ lifecycle machinery never instantiates a lifecycle; that is the designed shape, When the harness offers sub-agents, use them for **read/search only**, scoped to the leaf (locate call sites, sweep onboarding): each writes durable notes and returns a compact summary. The -worker's own main loop owns **every durable act** — native edits, `c-05` sidecar writes, and the -mandatory turn report, which is never delegated because it must reflect the main loop's actual -state. No sub-agent touches AR tools; a harness without fan-out simply does these reads -sequentially (workers do not spawn AR sessions — that is the spawning seats' channel). +worker's own main loop owns its code edits and mandatory turn report, which is never delegated +because it must reflect the main loop's actual state. The curator owns onboarding writes. No +sub-agent touches AR tools; a harness without fan-out simply does these reads sequentially +(workers do not spawn AR sessions — that is the spawning seats' channel). ## Loop Position (when the leaf runs as a three-party loop) The owning seat scores each leaf into a tier at dispatch (loop doctrine: `../SKILL.md`, The Three-Party Loop). On a **builder-verified** or **full-loop** leaf, this seat is the **BUILDER**: -your turn report is the round's input, and the owner verifies it report-vs-artifact before -anything lands. Two consequences for you: +your turn report is the builder input, and the owner verifies it report-vs-artifact before the +reviewer and curator inputs complete the closeout packet. Two consequences for you: - **Fix rounds resume THIS session** — the same builder, with its context intact. Your round-2+ report **appends** to your report file rather than rewriting it, so the loop history stays @@ -108,10 +116,10 @@ anything lands. Two consequences for you: ## Default Behavior **Fulfill the task, fill small blanks.** No creative-liberty prompting in either direction. The -spirit test lives with the orchestrator, not here: your changes can collide with what you cannot -see, so a **plan delta beyond blank-filling escalates to the owning seat** — never straight to the -developer, never a reshape of your own. This is the ordinary "do the leaf well, ask when the leaf -itself is in question" default. +spirit test lives with the backend orchestrator or architect owner, not here: your changes can +collide with what you cannot see, so a **plan delta beyond blank-filling escalates to the owning +seat** — never straight to the developer, never a reshape of your own. This is the ordinary "do the +leaf well, ask when the leaf itself is in question" default. ## Comms @@ -119,7 +127,8 @@ itself is in question" default. and a `messageKind` (`turn-report`, `nudge`, `escalation`, …), durable + dashboard-visible. - **Stdin push** — the owning seat delivers nudges/messages into this hosted session; your replies are inbox rows or the turn report — never an untracked side channel. -- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator).** +- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator/architect in + solo flat mode).** ## Knobs diff --git a/.hermes/skills/l-01-agent-lifecycles/templates/manager-brief.md b/.hermes/skills/l-01-agent-lifecycles/templates/manager-brief.md index 10c37922..4a6f7eaf 100644 --- a/.hermes/skills/l-01-agent-lifecycles/templates/manager-brief.md +++ b/.hermes/skills/l-01-agent-lifecycles/templates/manager-brief.md @@ -31,6 +31,10 @@ master's leaf loop to the master-exit seam, then hand over. ## Dispatch defaults - Worker spawns: `templates/worker-brief.md`, `env={"AR_SPAWN_ROLE": "worker"}`, qualified leaf keys; knob overrides: . +- Leaf closeout chain: manager -> builder -> reviewer -> curator. The manager closes a leaf from + builder code + reviewer verdict + curator memory pass. +- Curator spawns: `roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`, fresh per leaf after the + builder code and reviewer verdict are available; curator writes onboarding only. - Concurrency: . ## The exit diff --git a/.hermes/skills/l-01-agent-lifecycles/templates/worker-brief.md b/.hermes/skills/l-01-agent-lifecycles/templates/worker-brief.md index db8f44d0..3437f402 100644 --- a/.hermes/skills/l-01-agent-lifecycles/templates/worker-brief.md +++ b/.hermes/skills/l-01-agent-lifecycles/templates/worker-brief.md @@ -18,13 +18,14 @@ ROLE BRIEF — worker You are a WORKER for leaf `` of master `` (repo: ). Your lifecycle is `skills/l-01-agent-lifecycles/roles/worker.md`; this brief is your session start. Execute the leaf -completely, write your turn report, then stop. +code completely, write your builder turn report, then stop. Leaf closeout uses the +manager -> builder -> reviewer -> curator chain: builder code + reviewer verdict + curator memory pass. -## Worktrees (your ONLY writable areas) +## Worktrees (your code write area + memory context) - Code: `` (branch ``, base ``) -- Memory: `` +- Memory: `` (read/context for changed-path notes; the curator writes onboarding) - Plus your turn report at the path below. Nothing else. NEVER `git commit` — the owning seat - closes out after reviewing your report. + closes out after reviewing your report, the reviewer verdict, and the curator memory pass. ## Tool surface - Native file tools inside the two worktrees; shell for the checks below. @@ -46,18 +47,18 @@ files involved, the invariants that must hold, what NOT to touch.> - Full: — must exit 0. - `git diff --check` in both worktrees. -## Onboarding (same editing pass, per c-05) -- Changed source files: update the sidecar BODY now; new files: create the sidecar. -- Route overviews: genuine body update where routes changed; otherwise the newest history entry - uses the LITERAL form `- — No route impact: ` (timestamp first). -- Pin idiom for verification metadata: "Verification metadata pinned until closeout stamps the - commit." +## Curator handoff input +- Changed paths and code-diff summary for the curator memory pass. +- Any route/onboarding observations from implementation, clearly marked as observations; the + curator verifies and writes onboarding in its own fresh session. +- Pin idiom for any metadata note the curator needs: "Verification metadata pinned until closeout + stamps the commit." ## Turn report (mandatory, last act) Write `/-worker-report.md` following `skills/l-01-agent-lifecycles/templates/turn-report.md` — including exact check commands + -outcomes, the retrieval-evidence tally, and the respawn state. If blocked: fill Escalations and -stop — escalate to , never to the developer. +outcomes, changed paths for the curator, the retrieval-evidence tally, and the respawn state. If +blocked: fill Escalations and stop — escalate to , never to the developer. ``` --- diff --git a/.hermes/skills/w-02-light-task-workflow/master-template.md b/.hermes/skills/w-02-light-task-workflow/master-template.md index 42738c16..a807afd1 100644 --- a/.hermes/skills/w-02-light-task-workflow/master-template.md +++ b/.hermes/skills/w-02-light-task-workflow/master-template.md @@ -7,7 +7,7 @@ built to grow as the work unfolds. ## When to escalate to a series -The `l-01-agent-lifecycles` orchestrator lifecycle's `decide` step escalates a single task to a series once its size is apparent — the +The `l-01-agent-lifecycles` architect lifecycle's `decide` step escalates a single task to a series once its size is apparent — the implementation plan no longer fits on a single page, or the work splits into distinct slices that each deserve their own checklist and commit. You can also start single and escalate later: drop in the master `task.md` and move the existing plan into the first `NN_.md`. diff --git a/.openclaw/workspace/AGENTS.md b/.openclaw/workspace/AGENTS.md index c76ee270..add33900 100644 --- a/.openclaw/workspace/AGENTS.md +++ b/.openclaw/workspace/AGENTS.md @@ -6,10 +6,10 @@ If `AR_SPAWN_ROLE` is set, or your first user message is a role brief from an orchestrating agent: **ignore this notice entirely — your brief is your session start.** -Otherwise you are the developer-facing session, i.e. the **orchestrator**: read +Otherwise you are the developer-facing session, i.e. the **architect**: read `/ar-coordination/AGENTS.md` and treat those rules as workspace instructions, then run your lifecycle at -`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before +`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before relying on memory, `read_ar_files` (paired source+onboarding) until the build decision, retrieval-strategy tally as evidence, notify-and-stop at every developer hand-off. diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/SKILL.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/SKILL.md index 1d390618..78e6ad33 100644 --- a/.openclaw/workspace/skills/l-01-agent-lifecycles/SKILL.md +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/SKILL.md @@ -1,6 +1,6 @@ --- name: l-01-agent-lifecycles -description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> role brief -> otherwise orchestrator), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (orchestrator, designer, strategist, manager, worker, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the orchestrator; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." +description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> fresh role brief -> otherwise architect), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (architect, orchestrator, designer, strategist, manager, worker, curator, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the architect; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." --- # l-01-agent-lifecycles — The Agent Lifecycles @@ -15,42 +15,71 @@ lifecycle, and no role reads another role's file. 1. **`AR_SPAWN_ROLE` is set** (spawn env, injected by `spawn_agent_session`) → run `roles/.md`. Nothing else in this file's "developer session" material applies to you. (`designer` here means the same design hat in a separate chair — see `roles/designer.md`.) -2. **Else: the first user message is a role brief** — a `templates/*-brief.md`-shaped dispatch or +2. **Else: the first user message is a role brief in a fresh session** — a `templates/*-brief.md`-shaped dispatch or a first line of the form `ROLE BRIEF — ` from an orchestrating agent → run that role's lifecycle. The brief is your session start; a workspace session-start notice is not addressed to you. -3. **Else** (a developer opened this session) → you are the **orchestrator**: run - `roles/orchestrator.md`. Solo work is the degenerate portfolio — the same three jobs with hats - collapsed (the orchestrator wears the manager hat in flat runs and builds hands-on at session - scale); the task doc still comes first. +3. **Else** (a developer opened this session) → you are the **architect**: run + `roles/architect.md`. Solo work is the degenerate portfolio — the architect is the owner seat + that may wear backend hats when nothing has been spawned; the task doc still comes first. There is no fourth entry, and the edge cases are decided: an **unresolvable `AR_SPAWN_ROLE` value** (no matching `roles/.md`) falls through to condition 2 (the brief); a role-env session **whose brief never arrives** announces itself on the inbox and waits — it never -improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a takeover chair (the Profile -check (takeover) in `roles/orchestrator.md`, The Event Loop) — the developer still talks to **one** orchestrator. Orchestrated -fan-out (spawning managers/workers at scale) begins only on an explicit developer request (e.g. -*"orchestrate these masters"*) — no agent promotes itself into a spawning seat. +improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a spawned backend seat or a +backend takeover chair — the developer still talks to the **architect**, not the orchestrator. +Orchestrated fan-out (spawning backend orchestrators/managers/workers at scale) begins only on an +explicit developer request (e.g. *"orchestrate these masters"*) — no agent promotes itself into a +spawning seat. One exception to the no-cross-reading rule above: **a seat that WEARS a hat runs that hat's file -as its own** — the orchestrator always for `roles/designer.md`, and in flat runs for -`roles/manager.md` (the hat-collapse rule). +as its own** — the architect may wear `roles/designer.md`, and in solo/flat runs may wear backend +or build hats (the hat-collapse rule). A spawned role seat never wears another role's hat. ## The Role Registry | Role | Seat | Lifecycle file | | --- | --- | --- | -| **orchestrator** | the developer-facing session; first coordination leaf of an orchestrated series | `roles/orchestrator.md` | -| **designer** | a HAT the orchestrator pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | +| **architect** | the developer-facing owner seat; design conversation, decision-item relay, and drawing board | `roles/architect.md` | +| **orchestrator** | spawned backend portfolio/orchestration seat; never developer-facing | `roles/orchestrator.md` | +| **designer** | a HAT the architect pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | | **strategist** | the sprint planner, SPAWN-FIRST; a strategist run is a **mandatory precondition for any orchestrated run** — its deliverable is the orchestration task (sprint plan + scope); spawn value `strategist` | `roles/strategist.md` | | **manager** | one coordination leaf per master; drives that master's leaf loop | `roles/manager.md` | | **worker** | one leaf worktree, short-lived, fresh session | `roles/worker.md` | +| **curator** | fresh per leaf after builder/reviewer; writes onboarding only from task docs, notes, and code diff | `roles/curator.md` | | **adversarial reviewer** | short-lived, spawned at the two seams (master-exit, super-exit) and as any three-party loop's reviewer seat (criteria catalogs bound per review type); spawn value `reviewer` | `roles/reviewer.md` | The **lenses** (bug · feature · triage · research — `lenses.md`) are how the scoping seats -(orchestrator, designer) read a piece of work; a dispatched role never picks a lens — its brief +(architect, designer, backend orchestrator) read a piece of work; a dispatched role never picks a lens — its brief already carries the flavor. +## Role-Seat Immutability (dashboard-owned sessions) + +When the dashboard owns a session, its role is fixed for the session lifetime. Roles expand +**horizontally** by spawning new, individually addressable chats; sub-agents drill **vertically** +inside one seat's context for deeper analysis. A dashboard-owned session that already has a role +refuses a pasted role brief instead of silently rerouting itself; it escalates the mismatch to its +owner via the inbox. Router condition 2 applies only to fresh sessions. Sessions not owned by the +dashboard follow the host harness's ordinary rules. + +Hat-collapse is sanctioned only for the owner/developer-facing architect seat in solo or flat +runs. Spawned role seats never absorb another role brief and never become a different role in +place. + +## Minimal Decision-Item Relay + +The ARCHITECT/ORCHESTRATOR split uses the existing operator inbox now. No full queue schema or +dashboard reform is introduced here. + +- Backend seats post one `messageKind: decision-item` inbox row at a time to the architect. The row + states what is being decided, the options, the consequences, and the durable evidence refs. +- The architect presents one item at the developer's pace, records the ruling in the durable task + surface (`openQuestions` / decision logs, with notes for analysis), and returns one + `messageKind: decision-ruling` inbox row to the backend seat. +- If the item is underspecified, the architect sends a single clarification row back instead of + guessing. The backend does not open a second item until the active item has a durable ruling or + clarification state. + ## The Minimal Frame (the only machinery every session shares) Every session in a managed repo may be a **lifecycle**: six signals — `lifecycle_start` · @@ -79,7 +108,7 @@ at spawn (the **qualified** leaf key `//`), not lifec - **Continuity lives in the `task_doc` + durable artifacts, never in transcripts** — which is why short-lived workers and reviewers are safe, and why every seat writes its artifact of record. -- **Escalation ladder: worker → manager → orchestrator → developer.** No rung is skipped, ever. +- **Escalation ladder: worker → manager → orchestrator → architect → developer.** No rung is skipped, ever. Each role file states only its own rung. - **Observability:** coordination seats are `task_doc` leaves with attached chats; the developer can walk into any seat at any level. @@ -95,9 +124,9 @@ section; they do not restate it. | Level | Owner (holds the deliverable, rules, lands) | Builder | Reviewer | | --- | --- | --- | --- | -| Leaf | the leaf's owning seat (manager; orchestrator in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | +| Leaf | the leaf's owning seat (manager; architect in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | | Master | the manager | the leaf workers | the master-exit seam reviewer (verdict rides `master-handover-approval`) | -| Portfolio | the orchestrator | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | +| Portfolio | the backend orchestrator (developer-facing decisions relayed through the architect) | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | **Complexity-scored tiers (per leaf, at dispatch).** The owning seat scores three axes — blast radius (doctrine/enforcement/public surface vs leaf-local) · novelty (new subsystem vs @@ -123,13 +152,14 @@ they do not open them. open finding set. A round that does not shrink it escalates immediately, regardless of the count; a monotonically converging loop may never hit the cap at all. At the cap, or on non-convergence, the owner does not spin another round — it **escalates one seat up the ladder (worker → manager → -orchestrator → developer) with the full round history attached**; the escalation packet IS the +orchestrator → architect → developer) with the full round history attached**; the escalation packet IS the upper seat's visibility. **Quo-vadis (the written developer-escalation criterion).** A question is developer-worthy when it is a **high-blast-radius truth** — answered wrong it means big rewrites later (architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where -agent settings live). Quo-vadis questions escalate IMMEDIATELY, regardless of round count. +agent settings live). Quo-vadis questions escalate IMMEDIATELY to the architect relay, +regardless of round count. Presentation-grade choices (2px vs 3px) never do — the owner rules and logs. **Criteria catalogs (the reviewer as test bench).** Criteria are never made up on the spot: every @@ -169,9 +199,11 @@ defaults < global settings < repo-local settings. { "orchestration": { "roles": { // role → knob override; validated: harness/model/effort · free-form: launchArgs/promptKeywords/sessionCommands + "architect": { "harness": "claude", "effort": "high" }, "orchestrator": { "harness": "claude", "effort": "high" }, "strategist": { "effort": "ultracode" }, // session-vocabulary value → "/effort ultracode" post-launch "reviewer": { "harness": "claude", "model": "sonnet", "effort": "high" }, + "curator": { "harness": "codex", "effort": "medium" }, "worker": { "harness": "codex", "effort": "medium" } }, "rolesPerLevel": { // per-LEVEL agent sets (leaf|master|portfolio), deep-merged over roles @@ -218,7 +250,7 @@ reuse, complexity thresholds) lives in the same block — meaning in ## Companion Files - `lenses.md` — the four job lenses for the scoping seats. -- `roles/…` — the six self-contained role lifecycles (the registry above). +- `roles/…` — the eight self-contained role lifecycles (the registry above). - `templates/…` — turn-report · worker-brief · manager-brief (`ROLE BRIEF — manager`; the orchestrator compiles a manager's session start from it) · master-handover-packet · conversation-handover-packet · verdict · impact-analysis · onboarding-coherency · @@ -249,7 +281,7 @@ This skill absorbs and supersedes `l-01-session-job-lifecycle` and `l-02-agent-o orchestration vocabulary adopts the parked `260619_agentic-control-plane` spec — jobs as model-interpreted markdown (D6), the knob block (D7), role + lens in one file (D10), the ambient-singleton rule (D11), per-harness variants (D12), the judge rung, short-lived workers with -structured handoff, dev-talks-to-one-orchestrator (D15) — which in turn credits **Archon** and the +structured handoff, dev-talks-to-one-architect (D15) — which in turn credits **Archon** and the **agent-control-plane** project (D14); that credit carries forward. ## Relationship To Other Instructions diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/architect.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/architect.md new file mode 100644 index 00000000..0cea4a53 --- /dev/null +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/architect.md @@ -0,0 +1,157 @@ +# Lifecycle — Architect + +> The developer-facing lifecycle: the **drawing board, decision relay, and portfolio face**. +> The architect talks to the developer; the backend orchestrator does not. + +## What This Seat Is + +The architect is the developer-facing owner seat. It owns the design conversation, the +drawing-board rounds, and the pace at which developer decisions are presented. Backend churn +belongs to spawned role seats — especially the orchestrator — and reaches the developer only as +one decision item at a time. + +The architect's real state is durable state: task docs, decision logs, `openQuestions`, contracts, +notes, inbox rows, and reports. It never depends on transcript memory for continuity. It records +rulings durably, then returns those rulings to the backend seat that needs them. + +## Opening Move + +1. Read the workspace instructions and resolve the active Agents Remember context for the target + repository. +2. Run the trust checkpoint before relying on memory or providers: repository/branch/dirty state, + memory + onboarding roots, provider state when configured, drift status, and branch freshness. +3. Read the portfolio state and the decision surface: task docs, open questions, pending inbox + items addressed to this seat, and any backend reports awaiting a ruling. +4. Say back the current state in plain terms before asking the developer to decide anything. + +## Event Routing + +| Condition | Architect job | +| --- | --- | +| The developer is shaping intent, requirements, or scope | **Design** — wear the designer hat inline and create/reshape durable task docs | +| A backend seat posted a decision item | **Decision relay** — present exactly one item, record the ruling, return it via inbox | +| An approved portfolio needs backend execution | **Spawn / supervise** — dispatch the backend orchestrator or other role seats horizontally | +| The ask changes no durable state | **Research-only exit** — answer in chat, no worktree or task mutation | +| No backend has been spawned and the work is small enough for one owner seat | **Solo / flat hat-collapse** — wear the needed backend/build hat under this architect lifecycle | + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat remains the architect for its lifetime. A pasted role brief +for another role is refused and escalated through the inbox instead of being absorbed. Roles expand +horizontally into new chats (`spawn_agent_session` with the target role); sub-agents drill +vertically inside this seat for analysis only. Sessions not owned by the dashboard follow their +host harness rules. + +Hat-collapse is allowed here because this is the owner/developer-facing seat. The same collapse is +not allowed in spawned role seats. + +## Design And Drawing Board + +When the developer is still shaping the work, the architect wears `roles/designer.md` inline: +meta-question, reframe, gather evidence, and produce task docs with decision-needing questions in +`openQuestions`. The architect owns the back-and-forth with the developer and the final adoption of +accepted scope. + +When backend work surfaces a high-blast-radius truth — architecture direction, security posture, +doctrine contradiction, irreversible branch/data operation, or where agent settings live — the +architect turns it into a clear drawing-board decision instead of letting the backend guess. +Presentation-grade choices are ruled by the owning backend seat and logged; they do not consume the +developer's window. + +## Minimal Decision-Item Relay + +The relay rides the existing operator inbox. There is no new queue schema here. + +### Intake From Backend + +The backend seat posts one `messageKind: decision-item` inbox row addressed to the architect. The +row must contain: + +- **Decision** — what is being decided, in one sentence. +- **Options** — the live choices, including the backend's recommendation if it has one. +- **Consequences** — what each option changes or risks. +- **Evidence refs** — task docs, notes, reports, diffs, or gate ids needed to verify the item. + +If any field is missing or too vague, the architect returns one clarification row and does not +present the item as a developer decision. + +### Presentation To The Developer + +Present exactly one item at a time, in plain language: + +1. What is being decided. +2. The available options. +3. The consequence of each option. +4. The ruling needed now. + +Do not dump a backlog of backend state into the developer conversation. The architect controls +pace and preserves context so the developer can answer the actual decision. + +### Durable Ruling Back + +After the developer rules, or after the architect rules a non-developer item within accepted +scope, record the ruling in the durable task surface: + +- `openQuestions` closed or updated when the item was an open question. +- Decision log entry when the ruling changes task/branch/orchestration state. +- Notes when analysis or evidence needs to survive beyond the terse decision entry. + +Then send one `messageKind: decision-ruling` inbox row back to the backend seat, referencing the +original decision item and the durable ruling location. The backend waits for this row before +acting on the decision. + +## Spawning Backend Roles + +The architect may spawn role seats horizontally: + +- `AR_SPAWN_ROLE=orchestrator` for backend portfolio/orchestration churn. +- `AR_SPAWN_ROLE=strategist` for the mandatory portfolio plan pre-run when the architect is + directly owning a small orchestration setup. +- `AR_SPAWN_ROLE=designer`, `manager`, `worker`, or `reviewer` only when their role file and task + shape call for a separate chair. + +Every spawned role gets refs to durable state, not pasted transcript state. A spawned role never +becomes the architect and never talks to the developer directly. + +## Solo / Flat Hat-Collapse + +Solo work is the degenerate portfolio under the architect: + +- The task doc still comes before code. +- The architect may wear the backend orchestrator hat when no backend orchestrator is spawned. +- In a flat series, the architect may wear the manager hat. +- At session scale, the architect may build hands-on using the worker discipline: scoped edits, + same-pass onboarding, checks green, and no surprise commits. + +Owner-never-self-approves still holds. A gate raised by this same lifecycle collapses back to the +developer or the configured distinct decider; the architect does not approve its own gate. + +## Artifact Obligations + +- Durable design/task docs and decision logs for accepted work. +- One-at-a-time decision-item handling with durable rulings. +- Backend dispatch notes that name which role seat owns which work. +- Handoff notes for any spawned backend orchestrator. + +## Comms Protocol + +- **Developer chat** — the only normal developer-facing conversation. +- **Inbox** — decision items in, rulings out; backend escalations arrive here, not directly in the + developer's working window. +- **Stdin push** — optional delivery into hosted backend sessions after the durable inbox row exists. +- **Escalation** — architect → developer for high-blast-radius truth or human-pinned gates; otherwise + the architect rules within accepted scope and logs the decision. + +## Knobs + +| Knob | Default | Notes | +| ------- | ----------------- | ----- | +| harness | claude | default preference only — settings picks the actual harness | +| model | highest-reasoning | developer-facing architecture and ruling quality need the strongest model | +| effort | high | decision framing is not the place to economize | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | developer-facing owner surface | `read_ar_files` · onboarding · route indexes · `task_doc` · inbox · gates for developer hand-offs · `spawn_agent_session` | + +Settings.json `orchestration.roles.architect` overrides these, and `orchestration.rolesPerLevel..architect` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/curator.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/curator.md new file mode 100644 index 00000000..23eb8d45 --- /dev/null +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/curator.md @@ -0,0 +1,90 @@ +# Lifecycle — Curator + +> One leaf memory pass, one fresh session, onboarding only. The curator is the dedicated +> onboarding writer in the manager -> builder -> reviewer -> curator closeout chain. +> Your **brief is your session start**. + +## What This Seat Is + +**One fresh seat per leaf memory pass.** Spawned after the builder has produced code and the +reviewer has produced the verdict for the leaf. The curator receives the leaf task doc, relevant +notes/reports, the builder's changed-path/code-diff evidence, and the reviewer verdict. It writes +onboarding only: file sidecars, route overviews when genuinely affected, route indexes, and the +repo entity catalog when a real entity changed. + +The curator never writes code, never decides gates, never mutates task-doc state, and never performs +closeout/integration/finalization. Those remain the owning seat's machinery. The manager closes a +leaf from three inputs: **builder code + reviewer verdict + curator memory pass**. + +This role ratifies the seat and chain only. Change-set feeding, c-12/c-05 process rewiring, and +tool-level closeout enforcement stay outside this leaf. + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays curator for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this curator seat for +read/search/reference checks only. A curator never absorbs architect, orchestrator, strategist, +manager, worker, designer, or reviewer work. + +## The Curator Loop + +``` +brief -> intake -> inspect diff + evidence -> write onboarding -> indexes/checks -> memory-pass report -> end +``` + +### 1 — Intake + +Read the brief fully, then the leaf task doc, builder turn report, reviewer verdict, changed-path +list, and any notes the owning seat names. Confirm the code worktree and memory worktree paths. If +the diff/evidence is missing or ambiguous enough that onboarding would become guesswork, ask the +owning seat for one clarification row; do not infer a change set from transcript memory. + +### 2 — Inspect + +Use native reads in the code worktree for the changed source files and native reads in the memory +worktree for their sidecars and governing overviews. Use the c-05 file-level onboarding workflow for +sidecars and entity catalogs. The curator may run read/search fan-out inside this seat when a route +needs reference checking, but the main curator session owns every durable write. + +### 3 — Write Onboarding Only + +- Changed source files: update/create their file-level sidecars with real body changes and newest + update-history entries. +- Route overviews: update bodies when route meaning changed; otherwise record an explicit reviewed + no-impact history entry only when that overview was reviewed. +- Entity catalog: update only for real load-bearing entity changes. +- Generated route indexes: regenerate locally with `build_route_indexes(...)` from the memory + worktree. + +Do not modify code. Do not edit task docs, gates, lifecycle state, worktree contracts, or closeout +state. Do not run c-12/c-05 rewiring experiments from this role. + +### 4 — Checks And Report + +Run the memory/onboarding checks named in the brief, plus `git diff --check` in the memory worktree +when the brief requires it. Write a curator memory-pass report under the series `notes/reports/` +that lists changed onboarding files, route index results, reference checks, blockers, and the exact +commands run. The report is the memory input the manager uses beside builder code and reviewer +verdict. + +## Comms + +- **Inbox** — receive the curator brief/context and ask the owning seat for missing evidence. +- **Report artifact** — the memory-pass report is the durable output; do not rely on transcript. +- **Escalation** — one rung up to the owning seat. The curator never escalates directly to the + developer and never decides whether a leaf lands. + +## Knobs + +| Knob | Default | Notes | +| ------- | -------------- | ----- | +| harness | codex | default preference only — settings picks the actual harness | +| model | mid-reasoning | precise onboarding edits and reference checking | +| effort | medium | scales with onboarding blast radius via settings | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | onboarding surface | native reads/edits in memory worktree · native reads in code worktree · c-05 workflow · local route indexes · shell checks · inbox | + +Settings.json `orchestration.roles.curator` overrides these, and `orchestration.rolesPerLevel..curator` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/designer.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/designer.md index c67cec40..ddde9df8 100644 --- a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/designer.md +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/designer.md @@ -1,6 +1,6 @@ -# Lifecycle — Designer (the hat) +# Lifecycle — Designer (the architect hat) -> The design lifecycle the **orchestrator pulls inline** whenever design is needed — front of the +> The design lifecycle the **architect pulls inline** whenever design is needed — front of the > pipeline or mid-flight. **A hat, not a seat**: it cannot sit in a coordination leaf because the > task is what it exists to create — no leaf, no worktree, no branch, no spawn required. A heavy > design may run this same hat in a separate session (`AR_SPAWN_ROLE=designer` — chair logistics, @@ -12,7 +12,7 @@ Task design is **its own job** (developer decision 2026-07-04). Before orchestration one implicit do-it-all role did design, features, and fixes; the roles now diversify, and design routes -**through the orchestrator, which wears this hat** — at the front of the pipeline AND mid-flight +**through the architect, which wears this hat** — at the front of the pipeline AND mid-flight (most leaves of a live series are designed mid-flight). It is the `tasks/AGENTS.md` collaboration doctrine (meta-questioning, reframe-before-execution, evidence-first) given a distinct, optimized shape as a job. Nothing here assumes a master exists yet — producing one is the point. @@ -21,9 +21,17 @@ The designer shares the orchestrator's **bird's-eye toolkit** — route indexes, `grepai_search` MCP tool, the code-graph (`cgc_*`) MCP tools, blast-radius analysis — but is **scoped to one master**. Collisions with *other* — especially **future** — masters can slip past a single-master view. That residual risk is **owned downstream, not here**: at portfolio streamlining the -**orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and +**backend orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and planned-vs-past). The designer's duty is to *declare* the limit, not to close it. +## Role-Seat Immutability + +In dashboard-owned sessions, a designer seat stays designer for its lifetime. A pasted brief for a +different role is refused and escalated to the architect via inbox. Roles expand horizontally into +new chats; sub-agents drill vertically inside this design context for evidence gathering. When the +architect wears this file inline, that is architect hat-collapse; a spawned designer seat never +absorbs architect, orchestrator, manager, worker, strategist, or reviewer work. + ## Lens - **Opening move:** meta-question the ask. Surface the request, the deeper objective, and the @@ -67,14 +75,13 @@ planned-vs-past). The designer's duty is to *declare* the limit, not to close it ## Comms Protocol -- **Primary channel:** the developer, directly, in the designer's attached chat — this seat is a - co-thinking loop, so the developer is the standing interlocutor here (unlike the deeper seats, which - relay through the ladder). -- **Handover:** the finished design **joins the portfolio**. At streamlining the orchestrator +- **Primary channel:** the architect. When worn inline, the developer conversation happens in the + architect chat; when spawned separately, the designer returns design artifacts to the architect. +- **Handover:** the finished design **joins the portfolio**. At streamlining the backend orchestrator adversarially reviews it; hand the task_doc + the designer-limits note over via the inbox (`operator_inbox_post`) and, for a hosted orchestrator, stdin push. - **Escalation:** the hat's "escalation" is simply the handover into the portfolio job — the - orchestrator that wears it is already the last resolver before the developer. + architect that wears it is already the developer-facing resolver. ## Knobs diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/manager.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/manager.md index 0b42124a..89ca1029 100644 --- a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/manager.md +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/manager.md @@ -11,22 +11,32 @@ **One per master task.** Spawned by the orchestrator with the master's context packet. It owns its own coordination leaf + chat (**no worktree**) and drives exactly one master series: spawns/respawns a fresh -worker per leaf, reviews turn-report artifacts, decides **delegated** leaf gates, integrates leaves into -the master integration branch via the `c-11-memory-carryover-from-branch` skill, and hands the completed -master to the orchestrator through the master-exit adversarial seam. - -The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → (the worker -builds) → closeout preview/apply (deciding the delegated gates per the gate policy) → -`worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps checked by this -seat by hand** (the tool does not reconcile checkboxes). The worker's terminal +worker per leaf, runs the manager -> builder -> reviewer -> curator closeout chain, decides +**delegated** leaf gates, integrates leaves into the master integration branch via the +`c-11-memory-carryover-from-branch` skill, and hands the completed master to the orchestrator +through the master-exit adversarial seam. + +The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → builder code → +reviewer verdict → curator memory pass → closeout preview/apply (deciding the delegated gates per +the gate policy) → `worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps +checked by this seat by hand** (the tool does not reconcile checkboxes). The worker's terminal state is checks-green + turn report; everything after that is this seat's. -**Flat-run note:** in a flat series (no managers spawned) the **orchestrator wears this hat** — -same duties, same artifacts, one chair. +**Flat-run note:** in a flat series (no managers spawned) the **architect may wear this hat** — +same duties, same artifacts, one owner chair. A spawned orchestrator does not absorb the manager +role in place. A manager has **no bird's-eye view** — it sees one master, not the portfolio. That boundary shapes everything below. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays manager for its lifetime. A pasted brief for another +role is refused and escalated to the backend orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this manager seat for +bounded analysis or report checks. A spawned manager never absorbs architect, orchestrator, +strategist, reviewer, curator, or worker briefs. + ## Lens - **Opening move:** read the master `task_doc` + its leaf docs; order the leaves (parallel where safe — @@ -79,10 +89,15 @@ developer can walk in any time. Read the master + leaf docs; order the leaves. missing artifact → a **rate-limited stdin nudge** (logged as an event, never spammy). Escalation intake via the inbox. - **Review artifact vs `task_doc`** — completion vs requirements/steps · checks green · - onboarding refreshed in the same pass (the manager's own leaf-level review; **this is not an - adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** + builder changed-path/code evidence sufficient for the curator pass (the manager's own + leaf-level review; **this is not an adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** (`task_reopen`) and its doc reshaped — never duplicated into a redo sibling; new leaves are for genuinely new changes. +- **Curator memory pass** — after builder code is ready and the reviewer verdict is available, + spawn a **fresh curator** (`roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`) for the leaf's + onboarding-only pass. The curator receives the leaf task doc, notes/reports, builder changed + paths/code diff, and reviewer verdict; it writes onboarding only and returns a memory-pass report. + Leaf closeout inputs are exactly: **builder code + reviewer verdict + curator memory pass**. - **Delegated leaf gates (plan · closeout)** — decide the leaf's delegated gates, **attributed** (`decidedBy: `, `decidedVia: orchestration`), appended and dashboard-visible. The **owning agent never self-approves; a distinct configured role may** — that configured role is the @@ -124,7 +139,7 @@ truth, as-built: the gate pins to your ambient lifecycle when you raise it; the orchestrator resolves the gate **by the packet-carried gate id** (gate ids are model-visible — only LIFECYCLE ids stay server-side) and its own ambient identity becomes `decidedBy`; owner-never-self-approves holds by construction. A handover carrying serious issues the -orchestrator cannot answer on its own escalates up the ladder (orchestrator → developer). +orchestrator cannot answer on its own escalates up the ladder (orchestrator → architect). ### 4 — Handover to the orchestrator @@ -150,7 +165,7 @@ own lifecycle if you need its state). master's view first. A loop that hits the 3-round cap or stops converging escalates **with the full round history attached**. **Quo-vadis test:** a question that is a **high-blast-radius truth** — answered wrong it means big rewrites later, not a cosmetic choice — is flagged as - quo-vadis when raised, so the orchestrator relays it to the developer immediately instead of + quo-vadis when raised, so the orchestrator relays it to the architect immediately instead of absorbing it; presentation-grade choices are never escalated — decide and log. ## Knobs diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/orchestrator.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/orchestrator.md index 90a5e06a..6d1c8366 100644 --- a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/orchestrator.md +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/orchestrator.md @@ -1,23 +1,32 @@ # Lifecycle — Orchestrator -> The developer-facing lifecycle: an **event loop over durable portfolio state**, not a -> request-to-close pipeline. Each turn routes the incoming event — a developer message, a worker -> report, a verdict, the orchestrator's own finding — into one of **three jobs** (Design · -> Portfolio · Orchestrate) under one roof, with solo work as the same jobs run with hats collapsed. +> The spawned backend lifecycle: an **event loop over durable portfolio state**, not a +> developer-facing conversation. Each turn routes backend events — architect dispatch, manager +> handover, worker report, verdict, or the orchestrator's own finding — into portfolio and +> orchestration work. Developer decisions are emitted to the architect as decision items. ## What This Seat Is -The developer's single point of contact and the only seat with a standing developer relay -(managers/workers stay reachable via their attached chats). It owns the design conversation, the -portfolio bird's-eye, dependency-ordered dispatch, the super integration branch, the **spirit -test**, and the **integrity bulwark** against "fixed one thing, broke two others." +The orchestrator is a backend seat spawned by the architect or by an approved orchestration plan. +It never converses with the developer directly. It owns the portfolio bird's-eye, +dependency-ordered dispatch, the super integration branch, the **spirit test**, and the +**integrity bulwark** against "fixed one thing, broke two others." The architect owns the design +conversation and developer relay. Its real state is the **task tree** — masters, leaves, statuses, decision logs, `openQuestions`, -contracts — never the transcript. That is why sessions can die, compact, and resume without losing -the run. Its analysis substrate is the **memory system** (route indexes, onboarding, +contracts, inbox rows — never the transcript. That is why sessions can die, compact, and resume +without losing the run. Its analysis substrate is the **memory system** (route indexes, onboarding, `grepai_search`, `cgc_*`); **orchestrator quality ∝ memory-repo quality**. Its durable notes and reports are the most important artifacts in the system: only this seat sees the whole picture. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays an orchestrator for its lifetime. A pasted brief for +architect, strategist, manager, worker, reviewer, or designer is refused and escalated to the +architect or owning seat via the inbox. Roles expand horizontally into new chats; sub-agents drill +vertically inside this seat for bounded analysis. A spawned orchestrator never absorbs another +role brief and never performs architect/developer-facing hat-collapse. + ## The Event Loop **Opening move, every session — new or resumed** (resumption is the common case, not the @@ -25,12 +34,12 @@ exception): 1. **Trust checkpoint** (below), then `lifecycle_start` (the frame's fleeting lifecycle). 2. **Portfolio orientation:** read the portfolio state — what exists, what is in flight, what is - blocked on whom, what awaits the developer — and **say it back**. + blocked on whom, what awaits the architect/developer relay — and **say it back**. 3. **Route the event** by what exists and what is asked: | Condition | Job | | --- | --- | -| No task doc exists for the ask (or a planning-status doc needs reshaping before work) | **D — Design** | +| No task doc exists for a backend request, or a planning-status doc needs developer reshaping | Emit a **decision/design item** to the architect | | Designed masters exist; coherence/conflicts/order in question, or "orchestrate these" | **P — Portfolio** | | An approved task/series is ready for implementation | **O — Orchestrate** | | The ask changes no code (a question, an investigation) | **research-only exit** — deliver the answer; chat is the right medium; no worktree, no task artifact | @@ -38,8 +47,8 @@ exception): **Profile check (takeover).** Before heavy work in any job: if this session's harness/model/ effort is wrong for the run (resolved: role file < settings), spawn the right chair — `spawn_agent_session` with `AR_SPAWN_ROLE=orchestrator` + a conversation-handover packet -(`../templates/conversation-handover-packet.md`) — and hand over; the developer still talks to -ONE orchestrator at a time. +(`../templates/conversation-handover-packet.md`) — and hand over; the architect still talks to the +developer, and backend orchestrator seats stay behind the relay. Several jobs can be active across a day; the loop routes per event. The frame's phase axis stays the observable `lifecycle_phase` vocabulary (`reframe-research` ≈ D, `decide` ≈ P, `build`/`close` @@ -68,8 +77,9 @@ task doc (approved) → branch (intent) → worktree (only where something i memory + onboarding roots; provider state; drift status and actionable count; branch freshness (`behind`/`diverged` → fast-forward the local official line first; `ledgerMapsCodeHead=false` → carryover or the right memory branch first). -3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **ask the developer** before - refreshing via `c-05-create-or-update-onboarding-files` — drift handling is approval-gated. +3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **emit a decision item to + the architect** before refreshing via `c-05-create-or-update-onboarding-files` — drift handling + is approval-gated. Drift tied to dirty source is active work-in-progress, not maintenance. 4. Providers stopped/degraded: run the matching provider/runtime operations, re-check, report; `indexing` means healthy-but-busy (partial results). @@ -77,57 +87,55 @@ task doc (approved) → branch (intent) → worktree (only where something i When this seat spawns a role it compiles the trust facts into the brief — a spawned role does not repeat this checkpoint. -## Hand-Off Protocol — Dry-Run → Notify-And-Stop → Report +## Decision-Item Relay To The Architect + +The orchestrator does not hand questions to the developer. Every developer-worthy item goes to the +architect through the existing operator inbox, one item at a time. + +Post one `messageKind: decision-item` row with: -Every developer hand-off (design acceptance, portfolio plan, worktree intent, commit, push, -integration, cleanup/finalization, any dev-wait) is three actions, never one. Carve-out (ruled -2026-07-06): in an orchestrated run, leaf→master and master→super integrations ride the series' -**standing approval** — no per-edge developer hand-off; the developer hand-off concentrates at the -super PR/carry-over gate (see Super exit & landing tail). The table's integration row governs when -a hand-off DOES happen (solo runs; a raised durable gate): +1. **Decision** — what is being decided. +2. **Options** — the live choices and any backend recommendation. +3. **Consequences** — what each option changes, risks, or blocks. +4. **Evidence refs** — task docs, notes, reports, diffs, or gate ids the architect can verify. -1. **Dry-run** the pending mutation and self-fix failures before reporting. -2. **Notify:** `lifecycle_turn_end_notification(summary=…)` as the **last tool call**. -3. **Report:** the complete packet as final prose, the decision handed over as the last line — - then STOP. The next turn's first AR call auto-resumes. +Then stop acting on that item until the architect returns a `messageKind: decision-ruling` row (or +a clarification request). Do not open a second developer item while the first is unresolved. + +Operational hand-offs that stay inside the backend still use the existing durable gate and inbox +surfaces. Carve-out (ruled 2026-07-06): in an orchestrated run, leaf→master and master→super +integrations ride the series' **standing approval** — no per-edge architect/developer hand-off; the +developer review concentrates at the super PR/carry-over gate through the architect. The table's +integration row governs when a hand-off DOES happen (solo runs; a raised durable gate): | Junction | Parked durable gate `kind` | Hands off via | | --- | --- | --- | -| design acceptance / plan gate | `plan-approval` | this lifecycle | +| design acceptance / plan gate | `plan-approval` | architect decision item | | worktree intent | `worktree-intent` | `c-09-git-worktree-manager` | | commit / closeout | `closeout-approval` | `c-12-closeout` | -| push | `push-approval` | this lifecycle / `c-09` | +| push | `push-approval` | architect decision item / `c-09` | | integration | `integration-approval` | `c-09` / `c-12` | | cleanup / finalization | `cleanup-approval` | `c-09` / `c-12` | -| any other dev-wait | `agent-question` | this lifecycle | +| any other developer-worthy wait | `agent-question` | architect decision item | `closeout-approval` **is** the commit hand-off. The block-and-wait `lifecycle_gate` + `lifecycle_resume` pair remains the parked fallback for a durable, mutation-blocking approval -record; it renders a prompt over your prose, which is exactly why notify-and-stop is the path. - -## Job D — Design (pull the designer hat) +record; when developer attention is needed, the architect is the relay that presents it. -**Entry:** an intent/problem with no task doc — or a planning-status doc that needs reshaping -before work starts. Fires at the front of the pipeline AND mid-flight; most leaves of a live -series are designed mid-flight. +## Design Boundary — Ask The Architect -Run `roles/designer.md` **inline — the designer is a hat, not a seat**: it cannot sit in a -coordination leaf because the task is what it exists to create. No worktree, no branch, no spawn -required; a heavy design may run the same hat in a separate session (chair logistics, not a role -distinction — spawn with `AR_SPAWN_ROLE=designer`). +The orchestrator does not own the developer drawing board and does not pull the designer hat. +When an intent/problem has no task doc, or a planning-status doc needs developer-visible +reshaping, emit a decision/design item to the architect with the missing decision, options, +consequences, and evidence refs. The architect wears `roles/designer.md`, discusses with the +developer, and returns a durable ruling or updated task surface. -- The co-think loop, evidence model, blast-radius-within-the-master, and designer-limits - declaration are the hat's own file. The orchestrator remains accountable for what the hat - produces: **bulwark-check the design against the portfolio and the past before acceptance** - (planned-vs-planned AND planned-vs-past — a designed change that collides with another master's - standing order is caught here or shipped broken). -- **Output:** master/leaf task docs (requirements · steps · code examples), `openQuestions` for - the developer (the rendered decision surface; `notes/` carries the analysis), the limits note. -- **Gate:** the developer accepts the design — or parks it. **No git surface.** +The orchestrator remains accountable for backend portfolio integrity after the architect returns +the design: run the bulwark check against the portfolio and the past before dispatch. ## Job P — Portfolio (streamline + plan) -**Entry:** designed masters exist and coherence/order is the question, or the developer says +**Entry:** designed masters exist and coherence/order is the question, or the architect dispatches "orchestrate these." - **Route-coherence scan** across the set (route indexes · onboarding · grepai · cgc); fan-out @@ -151,9 +159,10 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). sprint scope (`../templates/orchestration-task.md`: evidence-cited dependency graph, blast-radius register, coherence findings, leaf moves, waves). This is the portfolio three-party loop (owner = this seat · builder = strategist · reviewer with - `../criteria/plan-review.md`), followed by **drawing-board rounds with the developer** — this - seat relays, multi-round convergence is expected and normal, and quo-vadis items (e.g. two - masters heavily disagreeing) go straight to the developer. On acceptance **this seat adopts the + `../criteria/plan-review.md`), followed by **drawing-board rounds through the architect** — this + seat relays by decision item, multi-round convergence is expected and normal, and quo-vadis + items (e.g. two masters heavily disagreeing) go straight to the architect relay. On acceptance + **this seat adopts the draft into durable task form** (the strategist is a reader, not a mutator) with a decision-log entry. - **Re-evaluation rules:** a master added **in-sprint before implementation starts** → the @@ -167,13 +176,13 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). task doc carrying a top-level `orchestrates` list naming the master tasks it commands — the dashboard derives the orchestration > master > leaf hierarchy (and the rank insignia) from that field, so setting it is part of adoption. -- **Gate:** the portfolio plan gate — one wholesale developer review of the reshaped portfolio + - the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — not even the - super branch exists yet. +- **Gate:** the portfolio plan gate — one wholesale architect/developer review of the reshaped + portfolio + the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — + not even the super branch exists yet. ## Job O — Orchestrate (execute the plan) -**Entry:** an approved planner master — or a single approved master for a flat run. Either way, +**Entry:** an approved planner master — or a single approved master dispatched for backend execution. Either way, **the adopted orchestration task must exist**: the strategist pre-run (Job P) is the unconditional precondition for any orchestrated run — even one master. It is doctrine, not a knob. @@ -192,8 +201,8 @@ monitor turn-report artifacts, nudges, escalation intake; apply the **spirit tes deltas. A manager escalation may carry a **loop's full round history** (3-round cap hit, or a round that failed to shrink the finding set — the convergence rule, `../SKILL.md` The Three-Party Loop): this seat either re-runs the loop at ITS level (the orchestrator-level agent set — the -strongest models) or, when the blocker is a quo-vadis truth, takes it to the developer. In a -**flat run, wear the manager hat yourself** (see The Hat-Collapse Rule). +strongest models) or, when the blocker is a quo-vadis truth, emits a decision item to the +architect. This spawned backend seat does not run flat hat-collapse (see The Hat-Collapse Rule). **Failed-deliverable rule (reopen-and-reshape):** a leaf whose deliverable came out wrong is **REOPENED under its own id** (`task_reopen`) and its doc reshaped to the intended form — the @@ -212,7 +221,7 @@ policy may require the attached reviewer verdict (`requireReviewerVerdictAtSeams enforces it: `worktree_integrate` refuses while a `master-handover-approval` gate addressed to this master (its `enclosure`) is undecided or policy-invalid. A blocking verdict decomposes into fix leaves dispatched before integration; a -handover you cannot honestly decide escalates to the developer. +handover you cannot honestly decide escalates to the architect as a decision item. **Integration duty (master → super) — the worktree moment.** Per completed master: @@ -243,7 +252,8 @@ Strict stack: super off main; master branches off the **current super** (never o branches off their master. **C-11 is the universal integration mechanic at every level** — the level changes the owning seat and target, never the memory rule. The final super → main landing follows `system/git-workflow.md`: PR to gated main, remote merge, memory carry-over so the ledger -maps the actual merge commit, then push — **push only after the developer approves**. +maps the actual merge commit, then push — **push only after the architect returns the developer's +approval**. **Conflict resolution — exactly two modes:** *Up-front (preferred):* an overlap found during streamlining → extract shared logic into a foundation master implemented first (leaf moves + @@ -255,47 +265,38 @@ owns the final truth; ledger edge mapped once). parallel-master reconcile (T9), the series-branch-without-worktree primitive, and atomic move/renumber — run manually with existing primitives, each manual edge recorded in durable notes. -**Super exit & landing tail — the developer's SINGLE review point (ruled 2026-07-06, resolves +**Super exit & landing tail — the architect-mediated SINGLE review point (ruled 2026-07-06, resolves L8-Q9):** all leaf→master and master→super integrations are **orchestrator-delegated** — on the happy path they proceed under the series' standing approval (the developer's portfolio-gate approval, recorded in the planner master's decision log); a durable `integration-approval` gate, when one is raised, still awaits the developer — the kind stays human-pinned as-built. The -developer reviews ONCE, at the **fully integrated super branch on the PR/carry-over gate**. When +architect presents the developer review ONCE, at the **fully integrated super branch on the +PR/carry-over gate**. When the DAG drains, spawn the super-exit adversarial reviewer (`roles/reviewer.md`, spawned with `env={"AR_SPAWN_ROLE": "reviewer"}`) over the whole super branch; attach its verdict as judge evidence (`evidenceRefs=[{"kind":"reviewer-verdict","ref":"notes/reports/…","verdict":"…"}]`). -The handover to the developer **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the -dashboard running on the super branch — because the review is **visible-behavior-first** (a +The handover to the architect **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the +dashboard running on the super branch — because the developer review is **visible-behavior-first** (a broken visual pass fails the handover fast, before anyone reads a diff), code review second. The handover carries **demo notes — "what changed visibly"**: per master, the user-visible behavior -to walk (panels, flows, outputs, how to reach them), so the developer drives the environment +to walk (panels, flows, outputs, how to reach them), so the developer can drive the environment without archaeology. Rejections decompose into fix leaves. On approval: PR + memory carry-over + -push (developer-gated), then finalization +push (architect-mediated developer gate), then finalization (`lifecycle_finalize_task` per edge — statuses via the tool, steps checked by hand), then the **self-improvement close**: proposals for future runs grounded in the run's own ledger ("did x/y/z; hit a/b/c; a and b solved on the spot; c needs this change") — proposals only, never automated self-modification. `lifecycle_end` records the terminal state. -## The Hat-Collapse Rule (solo and flat runs) - -Solo work is **not a fourth route** — it is the same three jobs collapsed: - -- **Design** still happens (however briefly): the task doc exists before anything else. -- **Delegated gates collapse back to the developer when one chair owns both sides** — a gate you - raised from this session's lifecycle cannot be decided by it (owner-never-self-approves). -- **Portfolio** collapses but does not vanish: an ORCHESTRATED run — anything that dispatches - seats, even for a single master — still requires the strategist pre-run (even one master gets - the pass). Only session-scale hands-on work (nothing dispatched; not an orchestrated run) skips - the strategist; the owner's own bulwark check remains. -- **Orchestrate** runs with hats collapsed: in a **flat series** the orchestrator wears the - **manager hat** (`roles/manager.md` duties — dispatch, review, delegated gates, leaf closeout → - integrate → finalize — same duties, same artifacts, one chair). At **session scale** it builds - **hands-on** instead of spawning (when spawn economics don't pay): the build discipline is the - worker's (edit + same-pass `c-05` onboarding + `system/tools.md` checks green + freshness watch - / early `worktree_sync`), the closeout tail is the owner's (see `c-12-closeout`), and - the ladder holds identically: task doc → intent → worktree → build → close. -- Fan-out sub-agents may read/search and **write durable reports**; **every AR state mutation - stays in this seat's main loop** (see Sub-Agent Fan-Out below). +## The Hat-Collapse Rule (spawned backend) + +Hat-collapse is reserved for the owner/developer-facing architect. This spawned backend +orchestrator never wears the architect, designer, manager, worker, strategist, or reviewer hat in +place. + +If a run is small enough for one owner seat, the architect may perform these backend duties under +`roles/architect.md`. If this orchestrator needs another role, it spawns a new role chat +horizontally. Fan-out sub-agents may read/search and **write durable reports**; **every AR state +mutation stays in this seat's main loop** (see Sub-Agent Fan-Out below). ## Sub-Agent Fan-Out (capability doctrine — any harness that has it) @@ -322,7 +323,7 @@ regardless of the engine underneath. ## The Spirit Test — This Seat Only -**Within the spirit** of what the developer accepted → act alone + a decision-log entry (leaf +**Within the spirit** of what the architect/developer accepted → act alone + a decision-log entry (leaf moves and renumbers on planning-status masters, inserted fix leaves, reopened-and-reshaped leaves, mid-series convergence — the integration branch is the safety net). **Against the spirit** → raise it for a joint decision. Only this seat holds the global view to judge a collision; the @@ -342,7 +343,7 @@ task, fill small blanks, escalate real deltas). - **The adopted orchestration task** (the strategist drafts; this seat adopts — with the adoption decision-log entry) before any orchestrated run. - **The super-exit demo notes** ("what changed visibly", per master) + the reviewable environment - offer — the developer handover is visible-behavior-first. + offer — the architect-mediated developer handover is visible-behavior-first. - **The self-improvement report** at close. ## Comms Protocol @@ -351,16 +352,16 @@ task, fill small blanks, escalate real deltas). intake up; durable + dashboard-visible. - **Stdin push** — delivery into hosted sessions (echo-confirmed paste); poll is the non-hosted fallback. -- **Escalation** — this seat is the last resolver before the developer: resolve within the +- **Escalation** — this seat is the last backend resolver before the architect: resolve within the bird's-eye view first; what goes up is decided by the **quo-vadis test**, not by being stumped — a **high-blast-radius truth** question (answered wrong it means big rewrites later: architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where - agent settings live) goes to the developer IMMEDIATELY via task-doc `openQuestions`, regardless - of any loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. + agent settings live) goes to the architect IMMEDIATELY as a decision item, regardless of any + loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. A loop that hits its 3-round cap or stops converging arrives here with its full round history; - re-run it at this level's agent set or take the quo-vadis part to the developer. Developer - rejections arrive here and decompose into fix leaves (or reopens — see the failed-deliverable - rule). + re-run it at this level's agent set or take the quo-vadis part to the architect. Architect or + developer rejections arrive here and decompose into fix leaves (or reopens — see the + failed-deliverable rule). ## Knobs diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/reviewer.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/reviewer.md index a477ee87..fbeab40d 100644 --- a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/reviewer.md +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/reviewer.md @@ -13,7 +13,7 @@ reviewer seat (below)** (seams: developer decision 2026-07-03; loop reuse: rulin 1. **Master-exit** — before a **manager** hands its completed master integration branch to the **orchestrator**. 2. **Super-exit** — before the **orchestrator** hands the accumulated super integration branch to the - **developer**. + **architect** for the developer review. Leaf-level review is the manager's own duty — **not** an adversarial seam. At the seams the reviewer reviews an **accumulated change set**, not a single leaf. @@ -30,11 +30,20 @@ loop's 3-round cap** — your delta-verify closes a round, it does not open one. > **Verdicts are evidence, not decisions.** The reviewer never decides a gate. Its verdict attaches to > the handover gate as **judge evidence**; the gate's decider decides — the **orchestrator** at -> master-exit (delegated `master-handover-approval`), the **developer** at super-exit — per the -> gate delegation policy (settings `orchestration.gateDelegation`, `controlplane/gate_policy.py`). +> master-exit (delegated `master-handover-approval`), the **architect carrying the developer +> ruling** at super-exit — per the gate delegation policy (settings `orchestration.gateDelegation`, +> `controlplane/gate_policy.py`). > The policy binds delegated seam decisions to verdict evidence when > `requireReviewerVerdictAtSeams` is set. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays reviewer for its lifetime. A pasted brief for another +role is refused and reported to the seam's decider via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this reviewer seat for the +three review lenses. A reviewer never absorbs architect, orchestrator, strategist, manager, or +worker work. + ## Lens - **Opening move:** scope the review — the integration branch diff, the relevant task docs @@ -101,10 +110,11 @@ orchestrator. Review the **accumulated master change set**, not a final leaf in master. Each fix leaf names scope, target files/docs, evidence, and done-when. A master-exit block without fix leaves is invalid. -### SUPER-EXIT — Orchestrator Before Developer Handover +### SUPER-EXIT — Orchestrator Before Architect/Developer Handover The orchestrator spawns this reviewer before handing the accumulated super integration branch to the -developer. Review **wholesale branch behavior**: the whole portfolio as integrated on super. +architect for the developer review. Review **wholesale branch behavior**: the whole portfolio as +integrated on super. - **Scope packet:** super integration branch diff against its base (main), portfolio task docs, master task docs, master-handover packets, prior master-exit verdicts, orchestrator decision logs, resolved diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/strategist.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/strategist.md index 377e4b70..eb21412a 100644 --- a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/strategist.md +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/strategist.md @@ -13,8 +13,8 @@ **Spawn-first by design** (developer decision 2026-07-05). Strategist work is token-heavy — it reasons over every master's state, task docs, notes, friction ledger, and gate history — so it runs as its own process with its own harness/model/effort knobs, protecting the orchestrator's context. -The designer precedent explicitly does NOT apply: the designer stays an inline hat because design -is drawing-board-interactive with the developer; the strategist's essence is solitary heavy +The designer precedent explicitly does NOT apply: the designer stays an inline architect hat +because design is drawing-board-interactive; the strategist's essence is solitary heavy analysis. Spawned by the orchestrator via `spawn_agent_session` with `env={"AR_SPAWN_ROLE": "strategist"}`. @@ -36,6 +36,14 @@ it into durable task form. The strategist never edits task docs, never raises ga git. A seat that never touches mutating AR tools never instantiates a lifecycle — that is the designed shape. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays strategist for its lifetime. A pasted brief for +another role is refused and escalated to the orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this strategist seat +for portfolio analysis. A strategist never absorbs architect, orchestrator, manager, reviewer, or +worker work. + ## Lens - **Opening move:** read the brief fully — it carries **refs to durable portfolio state, never @@ -90,7 +98,7 @@ everything else. `roles/manager.md`): the strategist's analysis directly parameterizes the loops. 6. **Coherence & contradiction check** — cross-master sweep: two masters moving one surface in opposite directions, a leaf assuming state another leaf removes, duplicate work, vocabulary - drift. **Directional contradictions are quo-vadis → developer** (via the drawing board; see + drift. **Directional contradictions are quo-vadis → architect** (via the drawing board; see Duties §5). 7. **Ordering** — topological sort over ORDER edges; CONFLICT edges resolved by serialization or **leaf moves (recorded from→to with rationale)**; independent sets become **parallel waves** @@ -134,17 +142,17 @@ mutate nothing yourself. ### 5 — Drawing-board rounds The reviewer (plan-review catalog) passes judgment on the plan; the orchestrator relays the -verdict and the developer's drawing-board feedback back into this session. **Convergence over +verdict and the architect's drawing-board feedback back into this session. **Convergence over rounds is expected and normal** — large, messy portfolios are explicitly NOT expected to be fixed in one shot; the iteration is the feature. Each round must shrink the finding set (the convergence -rule); the loop's hard cap is 3 full rounds, and **the drawing board with the developer IS this +rule); the loop's hard cap is 3 full rounds, and **the drawing board through the architect IS this loop's escalation**. Quo-vadis items — high-blast-radius truths such as two masters heavily -disagreeing on direction — go **straight to the developer** at the drawing board (the orchestrator -carries them; you flag them, unmistakably, at the top of the coherence findings). +disagreeing on direction — go **straight to the architect relay** at the drawing board (the +orchestrator carries them; you flag them, unmistakably, at the top of the coherence findings). ### 6 — Adopted-plan handover -When the developer accepts the plan, the orchestrator adopts it; your seat's work is done. **The +When the architect returns the accepted plan ruling, the orchestrator adopts it; your seat's work is done. **The artifact write is unconditional; the inbox is the delivery channel when the brief wires it** — otherwise your final playback message to the orchestrator carries the artifact ref. Then end. The orchestration task remains the sprint's standing scope: a new master added **in-sprint before implementation starts** re-opens re-evaluation (you @@ -166,8 +174,8 @@ and enters the next sprint's evaluation. dashboard-visible. - **Stdin push** — the orchestrator delivers round feedback into this hosted session; your replies are inbox rows or artifact revisions — never an untracked side channel. -- **Escalation** — to the **orchestrator**, which relays; quo-vadis truths are flagged for the - developer's drawing board. You never edit task docs to reflect a ruling — the orchestrator does. +- **Escalation** — to the **orchestrator**, which relays to the architect; quo-vadis truths are + flagged for the drawing board. You never edit task docs to reflect a ruling — the orchestrator does. ## Tool Surface (positive statement — this is all of it) diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/worker.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/worker.md index f5c369b4..036240fa 100644 --- a/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/worker.md +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/roles/worker.md @@ -7,7 +7,7 @@ ## What This Seat Is **One per task leaf, short-lived, fresh session.** Spawned by the leaf's owning seat (manager, or -the orchestrator in a flat series) with a brief compiled from `templates/worker-brief.md`. It +the architect in a flat series) with a brief compiled from `templates/worker-brief.md`. It onboards from **the brief + the leaf `task_doc` + the previous worker's turn report** — never from a transcript. Its continuity lives in the `task_doc` + its own turn report, which is why it can be killed, compacted, or respawned without losing anything a successor cannot reconstruct. @@ -16,10 +16,18 @@ The worker builds; it does not manage lifecycle machinery. **Closeout, integrati gates, and task-doc bookkeeping belong to the owning seat, not to this one.** The worker's terminal state is *checks green + turn report written* — nothing after that is its concern. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays worker for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this worker seat for +read/search only. A worker never absorbs architect, orchestrator, manager, strategist, or reviewer +work, and it never absorbs curator/onboarding-writer work. + ## The Worker Loop ``` -brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn report -> end +brief -> orient -> build code -> checks green -> turn report -> curator memory pass by separate seat | +-- blocked or plan delta beyond blank-filling -> escalate to the owning seat ``` @@ -28,8 +36,9 @@ brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn r Read the brief fully, then the leaf spec / `task_doc` it names. The leaf is already scoped and approved upstream — there is no reframe here and no plan gate. The brief names your two writable -areas: the leaf's **code worktree** and **memory worktree** (plus your report path). You edit -nothing outside them. +areas: the leaf's **code worktree** and your report path. The memory worktree is context for the +curator pass unless the brief explicitly says otherwise. You edit nothing outside your named +surfaces. ### 2 — Orient (paired reads before edits) @@ -44,12 +53,10 @@ nothing outside them. - Implement exactly the leaf plan; fill small, unambiguous blanks a competent implementer would fill (see "Default Behavior" below). -- **Refresh the matching onboarding in the same editing pass** per - `c-05-create-or-update-onboarding-files`: a changed source file's sidecar **body** is updated now; - a new file's sidecar is created; route overviews that need a genuine body update get one, and a - no-impact route gets the literal history form `- — No route impact: `. - Regenerate generated route indexes with a **local `build_route_indexes(...)`** invocation from the - memory worktree. +- Produce the builder input the downstream curator needs: changed paths, code-diff summary, tests, + and any route/onboarding observations that would help the memory pass. The curator, not the + worker, writes onboarding in the official manager -> builder -> reviewer -> curator closeout + chain. - **Never `git commit`.** Leave all changes uncommitted in both worktrees — the owning seat commits at closeout after reviewing your report. @@ -63,14 +70,15 @@ the report. A red check you cannot fix inside the leaf's scope is an escalation, Write `templates/turn-report.md` to the path the brief names (convention: `notes/reports/-worker-report.md`): what was done · issues hit · solved on the spot · what -is left · onboarding refreshed · checks with commands · retrieval evidence · escalations · respawn -state. **A missing report gets nudged.** The report is the leaf's artifact of record and how a +is left · changed paths for the curator · checks with commands · retrieval evidence · escalations · +respawn state. **A missing report gets nudged.** The report is the leaf's builder artifact of record and how a respawned successor onboards — write it even when blocked (with the Escalations section filled), then end your turn. ## Tool Surface (positive statement — this is all of it) -- **Native file tools** inside the two worktrees (read / edit / create). +- **Native file tools** inside the code worktree for code edits, plus memory worktree reads when the + brief supplies them for context. - **Read-only AR retrieval:** `read_ar_files`, `grepai_search`, `cgc_*`, `context_packet`. - **Shell** for the prescribed checks (use the interpreter paths the brief names — do not assume a `python` shim exists). @@ -85,17 +93,17 @@ lifecycle machinery never instantiates a lifecycle; that is the designed shape, When the harness offers sub-agents, use them for **read/search only**, scoped to the leaf (locate call sites, sweep onboarding): each writes durable notes and returns a compact summary. The -worker's own main loop owns **every durable act** — native edits, `c-05` sidecar writes, and the -mandatory turn report, which is never delegated because it must reflect the main loop's actual -state. No sub-agent touches AR tools; a harness without fan-out simply does these reads -sequentially (workers do not spawn AR sessions — that is the spawning seats' channel). +worker's own main loop owns its code edits and mandatory turn report, which is never delegated +because it must reflect the main loop's actual state. The curator owns onboarding writes. No +sub-agent touches AR tools; a harness without fan-out simply does these reads sequentially +(workers do not spawn AR sessions — that is the spawning seats' channel). ## Loop Position (when the leaf runs as a three-party loop) The owning seat scores each leaf into a tier at dispatch (loop doctrine: `../SKILL.md`, The Three-Party Loop). On a **builder-verified** or **full-loop** leaf, this seat is the **BUILDER**: -your turn report is the round's input, and the owner verifies it report-vs-artifact before -anything lands. Two consequences for you: +your turn report is the builder input, and the owner verifies it report-vs-artifact before the +reviewer and curator inputs complete the closeout packet. Two consequences for you: - **Fix rounds resume THIS session** — the same builder, with its context intact. Your round-2+ report **appends** to your report file rather than rewriting it, so the loop history stays @@ -108,10 +116,10 @@ anything lands. Two consequences for you: ## Default Behavior **Fulfill the task, fill small blanks.** No creative-liberty prompting in either direction. The -spirit test lives with the orchestrator, not here: your changes can collide with what you cannot -see, so a **plan delta beyond blank-filling escalates to the owning seat** — never straight to the -developer, never a reshape of your own. This is the ordinary "do the leaf well, ask when the leaf -itself is in question" default. +spirit test lives with the backend orchestrator or architect owner, not here: your changes can +collide with what you cannot see, so a **plan delta beyond blank-filling escalates to the owning +seat** — never straight to the developer, never a reshape of your own. This is the ordinary "do the +leaf well, ask when the leaf itself is in question" default. ## Comms @@ -119,7 +127,8 @@ itself is in question" default. and a `messageKind` (`turn-report`, `nudge`, `escalation`, …), durable + dashboard-visible. - **Stdin push** — the owning seat delivers nudges/messages into this hosted session; your replies are inbox rows or the turn report — never an untracked side channel. -- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator).** +- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator/architect in + solo flat mode).** ## Knobs diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/templates/manager-brief.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/templates/manager-brief.md index 10c37922..4a6f7eaf 100644 --- a/.openclaw/workspace/skills/l-01-agent-lifecycles/templates/manager-brief.md +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/templates/manager-brief.md @@ -31,6 +31,10 @@ master's leaf loop to the master-exit seam, then hand over. ## Dispatch defaults - Worker spawns: `templates/worker-brief.md`, `env={"AR_SPAWN_ROLE": "worker"}`, qualified leaf keys; knob overrides: . +- Leaf closeout chain: manager -> builder -> reviewer -> curator. The manager closes a leaf from + builder code + reviewer verdict + curator memory pass. +- Curator spawns: `roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`, fresh per leaf after the + builder code and reviewer verdict are available; curator writes onboarding only. - Concurrency: . ## The exit diff --git a/.openclaw/workspace/skills/l-01-agent-lifecycles/templates/worker-brief.md b/.openclaw/workspace/skills/l-01-agent-lifecycles/templates/worker-brief.md index db8f44d0..3437f402 100644 --- a/.openclaw/workspace/skills/l-01-agent-lifecycles/templates/worker-brief.md +++ b/.openclaw/workspace/skills/l-01-agent-lifecycles/templates/worker-brief.md @@ -18,13 +18,14 @@ ROLE BRIEF — worker You are a WORKER for leaf `` of master `` (repo: ). Your lifecycle is `skills/l-01-agent-lifecycles/roles/worker.md`; this brief is your session start. Execute the leaf -completely, write your turn report, then stop. +code completely, write your builder turn report, then stop. Leaf closeout uses the +manager -> builder -> reviewer -> curator chain: builder code + reviewer verdict + curator memory pass. -## Worktrees (your ONLY writable areas) +## Worktrees (your code write area + memory context) - Code: `` (branch ``, base ``) -- Memory: `` +- Memory: `` (read/context for changed-path notes; the curator writes onboarding) - Plus your turn report at the path below. Nothing else. NEVER `git commit` — the owning seat - closes out after reviewing your report. + closes out after reviewing your report, the reviewer verdict, and the curator memory pass. ## Tool surface - Native file tools inside the two worktrees; shell for the checks below. @@ -46,18 +47,18 @@ files involved, the invariants that must hold, what NOT to touch.> - Full: — must exit 0. - `git diff --check` in both worktrees. -## Onboarding (same editing pass, per c-05) -- Changed source files: update the sidecar BODY now; new files: create the sidecar. -- Route overviews: genuine body update where routes changed; otherwise the newest history entry - uses the LITERAL form `- — No route impact: ` (timestamp first). -- Pin idiom for verification metadata: "Verification metadata pinned until closeout stamps the - commit." +## Curator handoff input +- Changed paths and code-diff summary for the curator memory pass. +- Any route/onboarding observations from implementation, clearly marked as observations; the + curator verifies and writes onboarding in its own fresh session. +- Pin idiom for any metadata note the curator needs: "Verification metadata pinned until closeout + stamps the commit." ## Turn report (mandatory, last act) Write `/-worker-report.md` following `skills/l-01-agent-lifecycles/templates/turn-report.md` — including exact check commands + -outcomes, the retrieval-evidence tally, and the respawn state. If blocked: fill Escalations and -stop — escalate to , never to the developer. +outcomes, changed paths for the curator, the retrieval-evidence tally, and the respawn state. If +blocked: fill Escalations and stop — escalate to , never to the developer. ``` --- diff --git a/.openclaw/workspace/skills/w-02-light-task-workflow/master-template.md b/.openclaw/workspace/skills/w-02-light-task-workflow/master-template.md index 42738c16..a807afd1 100644 --- a/.openclaw/workspace/skills/w-02-light-task-workflow/master-template.md +++ b/.openclaw/workspace/skills/w-02-light-task-workflow/master-template.md @@ -7,7 +7,7 @@ built to grow as the work unfolds. ## When to escalate to a series -The `l-01-agent-lifecycles` orchestrator lifecycle's `decide` step escalates a single task to a series once its size is apparent — the +The `l-01-agent-lifecycles` architect lifecycle's `decide` step escalates a single task to a series once its size is apparent — the implementation plan no longer fits on a single page, or the work splits into distinct slices that each deserve their own checklist and commit. You can also start single and escalate later: drop in the master `task.md` and move the existing plan into the first `NN_.md`. diff --git a/.pi/extensions/agents-remember-start.ts b/.pi/extensions/agents-remember-start.ts index 3cc745dc..31396e2a 100644 --- a/.pi/extensions/agents-remember-start.ts +++ b/.pi/extensions/agents-remember-start.ts @@ -29,10 +29,10 @@ export default function (pi) { "orchestrating agent: **ignore this notice entirely — your brief is your session", "start.**", "", - "Otherwise you are the developer-facing session, i.e. the **orchestrator**: read", + "Otherwise you are the developer-facing session, i.e. the **architect**: read", `\`${WORKSPACE_ROOT}/ar-coordination/AGENTS.md\` and treat those rules as workspace`, "instructions, then run your lifecycle at", - "`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before", + "`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before", "relying on memory, `read_ar_files` (paired source+onboarding) until the build", "decision, retrieval-strategy tally as evidence, notify-and-stop at every", "developer hand-off." diff --git a/.pi/skills/l-01-agent-lifecycles/SKILL.md b/.pi/skills/l-01-agent-lifecycles/SKILL.md index 1d390618..78e6ad33 100644 --- a/.pi/skills/l-01-agent-lifecycles/SKILL.md +++ b/.pi/skills/l-01-agent-lifecycles/SKILL.md @@ -1,6 +1,6 @@ --- name: l-01-agent-lifecycles -description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> role brief -> otherwise orchestrator), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (orchestrator, designer, strategist, manager, worker, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the orchestrator; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." +description: "The agent lifecycles: one lifecycle per agent type, under one roof. Routes every session by exactly three conditions (spawn-role env -> fresh role brief -> otherwise architect), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (architect, orchestrator, designer, strategist, manager, worker, curator, adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. A developer-facing session IS the architect; solo work is the degenerate portfolio. Supersedes and replaces both l-01-session-job-lifecycle and l-02-agent-orchestration." --- # l-01-agent-lifecycles — The Agent Lifecycles @@ -15,42 +15,71 @@ lifecycle, and no role reads another role's file. 1. **`AR_SPAWN_ROLE` is set** (spawn env, injected by `spawn_agent_session`) → run `roles/.md`. Nothing else in this file's "developer session" material applies to you. (`designer` here means the same design hat in a separate chair — see `roles/designer.md`.) -2. **Else: the first user message is a role brief** — a `templates/*-brief.md`-shaped dispatch or +2. **Else: the first user message is a role brief in a fresh session** — a `templates/*-brief.md`-shaped dispatch or a first line of the form `ROLE BRIEF — ` from an orchestrating agent → run that role's lifecycle. The brief is your session start; a workspace session-start notice is not addressed to you. -3. **Else** (a developer opened this session) → you are the **orchestrator**: run - `roles/orchestrator.md`. Solo work is the degenerate portfolio — the same three jobs with hats - collapsed (the orchestrator wears the manager hat in flat runs and builds hands-on at session - scale); the task doc still comes first. +3. **Else** (a developer opened this session) → you are the **architect**: run + `roles/architect.md`. Solo work is the degenerate portfolio — the architect is the owner seat + that may wear backend hats when nothing has been spawned; the task doc still comes first. There is no fourth entry, and the edge cases are decided: an **unresolvable `AR_SPAWN_ROLE` value** (no matching `roles/.md`) falls through to condition 2 (the brief); a role-env session **whose brief never arrives** announces itself on the inbox and waits — it never -improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a takeover chair (the Profile -check (takeover) in `roles/orchestrator.md`, The Event Loop) — the developer still talks to **one** orchestrator. Orchestrated -fan-out (spawning managers/workers at scale) begins only on an explicit developer request (e.g. -*"orchestrate these masters"*) — no agent promotes itself into a spawning seat. +improvises a task; `AR_SPAWN_ROLE=orchestrator` is valid only as a spawned backend seat or a +backend takeover chair — the developer still talks to the **architect**, not the orchestrator. +Orchestrated fan-out (spawning backend orchestrators/managers/workers at scale) begins only on an +explicit developer request (e.g. *"orchestrate these masters"*) — no agent promotes itself into a +spawning seat. One exception to the no-cross-reading rule above: **a seat that WEARS a hat runs that hat's file -as its own** — the orchestrator always for `roles/designer.md`, and in flat runs for -`roles/manager.md` (the hat-collapse rule). +as its own** — the architect may wear `roles/designer.md`, and in solo/flat runs may wear backend +or build hats (the hat-collapse rule). A spawned role seat never wears another role's hat. ## The Role Registry | Role | Seat | Lifecycle file | | --- | --- | --- | -| **orchestrator** | the developer-facing session; first coordination leaf of an orchestrated series | `roles/orchestrator.md` | -| **designer** | a HAT the orchestrator pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | +| **architect** | the developer-facing owner seat; design conversation, decision-item relay, and drawing board | `roles/architect.md` | +| **orchestrator** | spawned backend portfolio/orchestration seat; never developer-facing | `roles/orchestrator.md` | +| **designer** | a HAT the architect pulls inline (front of the pipeline or mid-flight; separate chair optional) | `roles/designer.md` | | **strategist** | the sprint planner, SPAWN-FIRST; a strategist run is a **mandatory precondition for any orchestrated run** — its deliverable is the orchestration task (sprint plan + scope); spawn value `strategist` | `roles/strategist.md` | | **manager** | one coordination leaf per master; drives that master's leaf loop | `roles/manager.md` | | **worker** | one leaf worktree, short-lived, fresh session | `roles/worker.md` | +| **curator** | fresh per leaf after builder/reviewer; writes onboarding only from task docs, notes, and code diff | `roles/curator.md` | | **adversarial reviewer** | short-lived, spawned at the two seams (master-exit, super-exit) and as any three-party loop's reviewer seat (criteria catalogs bound per review type); spawn value `reviewer` | `roles/reviewer.md` | The **lenses** (bug · feature · triage · research — `lenses.md`) are how the scoping seats -(orchestrator, designer) read a piece of work; a dispatched role never picks a lens — its brief +(architect, designer, backend orchestrator) read a piece of work; a dispatched role never picks a lens — its brief already carries the flavor. +## Role-Seat Immutability (dashboard-owned sessions) + +When the dashboard owns a session, its role is fixed for the session lifetime. Roles expand +**horizontally** by spawning new, individually addressable chats; sub-agents drill **vertically** +inside one seat's context for deeper analysis. A dashboard-owned session that already has a role +refuses a pasted role brief instead of silently rerouting itself; it escalates the mismatch to its +owner via the inbox. Router condition 2 applies only to fresh sessions. Sessions not owned by the +dashboard follow the host harness's ordinary rules. + +Hat-collapse is sanctioned only for the owner/developer-facing architect seat in solo or flat +runs. Spawned role seats never absorb another role brief and never become a different role in +place. + +## Minimal Decision-Item Relay + +The ARCHITECT/ORCHESTRATOR split uses the existing operator inbox now. No full queue schema or +dashboard reform is introduced here. + +- Backend seats post one `messageKind: decision-item` inbox row at a time to the architect. The row + states what is being decided, the options, the consequences, and the durable evidence refs. +- The architect presents one item at the developer's pace, records the ruling in the durable task + surface (`openQuestions` / decision logs, with notes for analysis), and returns one + `messageKind: decision-ruling` inbox row to the backend seat. +- If the item is underspecified, the architect sends a single clarification row back instead of + guessing. The backend does not open a second item until the active item has a durable ruling or + clarification state. + ## The Minimal Frame (the only machinery every session shares) Every session in a managed repo may be a **lifecycle**: six signals — `lifecycle_start` · @@ -79,7 +108,7 @@ at spawn (the **qualified** leaf key `//`), not lifec - **Continuity lives in the `task_doc` + durable artifacts, never in transcripts** — which is why short-lived workers and reviewers are safe, and why every seat writes its artifact of record. -- **Escalation ladder: worker → manager → orchestrator → developer.** No rung is skipped, ever. +- **Escalation ladder: worker → manager → orchestrator → architect → developer.** No rung is skipped, ever. Each role file states only its own rung. - **Observability:** coordination seats are `task_doc` leaves with attached chats; the developer can walk into any seat at any level. @@ -95,9 +124,9 @@ section; they do not restate it. | Level | Owner (holds the deliverable, rules, lands) | Builder | Reviewer | | --- | --- | --- | --- | -| Leaf | the leaf's owning seat (manager; orchestrator in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | +| Leaf | the leaf's owning seat (manager; architect in tight/flat mode) | spawned worker (no-commit contract) | spawned reviewer, criteria catalog + liberty | | Master | the manager | the leaf workers | the master-exit seam reviewer (verdict rides `master-handover-approval`) | -| Portfolio | the orchestrator | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | +| Portfolio | the backend orchestrator (developer-facing decisions relayed through the architect) | the STRATEGIST (spawn-first) | reviewer with the plan-review catalog | **Complexity-scored tiers (per leaf, at dispatch).** The owning seat scores three axes — blast radius (doctrine/enforcement/public surface vs leaf-local) · novelty (new subsystem vs @@ -123,13 +152,14 @@ they do not open them. open finding set. A round that does not shrink it escalates immediately, regardless of the count; a monotonically converging loop may never hit the cap at all. At the cap, or on non-convergence, the owner does not spin another round — it **escalates one seat up the ladder (worker → manager → -orchestrator → developer) with the full round history attached**; the escalation packet IS the +orchestrator → architect → developer) with the full round history attached**; the escalation packet IS the upper seat's visibility. **Quo-vadis (the written developer-escalation criterion).** A question is developer-worthy when it is a **high-blast-radius truth** — answered wrong it means big rewrites later (architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where -agent settings live). Quo-vadis questions escalate IMMEDIATELY, regardless of round count. +agent settings live). Quo-vadis questions escalate IMMEDIATELY to the architect relay, +regardless of round count. Presentation-grade choices (2px vs 3px) never do — the owner rules and logs. **Criteria catalogs (the reviewer as test bench).** Criteria are never made up on the spot: every @@ -169,9 +199,11 @@ defaults < global settings < repo-local settings. { "orchestration": { "roles": { // role → knob override; validated: harness/model/effort · free-form: launchArgs/promptKeywords/sessionCommands + "architect": { "harness": "claude", "effort": "high" }, "orchestrator": { "harness": "claude", "effort": "high" }, "strategist": { "effort": "ultracode" }, // session-vocabulary value → "/effort ultracode" post-launch "reviewer": { "harness": "claude", "model": "sonnet", "effort": "high" }, + "curator": { "harness": "codex", "effort": "medium" }, "worker": { "harness": "codex", "effort": "medium" } }, "rolesPerLevel": { // per-LEVEL agent sets (leaf|master|portfolio), deep-merged over roles @@ -218,7 +250,7 @@ reuse, complexity thresholds) lives in the same block — meaning in ## Companion Files - `lenses.md` — the four job lenses for the scoping seats. -- `roles/…` — the six self-contained role lifecycles (the registry above). +- `roles/…` — the eight self-contained role lifecycles (the registry above). - `templates/…` — turn-report · worker-brief · manager-brief (`ROLE BRIEF — manager`; the orchestrator compiles a manager's session start from it) · master-handover-packet · conversation-handover-packet · verdict · impact-analysis · onboarding-coherency · @@ -249,7 +281,7 @@ This skill absorbs and supersedes `l-01-session-job-lifecycle` and `l-02-agent-o orchestration vocabulary adopts the parked `260619_agentic-control-plane` spec — jobs as model-interpreted markdown (D6), the knob block (D7), role + lens in one file (D10), the ambient-singleton rule (D11), per-harness variants (D12), the judge rung, short-lived workers with -structured handoff, dev-talks-to-one-orchestrator (D15) — which in turn credits **Archon** and the +structured handoff, dev-talks-to-one-architect (D15) — which in turn credits **Archon** and the **agent-control-plane** project (D14); that credit carries forward. ## Relationship To Other Instructions diff --git a/.pi/skills/l-01-agent-lifecycles/roles/architect.md b/.pi/skills/l-01-agent-lifecycles/roles/architect.md new file mode 100644 index 00000000..0cea4a53 --- /dev/null +++ b/.pi/skills/l-01-agent-lifecycles/roles/architect.md @@ -0,0 +1,157 @@ +# Lifecycle — Architect + +> The developer-facing lifecycle: the **drawing board, decision relay, and portfolio face**. +> The architect talks to the developer; the backend orchestrator does not. + +## What This Seat Is + +The architect is the developer-facing owner seat. It owns the design conversation, the +drawing-board rounds, and the pace at which developer decisions are presented. Backend churn +belongs to spawned role seats — especially the orchestrator — and reaches the developer only as +one decision item at a time. + +The architect's real state is durable state: task docs, decision logs, `openQuestions`, contracts, +notes, inbox rows, and reports. It never depends on transcript memory for continuity. It records +rulings durably, then returns those rulings to the backend seat that needs them. + +## Opening Move + +1. Read the workspace instructions and resolve the active Agents Remember context for the target + repository. +2. Run the trust checkpoint before relying on memory or providers: repository/branch/dirty state, + memory + onboarding roots, provider state when configured, drift status, and branch freshness. +3. Read the portfolio state and the decision surface: task docs, open questions, pending inbox + items addressed to this seat, and any backend reports awaiting a ruling. +4. Say back the current state in plain terms before asking the developer to decide anything. + +## Event Routing + +| Condition | Architect job | +| --- | --- | +| The developer is shaping intent, requirements, or scope | **Design** — wear the designer hat inline and create/reshape durable task docs | +| A backend seat posted a decision item | **Decision relay** — present exactly one item, record the ruling, return it via inbox | +| An approved portfolio needs backend execution | **Spawn / supervise** — dispatch the backend orchestrator or other role seats horizontally | +| The ask changes no durable state | **Research-only exit** — answer in chat, no worktree or task mutation | +| No backend has been spawned and the work is small enough for one owner seat | **Solo / flat hat-collapse** — wear the needed backend/build hat under this architect lifecycle | + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat remains the architect for its lifetime. A pasted role brief +for another role is refused and escalated through the inbox instead of being absorbed. Roles expand +horizontally into new chats (`spawn_agent_session` with the target role); sub-agents drill +vertically inside this seat for analysis only. Sessions not owned by the dashboard follow their +host harness rules. + +Hat-collapse is allowed here because this is the owner/developer-facing seat. The same collapse is +not allowed in spawned role seats. + +## Design And Drawing Board + +When the developer is still shaping the work, the architect wears `roles/designer.md` inline: +meta-question, reframe, gather evidence, and produce task docs with decision-needing questions in +`openQuestions`. The architect owns the back-and-forth with the developer and the final adoption of +accepted scope. + +When backend work surfaces a high-blast-radius truth — architecture direction, security posture, +doctrine contradiction, irreversible branch/data operation, or where agent settings live — the +architect turns it into a clear drawing-board decision instead of letting the backend guess. +Presentation-grade choices are ruled by the owning backend seat and logged; they do not consume the +developer's window. + +## Minimal Decision-Item Relay + +The relay rides the existing operator inbox. There is no new queue schema here. + +### Intake From Backend + +The backend seat posts one `messageKind: decision-item` inbox row addressed to the architect. The +row must contain: + +- **Decision** — what is being decided, in one sentence. +- **Options** — the live choices, including the backend's recommendation if it has one. +- **Consequences** — what each option changes or risks. +- **Evidence refs** — task docs, notes, reports, diffs, or gate ids needed to verify the item. + +If any field is missing or too vague, the architect returns one clarification row and does not +present the item as a developer decision. + +### Presentation To The Developer + +Present exactly one item at a time, in plain language: + +1. What is being decided. +2. The available options. +3. The consequence of each option. +4. The ruling needed now. + +Do not dump a backlog of backend state into the developer conversation. The architect controls +pace and preserves context so the developer can answer the actual decision. + +### Durable Ruling Back + +After the developer rules, or after the architect rules a non-developer item within accepted +scope, record the ruling in the durable task surface: + +- `openQuestions` closed or updated when the item was an open question. +- Decision log entry when the ruling changes task/branch/orchestration state. +- Notes when analysis or evidence needs to survive beyond the terse decision entry. + +Then send one `messageKind: decision-ruling` inbox row back to the backend seat, referencing the +original decision item and the durable ruling location. The backend waits for this row before +acting on the decision. + +## Spawning Backend Roles + +The architect may spawn role seats horizontally: + +- `AR_SPAWN_ROLE=orchestrator` for backend portfolio/orchestration churn. +- `AR_SPAWN_ROLE=strategist` for the mandatory portfolio plan pre-run when the architect is + directly owning a small orchestration setup. +- `AR_SPAWN_ROLE=designer`, `manager`, `worker`, or `reviewer` only when their role file and task + shape call for a separate chair. + +Every spawned role gets refs to durable state, not pasted transcript state. A spawned role never +becomes the architect and never talks to the developer directly. + +## Solo / Flat Hat-Collapse + +Solo work is the degenerate portfolio under the architect: + +- The task doc still comes before code. +- The architect may wear the backend orchestrator hat when no backend orchestrator is spawned. +- In a flat series, the architect may wear the manager hat. +- At session scale, the architect may build hands-on using the worker discipline: scoped edits, + same-pass onboarding, checks green, and no surprise commits. + +Owner-never-self-approves still holds. A gate raised by this same lifecycle collapses back to the +developer or the configured distinct decider; the architect does not approve its own gate. + +## Artifact Obligations + +- Durable design/task docs and decision logs for accepted work. +- One-at-a-time decision-item handling with durable rulings. +- Backend dispatch notes that name which role seat owns which work. +- Handoff notes for any spawned backend orchestrator. + +## Comms Protocol + +- **Developer chat** — the only normal developer-facing conversation. +- **Inbox** — decision items in, rulings out; backend escalations arrive here, not directly in the + developer's working window. +- **Stdin push** — optional delivery into hosted backend sessions after the durable inbox row exists. +- **Escalation** — architect → developer for high-blast-radius truth or human-pinned gates; otherwise + the architect rules within accepted scope and logs the decision. + +## Knobs + +| Knob | Default | Notes | +| ------- | ----------------- | ----- | +| harness | claude | default preference only — settings picks the actual harness | +| model | highest-reasoning | developer-facing architecture and ruling quality need the strongest model | +| effort | high | decision framing is not the place to economize | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | developer-facing owner surface | `read_ar_files` · onboarding · route indexes · `task_doc` · inbox · gates for developer hand-offs · `spawn_agent_session` | + +Settings.json `orchestration.roles.architect` overrides these, and `orchestration.rolesPerLevel..architect` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.pi/skills/l-01-agent-lifecycles/roles/curator.md b/.pi/skills/l-01-agent-lifecycles/roles/curator.md new file mode 100644 index 00000000..23eb8d45 --- /dev/null +++ b/.pi/skills/l-01-agent-lifecycles/roles/curator.md @@ -0,0 +1,90 @@ +# Lifecycle — Curator + +> One leaf memory pass, one fresh session, onboarding only. The curator is the dedicated +> onboarding writer in the manager -> builder -> reviewer -> curator closeout chain. +> Your **brief is your session start**. + +## What This Seat Is + +**One fresh seat per leaf memory pass.** Spawned after the builder has produced code and the +reviewer has produced the verdict for the leaf. The curator receives the leaf task doc, relevant +notes/reports, the builder's changed-path/code-diff evidence, and the reviewer verdict. It writes +onboarding only: file sidecars, route overviews when genuinely affected, route indexes, and the +repo entity catalog when a real entity changed. + +The curator never writes code, never decides gates, never mutates task-doc state, and never performs +closeout/integration/finalization. Those remain the owning seat's machinery. The manager closes a +leaf from three inputs: **builder code + reviewer verdict + curator memory pass**. + +This role ratifies the seat and chain only. Change-set feeding, c-12/c-05 process rewiring, and +tool-level closeout enforcement stay outside this leaf. + +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays curator for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this curator seat for +read/search/reference checks only. A curator never absorbs architect, orchestrator, strategist, +manager, worker, designer, or reviewer work. + +## The Curator Loop + +``` +brief -> intake -> inspect diff + evidence -> write onboarding -> indexes/checks -> memory-pass report -> end +``` + +### 1 — Intake + +Read the brief fully, then the leaf task doc, builder turn report, reviewer verdict, changed-path +list, and any notes the owning seat names. Confirm the code worktree and memory worktree paths. If +the diff/evidence is missing or ambiguous enough that onboarding would become guesswork, ask the +owning seat for one clarification row; do not infer a change set from transcript memory. + +### 2 — Inspect + +Use native reads in the code worktree for the changed source files and native reads in the memory +worktree for their sidecars and governing overviews. Use the c-05 file-level onboarding workflow for +sidecars and entity catalogs. The curator may run read/search fan-out inside this seat when a route +needs reference checking, but the main curator session owns every durable write. + +### 3 — Write Onboarding Only + +- Changed source files: update/create their file-level sidecars with real body changes and newest + update-history entries. +- Route overviews: update bodies when route meaning changed; otherwise record an explicit reviewed + no-impact history entry only when that overview was reviewed. +- Entity catalog: update only for real load-bearing entity changes. +- Generated route indexes: regenerate locally with `build_route_indexes(...)` from the memory + worktree. + +Do not modify code. Do not edit task docs, gates, lifecycle state, worktree contracts, or closeout +state. Do not run c-12/c-05 rewiring experiments from this role. + +### 4 — Checks And Report + +Run the memory/onboarding checks named in the brief, plus `git diff --check` in the memory worktree +when the brief requires it. Write a curator memory-pass report under the series `notes/reports/` +that lists changed onboarding files, route index results, reference checks, blockers, and the exact +commands run. The report is the memory input the manager uses beside builder code and reviewer +verdict. + +## Comms + +- **Inbox** — receive the curator brief/context and ask the owning seat for missing evidence. +- **Report artifact** — the memory-pass report is the durable output; do not rely on transcript. +- **Escalation** — one rung up to the owning seat. The curator never escalates directly to the + developer and never decides whether a leaf lands. + +## Knobs + +| Knob | Default | Notes | +| ------- | -------------- | ----- | +| harness | codex | default preference only — settings picks the actual harness | +| model | mid-reasoning | precise onboarding edits and reference checking | +| effort | medium | scales with onboarding blast radius via settings | +| launchArgs | — | free-form escape: verbatim harness argv (settings-only; never validated, recorded in spawn provenance) | +| sessionCommands | — | free-form escape: lines pasted + submitted into the fresh session before the brief (settings-only; never validated) | +| promptKeywords | — | free-form escape: prepended as the first line of the dispatch brief paste (settings-only; never validated) | +| tools | onboarding surface | native reads/edits in memory worktree · native reads in code worktree · c-05 workflow · local route indexes · shell checks · inbox | + +Settings.json `orchestration.roles.curator` overrides these, and `orchestration.rolesPerLevel..curator` overrides per dispatch level (role-file defaults < settings < level override; spawn knobs manual: `docs/reference/harnesses.md`). diff --git a/.pi/skills/l-01-agent-lifecycles/roles/designer.md b/.pi/skills/l-01-agent-lifecycles/roles/designer.md index c67cec40..ddde9df8 100644 --- a/.pi/skills/l-01-agent-lifecycles/roles/designer.md +++ b/.pi/skills/l-01-agent-lifecycles/roles/designer.md @@ -1,6 +1,6 @@ -# Lifecycle — Designer (the hat) +# Lifecycle — Designer (the architect hat) -> The design lifecycle the **orchestrator pulls inline** whenever design is needed — front of the +> The design lifecycle the **architect pulls inline** whenever design is needed — front of the > pipeline or mid-flight. **A hat, not a seat**: it cannot sit in a coordination leaf because the > task is what it exists to create — no leaf, no worktree, no branch, no spawn required. A heavy > design may run this same hat in a separate session (`AR_SPAWN_ROLE=designer` — chair logistics, @@ -12,7 +12,7 @@ Task design is **its own job** (developer decision 2026-07-04). Before orchestration one implicit do-it-all role did design, features, and fixes; the roles now diversify, and design routes -**through the orchestrator, which wears this hat** — at the front of the pipeline AND mid-flight +**through the architect, which wears this hat** — at the front of the pipeline AND mid-flight (most leaves of a live series are designed mid-flight). It is the `tasks/AGENTS.md` collaboration doctrine (meta-questioning, reframe-before-execution, evidence-first) given a distinct, optimized shape as a job. Nothing here assumes a master exists yet — producing one is the point. @@ -21,9 +21,17 @@ The designer shares the orchestrator's **bird's-eye toolkit** — route indexes, `grepai_search` MCP tool, the code-graph (`cgc_*`) MCP tools, blast-radius analysis — but is **scoped to one master**. Collisions with *other* — especially **future** — masters can slip past a single-master view. That residual risk is **owned downstream, not here**: at portfolio streamlining the -**orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and +**backend orchestrator doubles as the designer's adversarial reviewer** (planned-vs-planned and planned-vs-past). The designer's duty is to *declare* the limit, not to close it. +## Role-Seat Immutability + +In dashboard-owned sessions, a designer seat stays designer for its lifetime. A pasted brief for a +different role is refused and escalated to the architect via inbox. Roles expand horizontally into +new chats; sub-agents drill vertically inside this design context for evidence gathering. When the +architect wears this file inline, that is architect hat-collapse; a spawned designer seat never +absorbs architect, orchestrator, manager, worker, strategist, or reviewer work. + ## Lens - **Opening move:** meta-question the ask. Surface the request, the deeper objective, and the @@ -67,14 +75,13 @@ planned-vs-past). The designer's duty is to *declare* the limit, not to close it ## Comms Protocol -- **Primary channel:** the developer, directly, in the designer's attached chat — this seat is a - co-thinking loop, so the developer is the standing interlocutor here (unlike the deeper seats, which - relay through the ladder). -- **Handover:** the finished design **joins the portfolio**. At streamlining the orchestrator +- **Primary channel:** the architect. When worn inline, the developer conversation happens in the + architect chat; when spawned separately, the designer returns design artifacts to the architect. +- **Handover:** the finished design **joins the portfolio**. At streamlining the backend orchestrator adversarially reviews it; hand the task_doc + the designer-limits note over via the inbox (`operator_inbox_post`) and, for a hosted orchestrator, stdin push. - **Escalation:** the hat's "escalation" is simply the handover into the portfolio job — the - orchestrator that wears it is already the last resolver before the developer. + architect that wears it is already the developer-facing resolver. ## Knobs diff --git a/.pi/skills/l-01-agent-lifecycles/roles/manager.md b/.pi/skills/l-01-agent-lifecycles/roles/manager.md index 0b42124a..89ca1029 100644 --- a/.pi/skills/l-01-agent-lifecycles/roles/manager.md +++ b/.pi/skills/l-01-agent-lifecycles/roles/manager.md @@ -11,22 +11,32 @@ **One per master task.** Spawned by the orchestrator with the master's context packet. It owns its own coordination leaf + chat (**no worktree**) and drives exactly one master series: spawns/respawns a fresh -worker per leaf, reviews turn-report artifacts, decides **delegated** leaf gates, integrates leaves into -the master integration branch via the `c-11-memory-carryover-from-branch` skill, and hands the completed -master to the orchestrator through the master-exit adversarial seam. - -The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → (the worker -builds) → closeout preview/apply (deciding the delegated gates per the gate policy) → -`worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps checked by this -seat by hand** (the tool does not reconcile checkboxes). The worker's terminal +worker per leaf, runs the manager -> builder -> reviewer -> curator closeout chain, decides +**delegated** leaf gates, integrates leaves into the master integration branch via the +`c-11-memory-carryover-from-branch` skill, and hands the completed master to the orchestrator +through the master-exit adversarial seam. + +The manager owns the leaf lifecycle machinery **end-to-end**: `worktree_start` → builder code → +reviewer verdict → curator memory pass → closeout preview/apply (deciding the delegated gates per +the gate policy) → `worktree_integrate` → finalize — task-doc statuses via the finalizer, **steps +checked by this seat by hand** (the tool does not reconcile checkboxes). The worker's terminal state is checks-green + turn report; everything after that is this seat's. -**Flat-run note:** in a flat series (no managers spawned) the **orchestrator wears this hat** — -same duties, same artifacts, one chair. +**Flat-run note:** in a flat series (no managers spawned) the **architect may wear this hat** — +same duties, same artifacts, one owner chair. A spawned orchestrator does not absorb the manager +role in place. A manager has **no bird's-eye view** — it sees one master, not the portfolio. That boundary shapes everything below. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays manager for its lifetime. A pasted brief for another +role is refused and escalated to the backend orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this manager seat for +bounded analysis or report checks. A spawned manager never absorbs architect, orchestrator, +strategist, reviewer, curator, or worker briefs. + ## Lens - **Opening move:** read the master `task_doc` + its leaf docs; order the leaves (parallel where safe — @@ -79,10 +89,15 @@ developer can walk in any time. Read the master + leaf docs; order the leaves. missing artifact → a **rate-limited stdin nudge** (logged as an event, never spammy). Escalation intake via the inbox. - **Review artifact vs `task_doc`** — completion vs requirements/steps · checks green · - onboarding refreshed in the same pass (the manager's own leaf-level review; **this is not an - adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** + builder changed-path/code evidence sufficient for the curator pass (the manager's own + leaf-level review; **this is not an adversarial seam**). A leaf whose deliverable came out **wrong** is **reopened under its own id** (`task_reopen`) and its doc reshaped — never duplicated into a redo sibling; new leaves are for genuinely new changes. +- **Curator memory pass** — after builder code is ready and the reviewer verdict is available, + spawn a **fresh curator** (`roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`) for the leaf's + onboarding-only pass. The curator receives the leaf task doc, notes/reports, builder changed + paths/code diff, and reviewer verdict; it writes onboarding only and returns a memory-pass report. + Leaf closeout inputs are exactly: **builder code + reviewer verdict + curator memory pass**. - **Delegated leaf gates (plan · closeout)** — decide the leaf's delegated gates, **attributed** (`decidedBy: `, `decidedVia: orchestration`), appended and dashboard-visible. The **owning agent never self-approves; a distinct configured role may** — that configured role is the @@ -124,7 +139,7 @@ truth, as-built: the gate pins to your ambient lifecycle when you raise it; the orchestrator resolves the gate **by the packet-carried gate id** (gate ids are model-visible — only LIFECYCLE ids stay server-side) and its own ambient identity becomes `decidedBy`; owner-never-self-approves holds by construction. A handover carrying serious issues the -orchestrator cannot answer on its own escalates up the ladder (orchestrator → developer). +orchestrator cannot answer on its own escalates up the ladder (orchestrator → architect). ### 4 — Handover to the orchestrator @@ -150,7 +165,7 @@ own lifecycle if you need its state). master's view first. A loop that hits the 3-round cap or stops converging escalates **with the full round history attached**. **Quo-vadis test:** a question that is a **high-blast-radius truth** — answered wrong it means big rewrites later, not a cosmetic choice — is flagged as - quo-vadis when raised, so the orchestrator relays it to the developer immediately instead of + quo-vadis when raised, so the orchestrator relays it to the architect immediately instead of absorbing it; presentation-grade choices are never escalated — decide and log. ## Knobs diff --git a/.pi/skills/l-01-agent-lifecycles/roles/orchestrator.md b/.pi/skills/l-01-agent-lifecycles/roles/orchestrator.md index 90a5e06a..6d1c8366 100644 --- a/.pi/skills/l-01-agent-lifecycles/roles/orchestrator.md +++ b/.pi/skills/l-01-agent-lifecycles/roles/orchestrator.md @@ -1,23 +1,32 @@ # Lifecycle — Orchestrator -> The developer-facing lifecycle: an **event loop over durable portfolio state**, not a -> request-to-close pipeline. Each turn routes the incoming event — a developer message, a worker -> report, a verdict, the orchestrator's own finding — into one of **three jobs** (Design · -> Portfolio · Orchestrate) under one roof, with solo work as the same jobs run with hats collapsed. +> The spawned backend lifecycle: an **event loop over durable portfolio state**, not a +> developer-facing conversation. Each turn routes backend events — architect dispatch, manager +> handover, worker report, verdict, or the orchestrator's own finding — into portfolio and +> orchestration work. Developer decisions are emitted to the architect as decision items. ## What This Seat Is -The developer's single point of contact and the only seat with a standing developer relay -(managers/workers stay reachable via their attached chats). It owns the design conversation, the -portfolio bird's-eye, dependency-ordered dispatch, the super integration branch, the **spirit -test**, and the **integrity bulwark** against "fixed one thing, broke two others." +The orchestrator is a backend seat spawned by the architect or by an approved orchestration plan. +It never converses with the developer directly. It owns the portfolio bird's-eye, +dependency-ordered dispatch, the super integration branch, the **spirit test**, and the +**integrity bulwark** against "fixed one thing, broke two others." The architect owns the design +conversation and developer relay. Its real state is the **task tree** — masters, leaves, statuses, decision logs, `openQuestions`, -contracts — never the transcript. That is why sessions can die, compact, and resume without losing -the run. Its analysis substrate is the **memory system** (route indexes, onboarding, +contracts, inbox rows — never the transcript. That is why sessions can die, compact, and resume +without losing the run. Its analysis substrate is the **memory system** (route indexes, onboarding, `grepai_search`, `cgc_*`); **orchestrator quality ∝ memory-repo quality**. Its durable notes and reports are the most important artifacts in the system: only this seat sees the whole picture. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays an orchestrator for its lifetime. A pasted brief for +architect, strategist, manager, worker, reviewer, or designer is refused and escalated to the +architect or owning seat via the inbox. Roles expand horizontally into new chats; sub-agents drill +vertically inside this seat for bounded analysis. A spawned orchestrator never absorbs another +role brief and never performs architect/developer-facing hat-collapse. + ## The Event Loop **Opening move, every session — new or resumed** (resumption is the common case, not the @@ -25,12 +34,12 @@ exception): 1. **Trust checkpoint** (below), then `lifecycle_start` (the frame's fleeting lifecycle). 2. **Portfolio orientation:** read the portfolio state — what exists, what is in flight, what is - blocked on whom, what awaits the developer — and **say it back**. + blocked on whom, what awaits the architect/developer relay — and **say it back**. 3. **Route the event** by what exists and what is asked: | Condition | Job | | --- | --- | -| No task doc exists for the ask (or a planning-status doc needs reshaping before work) | **D — Design** | +| No task doc exists for a backend request, or a planning-status doc needs developer reshaping | Emit a **decision/design item** to the architect | | Designed masters exist; coherence/conflicts/order in question, or "orchestrate these" | **P — Portfolio** | | An approved task/series is ready for implementation | **O — Orchestrate** | | The ask changes no code (a question, an investigation) | **research-only exit** — deliver the answer; chat is the right medium; no worktree, no task artifact | @@ -38,8 +47,8 @@ exception): **Profile check (takeover).** Before heavy work in any job: if this session's harness/model/ effort is wrong for the run (resolved: role file < settings), spawn the right chair — `spawn_agent_session` with `AR_SPAWN_ROLE=orchestrator` + a conversation-handover packet -(`../templates/conversation-handover-packet.md`) — and hand over; the developer still talks to -ONE orchestrator at a time. +(`../templates/conversation-handover-packet.md`) — and hand over; the architect still talks to the +developer, and backend orchestrator seats stay behind the relay. Several jobs can be active across a day; the loop routes per event. The frame's phase axis stays the observable `lifecycle_phase` vocabulary (`reframe-research` ≈ D, `decide` ≈ P, `build`/`close` @@ -68,8 +77,9 @@ task doc (approved) → branch (intent) → worktree (only where something i memory + onboarding roots; provider state; drift status and actionable count; branch freshness (`behind`/`diverged` → fast-forward the local official line first; `ledgerMapsCodeHead=false` → carryover or the right memory branch first). -3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **ask the developer** before - refreshing via `c-05-create-or-update-onboarding-files` — drift handling is approval-gated. +3. Drifted/missing/orphaned onboarding on committed, non-dirty source: **emit a decision item to + the architect** before refreshing via `c-05-create-or-update-onboarding-files` — drift handling + is approval-gated. Drift tied to dirty source is active work-in-progress, not maintenance. 4. Providers stopped/degraded: run the matching provider/runtime operations, re-check, report; `indexing` means healthy-but-busy (partial results). @@ -77,57 +87,55 @@ task doc (approved) → branch (intent) → worktree (only where something i When this seat spawns a role it compiles the trust facts into the brief — a spawned role does not repeat this checkpoint. -## Hand-Off Protocol — Dry-Run → Notify-And-Stop → Report +## Decision-Item Relay To The Architect + +The orchestrator does not hand questions to the developer. Every developer-worthy item goes to the +architect through the existing operator inbox, one item at a time. + +Post one `messageKind: decision-item` row with: -Every developer hand-off (design acceptance, portfolio plan, worktree intent, commit, push, -integration, cleanup/finalization, any dev-wait) is three actions, never one. Carve-out (ruled -2026-07-06): in an orchestrated run, leaf→master and master→super integrations ride the series' -**standing approval** — no per-edge developer hand-off; the developer hand-off concentrates at the -super PR/carry-over gate (see Super exit & landing tail). The table's integration row governs when -a hand-off DOES happen (solo runs; a raised durable gate): +1. **Decision** — what is being decided. +2. **Options** — the live choices and any backend recommendation. +3. **Consequences** — what each option changes, risks, or blocks. +4. **Evidence refs** — task docs, notes, reports, diffs, or gate ids the architect can verify. -1. **Dry-run** the pending mutation and self-fix failures before reporting. -2. **Notify:** `lifecycle_turn_end_notification(summary=…)` as the **last tool call**. -3. **Report:** the complete packet as final prose, the decision handed over as the last line — - then STOP. The next turn's first AR call auto-resumes. +Then stop acting on that item until the architect returns a `messageKind: decision-ruling` row (or +a clarification request). Do not open a second developer item while the first is unresolved. + +Operational hand-offs that stay inside the backend still use the existing durable gate and inbox +surfaces. Carve-out (ruled 2026-07-06): in an orchestrated run, leaf→master and master→super +integrations ride the series' **standing approval** — no per-edge architect/developer hand-off; the +developer review concentrates at the super PR/carry-over gate through the architect. The table's +integration row governs when a hand-off DOES happen (solo runs; a raised durable gate): | Junction | Parked durable gate `kind` | Hands off via | | --- | --- | --- | -| design acceptance / plan gate | `plan-approval` | this lifecycle | +| design acceptance / plan gate | `plan-approval` | architect decision item | | worktree intent | `worktree-intent` | `c-09-git-worktree-manager` | | commit / closeout | `closeout-approval` | `c-12-closeout` | -| push | `push-approval` | this lifecycle / `c-09` | +| push | `push-approval` | architect decision item / `c-09` | | integration | `integration-approval` | `c-09` / `c-12` | | cleanup / finalization | `cleanup-approval` | `c-09` / `c-12` | -| any other dev-wait | `agent-question` | this lifecycle | +| any other developer-worthy wait | `agent-question` | architect decision item | `closeout-approval` **is** the commit hand-off. The block-and-wait `lifecycle_gate` + `lifecycle_resume` pair remains the parked fallback for a durable, mutation-blocking approval -record; it renders a prompt over your prose, which is exactly why notify-and-stop is the path. - -## Job D — Design (pull the designer hat) +record; when developer attention is needed, the architect is the relay that presents it. -**Entry:** an intent/problem with no task doc — or a planning-status doc that needs reshaping -before work starts. Fires at the front of the pipeline AND mid-flight; most leaves of a live -series are designed mid-flight. +## Design Boundary — Ask The Architect -Run `roles/designer.md` **inline — the designer is a hat, not a seat**: it cannot sit in a -coordination leaf because the task is what it exists to create. No worktree, no branch, no spawn -required; a heavy design may run the same hat in a separate session (chair logistics, not a role -distinction — spawn with `AR_SPAWN_ROLE=designer`). +The orchestrator does not own the developer drawing board and does not pull the designer hat. +When an intent/problem has no task doc, or a planning-status doc needs developer-visible +reshaping, emit a decision/design item to the architect with the missing decision, options, +consequences, and evidence refs. The architect wears `roles/designer.md`, discusses with the +developer, and returns a durable ruling or updated task surface. -- The co-think loop, evidence model, blast-radius-within-the-master, and designer-limits - declaration are the hat's own file. The orchestrator remains accountable for what the hat - produces: **bulwark-check the design against the portfolio and the past before acceptance** - (planned-vs-planned AND planned-vs-past — a designed change that collides with another master's - standing order is caught here or shipped broken). -- **Output:** master/leaf task docs (requirements · steps · code examples), `openQuestions` for - the developer (the rendered decision surface; `notes/` carries the analysis), the limits note. -- **Gate:** the developer accepts the design — or parks it. **No git surface.** +The orchestrator remains accountable for backend portfolio integrity after the architect returns +the design: run the bulwark check against the portfolio and the past before dispatch. ## Job P — Portfolio (streamline + plan) -**Entry:** designed masters exist and coherence/order is the question, or the developer says +**Entry:** designed masters exist and coherence/order is the question, or the architect dispatches "orchestrate these." - **Route-coherence scan** across the set (route indexes · onboarding · grepai · cgc); fan-out @@ -151,9 +159,10 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). sprint scope (`../templates/orchestration-task.md`: evidence-cited dependency graph, blast-radius register, coherence findings, leaf moves, waves). This is the portfolio three-party loop (owner = this seat · builder = strategist · reviewer with - `../criteria/plan-review.md`), followed by **drawing-board rounds with the developer** — this - seat relays, multi-round convergence is expected and normal, and quo-vadis items (e.g. two - masters heavily disagreeing) go straight to the developer. On acceptance **this seat adopts the + `../criteria/plan-review.md`), followed by **drawing-board rounds through the architect** — this + seat relays by decision item, multi-round convergence is expected and normal, and quo-vadis + items (e.g. two masters heavily disagreeing) go straight to the architect relay. On acceptance + **this seat adopts the draft into durable task form** (the strategist is a reader, not a mutator) with a decision-log entry. - **Re-evaluation rules:** a master added **in-sprint before implementation starts** → the @@ -167,13 +176,13 @@ distinction — spawn with `AR_SPAWN_ROLE=designer`). task doc carrying a top-level `orchestrates` list naming the master tasks it commands — the dashboard derives the orchestration > master > leaf hierarchy (and the rank insignia) from that field, so setting it is part of adoption. -- **Gate:** the portfolio plan gate — one wholesale developer review of the reshaped portfolio + - the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — not even the - super branch exists yet. +- **Gate:** the portfolio plan gate — one wholesale architect/developer review of the reshaped + portfolio + the orchestration task (sprint scope + DAG + dispatch order). **No git surface** — + not even the super branch exists yet. ## Job O — Orchestrate (execute the plan) -**Entry:** an approved planner master — or a single approved master for a flat run. Either way, +**Entry:** an approved planner master — or a single approved master dispatched for backend execution. Either way, **the adopted orchestration task must exist**: the strategist pre-run (Job P) is the unconditional precondition for any orchestrated run — even one master. It is doctrine, not a knob. @@ -192,8 +201,8 @@ monitor turn-report artifacts, nudges, escalation intake; apply the **spirit tes deltas. A manager escalation may carry a **loop's full round history** (3-round cap hit, or a round that failed to shrink the finding set — the convergence rule, `../SKILL.md` The Three-Party Loop): this seat either re-runs the loop at ITS level (the orchestrator-level agent set — the -strongest models) or, when the blocker is a quo-vadis truth, takes it to the developer. In a -**flat run, wear the manager hat yourself** (see The Hat-Collapse Rule). +strongest models) or, when the blocker is a quo-vadis truth, emits a decision item to the +architect. This spawned backend seat does not run flat hat-collapse (see The Hat-Collapse Rule). **Failed-deliverable rule (reopen-and-reshape):** a leaf whose deliverable came out wrong is **REOPENED under its own id** (`task_reopen`) and its doc reshaped to the intended form — the @@ -212,7 +221,7 @@ policy may require the attached reviewer verdict (`requireReviewerVerdictAtSeams enforces it: `worktree_integrate` refuses while a `master-handover-approval` gate addressed to this master (its `enclosure`) is undecided or policy-invalid. A blocking verdict decomposes into fix leaves dispatched before integration; a -handover you cannot honestly decide escalates to the developer. +handover you cannot honestly decide escalates to the architect as a decision item. **Integration duty (master → super) — the worktree moment.** Per completed master: @@ -243,7 +252,8 @@ Strict stack: super off main; master branches off the **current super** (never o branches off their master. **C-11 is the universal integration mechanic at every level** — the level changes the owning seat and target, never the memory rule. The final super → main landing follows `system/git-workflow.md`: PR to gated main, remote merge, memory carry-over so the ledger -maps the actual merge commit, then push — **push only after the developer approves**. +maps the actual merge commit, then push — **push only after the architect returns the developer's +approval**. **Conflict resolution — exactly two modes:** *Up-front (preferred):* an overlap found during streamlining → extract shared logic into a foundation master implemented first (leaf moves + @@ -255,47 +265,38 @@ owns the final truth; ledger edge mapped once). parallel-master reconcile (T9), the series-branch-without-worktree primitive, and atomic move/renumber — run manually with existing primitives, each manual edge recorded in durable notes. -**Super exit & landing tail — the developer's SINGLE review point (ruled 2026-07-06, resolves +**Super exit & landing tail — the architect-mediated SINGLE review point (ruled 2026-07-06, resolves L8-Q9):** all leaf→master and master→super integrations are **orchestrator-delegated** — on the happy path they proceed under the series' standing approval (the developer's portfolio-gate approval, recorded in the planner master's decision log); a durable `integration-approval` gate, when one is raised, still awaits the developer — the kind stays human-pinned as-built. The -developer reviews ONCE, at the **fully integrated super branch on the PR/carry-over gate**. When +architect presents the developer review ONCE, at the **fully integrated super branch on the +PR/carry-over gate**. When the DAG drains, spawn the super-exit adversarial reviewer (`roles/reviewer.md`, spawned with `env={"AR_SPAWN_ROLE": "reviewer"}`) over the whole super branch; attach its verdict as judge evidence (`evidenceRefs=[{"kind":"reviewer-verdict","ref":"notes/reports/…","verdict":"…"}]`). -The handover to the developer **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the -dashboard running on the super branch — because the review is **visible-behavior-first** (a +The handover to the architect **MUST offer a REVIEWABLE ENVIRONMENT** — for agents-remember: the +dashboard running on the super branch — because the developer review is **visible-behavior-first** (a broken visual pass fails the handover fast, before anyone reads a diff), code review second. The handover carries **demo notes — "what changed visibly"**: per master, the user-visible behavior -to walk (panels, flows, outputs, how to reach them), so the developer drives the environment +to walk (panels, flows, outputs, how to reach them), so the developer can drive the environment without archaeology. Rejections decompose into fix leaves. On approval: PR + memory carry-over + -push (developer-gated), then finalization +push (architect-mediated developer gate), then finalization (`lifecycle_finalize_task` per edge — statuses via the tool, steps checked by hand), then the **self-improvement close**: proposals for future runs grounded in the run's own ledger ("did x/y/z; hit a/b/c; a and b solved on the spot; c needs this change") — proposals only, never automated self-modification. `lifecycle_end` records the terminal state. -## The Hat-Collapse Rule (solo and flat runs) - -Solo work is **not a fourth route** — it is the same three jobs collapsed: - -- **Design** still happens (however briefly): the task doc exists before anything else. -- **Delegated gates collapse back to the developer when one chair owns both sides** — a gate you - raised from this session's lifecycle cannot be decided by it (owner-never-self-approves). -- **Portfolio** collapses but does not vanish: an ORCHESTRATED run — anything that dispatches - seats, even for a single master — still requires the strategist pre-run (even one master gets - the pass). Only session-scale hands-on work (nothing dispatched; not an orchestrated run) skips - the strategist; the owner's own bulwark check remains. -- **Orchestrate** runs with hats collapsed: in a **flat series** the orchestrator wears the - **manager hat** (`roles/manager.md` duties — dispatch, review, delegated gates, leaf closeout → - integrate → finalize — same duties, same artifacts, one chair). At **session scale** it builds - **hands-on** instead of spawning (when spawn economics don't pay): the build discipline is the - worker's (edit + same-pass `c-05` onboarding + `system/tools.md` checks green + freshness watch - / early `worktree_sync`), the closeout tail is the owner's (see `c-12-closeout`), and - the ladder holds identically: task doc → intent → worktree → build → close. -- Fan-out sub-agents may read/search and **write durable reports**; **every AR state mutation - stays in this seat's main loop** (see Sub-Agent Fan-Out below). +## The Hat-Collapse Rule (spawned backend) + +Hat-collapse is reserved for the owner/developer-facing architect. This spawned backend +orchestrator never wears the architect, designer, manager, worker, strategist, or reviewer hat in +place. + +If a run is small enough for one owner seat, the architect may perform these backend duties under +`roles/architect.md`. If this orchestrator needs another role, it spawns a new role chat +horizontally. Fan-out sub-agents may read/search and **write durable reports**; **every AR state +mutation stays in this seat's main loop** (see Sub-Agent Fan-Out below). ## Sub-Agent Fan-Out (capability doctrine — any harness that has it) @@ -322,7 +323,7 @@ regardless of the engine underneath. ## The Spirit Test — This Seat Only -**Within the spirit** of what the developer accepted → act alone + a decision-log entry (leaf +**Within the spirit** of what the architect/developer accepted → act alone + a decision-log entry (leaf moves and renumbers on planning-status masters, inserted fix leaves, reopened-and-reshaped leaves, mid-series convergence — the integration branch is the safety net). **Against the spirit** → raise it for a joint decision. Only this seat holds the global view to judge a collision; the @@ -342,7 +343,7 @@ task, fill small blanks, escalate real deltas). - **The adopted orchestration task** (the strategist drafts; this seat adopts — with the adoption decision-log entry) before any orchestrated run. - **The super-exit demo notes** ("what changed visibly", per master) + the reviewable environment - offer — the developer handover is visible-behavior-first. + offer — the architect-mediated developer handover is visible-behavior-first. - **The self-improvement report** at close. ## Comms Protocol @@ -351,16 +352,16 @@ task, fill small blanks, escalate real deltas). intake up; durable + dashboard-visible. - **Stdin push** — delivery into hosted sessions (echo-confirmed paste); poll is the non-hosted fallback. -- **Escalation** — this seat is the last resolver before the developer: resolve within the +- **Escalation** — this seat is the last backend resolver before the architect: resolve within the bird's-eye view first; what goes up is decided by the **quo-vadis test**, not by being stumped — a **high-blast-radius truth** question (answered wrong it means big rewrites later: architecture direction, security posture, doctrine contradictions, irreversible data/branch operations, where - agent settings live) goes to the developer IMMEDIATELY via task-doc `openQuestions`, regardless - of any loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. + agent settings live) goes to the architect IMMEDIATELY as a decision item, regardless of any + loop's round count; presentation-grade choices (2px vs 3px) never go up — rule and log. A loop that hits its 3-round cap or stops converging arrives here with its full round history; - re-run it at this level's agent set or take the quo-vadis part to the developer. Developer - rejections arrive here and decompose into fix leaves (or reopens — see the failed-deliverable - rule). + re-run it at this level's agent set or take the quo-vadis part to the architect. Architect or + developer rejections arrive here and decompose into fix leaves (or reopens — see the + failed-deliverable rule). ## Knobs diff --git a/.pi/skills/l-01-agent-lifecycles/roles/reviewer.md b/.pi/skills/l-01-agent-lifecycles/roles/reviewer.md index a477ee87..fbeab40d 100644 --- a/.pi/skills/l-01-agent-lifecycles/roles/reviewer.md +++ b/.pi/skills/l-01-agent-lifecycles/roles/reviewer.md @@ -13,7 +13,7 @@ reviewer seat (below)** (seams: developer decision 2026-07-03; loop reuse: rulin 1. **Master-exit** — before a **manager** hands its completed master integration branch to the **orchestrator**. 2. **Super-exit** — before the **orchestrator** hands the accumulated super integration branch to the - **developer**. + **architect** for the developer review. Leaf-level review is the manager's own duty — **not** an adversarial seam. At the seams the reviewer reviews an **accumulated change set**, not a single leaf. @@ -30,11 +30,20 @@ loop's 3-round cap** — your delta-verify closes a round, it does not open one. > **Verdicts are evidence, not decisions.** The reviewer never decides a gate. Its verdict attaches to > the handover gate as **judge evidence**; the gate's decider decides — the **orchestrator** at -> master-exit (delegated `master-handover-approval`), the **developer** at super-exit — per the -> gate delegation policy (settings `orchestration.gateDelegation`, `controlplane/gate_policy.py`). +> master-exit (delegated `master-handover-approval`), the **architect carrying the developer +> ruling** at super-exit — per the gate delegation policy (settings `orchestration.gateDelegation`, +> `controlplane/gate_policy.py`). > The policy binds delegated seam decisions to verdict evidence when > `requireReviewerVerdictAtSeams` is set. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays reviewer for its lifetime. A pasted brief for another +role is refused and reported to the seam's decider via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this reviewer seat for the +three review lenses. A reviewer never absorbs architect, orchestrator, strategist, manager, or +worker work. + ## Lens - **Opening move:** scope the review — the integration branch diff, the relevant task docs @@ -101,10 +110,11 @@ orchestrator. Review the **accumulated master change set**, not a final leaf in master. Each fix leaf names scope, target files/docs, evidence, and done-when. A master-exit block without fix leaves is invalid. -### SUPER-EXIT — Orchestrator Before Developer Handover +### SUPER-EXIT — Orchestrator Before Architect/Developer Handover The orchestrator spawns this reviewer before handing the accumulated super integration branch to the -developer. Review **wholesale branch behavior**: the whole portfolio as integrated on super. +architect for the developer review. Review **wholesale branch behavior**: the whole portfolio as +integrated on super. - **Scope packet:** super integration branch diff against its base (main), portfolio task docs, master task docs, master-handover packets, prior master-exit verdicts, orchestrator decision logs, resolved diff --git a/.pi/skills/l-01-agent-lifecycles/roles/strategist.md b/.pi/skills/l-01-agent-lifecycles/roles/strategist.md index 377e4b70..eb21412a 100644 --- a/.pi/skills/l-01-agent-lifecycles/roles/strategist.md +++ b/.pi/skills/l-01-agent-lifecycles/roles/strategist.md @@ -13,8 +13,8 @@ **Spawn-first by design** (developer decision 2026-07-05). Strategist work is token-heavy — it reasons over every master's state, task docs, notes, friction ledger, and gate history — so it runs as its own process with its own harness/model/effort knobs, protecting the orchestrator's context. -The designer precedent explicitly does NOT apply: the designer stays an inline hat because design -is drawing-board-interactive with the developer; the strategist's essence is solitary heavy +The designer precedent explicitly does NOT apply: the designer stays an inline architect hat +because design is drawing-board-interactive; the strategist's essence is solitary heavy analysis. Spawned by the orchestrator via `spawn_agent_session` with `env={"AR_SPAWN_ROLE": "strategist"}`. @@ -36,6 +36,14 @@ it into durable task form. The strategist never edits task docs, never raises ga git. A seat that never touches mutating AR tools never instantiates a lifecycle — that is the designed shape. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays strategist for its lifetime. A pasted brief for +another role is refused and escalated to the orchestrator via inbox instead of rerouting this chat. +Roles expand horizontally into new chats; sub-agents drill vertically inside this strategist seat +for portfolio analysis. A strategist never absorbs architect, orchestrator, manager, reviewer, or +worker work. + ## Lens - **Opening move:** read the brief fully — it carries **refs to durable portfolio state, never @@ -90,7 +98,7 @@ everything else. `roles/manager.md`): the strategist's analysis directly parameterizes the loops. 6. **Coherence & contradiction check** — cross-master sweep: two masters moving one surface in opposite directions, a leaf assuming state another leaf removes, duplicate work, vocabulary - drift. **Directional contradictions are quo-vadis → developer** (via the drawing board; see + drift. **Directional contradictions are quo-vadis → architect** (via the drawing board; see Duties §5). 7. **Ordering** — topological sort over ORDER edges; CONFLICT edges resolved by serialization or **leaf moves (recorded from→to with rationale)**; independent sets become **parallel waves** @@ -134,17 +142,17 @@ mutate nothing yourself. ### 5 — Drawing-board rounds The reviewer (plan-review catalog) passes judgment on the plan; the orchestrator relays the -verdict and the developer's drawing-board feedback back into this session. **Convergence over +verdict and the architect's drawing-board feedback back into this session. **Convergence over rounds is expected and normal** — large, messy portfolios are explicitly NOT expected to be fixed in one shot; the iteration is the feature. Each round must shrink the finding set (the convergence -rule); the loop's hard cap is 3 full rounds, and **the drawing board with the developer IS this +rule); the loop's hard cap is 3 full rounds, and **the drawing board through the architect IS this loop's escalation**. Quo-vadis items — high-blast-radius truths such as two masters heavily -disagreeing on direction — go **straight to the developer** at the drawing board (the orchestrator -carries them; you flag them, unmistakably, at the top of the coherence findings). +disagreeing on direction — go **straight to the architect relay** at the drawing board (the +orchestrator carries them; you flag them, unmistakably, at the top of the coherence findings). ### 6 — Adopted-plan handover -When the developer accepts the plan, the orchestrator adopts it; your seat's work is done. **The +When the architect returns the accepted plan ruling, the orchestrator adopts it; your seat's work is done. **The artifact write is unconditional; the inbox is the delivery channel when the brief wires it** — otherwise your final playback message to the orchestrator carries the artifact ref. Then end. The orchestration task remains the sprint's standing scope: a new master added **in-sprint before implementation starts** re-opens re-evaluation (you @@ -166,8 +174,8 @@ and enters the next sprint's evaluation. dashboard-visible. - **Stdin push** — the orchestrator delivers round feedback into this hosted session; your replies are inbox rows or artifact revisions — never an untracked side channel. -- **Escalation** — to the **orchestrator**, which relays; quo-vadis truths are flagged for the - developer's drawing board. You never edit task docs to reflect a ruling — the orchestrator does. +- **Escalation** — to the **orchestrator**, which relays to the architect; quo-vadis truths are + flagged for the drawing board. You never edit task docs to reflect a ruling — the orchestrator does. ## Tool Surface (positive statement — this is all of it) diff --git a/.pi/skills/l-01-agent-lifecycles/roles/worker.md b/.pi/skills/l-01-agent-lifecycles/roles/worker.md index f5c369b4..036240fa 100644 --- a/.pi/skills/l-01-agent-lifecycles/roles/worker.md +++ b/.pi/skills/l-01-agent-lifecycles/roles/worker.md @@ -7,7 +7,7 @@ ## What This Seat Is **One per task leaf, short-lived, fresh session.** Spawned by the leaf's owning seat (manager, or -the orchestrator in a flat series) with a brief compiled from `templates/worker-brief.md`. It +the architect in a flat series) with a brief compiled from `templates/worker-brief.md`. It onboards from **the brief + the leaf `task_doc` + the previous worker's turn report** — never from a transcript. Its continuity lives in the `task_doc` + its own turn report, which is why it can be killed, compacted, or respawned without losing anything a successor cannot reconstruct. @@ -16,10 +16,18 @@ The worker builds; it does not manage lifecycle machinery. **Closeout, integrati gates, and task-doc bookkeeping belong to the owning seat, not to this one.** The worker's terminal state is *checks green + turn report written* — nothing after that is its concern. +## Role-Seat Immutability + +In dashboard-owned sessions, this seat stays worker for its lifetime. A pasted brief for another +role is refused and escalated to the owning seat via inbox instead of rerouting this chat. Roles +expand horizontally into new chats; sub-agents drill vertically inside this worker seat for +read/search only. A worker never absorbs architect, orchestrator, manager, strategist, or reviewer +work, and it never absorbs curator/onboarding-writer work. + ## The Worker Loop ``` -brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn report -> end +brief -> orient -> build code -> checks green -> turn report -> curator memory pass by separate seat | +-- blocked or plan delta beyond blank-filling -> escalate to the owning seat ``` @@ -28,8 +36,9 @@ brief -> orient -> build (edit + onboarding same-pass) -> checks green -> turn r Read the brief fully, then the leaf spec / `task_doc` it names. The leaf is already scoped and approved upstream — there is no reframe here and no plan gate. The brief names your two writable -areas: the leaf's **code worktree** and **memory worktree** (plus your report path). You edit -nothing outside them. +areas: the leaf's **code worktree** and your report path. The memory worktree is context for the +curator pass unless the brief explicitly says otherwise. You edit nothing outside your named +surfaces. ### 2 — Orient (paired reads before edits) @@ -44,12 +53,10 @@ nothing outside them. - Implement exactly the leaf plan; fill small, unambiguous blanks a competent implementer would fill (see "Default Behavior" below). -- **Refresh the matching onboarding in the same editing pass** per - `c-05-create-or-update-onboarding-files`: a changed source file's sidecar **body** is updated now; - a new file's sidecar is created; route overviews that need a genuine body update get one, and a - no-impact route gets the literal history form `- — No route impact: `. - Regenerate generated route indexes with a **local `build_route_indexes(...)`** invocation from the - memory worktree. +- Produce the builder input the downstream curator needs: changed paths, code-diff summary, tests, + and any route/onboarding observations that would help the memory pass. The curator, not the + worker, writes onboarding in the official manager -> builder -> reviewer -> curator closeout + chain. - **Never `git commit`.** Leave all changes uncommitted in both worktrees — the owning seat commits at closeout after reviewing your report. @@ -63,14 +70,15 @@ the report. A red check you cannot fix inside the leaf's scope is an escalation, Write `templates/turn-report.md` to the path the brief names (convention: `notes/reports/-worker-report.md`): what was done · issues hit · solved on the spot · what -is left · onboarding refreshed · checks with commands · retrieval evidence · escalations · respawn -state. **A missing report gets nudged.** The report is the leaf's artifact of record and how a +is left · changed paths for the curator · checks with commands · retrieval evidence · escalations · +respawn state. **A missing report gets nudged.** The report is the leaf's builder artifact of record and how a respawned successor onboards — write it even when blocked (with the Escalations section filled), then end your turn. ## Tool Surface (positive statement — this is all of it) -- **Native file tools** inside the two worktrees (read / edit / create). +- **Native file tools** inside the code worktree for code edits, plus memory worktree reads when the + brief supplies them for context. - **Read-only AR retrieval:** `read_ar_files`, `grepai_search`, `cgc_*`, `context_packet`. - **Shell** for the prescribed checks (use the interpreter paths the brief names — do not assume a `python` shim exists). @@ -85,17 +93,17 @@ lifecycle machinery never instantiates a lifecycle; that is the designed shape, When the harness offers sub-agents, use them for **read/search only**, scoped to the leaf (locate call sites, sweep onboarding): each writes durable notes and returns a compact summary. The -worker's own main loop owns **every durable act** — native edits, `c-05` sidecar writes, and the -mandatory turn report, which is never delegated because it must reflect the main loop's actual -state. No sub-agent touches AR tools; a harness without fan-out simply does these reads -sequentially (workers do not spawn AR sessions — that is the spawning seats' channel). +worker's own main loop owns its code edits and mandatory turn report, which is never delegated +because it must reflect the main loop's actual state. The curator owns onboarding writes. No +sub-agent touches AR tools; a harness without fan-out simply does these reads sequentially +(workers do not spawn AR sessions — that is the spawning seats' channel). ## Loop Position (when the leaf runs as a three-party loop) The owning seat scores each leaf into a tier at dispatch (loop doctrine: `../SKILL.md`, The Three-Party Loop). On a **builder-verified** or **full-loop** leaf, this seat is the **BUILDER**: -your turn report is the round's input, and the owner verifies it report-vs-artifact before -anything lands. Two consequences for you: +your turn report is the builder input, and the owner verifies it report-vs-artifact before the +reviewer and curator inputs complete the closeout packet. Two consequences for you: - **Fix rounds resume THIS session** — the same builder, with its context intact. Your round-2+ report **appends** to your report file rather than rewriting it, so the loop history stays @@ -108,10 +116,10 @@ anything lands. Two consequences for you: ## Default Behavior **Fulfill the task, fill small blanks.** No creative-liberty prompting in either direction. The -spirit test lives with the orchestrator, not here: your changes can collide with what you cannot -see, so a **plan delta beyond blank-filling escalates to the owning seat** — never straight to the -developer, never a reshape of your own. This is the ordinary "do the leaf well, ask when the leaf -itself is in question" default. +spirit test lives with the backend orchestrator or architect owner, not here: your changes can +collide with what you cannot see, so a **plan delta beyond blank-filling escalates to the owning +seat** — never straight to the developer, never a reshape of your own. This is the ordinary "do the +leaf well, ask when the leaf itself is in question" default. ## Comms @@ -119,7 +127,8 @@ itself is in question" default. and a `messageKind` (`turn-report`, `nudge`, `escalation`, …), durable + dashboard-visible. - **Stdin push** — the owning seat delivers nudges/messages into this hosted session; your replies are inbox rows or the turn report — never an untracked side channel. -- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator).** +- **Escalation** — one rung up, always: **worker → owning seat (manager/orchestrator/architect in + solo flat mode).** ## Knobs diff --git a/.pi/skills/l-01-agent-lifecycles/templates/manager-brief.md b/.pi/skills/l-01-agent-lifecycles/templates/manager-brief.md index 10c37922..4a6f7eaf 100644 --- a/.pi/skills/l-01-agent-lifecycles/templates/manager-brief.md +++ b/.pi/skills/l-01-agent-lifecycles/templates/manager-brief.md @@ -31,6 +31,10 @@ master's leaf loop to the master-exit seam, then hand over. ## Dispatch defaults - Worker spawns: `templates/worker-brief.md`, `env={"AR_SPAWN_ROLE": "worker"}`, qualified leaf keys; knob overrides: . +- Leaf closeout chain: manager -> builder -> reviewer -> curator. The manager closes a leaf from + builder code + reviewer verdict + curator memory pass. +- Curator spawns: `roles/curator.md`, `env={"AR_SPAWN_ROLE": "curator"}`, fresh per leaf after the + builder code and reviewer verdict are available; curator writes onboarding only. - Concurrency: . ## The exit diff --git a/.pi/skills/l-01-agent-lifecycles/templates/worker-brief.md b/.pi/skills/l-01-agent-lifecycles/templates/worker-brief.md index db8f44d0..3437f402 100644 --- a/.pi/skills/l-01-agent-lifecycles/templates/worker-brief.md +++ b/.pi/skills/l-01-agent-lifecycles/templates/worker-brief.md @@ -18,13 +18,14 @@ ROLE BRIEF — worker You are a WORKER for leaf `` of master `` (repo: ). Your lifecycle is `skills/l-01-agent-lifecycles/roles/worker.md`; this brief is your session start. Execute the leaf -completely, write your turn report, then stop. +code completely, write your builder turn report, then stop. Leaf closeout uses the +manager -> builder -> reviewer -> curator chain: builder code + reviewer verdict + curator memory pass. -## Worktrees (your ONLY writable areas) +## Worktrees (your code write area + memory context) - Code: `` (branch ``, base ``) -- Memory: `` +- Memory: `` (read/context for changed-path notes; the curator writes onboarding) - Plus your turn report at the path below. Nothing else. NEVER `git commit` — the owning seat - closes out after reviewing your report. + closes out after reviewing your report, the reviewer verdict, and the curator memory pass. ## Tool surface - Native file tools inside the two worktrees; shell for the checks below. @@ -46,18 +47,18 @@ files involved, the invariants that must hold, what NOT to touch.> - Full: — must exit 0. - `git diff --check` in both worktrees. -## Onboarding (same editing pass, per c-05) -- Changed source files: update the sidecar BODY now; new files: create the sidecar. -- Route overviews: genuine body update where routes changed; otherwise the newest history entry - uses the LITERAL form `- — No route impact: ` (timestamp first). -- Pin idiom for verification metadata: "Verification metadata pinned until closeout stamps the - commit." +## Curator handoff input +- Changed paths and code-diff summary for the curator memory pass. +- Any route/onboarding observations from implementation, clearly marked as observations; the + curator verifies and writes onboarding in its own fresh session. +- Pin idiom for any metadata note the curator needs: "Verification metadata pinned until closeout + stamps the commit." ## Turn report (mandatory, last act) Write `/-worker-report.md` following `skills/l-01-agent-lifecycles/templates/turn-report.md` — including exact check commands + -outcomes, the retrieval-evidence tally, and the respawn state. If blocked: fill Escalations and -stop — escalate to , never to the developer. +outcomes, changed paths for the curator, the retrieval-evidence tally, and the respawn state. If +blocked: fill Escalations and stop — escalate to , never to the developer. ``` --- diff --git a/.pi/skills/w-02-light-task-workflow/master-template.md b/.pi/skills/w-02-light-task-workflow/master-template.md index 42738c16..a807afd1 100644 --- a/.pi/skills/w-02-light-task-workflow/master-template.md +++ b/.pi/skills/w-02-light-task-workflow/master-template.md @@ -7,7 +7,7 @@ built to grow as the work unfolds. ## When to escalate to a series -The `l-01-agent-lifecycles` orchestrator lifecycle's `decide` step escalates a single task to a series once its size is apparent — the +The `l-01-agent-lifecycles` architect lifecycle's `decide` step escalates a single task to a series once its size is apparent — the implementation plan no longer fits on a single page, or the work splits into distinct slices that each deserve their own checklist and commit. You can also start single and escalate later: drop in the master `task.md` and move the existing plan into the first `NN_.md`. diff --git a/AGENTS.md b/AGENTS.md index 62e05208..aaf57933 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -19,8 +19,8 @@ Sessions route by role through the `l-01-agent-lifecycles` skill — the lifecyc roof this checkout routes into. A **spawned agent** (the `AR_SPAWN_ROLE` env var is set, or the first message is a role brief) follows its brief — the brief is its session start, and the rest of this section is not addressed to it. A -**developer-facing session** is the **orchestrator**: it runs -`skills/l-01-agent-lifecycles/roles/orchestrator.md`, whose phase axis is +**developer-facing session** is the **architect**: it runs +`skills/l-01-agent-lifecycles/roles/architect.md`, whose phase axis is request → trust-checkpoint → reframe-research → decide → build → close. Classify the job (bug / feature / triage / research) as a *lens* during reframe-research — a hint, re-pickable, never a gate. @@ -36,13 +36,13 @@ code change lives under an approved task doc: master + light sub-task series when it outgrows a single-page plan. The task-collaboration doctrine in `tasks/AGENTS.md` applies inside the -orchestrator lifecycle's reframe-research phase, in plain chat, before any task +architect lifecycle's reframe-research phase, in plain chat, before any task file or format is chosen. --- **IMPORTANT:** -Do not change code or documentation without entering the orchestrator lifecycle and clearing its plan gate. +Do not change code or documentation without entering the architect lifecycle and clearing its plan gate. Do not change task plan items without approval. Think before acting. Do not randomly commit. Use the `c-12-closeout` skill instead! diff --git a/README.md b/README.md index 3718dd54..3095c7c4 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ That is the normal first-run path. `skills_install()` remains available as a maintenance/manual MCP tool, but the starter packages already provide the initial skills and harness files. -After that, normal work runs through the `l-01-agent-lifecycles` skill: a developer-facing session is the orchestrator; spawned agents follow their role briefs. The agent resolves the active context with `c-08-ar-coordination-context-resolver`, checks memory quality with `c-02-memory-quality-control`, reads relevant onboarding beside code, and updates onboarding after approved changes. +After that, normal work runs through the `l-01-agent-lifecycles` skill: a developer-facing session is the architect; spawned backend orchestrators and other role seats follow their role briefs. The agent resolves the active context with `c-08-ar-coordination-context-resolver`, checks memory quality with `c-02-memory-quality-control`, reads relevant onboarding beside code, and updates onboarding after approved changes. ## Run The Dashboard diff --git a/agents-md-files/coordinator/AGENTS.md b/agents-md-files/coordinator/AGENTS.md index f0f280ca..52e109aa 100644 --- a/agents-md-files/coordinator/AGENTS.md +++ b/agents-md-files/coordinator/AGENTS.md @@ -6,17 +6,17 @@ Sessions route by role through the `l-01-agent-lifecycles` skill. A **spawned agent** (the `AR_SPAWN_ROLE` env var is set, or the first message is a role brief) follows its brief — the brief is its session start, and the rest of this section is not addressed to it. A **developer-facing session** is the -**orchestrator**: it enters `skills/l-01-agent-lifecycles/roles/orchestrator.md` +**architect**: it enters `skills/l-01-agent-lifecycles/roles/architect.md` before working in any managed repository. During an already-running session, the agent must stay aware of managed-repo boundaries. If a new turn or tool target may cross from outside Agents Remember -scope into a managed repository, enter the orchestrator lifecycle first. +scope into a managed repository, enter the architect lifecycle first. --- **IMPORTANT:** -Do not change code without entering the orchestrator lifecycle and clearing its plan gate. +Do not change code without entering the architect lifecycle and clearing its plan gate. Do not change task plan items without approval. Do not randomly commit. Use the `c-12-closeout` skill instead! @@ -31,7 +31,7 @@ This workspace uses a layered memory system. Make sure to read the below rules b This coordinator file is the workspace entrypoint. Read these installed `AGENTS.md` files when their scope becomes relevant: -- `tasks/AGENTS.md` — task collaboration doctrine (applied up front in the `l-01-agent-lifecycles` orchestrator lifecycle's +- `tasks/AGENTS.md` — task collaboration doctrine (applied up front in the `l-01-agent-lifecycles` architect lifecycle's reframe-research phase; see _Start Here — Route By Role_ above). ### Onboarding Documentation diff --git a/dashboard/src/data/sessionGroups.test.ts b/dashboard/src/data/sessionGroups.test.ts index b8f40964..b822f342 100644 --- a/dashboard/src/data/sessionGroups.test.ts +++ b/dashboard/src/data/sessionGroups.test.ts @@ -91,7 +91,8 @@ describe("groupSessions (L14 G1 command tree)", () => { it("groups command-role provenance onto the deck together with the orchestration-claiming chat", () => { const grouped = groupSessions({ sessions: [ - session({ id: "dev", leafKey: "agents-remember/sprint-02/SPRINT-02" }), + session({ id: "architect", leafKey: "agents-remember/sprint-02/SPRINT-02" }), + session({ id: "orch", spawnRole: "orchestrator" }), session({ id: "strat", spawnRole: "strategist" }), session({ id: "mgr", spawnRole: "manager", leafKey: "agents-remember/260706_management-repo/260706" }), session({ id: "worker", spawnRole: "worker", leafKey: "agents-remember/260706_management-repo/260706-L1" }), @@ -104,10 +105,10 @@ describe("groupSessions (L14 G1 command tree)", () => { expect(deck).toBeTruthy(); expect(deck?.label).toBe("SPRINT 02 · management-repo rollout · command deck"); expect(deck?.tier).toBe("orchestration"); - // The developer-facing orchestrator chat (the orchestration task's own leaf claim) sits on the - // deck with the spawned command seats; the worker does NOT (role provenance is the gate). - expect(deck?.sessions.map((member) => member.id)).toEqual(["dev", "strat", "mgr"]); - expect(deck?.countLabel).toBe("3 chats · 3 live"); + // The developer-facing architect chat (the orchestration task's own leaf claim) sits on the + // deck with the spawned backend command seats; the worker does NOT (role provenance is the gate). + expect(deck?.sessions.map((member) => member.id)).toEqual(["architect", "orch", "strat", "mgr"]); + expect(deck?.countLabel).toBe("4 chats · 4 live"); const master = grouped.groups.find((group) => group.key === "master:260706_management-repo"); expect(master?.sessions.map((member) => member.id)).toEqual(["worker"]); @@ -181,7 +182,7 @@ describe("groupSessions (L14 G1 command tree)", () => { it("reads at a glance at 30-chat scale: deck + per-master groups + one archive", () => { const sessions: OpenSession[] = [ - session({ id: "orch", spawnRole: "orchestrator" }), + session({ id: "architect", spawnRole: "architect" }), session({ id: "strategist", spawnRole: "strategist", status: "exited" }), session({ id: "m1", spawnRole: "manager" }), session({ id: "m2", spawnRole: "manager", status: "exited" }), diff --git a/dashboard/src/data/sessionGroups.ts b/dashboard/src/data/sessionGroups.ts index e8c52239..66f25aa0 100644 --- a/dashboard/src/data/sessionGroups.ts +++ b/dashboard/src/data/sessionGroups.ts @@ -12,9 +12,9 @@ import { qualifiedLeafKey } from "./taskIdentity"; // The G1 COMMAND TREE for the Chats pane (L14): the chats sidebar mirrors operations. Membership, // in precedence order, per session: // 1. COMMAND DECK (gold, top; exists ONLY when an orchestration task exists — D3): sessions with -// command-role spawn provenance (AR_SPAWN_ROLE orchestrator/strategist/manager recorded on the +// command-role spawn provenance (AR_SPAWN_ROLE architect/orchestrator/strategist/manager recorded on the // catalog row) plus any session whose leaf claim resolves INTO the orchestration task itself -// (its own qualified leaf, or a leaf in its folder) — the developer-facing orchestrator chat. +// (its own qualified leaf, or a leaf in its folder) — the developer-facing architect chat. // 2. MASTER GROUPS (one per claimed master folder): sessions whose qualified leaf key // (`repo/master/leaf-id`) resolves to a live enclosure of that master; the group takes the // purple management badge + one 22px indent step only when that master is commanded by an @@ -25,7 +25,7 @@ import { qualifiedLeafKey } from "./taskIdentity"; // Pure derivation — no persistence; collapse state is UI-local in the SessionList. /** The l-01 seats whose chats belong on the command deck. */ -const COMMAND_ROLES = new Set(["orchestrator", "strategist", "manager"]); +const COMMAND_ROLES = new Set(["architect", "orchestrator", "strategist", "manager"]); export interface SessionGroup { key: string; // "command" | `master:${folder}` | "landed" diff --git a/dashboard/src/data/terminal.ts b/dashboard/src/data/terminal.ts index 99fd5139..9dbaf7b5 100644 --- a/dashboard/src/data/terminal.ts +++ b/dashboard/src/data/terminal.ts @@ -281,7 +281,7 @@ export interface TerminalSessionInfo { /** The durable leaf-identity key (qualified leaf id `repo/master/leaf-id`) this chat claims. */ leafKey?: string; /** The AR_SPAWN_ROLE recorded at spawn (L14): the l-01 role this session was dispatched AS - * (orchestrator/strategist/manager/worker/reviewer/designer). Absent on hand-opened sessions. */ + * (architect/orchestrator/strategist/manager/worker/curator/reviewer/designer). Absent on hand-opened sessions. */ spawnRole?: string; cwd: string; tmuxName: string; diff --git a/dashboard/src/panels/FlowTab.test.tsx b/dashboard/src/panels/FlowTab.test.tsx index b77defb0..3423b82c 100644 --- a/dashboard/src/panels/FlowTab.test.tsx +++ b/dashboard/src/panels/FlowTab.test.tsx @@ -21,7 +21,7 @@ describe("FlowTab canvas (unified l-01-agent-lifecycles)", () => { const { getByTestId, getByText } = render(); fireEvent.click(getByTestId("flow-nav-orchestrator")); expect(getByTestId("flow-tab").getAttribute("data-model")).toBe("orchestrator"); - expect(getByText(/the event loop, drawn on its biggest run/)).not.toBeNull(); + expect(getByText(/backend event loop, drawn on its biggest run/)).not.toBeNull(); expect(getByTestId("flow-nav-orchestrator").getAttribute("aria-checked")).toBe("true"); expect(getByTestId("flow-nav-router").getAttribute("aria-checked")).toBe("false"); fireEvent.click(getByTestId("flow-nav-comms")); @@ -61,6 +61,15 @@ describe("FlowTab canvas (unified l-01-agent-lifecycles)", () => { getByText(/task doc \(approved\) → branch \(intent\) → worktree \(only where something is built\)/), ).not.toBeNull(); expect(getByText(/⟁ chat is never a build route — small code work takes the minimal w-02 artifact/)).not.toBeNull(); + expect(getByText(/developer-facing session → roles\/architect.md/)).not.toBeNull(); + }); + + it("draws the architect as the developer-facing owner and decision relay", () => { + const { getByTestId, getByText } = render(); + expect(getByTestId("flow-tab").getAttribute("data-model")).toBe("architect"); + expect(getByText(/developer-facing owner, drawing board, decision relay/)).not.toBeNull(); + expect(getByText(/backend decision-item → present ONE item, record the durable ruling/)).not.toBeNull(); + expect(getByText(/roles expand horizontally into new chats/)).not.toBeNull(); }); it("encodes the agreed orchestration invariants on the drawn models", () => { @@ -69,12 +78,12 @@ describe("FlowTab canvas (unified l-01-agent-lifecycles)", () => { expect(getByText(/reshape master boundaries — NEVER interleave dispatch/)).not.toBeNull(); expect(getByText(/creates a BRANCH off main, nothing more/)).not.toBeNull(); expect( - getByText(/the ORCHESTRATOR decides by the packet-carried gateId \(own ambient identity/), + getByText(/the BACKEND ORCHESTRATOR decides by the packet-carried gateId \(own ambient identity/), ).not.toBeNull(); - // The escalation ladder lives on the comms drawing; the spirit test is ORCHESTRATOR-ONLY. + // The escalation ladder lives on the comms drawing; the spirit test is limited to bird's-eye seats. fireEvent.click(getByTestId("flow-nav-comms")); - expect(getByText(/escalation · worker → manager → orchestrator → developer/)).not.toBeNull(); - expect(getByText(/spirit test — ORCHESTRATOR-ONLY/)).not.toBeNull(); + expect(getByText(/escalation · worker → manager → orchestrator → architect → developer/)).not.toBeNull(); + expect(getByText(/spirit test — BIRD'S-EYE SEAT ONLY: backend orchestrator or architect/)).not.toBeNull(); // Managers escalate plan deltas instead of judging them, and reopen wrong deliverables. fireEvent.click(getByTestId("flow-nav-manager")); expect(getByText(/managers don't reshape plans \(no bird's-eye\)/)).not.toBeNull(); @@ -84,7 +93,7 @@ describe("FlowTab canvas (unified l-01-agent-lifecycles)", () => { getByText(/enclosure="" — the exact address integration enforcement matches the gate by/), ).not.toBeNull(); expect( - getByText(/the returned gateId rides the packet via inbox \+ push · the ORCHESTRATOR decides the gate by that id/), + getByText(/the returned gateId rides the packet via inbox \+ push · the BACKEND ORCHESTRATOR decides the gate by that id/), ).not.toBeNull(); }); @@ -111,7 +120,7 @@ describe("FlowTab canvas (unified l-01-agent-lifecycles)", () => { getByText(/⟁ a leaf naming neither existing surfaces nor a parent anchor → finding: unplannable as scoped — never a silent guess/), ).not.toBeNull(); expect( - getByText(/reader-not-mutator: the strategist drafts; the ORCHESTRATOR adopts it into durable task form \(decision-log entry\)/), + getByText(/reader-not-mutator: the strategist drafts; the BACKEND ORCHESTRATOR adopts it into durable task form \(decision-log entry\)/), ).not.toBeNull(); }); @@ -125,7 +134,7 @@ describe("FlowTab canvas (unified l-01-agent-lifecycles)", () => { ).not.toBeNull(); fireEvent.click(getByTestId("flow-nav-comms")); expect( - getByText(/⟁ quo-vadis — a high-blast-radius TRUTH \(answered wrong = big rewrites later\) goes to the developer IMMEDIATELY; presentation-grade \(2px vs 3px\) never does/), + getByText(/⟁ quo-vadis — a high-blast-radius TRUTH \(answered wrong = big rewrites later\) goes to the architect relay IMMEDIATELY; presentation-grade \(2px vs 3px\) never does/), ).not.toBeNull(); fireEvent.click(getByTestId("flow-nav-reviewer")); expect( @@ -147,11 +156,11 @@ describe("FlowTab canvas (unified l-01-agent-lifecycles)", () => { ).not.toBeNull(); }); - it("draws the designer as the hat the orchestrator pulls", () => { + it("draws the designer as the hat the architect pulls", () => { const { getByTestId, getByText } = render(); expect(getByTestId("flow-tab").getAttribute("data-model")).toBe("designer"); - expect(getByText(/the hat the orchestrator pulls/)).not.toBeNull(); - expect(getByText(/ORCHESTRATOR adversarially reviews the design/)).not.toBeNull(); + expect(getByText(/the hat the architect pulls/)).not.toBeNull(); + expect(getByText(/BACKEND ORCHESTRATOR adversarially reviews the design/)).not.toBeNull(); expect(getByText(/ask — never fill silently/)).not.toBeNull(); }); @@ -161,7 +170,7 @@ describe("FlowTab canvas (unified l-01-agent-lifecycles)", () => { expect( getByText(/verdicts are evidence, not decisions — requireReviewerVerdictAtSeams binds delegated seam decisions/), ).not.toBeNull(); - expect(getByText(/the ORCHESTRATOR at master-exit \(master-handover-approval\)/)).not.toBeNull(); + expect(getByText(/the BACKEND ORCHESTRATOR at master-exit \(master-handover-approval\)/)).not.toBeNull(); expect(getByText(/⟁ block\? → decomposable fix leaves/)).not.toBeNull(); }); }); diff --git a/dashboard/src/panels/SessionList.test.tsx b/dashboard/src/panels/SessionList.test.tsx index 5cec124b..0ebcf3ad 100644 --- a/dashboard/src/panels/SessionList.test.tsx +++ b/dashboard/src/panels/SessionList.test.tsx @@ -284,4 +284,40 @@ describe("SessionList command tree (L14)", () => { expect(getByTestId("chats-session-role-a").textContent).toBe("manager"); expect(queryByTestId("chats-session-role-b")).toBeNull(); }); + + it("renders architect spawn-role as a known owner-tier chip", () => { + const { getByTestId } = render( + {}} + onTerminate={() => {}} + />, + ); + const architect = getByTestId("chats-session-role-architect"); + expect(architect.textContent).toBe("architect"); + expect(architect.getAttribute("data-known-role")).toBe("true"); + expect(getByTestId("chats-session-role-custom").getAttribute("data-known-role")).toBe("false"); + }); + + it("renders curator spawn-role as a known role chip", () => { + const { getByTestId } = render( + {}} + onTerminate={() => {}} + />, + ); + const curator = getByTestId("chats-session-role-curator"); + expect(curator.textContent).toBe("curator"); + expect(curator.getAttribute("data-known-role")).toBe("true"); + expect(getByTestId("chats-session-role-custom").getAttribute("data-known-role")).toBe("false"); + }); }); diff --git a/dashboard/src/panels/SessionList.tsx b/dashboard/src/panels/SessionList.tsx index 419dcb81..7885eca3 100644 --- a/dashboard/src/panels/SessionList.tsx +++ b/dashboard/src/panels/SessionList.tsx @@ -98,6 +98,10 @@ const roleChip = cva({ }, variants: { role: { + architect: { + color: "gold", + borderColor: "color-mix(in oklch, token(colors.gold) 45%, transparent)", + }, orchestrator: { color: "gold", borderColor: "color-mix(in oklch, token(colors.gold) 45%, transparent)", @@ -108,11 +112,22 @@ const roleChip = cva({ borderColor: "color-mix(in oklch, token(colors.purple) 45%, transparent)", }, worker: { color: "cyan" }, + curator: { color: "cyan" }, reviewer: { color: "amber" }, }, }, }); -const KNOWN_ROLES = new Set(["orchestrator", "strategist", "manager", "worker", "reviewer"]); +const ROLE_VALUES = [ + "architect", + "orchestrator", + "strategist", + "manager", + "worker", + "curator", + "reviewer", +] as const; +type KnownRole = (typeof ROLE_VALUES)[number]; +const KNOWN_ROLES: ReadonlySet = new Set(ROLE_VALUES); const actions = css({ display: "flex", alignItems: "stretch", @@ -222,6 +237,9 @@ export function SessionList({ // The full, untruncated name for the hover title (the label, plus its bound leaf) — the row // text-overflow-ellipses, so the title is how a long name stays readable (fix 4). const fullName = leafName ? `${session.label} · ${leafName}` : session.label; + const knownRole = session.spawnRole && KNOWN_ROLES.has(session.spawnRole) + ? (session.spawnRole as KnownRole) + : undefined; return ( {session.spawnRole ? ( {session.spawnRole} diff --git a/dashboard/src/panels/flowModels.ts b/dashboard/src/panels/flowModels.ts index 3e24f7e8..b2eee788 100644 --- a/dashboard/src/panels/flowModels.ts +++ b/dashboard/src/panels/flowModels.ts @@ -59,8 +59,8 @@ const ROUTER: FlowModel = { title: "router — one skill, one lifecycle per agent type", takeaway: "l-01-agent-lifecycles routes every session by EXACTLY three conditions: AR_SPAWN_ROLE set → " + - "run that role's lifecycle; else a role brief as first message → that role (the brief IS the " + - "session start); else the session is developer-facing → the ORCHESTRATOR. Edge cases are " + + "run that role's lifecycle; else a fresh-session role brief as first message → that role " + + "(the brief IS the session start); else the session is developer-facing → the ARCHITECT. Edge cases are " + "decided: an unresolvable role value falls through to the brief; a brief that never arrives " + "means announce-and-wait, never improvise. The invariant ladder binds every path: approved " + "task doc → branch (intent) → worktree only where something is built — and chat is never a " + @@ -73,18 +73,18 @@ const ROUTER: FlowModel = { lines: [ { line: "1 · AR_SPAWN_ROLE set → run roles/.md (designer = the same hat in another chair)" }, { line: "⟁ unresolvable value → fall through to condition 2 · no brief arrives → announce on the inbox and WAIT", junction: true }, - { line: "2 · first message is a role brief (templates/*-brief.md shape, or `ROLE BRIEF — `) → that role" }, - { line: "3 · otherwise: developer-facing session → roles/orchestrator.md (solo = the jobs with hats collapsed)" }, + { line: "2 · first message is a role brief in a fresh session → that role" }, + { line: "3 · otherwise: developer-facing session → roles/architect.md (solo = architect-only hat collapse)" }, ], }, - { kind: "divider", label: "— the event loop (orchestrator): route each event into a job —" }, + { kind: "divider", label: "— the owner loop (architect): route each developer event —" }, { kind: "rundown", - title: "jobs — Design · Portfolio · Orchestrate (+ research-only exit)", + title: "jobs — Design · Decision Relay · Spawn/Supervise (+ research-only exit)", lines: [ - { line: "no task doc for the ask → JOB D — pull the designer hat (no git surface)" }, - { line: "docs exist, coherence/order in question → JOB P — bulwark · reshape · the planner master (no git surface)" }, - { line: "approved series ready to implement → JOB O — super-branch INTENT (a branch, not a worktree) → dispatch" }, + { line: "developer shaping intent → Design — architect wears the designer hat (no git surface)" }, + { line: "backend decision item arrives → Decision Relay — one item, durable ruling back" }, + { line: "approved portfolio needs execution → spawn/supervise backend orchestrator or role seats" }, { line: "no code change → research-only exit — chat is the right medium" }, ], }, @@ -94,12 +94,49 @@ const ROUTER: FlowModel = { lines: [ { line: "task doc (approved) → branch (intent) → worktree (only where something is built)" }, { line: "⟁ chat is never a build route — small code work takes the minimal w-02 artifact", junction: true }, - { line: "hat-collapse: flat run → the orchestrator wears the manager hat · session scale → hands-on build" }, + { line: "hat-collapse: flat run → architect may wear backend hats; spawned seats never absorb another role brief" }, ], }, ], }; +// --- architect (developer-facing owner seat) ----------------------------------------------------- + +const ARCHITECT: FlowModel = { + id: "architect", + label: "Architect", + title: "architect — developer-facing owner, drawing board, decision relay", + takeaway: + "The architect is the developer-facing lifecycle. It owns design conversation, drawing-board " + + "rounds, decision pacing, and durable rulings back to backend seats. Backend churn happens in " + + "spawned role chats; developer-worthy backend questions arrive as one decision item at a time " + + "over the existing inbox.", + segments: [ + { kind: "start", label: "▸ developer-facing session — trust checkpoint + portfolio/decision orientation", next: "route", nextStatus: "current" }, + { + kind: "rundown", + title: "route the event", + lines: [ + { line: "intent / requirements / scope → wear roles/designer.md inline and author/reshape task docs" }, + { line: "backend decision-item → present ONE item, record the durable ruling, return decision-ruling" }, + { line: "approved execution → spawn backend orchestrator / strategist / manager / worker / reviewer as separate chats" }, + { line: "small unspawned work → solo/flat hat-collapse under the architect lifecycle" }, + ], + }, + { + kind: "rundown", + title: "decision-item relay — existing inbox, no new queue", + lines: [ + { line: "backend posts: decision · options · consequences · evidence refs" }, + { line: "architect presents one item at the developer's pace; underspecified items get one clarification row" }, + { line: "ruling lands in openQuestions / decision logs / notes, then returns as decision-ruling" }, + ], + }, + { kind: "node", phase: "spawn", tool: "spawn_agent_session", detail: "roles expand horizontally into new chats; sub-agents drill vertically for analysis only", next: "backend acts", nextStatus: "current" }, + { kind: "node", phase: "close", tool: "durable ruling", detail: "the backend waits for the ruling row before acting on the developer-facing decision" }, + ], +}; + // --- strategist (the sprint planner, spawn-first) ------------------------------------------------ const STRATEGIST: FlowModel = { @@ -109,13 +146,13 @@ const STRATEGIST: FlowModel = { takeaway: "A strategist run is a MANDATORY precondition for any orchestrated run — even a single master " + "gets the pass. Spawn-first by design: portfolio analysis is token-heavy, so it runs as its " + - "own process (the designer stays an inline hat; the strategist never is one). The orchestrator " + + "own process (the designer stays an architect inline hat; the strategist never is one). The backend orchestrator " + "dispatches it with a portfolio brief carrying REFS to durable state, never pasted state. It " + "runs an eight-phase method — inventory, two-sided touch surfaces, evidence-cited dependency " + "edges, blast-radius register, coherence sweep, ordering — and delivers the ORCHESTRATION " + "TASK: the sprint plan and the sprint scope. The plan is adversarially reviewed (plan-review " + - "catalog), then converges over drawing-board rounds with the developer. The strategist READS " + - "everything and MUTATES nothing — the orchestrator adopts the draft.", + "catalog), then converges over drawing-board rounds through the architect. The strategist READS " + + "everything and MUTATES nothing — the backend orchestrator adopts the draft.", segments: [ { kind: "start", label: "▸ spawned before an orchestrated run may begin (AR_SPAWN_ROLE=strategist) — portfolio brief = session start", next: "the mandatory pre-run gate", nextStatus: "proposed" }, { @@ -139,27 +176,27 @@ const STRATEGIST: FlowModel = { ], }, { kind: "node", phase: "deliver", tool: "the ORCHESTRATION TASK", detail: "sprint scope · dependency graph with per-edge evidence · blast-radius register · coherence findings · leaf moves · waves · re-evaluation triggers — drafted as a notes artifact", next: "plan review", nextStatus: "proposed" }, - { kind: "node", phase: "loop", tool: "plan review (plan-review catalog)", detail: "the portfolio three-party loop: owner = orchestrator · builder = strategist · reviewer refutes uncited edges, hunts missed shared surfaces, re-derives blast radii", rides: "portfolio loop", ridesNote: "⊘ verdicts are evidence — the orchestrator rules; 3 full rounds max, convergence required", next: "drawing-board rounds", nextStatus: "proposed" }, - { kind: "node", phase: "converge", tool: "drawing-board rounds (developer)", detail: "multi-round convergence EXPECTED — the orchestrator relays · ⟁ quo-vadis (masters heavily disagreeing) → straight to the developer", next: "adoption", nextStatus: "proposed" }, - { kind: "node", phase: "handover", tool: "orchestrator adopts the plan", detail: "reader-not-mutator: the strategist drafts; the ORCHESTRATOR adopts it into durable task form (decision-log entry)", next: "session ends", nextStatus: "proposed" }, + { kind: "node", phase: "loop", tool: "plan review (plan-review catalog)", detail: "the portfolio three-party loop: owner = backend orchestrator · builder = strategist · reviewer refutes uncited edges, hunts missed shared surfaces, re-derives blast radii", rides: "portfolio loop", ridesNote: "⊘ verdicts are evidence — the backend orchestrator rules; 3 full rounds max, convergence required", next: "drawing-board rounds", nextStatus: "proposed" }, + { kind: "node", phase: "converge", tool: "drawing-board rounds (architect/developer)", detail: "multi-round convergence EXPECTED — backend emits decision items · ⟁ quo-vadis (masters heavily disagreeing) → architect relay", next: "adoption", nextStatus: "proposed" }, + { kind: "node", phase: "handover", tool: "backend orchestrator adopts the plan", detail: "reader-not-mutator: the strategist drafts; the BACKEND ORCHESTRATOR adopts it into durable task form (decision-log entry)", next: "session ends", nextStatus: "proposed" }, { kind: "node", phase: "close", tool: "session ends", detail: "the orchestration task remains the sprint's standing scope" }, ], }; -// --- orchestrator (260703-ORCH) ---------------------------------------------------------------- +// --- orchestrator (spawned backend) -------------------------------------------------------------- const ORCHESTRATOR: FlowModel = { id: "orchestrator", label: "Orchestrator", - title: "orchestrator — the event loop, drawn on its biggest run (Job O)", + title: "orchestrator — backend event loop, drawn on its biggest run (Job O)", takeaway: - "The developer-facing lifecycle is an EVENT LOOP over durable portfolio state: every session " + + "The orchestrator is a spawned backend EVENT LOOP over durable portfolio state: every session " + "(resumption is the common case) opens with the trust checkpoint + PORTFOLIO ORIENTATION, then " + - "routes the event — Design (the hat), Portfolio, Orchestrate, or a research-only exit. Below is " + + "routes backend events from the architect, managers, workers, reviewers, or its own findings. Below is " + "the biggest shape, an orchestrated run: streamline → portfolio gate → super-branch INTENT (a " + "branch, not a worktree) → dependency-ordered dispatch → decide each master-handover gate → " + - "integrate per-edge in a transient worktree → super-exit review → developer handover. Human " + - "review concentrates at the SUPER gate; the orchestrator closes with grounded self-improvement " + + "integrate per-edge in a transient worktree → super-exit review → architect-mediated developer handover. Human " + + "review concentrates at the SUPER gate through the architect; the orchestrator closes with grounded self-improvement " + "proposals — never automated self-modification.", segments: [ { kind: "start", label: "▸ event: \"orchestrate these masters\" — after trust checkpoint + portfolio orientation", next: "profile-fit check", nextStatus: "proposed" }, @@ -169,7 +206,7 @@ const ORCHESTRATOR: FlowModel = { lines: [ { line: "profile-fit check — right harness/model/effort for the orchestrator job?" }, { line: "⟁ wrong profile? → spawn_agent_session(orchestrator) + conversation-handover packet → takeover", junction: true }, - { line: "seat = FIRST coordination leaf (task_doc, no enclosure) · chat attached by leaf id" }, + { line: "seat = spawned backend coordination leaf (task_doc, no enclosure) · chat attached by leaf id" }, ], }, { @@ -181,19 +218,19 @@ const ORCHESTRATOR: FlowModel = { { line: "reshape proposals — leaf moves (planning-status only) · foundation-master extraction · mixed masters first-or-last" }, { line: "⟁ interleaved leaf-level cross-deps? → reshape master boundaries — NEVER interleave dispatch", junction: true }, { line: "dependency DAG — must be expressible at MASTER granularity" }, - { line: "STRATEGIST pre-run — spawn-first, MANDATORY before any orchestrated run → the ORCHESTRATION TASK = sprint plan + scope (drawing-board rounds; the orchestrator adopts)" }, + { line: "STRATEGIST pre-run — spawn-first, MANDATORY before any orchestrated run → the ORCHESTRATION TASK = sprint plan + scope (drawing-board rounds through architect; backend orchestrator adopts)" }, ], }, - { kind: "node", phase: "portfolio · gate", tool: "portfolio plan gate", detail: "developer approves the reshaped portfolio + the orchestration task (sprint scope + DAG + dispatch order) — one wholesale review", rides: "plan-approval", ridesNote: "⊘ the streamlining output is a PROPOSAL — no silent rewrites of dev-accepted tasks", next: "create super integration branch", nextStatus: "proposed" }, + { kind: "node", phase: "portfolio · gate", tool: "portfolio plan gate", detail: "architect presents the reshaped portfolio + orchestration task for developer approval — one wholesale review", rides: "plan-approval", ridesNote: "⊘ the streamlining output is a PROPOSAL — no silent rewrites of accepted tasks", next: "create super integration branch", nextStatus: "proposed" }, { kind: "node", phase: "topology", tool: "super-branch INTENT", detail: "creates a BRANCH off main, nothing more — masters base off IT; the orchestrator worktree exists only per integration edge", next: "dispatch loop", nextStatus: "proposed" }, { kind: "divider", label: "↺ dependency-ordered dispatch loop — send out the next READY master's manager ↺" }, { kind: "node", phase: "dispatch", tool: "spawn_agent_session (manager)", detail: "manager-brief.md · AR_SPAWN_ROLE=manager · qualified leaf key · base = the CURRENT super tip", next: "monitor", nextStatus: "proposed" }, { kind: "node", phase: "monitor", tool: "monitor + steer", detail: "turn reports · nudges · escalations · spirit test on deltas · a wrong deliverable REOPENS its leaf (task_reopen) — never a redo sibling", next: "master handover", nextStatus: "proposed" }, - { kind: "node", phase: "handover", tool: "decide master-handover-approval", detail: "the manager RAISED it (wait=false) with the verdict attached — the ORCHESTRATOR decides by the packet-carried gateId (own ambient identity; owner-never-self-approves holds; the policy may require the verdict)", rides: "master-handover-approval", ridesNote: "⊘ seam 1 of 2 — happy path through the orchestrator; a handover it cannot honestly decide escalates to the developer", next: "integrate master → super", nextStatus: "proposed" }, + { kind: "node", phase: "handover", tool: "decide master-handover-approval", detail: "the manager RAISED it (wait=false) with the verdict attached — the BACKEND ORCHESTRATOR decides by the packet-carried gateId (own ambient identity; owner-never-self-approves holds; the policy may require the verdict)", rides: "master-handover-approval", ridesNote: "⊘ seam 1 of 2 — happy path through the backend orchestrator; an undecidable handover escalates to the architect", next: "integrate master → super", nextStatus: "proposed" }, { kind: "node", phase: "integrate", tool: "integrate master → super (C-11)", detail: "orchestrator WORKTREE with super as source · merge/carry-over · memory single-siding · ledger maps every commit", next: "↺ next ready master — until the DAG is drained", nextStatus: "proposed" }, { kind: "divider", label: "↓ DAG drained — the super branch holds the accumulated change set ↓" }, - { kind: "node", phase: "seam 2", tool: "super-exit adversarial review", detail: "wholesale verdict on the super branch: completion vs tasks · quality · onboarding-vs-code", rides: "super-exit seam", ridesNote: "⊘ adversarial review seam 2 of 2 — before the orchestrator hands over to the developer", next: "developer handover", nextStatus: "proposed" }, - { kind: "node", phase: "handover", tool: "developer review — super level", detail: "the developer's SINGLE review point (integrations below are orchestrator-delegated): visible-behavior-first in a REVIEWABLE ENVIRONMENT (the dashboard) with demo notes (what changed visibly), code second · ⟁ rejected? → decompose feedback into fix leaves ↺ reactive dispatch", rides: "integration-approval", next: "super → main PR", nextStatus: "proposed" }, + { kind: "node", phase: "seam 2", tool: "super-exit adversarial review", detail: "wholesale verdict on the super branch: completion vs tasks · quality · onboarding-vs-code", rides: "super-exit seam", ridesNote: "⊘ adversarial review seam 2 of 2 — before the backend orchestrator hands evidence to the architect", next: "architect handover", nextStatus: "proposed" }, + { kind: "node", phase: "handover", tool: "architect-mediated developer review — super level", detail: "the developer's SINGLE review point (integrations below are orchestrator-delegated): visible-behavior-first in a REVIEWABLE ENVIRONMENT (the dashboard) with demo notes (what changed visibly), code second · ⟁ rejected? → decompose feedback into fix leaves ↺ reactive dispatch", rides: "integration-approval", next: "super → main PR", nextStatus: "proposed" }, { kind: "node", phase: "land", tool: "super → main PR + carry-over", detail: "remote merge · memory carried to main-memory · push (git-workflow.md tail)", next: "close + propose", nextStatus: "current" }, { kind: "node", phase: "close", tool: "self-improvement report", detail: "did x/y/z · hit a/b/c · a,b solved on the spot · c PROPOSES this change — grounded in the accumulated backdrop", next: "lifecycle_end", nextStatus: "proposed" }, { kind: "node", phase: "close", tool: "lifecycle_end", detail: "terminal — durable notes/reports remain the record" }, @@ -207,15 +244,15 @@ const MANAGER: FlowModel = { label: "Manager", title: "manager — one master, leaf loop → master-exit handover", takeaway: - "Spawned by the orchestrator with a manager brief (its entire session start). Owns exactly one " + + "Spawned by the backend orchestrator (or architect in a flat run) with a manager brief (its entire session start). Owns exactly one " + "master: dispatches a fresh worker per leaf, reviews turn reports, decides DELEGATED leaf gates " + "(plan · closeout — the owning agent never self-approves), owns the leaf lifecycle end-to-end " + "(worktree_start → closeout → integrate → finalize), and REOPENS a leaf whose deliverable came " + "out wrong. At master exit it spawns the reviewer, then RAISES master-handover-approval with " + - "the verdict attached — the ORCHESTRATOR decides it. In a flat run the orchestrator wears this " + - "hat. Escalation: to the orchestrator, never straight to the developer.", + "the verdict attached — the BACKEND ORCHESTRATOR decides it. In a flat run the architect may wear this " + + "hat. Escalation: to the backend orchestrator, then architect if needed, never straight to the developer.", segments: [ - { kind: "start", label: "▸ spawned by the orchestrator — manager-brief.md pasted + submitted (the brief is the session start)", next: "seat", nextStatus: "proposed" }, + { kind: "start", label: "▸ spawned by backend orchestrator/architect — manager-brief.md pasted + submitted (the brief is the session start)", next: "seat", nextStatus: "proposed" }, { kind: "rundown", title: "seat · intake", @@ -223,7 +260,7 @@ const MANAGER: FlowModel = { { line: "seat = own coordination leaf (task_doc, no enclosure) · chat attached — the dev can walk in any time" }, { line: "read the master task_doc + leaf docs · order leaves (parallel where safe — C-11 reconcile absorbs a moved base)" }, { line: "default behavior stands: fulfill the task, fill small blanks — no extra creative-liberty prompting either way" }, - { line: "⟁ plan delta beyond filling blanks? → escalate to the ORCHESTRATOR — managers don't reshape plans (no bird's-eye)", junction: true }, + { line: "⟁ plan delta beyond filling blanks? → escalate to the BACKEND ORCHESTRATOR — managers don't reshape plans (no bird's-eye)", junction: true }, { line: "score each leaf's loop tier at dispatch — direct · builder-verified · full loop (the strategist's blast-radius register is the input; all-direct = workflow-free manager)" }, { line: "⟁ full-loop leaves: HARD cap 3 full rounds (delta-verifies don't count) · a non-shrinking round escalates NOW with the round history", junction: true }, ], @@ -236,7 +273,7 @@ const MANAGER: FlowModel = { { kind: "node", phase: "integrate", tool: "integrate leaf → master branch (C-11)", detail: "ff-only / replay per c-09 · a durable gate here is integration-approval — HUMAN-pinned · ↺ next leaf until done", next: "master-exit review", nextStatus: "current" }, { kind: "divider", label: "↓ all leaves landed on the master integration branch ↓" }, { kind: "node", phase: "seam 1", tool: "master-exit adversarial review", detail: "spawn reviewer (AR_SPAWN_ROLE=reviewer) · verdict: completion · quality · onboarding-vs-code · ⟁ blocked? → fix leaves ↺", rides: "master-exit seam", next: "handover to orchestrator", nextStatus: "proposed" }, - { kind: "node", phase: "handover", tool: "RAISE master-handover-approval (wait=false) + packet", detail: "gate raised without blocking (wait=false) with enclosure=\"\" — the exact address integration enforcement matches the gate by — and the verdict attached (evidenceRefs) · the returned gateId rides the packet via inbox + push · the ORCHESTRATOR decides the gate by that id", rides: "master-handover-approval", ridesNote: "⊘ delegable, never human-pinned — human review concentrates at the super gate", next: "seat stays reachable", nextStatus: "proposed" }, + { kind: "node", phase: "handover", tool: "RAISE master-handover-approval (wait=false) + packet", detail: "gate raised without blocking (wait=false) with enclosure=\"\" — the exact address integration enforcement matches the gate by — and the verdict attached (evidenceRefs) · the returned gateId rides the packet via inbox + push · the BACKEND ORCHESTRATOR decides the gate by that id", rides: "master-handover-approval", ridesNote: "⊘ delegable, never human-pinned — human review concentrates at the super gate through architect", next: "seat stays reachable", nextStatus: "proposed" }, { kind: "node", phase: "close", tool: "seat remains", detail: "chat + coordination leaf stay reachable until the series retires" }, ], }; @@ -253,7 +290,7 @@ const WORKER: FlowModel = { "same-pass onboarding, gets the checks green, and ends at the MANDATORY turn report. It owns no " + "lifecycle machinery — closeout, integration, finalization, and gates belong to the owning " + "seat — and it never git-commits. A plan delta beyond blank-filling escalates one rung to the " + - "owning seat; the spirit test lives with the orchestrator, not here.", + "owning seat; the spirit test lives with the backend orchestrator or architect owner, not here.", segments: [ { kind: "start", label: "▸ spawned on a leaf — worker-brief.md pasted + submitted (the brief is the session start)", next: "orient", nextStatus: "current" }, { @@ -283,8 +320,8 @@ const COMMS: FlowModel = { "Three channels compose: the inbox is the durable, dashboard-visible QUEUE; stdin push is the " + "DELIVERY for AR-hosted sessions (no poll loops); turn-report artifacts are the REPORTING that " + "survives compaction and session death. Nudges ride trustworthy inactivity signals (the reform " + - "series). Escalation ladders worker → manager → orchestrator → developer with no skipping, and " + - "the spirit test decides autonomy at every level. One handover-packet schema serves master " + + "series). Escalation ladders worker → manager → backend orchestrator → architect → developer with no skipping, and " + + "decision-item relay keeps developer-worthy backend questions moving one at a time. One handover-packet schema serves master " + "handover, role takeover, and worker respawn.", segments: [ { @@ -293,7 +330,7 @@ const COMMS: FlowModel = { lines: [ { line: "inbox — operator_inbox generalized to agent→agent addressing; every message durable + dashboard-visible" }, { line: "stdin push — echo-confirmed PTY injection delivers queued messages to hosted sessions (poll = fallback only)" }, - { line: "turn-report artifacts — templated, durable; the orchestrator's own reports are the most important in the system" }, + { line: "turn-report artifacts — templated, durable; backend orchestrator reports carry the whole-series picture" }, { line: "chats — every seat has a leaf-attached chat; the developer can walk into any conversation at any level" }, ], }, @@ -312,14 +349,14 @@ const COMMS: FlowModel = { { kind: "divider", label: "— the escalation ladder — no level skipped —" }, { kind: "rundown", - title: "escalation · worker → manager → orchestrator → developer", + title: "escalation · worker → manager → orchestrator → architect → developer", lines: [ - { line: "each level resolves within its own view first; what reaches the developer is decided by the quo-vadis test" }, + { line: "each level resolves within its own view first; what reaches the developer is relayed by the architect after the quo-vadis test" }, { line: "workers/managers: fulfill the task, fill small blanks — plan deltas ESCALATE; no spirit judgment below the bird's-eye" }, { line: "loops: HARD cap 3 full rounds (delta-verifies close rounds) · convergence rule — a round that does not shrink the finding set escalates NOW, with the full round history attached" }, - { line: "⟁ quo-vadis — a high-blast-radius TRUTH (answered wrong = big rewrites later) goes to the developer IMMEDIATELY; presentation-grade (2px vs 3px) never does", junction: true }, - { line: "⟁ spirit test — ORCHESTRATOR-ONLY: within the spirit of accepted plans → act + decision-log entry", junction: true }, - { line: "⟁ against the spirit → JOINT decision with the developer (the unanticipated-wrench case)", junction: true }, + { line: "⟁ quo-vadis — a high-blast-radius TRUTH (answered wrong = big rewrites later) goes to the architect relay IMMEDIATELY; presentation-grade (2px vs 3px) never does", junction: true }, + { line: "⟁ spirit test — BIRD'S-EYE SEAT ONLY: backend orchestrator or architect, within the spirit of accepted plans → act + decision-log entry", junction: true }, + { line: "⟁ against the spirit → architect-mediated developer decision (the unanticipated-wrench case)", junction: true }, ], }, { kind: "node", phase: "handover", tool: "handover packet (one schema)", detail: "master-complete handover · role takeover (profile-fit) · worker respawn — request, decisions, constraints, links, open questions", next: "receiver onboards from state, not transcript", nextStatus: "proposed" }, @@ -331,17 +368,17 @@ const COMMS: FlowModel = { const DESIGNER: FlowModel = { id: "designer", label: "Designer", - title: "designer — the hat the orchestrator pulls", + title: "designer — the hat the architect pulls", takeaway: "Task design is its own job, worn as a HAT: it cannot sit in a coordination leaf because the " + - "task is what it exists to create — the orchestrator runs roles/designer.md inline, at the " + + "task is what it exists to create — the architect runs roles/designer.md inline, at the " + "front of the pipeline AND mid-flight, helping the developer think a master through — the tasks/AGENTS.md doctrine (meta-questioning, reframe before execution, " + - "evidence-first) given a distinct, optimized shape. It shares the orchestrator's bird's-eye " + + "evidence-first) given a distinct, optimized shape. It shares the architect's bird's-eye " + "toolkit (route indexes · onboarding · grepai · cgc · blast radius) but is SCOPED to one master — " + "collisions with other or FUTURE masters can slip. That residual risk is owned downstream: at " + - "portfolio streamlining the ORCHESTRATOR doubles as the designer's adversarial reviewer.", + "portfolio streamlining the BACKEND ORCHESTRATOR doubles as the designer's adversarial reviewer.", segments: [ - { kind: "start", label: "▸ developer intent, no task doc yet — the orchestrator pulls the designer hat (Job D)", next: "co-design loop", nextStatus: "current" }, + { kind: "start", label: "▸ developer intent, no task doc yet — the architect pulls the designer hat", next: "co-design loop", nextStatus: "current" }, { kind: "rundown", title: "co-design loop · the tasks/AGENTS.md doctrine, as a job", @@ -355,7 +392,7 @@ const DESIGNER: FlowModel = { { kind: "node", phase: "reframe", tool: "reframe agreement", detail: "the developer agrees the frame before structure exists", rides: "reframe", ridesNote: "⊘ material scope/intent/sequencing changes are played back and WAIT for confirmation (tasks/AGENTS.md)", next: "task_doc authoring", nextStatus: "proposed" }, { kind: "node", phase: "author", tool: "task_doc authoring", detail: "master + leaves · requirements · steps · code examples (w-02 shape) · leaves scoped around routes/areas", next: "declare the limits", nextStatus: "current" }, { kind: "node", phase: "limits", tool: "designer limits note", detail: "master-scoped bird's-eye: cross-master and FUTURE-master collisions can slip — declared on the doc, never hidden", next: "handover → portfolio", nextStatus: "proposed" }, - { kind: "node", phase: "handover", tool: "join the portfolio", detail: "at streamlining the ORCHESTRATOR adversarially reviews the design — planned-vs-planned AND planned-vs-past", next: "(orchestrator · portfolio phase)", nextStatus: "proposed" }, + { kind: "node", phase: "handover", tool: "join the portfolio", detail: "at streamlining the BACKEND ORCHESTRATOR adversarially reviews the design — planned-vs-planned AND planned-vs-past", next: "(backend orchestrator · portfolio phase)", nextStatus: "proposed" }, ], }; @@ -367,12 +404,12 @@ const REVIEWER: FlowModel = { title: "adversarial reviewer — verdicts are evidence, not decisions", takeaway: "Spawned at exactly two seams: MASTER-EXIT (before a manager hands its integration branch to the " + - "orchestrator) and SUPER-EXIT (before the orchestrator hands the super branch to the developer). " + + "orchestrator) and SUPER-EXIT (before the backend orchestrator hands the super branch to the architect/developer). " + "It reviews the accumulated change set through three lenses — completion vs task docs, code " + "quality per tools.md, and onboarding-vs-code — fanning out sub-agents that write durable " + "reports. Its verdict is a templated artifact that attaches to the handover gate as JUDGE " + - "evidence; the decider decides — the ORCHESTRATOR at master-exit (master-handover-approval), " + - "the DEVELOPER at super-exit. A blocking verdict must decompose into fix leaves — findings, " + + "evidence; the decider decides — the BACKEND ORCHESTRATOR at master-exit (master-handover-approval), " + + "the architect/developer review at super-exit. A blocking verdict must decompose into fix leaves — findings, " + "never prose complaints. The same seat serves every three-party loop's review (leaf full-loop, " + "portfolio plan review) with its type's criteria catalog — criteria are never made up on the spot.", segments: [ @@ -397,4 +434,4 @@ const REVIEWER: FlowModel = { ], }; -export const FLOW_MODELS: FlowModel[] = [ROUTER, DESIGNER, STRATEGIST, ORCHESTRATOR, MANAGER, WORKER, REVIEWER, COMMS]; +export const FLOW_MODELS: FlowModel[] = [ROUTER, ARCHITECT, DESIGNER, STRATEGIST, ORCHESTRATOR, MANAGER, WORKER, REVIEWER, COMMS]; diff --git a/docs/features.md b/docs/features.md index f865dbd8..5b45250a 100644 --- a/docs/features.md +++ b/docs/features.md @@ -295,7 +295,7 @@ worktree and thrown away with it. Memory is only as good as the discipline that keeps it honest, and that discipline is the second half of the product. Sessions route by role through one skill (`l-01-agent-lifecycles`): a spawned agent follows the role brief -that spawned it, and a developer-facing session is the **orchestrator**, whose +that spawned it, and a developer-facing session is the **architect**, whose lifecycle runs ```text diff --git a/docs/getting-started.md b/docs/getting-started.md index dec6b5da..10cbfdf9 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -190,7 +190,7 @@ Providers are optional — memory, onboarding, drift, and task workflows all wor ## Start Working -Sessions route by role through the `l-01-agent-lifecycles` skill: a developer-facing session is the **orchestrator** and runs the orchestrator lifecycle (request → trust-checkpoint → reframe-research → decide → build → close); a spawned agent follows the role brief that spawned it. For normal tasks the agent should: +Sessions route by role through the `l-01-agent-lifecycles` skill: a developer-facing session is the **architect** and runs the architect lifecycle (request → trust-checkpoint → reframe-research → decide → build → close); spawned backend orchestrators and other role seats follow the role briefs that spawned them. For normal tasks the agent should: 1. resolve the repository context with `c-08-ar-coordination-context-resolver` 2. run `c-02-memory-quality-control` before planning against onboarding diff --git a/docs/install/claude-code.md b/docs/install/claude-code.md index 7a81e387..110b09cb 100644 --- a/docs/install/claude-code.md +++ b/docs/install/claude-code.md @@ -73,15 +73,15 @@ If `AR_SPAWN_ROLE` is set, or your first user message is a role brief from an orchestrating agent: **ignore this notice entirely — your brief is your session start.** -Otherwise you are the developer-facing session, i.e. the **orchestrator**: read +Otherwise you are the developer-facing session, i.e. the **architect**: read `ar-coordination/AGENTS.md`, then run your lifecycle at -`skills/l-01-agent-lifecycles/roles/orchestrator.md` — trust checkpoint before +`skills/l-01-agent-lifecycles/roles/architect.md` — trust checkpoint before relying on memory, `read_ar_files` (paired source+onboarding) until the build decision, retrieval-strategy tally as evidence, notify-and-stop at every developer hand-off. ``` -The directive is orchestrator-exclusive by design: a spawned role's session +The directive is architect-exclusive by design: a spawned role's session start is the role brief its orchestrating agent compiled, so the hook tells spawned sessions to ignore it in one sentence and addresses only the developer-facing session. diff --git a/docs/llms.txt b/docs/llms.txt index 13a1bbec..d49f7e0c 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -297,7 +297,7 @@ worktree and thrown away with it. Memory is only as good as the discipline that keeps it honest, and that discipline is the second half of the product. Sessions route by role through one skill (`l-01-agent-lifecycles`): a spawned agent follows the role brief -that spawned it, and a developer-facing session is the **orchestrator**, whose +that spawned it, and a developer-facing session is the **architect**, whose lifecycle runs ```text diff --git a/docs/reference/settings-json.md b/docs/reference/settings-json.md index 059c8c62..a8a783a3 100644 --- a/docs/reference/settings-json.md +++ b/docs/reference/settings-json.md @@ -287,7 +287,7 @@ Read cadence above). ### orchestration.roles, orchestration.rolesPerLevel `orchestration.roles.` overrides a role file's knob block per role -(`orchestrator`, `designer`, `strategist`, `manager`, `worker`, `reviewer`). +(`architect`, `orchestrator`, `designer`, `strategist`, `manager`, `worker`, `curator`, `reviewer`). Precedence: role-file defaults < global settings < repo-local settings. The knobs come in a THREE-LAYER model (260703-L16; the full spawn-surface manual with every parameter, vocabulary, and refusal is @@ -363,9 +363,11 @@ argv is definable only in the explicit `orchestration.harnesses` family. ```jsonc "orchestration": { "roles": { + "architect": { "harness": "claude", "effort": "high" }, "orchestrator": { "harness": "claude", "effort": "high" }, "strategist": { "effort": "ultracode" }, // session-vocabulary value → "/effort ultracode" post-launch "reviewer": { "harness": "claude", "model": "sonnet", "effort": "high" }, + "curator": { "harness": "codex", "effort": "medium" }, "worker": { "harness": "codex", "effort": "medium" } }, "rolesPerLevel": { diff --git a/docs/reference/skills.md b/docs/reference/skills.md index 451c7bef..09356bea 100644 --- a/docs/reference/skills.md +++ b/docs/reference/skills.md @@ -26,7 +26,7 @@ package skill folder. The pre-push hook runs | Skill | Purpose | | --- | --- | -| `l-01-agent-lifecycles` | The agent lifecycles, one per agent type under one roof. Routes every session by exactly three conditions (spawn-role env → role brief → otherwise orchestrator), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (orchestrator · designer · strategist · manager · worker · adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. The orchestrator lifecycle (request → trust-checkpoint → reframe-research → decide → build → close) owns the research-only exit and the build-mode decision; a developer-facing session IS the orchestrator. | +| `l-01-agent-lifecycles` | The agent lifecycles, one per agent type under one roof. Routes every session by exactly three conditions (spawn-role env → fresh role brief → otherwise architect), carries the minimal lifecycle frame (the six lifecycle signals every session shares), and houses the self-contained per-role lifecycles (architect · backend orchestrator · designer · strategist · manager · worker · curator · adversarial reviewer) plus the report-template library and the reviewer criteria catalogs. The architect lifecycle (request → trust-checkpoint → reframe-research → decide → build → close) owns the developer-facing research-only exit and build decision; backend orchestrators run as spawned seats. | | `w-02-light-task-workflow` | Durable one-page task plan with approval gate and live checklist; escalates to a master + light sub-task series for larger work. | ## Core Skills diff --git a/docs/workflows.md b/docs/workflows.md index 45657af7..34a8ba1b 100644 --- a/docs/workflows.md +++ b/docs/workflows.md @@ -2,11 +2,11 @@ Sessions route by role through the **`l-01-agent-lifecycles`** skill — one lifecycle per agent type, selected by exactly three conditions: a spawn-role environment variable runs that role's -lifecycle, otherwise a role brief as the first message runs that role, otherwise the session is -developer-facing and runs the **orchestrator** lifecycle. The orchestrator's phase axis is +lifecycle, otherwise a fresh-session role brief as the first message runs that role, otherwise the +session is developer-facing and runs the **architect** lifecycle. The architect's phase axis is request → trust-checkpoint → reframe-research → decide → build → close. The job type (bug / feature / triage / research) is a lens during reframe-research, not a gate. -The only task-format decision is the orchestrator lifecycle's build-mode step. +The only task-format decision is the architect lifecycle's build-mode step. ## Shared Discipline @@ -14,13 +14,13 @@ Every build keeps these rules: 1. Resolve the active context with `c-08-ar-coordination-context-resolver`. 2. Run drift detection before planning against onboarding. -3. Wait for developer approval before implementation (the orchestrator lifecycle's plan gate). +3. Wait for developer approval before implementation (the architect lifecycle's plan gate). 4. Update onboarding only after approved changes, live per completed plan-section. 5. Run the checks listed in the resolved memory layer's `system/tools.md` when available. ## Build Modes -At `decide`, the orchestrator lifecycle picks one of: +At `decide`, the architect lifecycle picks one of: ### Research-only exit diff --git a/mcp/src/agents_remember/controlplane/orchestration_artifacts.py b/mcp/src/agents_remember/controlplane/orchestration_artifacts.py index cce52d7f..b139a7fc 100644 --- a/mcp/src/agents_remember/controlplane/orchestration_artifacts.py +++ b/mcp/src/agents_remember/controlplane/orchestration_artifacts.py @@ -8,15 +8,26 @@ from pydantic import BaseModel, ConfigDict, Field -OrchestrationRole = Literal["designer", "strategist", "orchestrator", "manager", "worker", "reviewer"] +OrchestrationRole = Literal[ + "architect", + "designer", + "strategist", + "orchestrator", + "manager", + "worker", + "curator", + "reviewer", +] EscalationReason = Literal["blocked", "plan-delta", "quality-failure", "missing-artifact"] _ROLE_ESCALATION: dict[OrchestrationRole, OrchestrationRole | Literal["developer"]] = { "worker": "manager", "manager": "orchestrator", - "orchestrator": "developer", - "designer": "orchestrator", + "orchestrator": "architect", + "architect": "developer", + "designer": "architect", "strategist": "orchestrator", + "curator": "manager", "reviewer": "orchestrator", } _SAFE_STEM = re.compile(r"[^A-Za-z0-9_.-]+") diff --git a/mcp/src/agents_remember/kernel/agentic_settings.py b/mcp/src/agents_remember/kernel/agentic_settings.py index 7b0dddbe..07bb513d 100644 --- a/mcp/src/agents_remember/kernel/agentic_settings.py +++ b/mcp/src/agents_remember/kernel/agentic_settings.py @@ -95,8 +95,19 @@ class AgenticSettingsError(AgentsRememberError): # The dispatch-time complexity scale (blast radius x novelty x size) the loop # thresholds are expressed on (l-01 The Three-Party Loop). COMPLEXITY_SCALE = ("low", "medium", "high") -# The six portable role lifecycles the l-01 registry defines. -KNOWN_ROLES = frozenset({"orchestrator", "designer", "strategist", "manager", "worker", "reviewer"}) +# The eight portable role lifecycles the l-01 registry defines. +KNOWN_ROLES = frozenset( + { + "architect", + "orchestrator", + "designer", + "strategist", + "manager", + "worker", + "curator", + "reviewer", + } +) KNOWN_ROLE_KNOB_FIELDS = frozenset( {"harness", "model", "effort", "launchArgs", "promptKeywords", "sessionCommands"} ) diff --git a/mcp/src/agents_remember/mcp/tools/next_step.py b/mcp/src/agents_remember/mcp/tools/next_step.py index 7e082e2f..68de021f 100644 --- a/mcp/src/agents_remember/mcp/tools/next_step.py +++ b/mcp/src/agents_remember/mcp/tools/next_step.py @@ -55,7 +55,8 @@ # leaf-26 Lifecycle Flow tab RUNDOWN, with the developer-chosen plan-approval # hand-off appended (S5: ride the first gate tool). FRONT_HALF_RUNDOWN: list[str] = [ - "reframe — restate the request as agreed work, then present it for the developer's agreement (the orchestrator lifecycle: l-01-agent-lifecycles roles/orchestrator.md).", + "reframe — restate the request as agreed work, then present it for the developer's agreement " + "(the architect lifecycle: l-01-agent-lifecycles roles/architect.md).", "research — read_ar_files · grepai · cgc (they fire unpredictably, so this half is prose-guided, " "not per-tool).", "route the event (the lens tunes it): no task doc → design one ; approved doc + code change " diff --git a/mcp/src/agents_remember/package_data/dashboard.fingerprint b/mcp/src/agents_remember/package_data/dashboard.fingerprint index fc762ba9..df515e80 100644 --- a/mcp/src/agents_remember/package_data/dashboard.fingerprint +++ b/mcp/src/agents_remember/package_data/dashboard.fingerprint @@ -1 +1 @@ -9c7015119ad08d3419057365ad8281b8128d0782af309aa543e4755c05ea8146 +07a30551104bbcf017822513d095b8299c9e5d207ad55b9e3ff3539fcbbb91a5 diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/Terminal-CyrgkVUD.js b/mcp/src/agents_remember/package_data/dashboard/assets/Terminal-rR8n_HOp.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/Terminal-CyrgkVUD.js rename to mcp/src/agents_remember/package_data/dashboard/assets/Terminal-rR8n_HOp.js index 754f40d0..d3a9e249 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/Terminal-CyrgkVUD.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/Terminal-rR8n_HOp.js @@ -1,4 +1,4 @@ -import{J as e,Q as t,X as n,Y as r,Z as i,et as a,q as o}from"./index-CLJ0aycO.js";var s=t(((e,t)=>{(function(n,r){typeof e==`object`&&typeof t==`object`?t.exports=r():typeof define==`function`&&define.amd?define([],r):typeof e==`object`?e.FitAddon=r():n.FitAddon=r()})(self,(()=>(()=>{var e={};return(()=>{var t=e;Object.defineProperty(t,"__esModule",{value:!0}),t.FitAddon=void 0,t.FitAddon=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core,t=e._renderService.dimensions;if(t.css.cell.width===0||t.css.cell.height===0)return;let n=this._terminal.options.scrollback===0?0:e.viewport.scrollBarWidth,r=window.getComputedStyle(this._terminal.element.parentElement),i=parseInt(r.getPropertyValue(`height`)),a=Math.max(0,parseInt(r.getPropertyValue(`width`))),o=window.getComputedStyle(this._terminal.element),s=i-(parseInt(o.getPropertyValue(`padding-top`))+parseInt(o.getPropertyValue(`padding-bottom`))),c=a-(parseInt(o.getPropertyValue(`padding-right`))+parseInt(o.getPropertyValue(`padding-left`)))-n;return{cols:Math.max(2,Math.floor(c/t.css.cell.width)),rows:Math.max(1,Math.floor(s/t.css.cell.height))}}}})(),e})()))})),c=t(((e,t)=>{(function(n,r){if(typeof e==`object`&&typeof t==`object`)t.exports=r();else if(typeof define==`function`&&define.amd)define([],r);else{var i=r();for(var a in i)(typeof e==`object`?e:n)[a]=i[a]}})(globalThis,(()=>(()=>{var e={4567:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.AccessibilityManager=void 0;let a=n(9042),o=n(9924),s=n(844),c=n(4725),l=n(2585),u=n(3656),d=t.AccessibilityManager=class extends s.Disposable{constructor(e,t,n,r){super(),this._terminal=e,this._coreBrowserService=n,this._renderService=r,this._rowColumns=new WeakMap,this._liveRegionLineCount=0,this._charsToConsume=[],this._charsToAnnounce=``,this._accessibilityContainer=this._coreBrowserService.mainDocument.createElement(`div`),this._accessibilityContainer.classList.add(`xterm-accessibility`),this._rowContainer=this._coreBrowserService.mainDocument.createElement(`div`),this._rowContainer.setAttribute(`role`,`list`),this._rowContainer.classList.add(`xterm-accessibility-tree`),this._rowElements=[];for(let e=0;ethis._handleBoundaryFocus(e,0),this._bottomBoundaryFocusListener=e=>this._handleBoundaryFocus(e,1),this._rowElements[0].addEventListener(`focus`,this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._refreshRowsDimensions(),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=this._coreBrowserService.mainDocument.createElement(`div`),this._liveRegion.classList.add(`live-region`),this._liveRegion.setAttribute(`aria-live`,`assertive`),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this.register(new o.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw Error(`Cannot enable accessibility before Terminal.open`);this._terminal.element.insertAdjacentElement(`afterbegin`,this._accessibilityContainer),this.register(this._terminal.onResize((e=>this._handleResize(e.rows)))),this.register(this._terminal.onRender((e=>this._refreshRows(e.start,e.end)))),this.register(this._terminal.onScroll((()=>this._refreshRows()))),this.register(this._terminal.onA11yChar((e=>this._handleChar(e)))),this.register(this._terminal.onLineFeed((()=>this._handleChar(` +import{J as e,Q as t,X as n,Y as r,Z as i,et as a,q as o}from"./index-B377xynC.js";var s=t(((e,t)=>{(function(n,r){typeof e==`object`&&typeof t==`object`?t.exports=r():typeof define==`function`&&define.amd?define([],r):typeof e==`object`?e.FitAddon=r():n.FitAddon=r()})(self,(()=>(()=>{var e={};return(()=>{var t=e;Object.defineProperty(t,"__esModule",{value:!0}),t.FitAddon=void 0,t.FitAddon=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core,t=e._renderService.dimensions;if(t.css.cell.width===0||t.css.cell.height===0)return;let n=this._terminal.options.scrollback===0?0:e.viewport.scrollBarWidth,r=window.getComputedStyle(this._terminal.element.parentElement),i=parseInt(r.getPropertyValue(`height`)),a=Math.max(0,parseInt(r.getPropertyValue(`width`))),o=window.getComputedStyle(this._terminal.element),s=i-(parseInt(o.getPropertyValue(`padding-top`))+parseInt(o.getPropertyValue(`padding-bottom`))),c=a-(parseInt(o.getPropertyValue(`padding-right`))+parseInt(o.getPropertyValue(`padding-left`)))-n;return{cols:Math.max(2,Math.floor(c/t.css.cell.width)),rows:Math.max(1,Math.floor(s/t.css.cell.height))}}}})(),e})()))})),c=t(((e,t)=>{(function(n,r){if(typeof e==`object`&&typeof t==`object`)t.exports=r();else if(typeof define==`function`&&define.amd)define([],r);else{var i=r();for(var a in i)(typeof e==`object`?e:n)[a]=i[a]}})(globalThis,(()=>(()=>{var e={4567:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.AccessibilityManager=void 0;let a=n(9042),o=n(9924),s=n(844),c=n(4725),l=n(2585),u=n(3656),d=t.AccessibilityManager=class extends s.Disposable{constructor(e,t,n,r){super(),this._terminal=e,this._coreBrowserService=n,this._renderService=r,this._rowColumns=new WeakMap,this._liveRegionLineCount=0,this._charsToConsume=[],this._charsToAnnounce=``,this._accessibilityContainer=this._coreBrowserService.mainDocument.createElement(`div`),this._accessibilityContainer.classList.add(`xterm-accessibility`),this._rowContainer=this._coreBrowserService.mainDocument.createElement(`div`),this._rowContainer.setAttribute(`role`,`list`),this._rowContainer.classList.add(`xterm-accessibility-tree`),this._rowElements=[];for(let e=0;ethis._handleBoundaryFocus(e,0),this._bottomBoundaryFocusListener=e=>this._handleBoundaryFocus(e,1),this._rowElements[0].addEventListener(`focus`,this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._refreshRowsDimensions(),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=this._coreBrowserService.mainDocument.createElement(`div`),this._liveRegion.classList.add(`live-region`),this._liveRegion.setAttribute(`aria-live`,`assertive`),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this.register(new o.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw Error(`Cannot enable accessibility before Terminal.open`);this._terminal.element.insertAdjacentElement(`afterbegin`,this._accessibilityContainer),this.register(this._terminal.onResize((e=>this._handleResize(e.rows)))),this.register(this._terminal.onRender((e=>this._refreshRows(e.start,e.end)))),this.register(this._terminal.onScroll((()=>this._refreshRows()))),this.register(this._terminal.onA11yChar((e=>this._handleChar(e)))),this.register(this._terminal.onLineFeed((()=>this._handleChar(` `)))),this.register(this._terminal.onA11yTab((e=>this._handleTab(e)))),this.register(this._terminal.onKey((e=>this._handleKey(e.key)))),this.register(this._terminal.onBlur((()=>this._clearLiveRegion()))),this.register(this._renderService.onDimensionsChange((()=>this._refreshRowsDimensions()))),this.register((0,u.addDisposableDomListener)(document,`selectionchange`,(()=>this._handleSelectionChange()))),this.register(this._coreBrowserService.onDprChange((()=>this._refreshRowsDimensions()))),this._refreshRows(),this.register((0,s.toDisposable)((()=>{this._accessibilityContainer.remove(),this._rowElements.length=0})))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,e===` `&&(this._liveRegionLineCount++,this._liveRegionLineCount===21&&(this._liveRegion.textContent+=a.tooMuchOutput)))}_clearLiveRegion(){this._liveRegion.textContent=``,this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){let n=this._terminal.buffer,r=n.lines.length.toString();for(let i=e;i<=t;i++){let e=n.lines.get(n.ydisp+i),t=[],a=e?.translateToString(!0,void 0,void 0,t)||``,o=(n.ydisp+i+1).toString(),s=this._rowElements[i];s&&(a.length===0?(s.innerText=`\xA0`,this._rowColumns.set(s,[0,1])):(s.textContent=a,this._rowColumns.set(s,t)),s.setAttribute(`aria-posinset`,o),s.setAttribute(`aria-setsize`,r))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce=``)}_handleBoundaryFocus(e,t){let n=e.target,r=this._rowElements[t===0?1:this._rowElements.length-2];if(n.getAttribute(`aria-posinset`)===(t===0?`1`:`${this._terminal.buffer.lines.length}`)||e.relatedTarget!==r)return;let i,a;if(t===0?(i=n,a=this._rowElements.pop(),this._rowContainer.removeChild(a)):(i=this._rowElements.shift(),a=n,this._rowContainer.removeChild(i)),i.removeEventListener(`focus`,this._topBoundaryFocusListener),a.removeEventListener(`focus`,this._bottomBoundaryFocusListener),t===0){let e=this._createAccessibilityTreeNode();this._rowElements.unshift(e),this._rowContainer.insertAdjacentElement(`afterbegin`,e)}else{let e=this._createAccessibilityTreeNode();this._rowElements.push(e),this._rowContainer.appendChild(e)}this._rowElements[0].addEventListener(`focus`,this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._terminal.scrollLines(t===0?-1:1),this._rowElements[t===0?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;let e=document.getSelection();if(!e)return;if(e.isCollapsed)return void(this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection());if(!e.anchorNode||!e.focusNode)return void console.error(`anchorNode and/or focusNode are null`);let t={node:e.anchorNode,offset:e.anchorOffset},n={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(n.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===n.node&&t.offset>n.offset)&&([t,n]=[n,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;let r=this._rowElements.slice(-1)[0];if(n.node.compareDocumentPosition(r)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(n={node:r,offset:r.textContent?.length??0}),!this._rowContainer.contains(n.node))return;let i=({node:e,offset:t})=>{let n=e instanceof Text?e.parentNode:e,r=parseInt(n?.getAttribute(`aria-posinset`),10)-1;if(isNaN(r))return console.warn(`row is invalid. Race condition?`),null;let i=this._rowColumns.get(n);if(!i)return console.warn(`columns is null. Race condition?`),null;let a=t=this._terminal.cols&&(++r,a=0),{row:r,column:a}},a=i(t),o=i(n);if(a&&o){if(a.row>o.row||a.row===o.row&&a.column>=o.column)throw Error(`invalid range`);this._terminal.select(a.column,a.row,(o.row-a.row)*this._terminal.cols-a.column+o.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener(`focus`,this._bottomBoundaryFocusListener);for(let e=this._rowContainer.children.length;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){let e=this._coreBrowserService.mainDocument.createElement(`div`);return e.setAttribute(`role`,`listitem`),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){this._accessibilityContainer.style.width=`${this._renderService.dimensions.css.canvas.width}px`,this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e{function n(e){return e.replace(/\r?\n/g,`\r`)}function r(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function i(e,t,i,a){e=r(e=n(e),i.decPrivateModes.bracketedPasteMode&&!0!==a.rawOptions.ignoreBracketedPasteMode),i.triggerDataEvent(e,!0),t.value=``}function a(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}Object.defineProperty(t,"__esModule",{value:!0}),t.rightClickHandler=t.moveTextAreaUnderMouseCursor=t.paste=t.handlePasteEvent=t.copyHandler=t.bracketTextForPaste=t.prepareTextForTerminal=void 0,t.prepareTextForTerminal=n,t.bracketTextForPaste=r,t.copyHandler=function(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()},t.handlePasteEvent=function(e,t,n,r){e.stopPropagation(),e.clipboardData&&i(e.clipboardData.getData(`text/plain`),t,n,r)},t.paste=i,t.moveTextAreaUnderMouseCursor=a,t.rightClickHandler=function(e,t,n,r,i){a(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}},7239:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorContrastCache=void 0;let r=n(1505);t.ColorContrastCache=class{constructor(){this._color=new r.TwoKeyMap,this._css=new r.TwoKeyMap}setCss(e,t,n){this._css.set(e,t,n)}getCss(e,t){return this._css.get(e,t)}setColor(e,t,n){this._color.set(e,t,n)}getColor(e,t){return this._color.get(e,t)}clear(){this._color.clear(),this._css.clear()}}},3656:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addDisposableDomListener=void 0,t.addDisposableDomListener=function(e,t,n,r){e.addEventListener(t,n,r);let i=!1;return{dispose:()=>{i||(i=!0,e.removeEventListener(t,n,r))}}}},3551:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Linkifier=void 0;let a=n(3656),o=n(8460),s=n(844),c=n(2585),l=n(4725),u=t.Linkifier=class extends s.Disposable{get currentLink(){return this._currentLink}constructor(e,t,n,r,i){super(),this._element=e,this._mouseService=t,this._renderService=n,this._bufferService=r,this._linkProviderService=i,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this.register(new o.EventEmitter),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this.register(new o.EventEmitter),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this.register((0,s.getDisposeArrayDisposable)(this._linkCacheDisposables)),this.register((0,s.toDisposable)((()=>{this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()}))),this.register(this._bufferService.onResize((()=>{this._clearCurrentLink(),this._wasResized=!0}))),this.register((0,a.addDisposableDomListener)(this._element,`mouseleave`,(()=>{this._isMouseOut=!0,this._clearCurrentLink()}))),this.register((0,a.addDisposableDomListener)(this._element,`mousemove`,this._handleMouseMove.bind(this))),this.register((0,a.addDisposableDomListener)(this._element,`mousedown`,this._handleMouseDown.bind(this))),this.register((0,a.addDisposableDomListener)(this._element,`mouseup`,this._handleMouseUp.bind(this)))}_handleMouseMove(e){this._lastMouseEvent=e;let t=this._positionFromMouseEvent(e,this._element,this._mouseService);if(!t)return;this._isMouseOut=!1;let n=e.composedPath();for(let e=0;e{e?.forEach((e=>{e.link.dispose&&e.link.dispose()}))})),this._activeProviderReplies=new Map,this._activeLine=e.y);let n=!1;for(let[r,i]of this._linkProviderService.linkProviders.entries())t?this._activeProviderReplies?.get(r)&&(n=this._checkLinkProviderResult(r,e,n)):i.provideLinks(e.y,(t=>{if(this._isMouseOut)return;let i=t?.map((e=>({link:e})));this._activeProviderReplies?.set(r,i),n=this._checkLinkProviderResult(r,e,n),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)}))}_removeIntersectingLinks(e,t){let n=new Set;for(let r=0;re?this._bufferService.cols:r.link.range.end.x;for(let e=a;e<=o;e++){if(n.has(e)){i.splice(t--,1);break}n.add(e)}}}}_checkLinkProviderResult(e,t,n){if(!this._activeProviderReplies)return n;let r=this._activeProviderReplies.get(e),i=!1;for(let t=0;tthis._linkAtPosition(e.link,t)));e&&(n=!0,this._handleNewLink(e))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!n)for(let e=0;ethis._linkAtPosition(e.link,t)));if(r){n=!0,this._handleNewLink(r);break}}return n}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;let t=this._positionFromMouseEvent(e,this._element,this._mouseService);t&&this._mouseDownLink===this._currentLink&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){this._currentLink&&this._lastMouseEvent&&(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,s.disposeArray)(this._linkCacheDisposables))}_handleNewLink(e){if(!this._lastMouseEvent)return;let t=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:e.link.decorations===void 0||e.link.decorations.underline,pointerCursor:e.link.decorations===void 0||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:e=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==e&&(this._currentLink.state.decorations.pointerCursor=e,this._currentLink.state.isHovered&&this._element.classList.toggle(`xterm-cursor-pointer`,e))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange((e=>{if(!this._currentLink)return;let t=e.start===0?0:e.start+1+this._bufferService.buffer.ydisp,n=this._bufferService.buffer.ydisp+1+e.end;if(this._currentLink.link.range.start.y>=t&&this._currentLink.link.range.end.y<=n&&(this._clearCurrentLink(t,n),this._lastMouseEvent)){let e=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);e&&this._askForLink(e,!1)}}))))}_linkHover(e,t,n){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add(`xterm-cursor-pointer`)),t.hover&&t.hover(n,t.text)}_fireUnderlineEvent(e,t){let n=e.range,r=this._bufferService.buffer.ydisp,i=this._createLinkUnderlineEvent(n.start.x-1,n.start.y-r-1,n.end.x,n.end.y-r-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(i)}_linkLeave(e,t,n){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove(`xterm-cursor-pointer`)),t.leave&&t.leave(n,t.text)}_linkAtPosition(e,t){let n=e.range.start.y*this._bufferService.cols+e.range.start.x,r=e.range.end.y*this._bufferService.cols+e.range.end.x,i=t.y*this._bufferService.cols+t.x;return n<=i&&i<=r}_positionFromMouseEvent(e,t,n){let r=n.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(r)return{x:r[0],y:r[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,n,r,i){return{x1:e,y1:t,x2:n,y2:r,cols:this._bufferService.cols,fg:i}}};t.Linkifier=u=r([i(1,l.IMouseService),i(2,l.IRenderService),i(3,c.IBufferService),i(4,l.ILinkProviderService)],u)},9042:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0,t.promptLabel=`Terminal input`,t.tooMuchOutput=`Too much output to announce, navigate to rows manually to read`},3730:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OscLinkProvider=void 0;let a=n(511),o=n(2585),s=t.OscLinkProvider=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n)return void t(void 0);let r=[],i=this._optionsService.rawOptions.linkHandler,o=new a.CellData,s=n.getTrimmedLength(),l=-1,u=-1,d=!1;for(let t=0;ti?i.activate(e,t,a):c(0,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}d=!1,o.hasExtendedAttrs()&&o.extended.urlId?(u=t,l=o.extended.urlId):(u=-1,l=-1)}}t(r)}};function c(e,t){if(confirm(`Do you want to navigate to ${t}?\n\nWARNING: This link could potentially be dangerous`)){let e=window.open();if(e){try{e.opener=null}catch{}e.location.href=t}else console.warn(`Opening link blocked as opener could not be cleared`)}}t.OscLinkProvider=s=r([i(0,o.IBufferService),i(1,o.IOptionsService),i(2,o.IOscLinkService)],s)},6193:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.RenderDebouncer=void 0,t.RenderDebouncer=class{constructor(e,t){this._renderCallback=e,this._coreBrowserService=t,this._refreshCallbacks=[]}dispose(){this._animationFrame&&=(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),void 0)}addRefreshCallback(e){return this._refreshCallbacks.push(e),this._animationFrame||=this._coreBrowserService.window.requestAnimationFrame((()=>this._innerRefresh())),this._animationFrame}refresh(e,t,n){this._rowCount=n,e=e===void 0?0:e,t=t===void 0?this._rowCount-1:t,this._rowStart=this._rowStart===void 0?e:Math.min(this._rowStart,e),this._rowEnd=this._rowEnd===void 0?t:Math.max(this._rowEnd,t),this._animationFrame||=this._coreBrowserService.window.requestAnimationFrame((()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return void this._runRefreshCallbacks();let e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(let e of this._refreshCallbacks)e(0);this._refreshCallbacks=[]}}},3236:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Terminal=void 0;let r=n(3614),i=n(3656),a=n(3551),o=n(9042),s=n(3730),c=n(1680),l=n(3107),u=n(5744),d=n(2950),f=n(1296),p=n(428),m=n(4269),h=n(5114),g=n(8934),_=n(3230),v=n(9312),y=n(4725),b=n(6731),x=n(8055),S=n(8969),C=n(8460),w=n(844),T=n(6114),E=n(8437),D=n(2584),O=n(7399),k=n(5941),A=n(9074),j=n(2585),M=n(5435),N=n(4567),P=n(779);class F extends S.CoreTerminal{get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}constructor(e={}){super(e),this.browser=T,this._keyDownHandled=!1,this._keyDownSeen=!1,this._keyPressHandled=!1,this._unprocessedDeadKey=!1,this._accessibilityManager=this.register(new w.MutableDisposable),this._onCursorMove=this.register(new C.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onKey=this.register(new C.EventEmitter),this.onKey=this._onKey.event,this._onRender=this.register(new C.EventEmitter),this.onRender=this._onRender.event,this._onSelectionChange=this.register(new C.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onTitleChange=this.register(new C.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onBell=this.register(new C.EventEmitter),this.onBell=this._onBell.event,this._onFocus=this.register(new C.EventEmitter),this._onBlur=this.register(new C.EventEmitter),this._onA11yCharEmitter=this.register(new C.EventEmitter),this._onA11yTabEmitter=this.register(new C.EventEmitter),this._onWillOpen=this.register(new C.EventEmitter),this._setup(),this._decorationService=this._instantiationService.createInstance(A.DecorationService),this._instantiationService.setService(j.IDecorationService,this._decorationService),this._linkProviderService=this._instantiationService.createInstance(P.LinkProviderService),this._instantiationService.setService(y.ILinkProviderService,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(s.OscLinkProvider)),this.register(this._inputHandler.onRequestBell((()=>this._onBell.fire()))),this.register(this._inputHandler.onRequestRefreshRows(((e,t)=>this.refresh(e,t)))),this.register(this._inputHandler.onRequestSendFocus((()=>this._reportFocus()))),this.register(this._inputHandler.onRequestReset((()=>this.reset()))),this.register(this._inputHandler.onRequestWindowsOptionsReport((e=>this._reportWindowsOptions(e)))),this.register(this._inputHandler.onColor((e=>this._handleColorEvent(e)))),this.register((0,C.forwardEvent)(this._inputHandler.onCursorMove,this._onCursorMove)),this.register((0,C.forwardEvent)(this._inputHandler.onTitleChange,this._onTitleChange)),this.register((0,C.forwardEvent)(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this.register((0,C.forwardEvent)(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this.register(this._bufferService.onResize((e=>this._afterResize(e.cols,e.rows)))),this.register((0,w.toDisposable)((()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)})))}_handleColorEvent(e){if(this._themeService)for(let t of e){let e,n=``;switch(t.index){case 256:e=`foreground`,n=`10`;break;case 257:e=`background`,n=`11`;break;case 258:e=`cursor`,n=`12`;break;default:e=`ansi`,n=`4;`+t.index}switch(t.type){case 0:let r=x.color.toColorRGB(e===`ansi`?this._themeService.colors.ansi[t.index]:this._themeService.colors[e]);this.coreService.triggerDataEvent(`${D.C0.ESC}]${n};${(0,k.toRgbString)(r)}${D.C1_ESCAPED.ST}`);break;case 1:if(e===`ansi`)this._themeService.modifyColors((e=>e.ansi[t.index]=x.channels.toColor(...t.color)));else{let n=e;this._themeService.modifyColors((e=>e[n]=x.channels.toColor(...t.color)))}break;case 2:this._themeService.restoreColor(t.index)}}}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(N.AccessibilityManager,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(D.C0.ESC+`[I`),this.element.classList.add(`focus`),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value=``,this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(D.C0.ESC+`[O`),this.element.classList.remove(`focus`),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;let e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(!t)return;let n=Math.min(this.buffer.x,this.cols-1),r=this._renderService.dimensions.css.cell.height,i=t.getWidth(n),a=this._renderService.dimensions.css.cell.width*i,o=this.buffer.y*this._renderService.dimensions.css.cell.height,s=n*this._renderService.dimensions.css.cell.width;this.textarea.style.left=s+`px`,this.textarea.style.top=o+`px`,this.textarea.style.width=a+`px`,this.textarea.style.height=r+`px`,this.textarea.style.lineHeight=r+`px`,this.textarea.style.zIndex=`-5`}_initGlobal(){this._bindKeys(),this.register((0,i.addDisposableDomListener)(this.element,`copy`,(e=>{this.hasSelection()&&(0,r.copyHandler)(e,this._selectionService)})));let e=e=>(0,r.handlePasteEvent)(e,this.textarea,this.coreService,this.optionsService);this.register((0,i.addDisposableDomListener)(this.textarea,`paste`,e)),this.register((0,i.addDisposableDomListener)(this.element,`paste`,e)),T.isFirefox?this.register((0,i.addDisposableDomListener)(this.element,`mousedown`,(e=>{e.button===2&&(0,r.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)}))):this.register((0,i.addDisposableDomListener)(this.element,`contextmenu`,(e=>{(0,r.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)}))),T.isLinux&&this.register((0,i.addDisposableDomListener)(this.element,`auxclick`,(e=>{e.button===1&&(0,r.moveTextAreaUnderMouseCursor)(e,this.textarea,this.screenElement)})))}_bindKeys(){this.register((0,i.addDisposableDomListener)(this.textarea,`keyup`,(e=>this._keyUp(e)),!0)),this.register((0,i.addDisposableDomListener)(this.textarea,`keydown`,(e=>this._keyDown(e)),!0)),this.register((0,i.addDisposableDomListener)(this.textarea,`keypress`,(e=>this._keyPress(e)),!0)),this.register((0,i.addDisposableDomListener)(this.textarea,`compositionstart`,(()=>this._compositionHelper.compositionstart()))),this.register((0,i.addDisposableDomListener)(this.textarea,`compositionupdate`,(e=>this._compositionHelper.compositionupdate(e)))),this.register((0,i.addDisposableDomListener)(this.textarea,`compositionend`,(()=>this._compositionHelper.compositionend()))),this.register((0,i.addDisposableDomListener)(this.textarea,`input`,(e=>this._inputEvent(e)),!0)),this.register(this.onRender((()=>this._compositionHelper.updateCompositionElements())))}open(e){if(!e)throw Error(`Terminal requires a parent element.`);if(e.isConnected||this._logService.debug(`Terminal.open was called on an element that was not attached to the DOM`),this.element?.ownerDocument.defaultView&&this._coreBrowserService)return void(this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView));this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement(`div`),this.element.dir=`ltr`,this.element.classList.add(`terminal`),this.element.classList.add(`xterm`),e.appendChild(this.element);let t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement(`div`),this._viewportElement.classList.add(`xterm-viewport`),t.appendChild(this._viewportElement),this._viewportScrollArea=this._document.createElement(`div`),this._viewportScrollArea.classList.add(`xterm-scroll-area`),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=this._document.createElement(`div`),this.screenElement.classList.add(`xterm-screen`),this.register((0,i.addDisposableDomListener)(this.screenElement,`mousemove`,(e=>this.updateCursorStyle(e)))),this._helperContainer=this._document.createElement(`div`),this._helperContainer.classList.add(`xterm-helpers`),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement),this.textarea=this._document.createElement(`textarea`),this.textarea.classList.add(`xterm-helper-textarea`),this.textarea.setAttribute(`aria-label`,o.promptLabel),T.isChromeOS||this.textarea.setAttribute(`aria-multiline`,`false`),this.textarea.setAttribute(`autocorrect`,`off`),this.textarea.setAttribute(`autocapitalize`,`off`),this.textarea.setAttribute(`spellcheck`,`false`),this.textarea.tabIndex=0,this._coreBrowserService=this.register(this._instantiationService.createInstance(h.CoreBrowserService,this.textarea,e.ownerDocument.defaultView??window,this._document??typeof window<`u`?window.document:null)),this._instantiationService.setService(y.ICoreBrowserService,this._coreBrowserService),this.register((0,i.addDisposableDomListener)(this.textarea,`focus`,(e=>this._handleTextAreaFocus(e)))),this.register((0,i.addDisposableDomListener)(this.textarea,`blur`,(()=>this._handleTextAreaBlur()))),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(p.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(y.ICharSizeService,this._charSizeService),this._themeService=this._instantiationService.createInstance(b.ThemeService),this._instantiationService.setService(y.IThemeService,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(m.CharacterJoinerService),this._instantiationService.setService(y.ICharacterJoinerService,this._characterJoinerService),this._renderService=this.register(this._instantiationService.createInstance(_.RenderService,this.rows,this.screenElement)),this._instantiationService.setService(y.IRenderService,this._renderService),this.register(this._renderService.onRenderedViewportChange((e=>this._onRender.fire(e)))),this.onResize((e=>this._renderService.resize(e.cols,e.rows))),this._compositionView=this._document.createElement(`div`),this._compositionView.classList.add(`composition-view`),this._compositionHelper=this._instantiationService.createInstance(d.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseService=this._instantiationService.createInstance(g.MouseService),this._instantiationService.setService(y.IMouseService,this._mouseService),this.linkifier=this.register(this._instantiationService.createInstance(a.Linkifier,this.screenElement)),this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch{}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this.viewport=this._instantiationService.createInstance(c.Viewport,this._viewportElement,this._viewportScrollArea),this.viewport.onRequestScrollLines((e=>this.scrollLines(e.amount,e.suppressScrollEvent,1))),this.register(this._inputHandler.onRequestSyncScrollBar((()=>this.viewport.syncScrollArea()))),this.register(this.viewport),this.register(this.onCursorMove((()=>{this._renderService.handleCursorMove(),this._syncTextArea()}))),this.register(this.onResize((()=>this._renderService.handleResize(this.cols,this.rows)))),this.register(this.onBlur((()=>this._renderService.handleBlur()))),this.register(this.onFocus((()=>this._renderService.handleFocus()))),this.register(this._renderService.onDimensionsChange((()=>this.viewport.syncScrollArea()))),this._selectionService=this.register(this._instantiationService.createInstance(v.SelectionService,this.element,this.screenElement,this.linkifier)),this._instantiationService.setService(y.ISelectionService,this._selectionService),this.register(this._selectionService.onRequestScrollLines((e=>this.scrollLines(e.amount,e.suppressScrollEvent)))),this.register(this._selectionService.onSelectionChange((()=>this._onSelectionChange.fire()))),this.register(this._selectionService.onRequestRedraw((e=>this._renderService.handleSelectionChanged(e.start,e.end,e.columnSelectMode)))),this.register(this._selectionService.onLinuxMouseSelection((e=>{this.textarea.value=e,this.textarea.focus(),this.textarea.select()}))),this.register(this._onScroll.event((e=>{this.viewport.syncScrollArea(),this._selectionService.refresh()}))),this.register((0,i.addDisposableDomListener)(this._viewportElement,`scroll`,(()=>this._selectionService.refresh()))),this.register(this._instantiationService.createInstance(l.BufferDecorationRenderer,this.screenElement)),this.register((0,i.addDisposableDomListener)(this.element,`mousedown`,(e=>this._selectionService.handleMouseDown(e)))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add(`enable-mouse-events`)):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(N.AccessibilityManager,this)),this.register(this.optionsService.onSpecificOptionChange(`screenReaderMode`,(e=>this._handleScreenReaderModeOptionChange(e)))),this.options.overviewRulerWidth&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(u.OverviewRulerRenderer,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange(`overviewRulerWidth`,(e=>{!this._overviewRulerRenderer&&e&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(u.OverviewRulerRenderer,this._viewportElement,this.screenElement)))})),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(f.DomRenderer,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}bindMouse(){let e=this,t=this.element;function n(t){let n=e._mouseService.getMouseReportCoords(t,e.screenElement);if(!n)return!1;let r,i;switch(t.overrideType||t.type){case`mousemove`:i=32,t.buttons===void 0?(r=3,t.button!==void 0&&(r=t.button<3?t.button:3)):r=1&t.buttons?0:4&t.buttons?1:2&t.buttons?2:3;break;case`mouseup`:i=0,r=t.button<3?t.button:3;break;case`mousedown`:i=1,r=t.button<3?t.button:3;break;case`wheel`:if(e._customWheelEventHandler&&!1===e._customWheelEventHandler(t)||e.viewport.getLinesScrolled(t)===0)return!1;i=t.deltaY<0?0:1,r=4;break;default:return!1}return!(i===void 0||r===void 0||r>4)&&e.coreMouseService.triggerMouseEvent({col:n.col,row:n.row,x:n.x,y:n.y,button:r,action:i,ctrl:t.ctrlKey,alt:t.altKey,shift:t.shiftKey})}let r={mouseup:null,wheel:null,mousedrag:null,mousemove:null},a={mouseup:e=>(n(e),e.buttons||(this._document.removeEventListener(`mouseup`,r.mouseup),r.mousedrag&&this._document.removeEventListener(`mousemove`,r.mousedrag)),this.cancel(e)),wheel:e=>(n(e),this.cancel(e,!0)),mousedrag:e=>{e.buttons&&n(e)},mousemove:e=>{e.buttons||n(e)}};this.register(this.coreMouseService.onProtocolChange((e=>{e?(this.optionsService.rawOptions.logLevel===`debug`&&this._logService.debug(`Binding to mouse events:`,this.coreMouseService.explainEvents(e)),this.element.classList.add(`enable-mouse-events`),this._selectionService.disable()):(this._logService.debug(`Unbinding from mouse events.`),this.element.classList.remove(`enable-mouse-events`),this._selectionService.enable()),8&e?r.mousemove||=(t.addEventListener(`mousemove`,a.mousemove),a.mousemove):(t.removeEventListener(`mousemove`,r.mousemove),r.mousemove=null),16&e?r.wheel||=(t.addEventListener(`wheel`,a.wheel,{passive:!1}),a.wheel):(t.removeEventListener(`wheel`,r.wheel),r.wheel=null),2&e?r.mouseup||=a.mouseup:(this._document.removeEventListener(`mouseup`,r.mouseup),r.mouseup=null),4&e?r.mousedrag||=a.mousedrag:(this._document.removeEventListener(`mousemove`,r.mousedrag),r.mousedrag=null)}))),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this.register((0,i.addDisposableDomListener)(t,`mousedown`,(e=>{if(e.preventDefault(),this.focus(),this.coreMouseService.areMouseEventsActive&&!this._selectionService.shouldForceSelection(e))return n(e),r.mouseup&&this._document.addEventListener(`mouseup`,r.mouseup),r.mousedrag&&this._document.addEventListener(`mousemove`,r.mousedrag),this.cancel(e)}))),this.register((0,i.addDisposableDomListener)(t,`wheel`,(e=>{if(!r.wheel){if(this._customWheelEventHandler&&!1===this._customWheelEventHandler(e))return!1;if(!this.buffer.hasScrollback){let t=this.viewport.getLinesScrolled(e);if(t===0)return;let n=D.C0.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?`O`:`[`)+(e.deltaY<0?`A`:`B`),r=``;for(let e=0;e{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchStart(e),this.cancel(e)}),{passive:!0})),this.register((0,i.addDisposableDomListener)(t,`touchmove`,(e=>{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchMove(e)?void 0:this.cancel(e)}),{passive:!1}))}refresh(e,t){this._renderService?.refreshRows(e,t)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add(`column-select`):this.element.classList.remove(`column-select`)}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t,n=0){n===1?(super.scrollLines(e,t,n),this.refresh(0,this.rows-1)):this.viewport?.scrollLines(e)}paste(e){(0,r.paste)(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this._customWheelEventHandler=e}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw Error(`Terminal must be opened first`);let t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw Error(`Terminal must be opened first`);this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return!!this._selectionService&&this._selectionService.hasSelection}select(e,t,n){this._selectionService.setSelection(e,t,n)}getSelection(){return this._selectionService?this._selectionService.selectionText:``}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;let t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(),!1;t||e.key!==`Dead`&&e.key!==`AltGraph`||(this._unprocessedDeadKey=!0);let n=(0,O.evaluateKeyboardEvent)(e,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),n.type===3||n.type===2){let t=this.rows-1;return this.scrollLines(n.type===2?-t:t),this.cancel(e,!0)}return n.type===1&&this.selectAll(),!!this._isThirdLevelShift(this.browser,e)||(n.cancel&&this.cancel(e,!0),!n.key||!!(e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.key.length===1&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)||(this._unprocessedDeadKey?(this._unprocessedDeadKey=!1,!0):(n.key!==D.C0.ETX&&n.key!==D.C0.CR||(this.textarea.value=``),this._onKey.fire({key:n.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(n.key,!0),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey?this.cancel(e,!0):void(this._keyDownHandled=!0))))}_isThirdLevelShift(e,t){let n=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState(`AltGraph`);return t.type===`keypress`?n:n&&(!t.keyCode||t.keyCode>47)}_keyUp(e){this._keyDownSeen=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e)||(function(e){return e.keyCode===16||e.keyCode===17||e.keyCode===18}(e)||this.focus(),this.updateCursorStyle(e),this._keyPressHandled=!1)}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(e.which===null||e.which===void 0)t=e.keyCode;else{if(e.which===0||e.charCode===0)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)||(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))}_inputEvent(e){if(e.data&&e.inputType===`insertText`&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;let t=e.data;return this.coreService.triggerDataEvent(t,!0),this.cancel(e),!0}return!1}resize(e,t){e!==this.cols||t!==this.rows?super.resize(e,t):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()}_afterResize(e,t){this._charSizeService?.measure(),this.viewport?.syncScrollArea(!0)}clear(){if(this.buffer.ybase!==0||this.buffer.y!==0){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e{Object.defineProperty(t,"__esModule",{value:!0}),t.TimeBasedDebouncer=void 0,t.TimeBasedDebouncer=class{constructor(e,t=1e3){this._renderCallback=e,this._debounceThresholdMS=t,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&clearTimeout(this._refreshTimeoutID)}refresh(e,t,n){this._rowCount=n,e=e===void 0?0:e,t=t===void 0?this._rowCount-1:t,this._rowStart=this._rowStart===void 0?e:Math.min(this._rowStart,e),this._rowEnd=this._rowEnd===void 0?t:Math.max(this._rowEnd,t);let r=Date.now();if(r-this._lastRefreshMs>=this._debounceThresholdMS)this._lastRefreshMs=r,this._innerRefresh();else if(!this._additionalRefreshRequested){let e=r-this._lastRefreshMs,t=this._debounceThresholdMS-e;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout((()=>{this._lastRefreshMs=Date.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0}),t)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;let e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}}},1680:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Viewport=void 0;let a=n(3656),o=n(4725),s=n(8460),c=n(844),l=n(2585),u=t.Viewport=class extends c.Disposable{constructor(e,t,n,r,i,o,c,l){super(),this._viewportElement=e,this._scrollArea=t,this._bufferService=n,this._optionsService=r,this._charSizeService=i,this._renderService=o,this._coreBrowserService=c,this.scrollBarWidth=0,this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._wheelPartialScroll=0,this._refreshAnimationFrame=null,this._ignoreNextScrollEvent=!1,this._smoothScrollState={startTime:0,origin:-1,target:-1},this._onRequestScrollLines=this.register(new s.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this.scrollBarWidth=this._viewportElement.offsetWidth-this._scrollArea.offsetWidth||15,this.register((0,a.addDisposableDomListener)(this._viewportElement,`scroll`,this._handleScroll.bind(this))),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate((e=>this._activeBuffer=e.activeBuffer))),this._renderDimensions=this._renderService.dimensions,this.register(this._renderService.onDimensionsChange((e=>this._renderDimensions=e))),this._handleThemeChange(l.colors),this.register(l.onChangeColors((e=>this._handleThemeChange(e)))),this.register(this._optionsService.onSpecificOptionChange(`scrollback`,(()=>this.syncScrollArea()))),setTimeout((()=>this.syncScrollArea()))}_handleThemeChange(e){this._viewportElement.style.backgroundColor=e.background.css}reset(){this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._coreBrowserService.window.requestAnimationFrame((()=>this.syncScrollArea()))}_refresh(e){if(e)return this._innerRefresh(),void(this._refreshAnimationFrame!==null&&this._coreBrowserService.window.cancelAnimationFrame(this._refreshAnimationFrame));this._refreshAnimationFrame===null&&(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._innerRefresh())))}_innerRefresh(){if(this._charSizeService.height>0){this._currentRowHeight=this._renderDimensions.device.cell.height/this._coreBrowserService.dpr,this._currentDeviceCellHeight=this._renderDimensions.device.cell.height,this._lastRecordedViewportHeight=this._viewportElement.offsetHeight;let e=Math.round(this._currentRowHeight*this._lastRecordedBufferLength)+(this._lastRecordedViewportHeight-this._renderDimensions.css.canvas.height);this._lastRecordedBufferHeight!==e&&(this._lastRecordedBufferHeight=e,this._scrollArea.style.height=this._lastRecordedBufferHeight+`px`)}let e=this._bufferService.buffer.ydisp*this._currentRowHeight;this._viewportElement.scrollTop!==e&&(this._ignoreNextScrollEvent=!0,this._viewportElement.scrollTop=e),this._refreshAnimationFrame=null}syncScrollArea(e=!1){if(this._lastRecordedBufferLength!==this._bufferService.buffer.lines.length)return this._lastRecordedBufferLength=this._bufferService.buffer.lines.length,void this._refresh(e);this._lastRecordedViewportHeight===this._renderService.dimensions.css.canvas.height&&this._lastScrollTop===this._activeBuffer.ydisp*this._currentRowHeight&&this._renderDimensions.device.cell.height===this._currentDeviceCellHeight||this._refresh(e)}_handleScroll(e){if(this._lastScrollTop=this._viewportElement.scrollTop,!this._viewportElement.offsetParent)return;if(this._ignoreNextScrollEvent)return this._ignoreNextScrollEvent=!1,void this._onRequestScrollLines.fire({amount:0,suppressScrollEvent:!0});let t=Math.round(this._lastScrollTop/this._currentRowHeight)-this._bufferService.buffer.ydisp;this._onRequestScrollLines.fire({amount:t,suppressScrollEvent:!0})}_smoothScroll(){if(this._isDisposed||this._smoothScrollState.origin===-1||this._smoothScrollState.target===-1)return;let e=this._smoothScrollPercent();this._viewportElement.scrollTop=this._smoothScrollState.origin+Math.round(e*(this._smoothScrollState.target-this._smoothScrollState.origin)),e<1?this._coreBrowserService.window.requestAnimationFrame((()=>this._smoothScroll())):this._clearSmoothScrollState()}_smoothScrollPercent(){return this._optionsService.rawOptions.smoothScrollDuration&&this._smoothScrollState.startTime?Math.max(Math.min((Date.now()-this._smoothScrollState.startTime)/this._optionsService.rawOptions.smoothScrollDuration,1),0):1}_clearSmoothScrollState(){this._smoothScrollState.startTime=0,this._smoothScrollState.origin=-1,this._smoothScrollState.target=-1}_bubbleScroll(e,t){let n=this._viewportElement.scrollTop+this._lastRecordedViewportHeight;return!(t<0&&this._viewportElement.scrollTop!==0||t>0&&n0&&(n=e),r=``}}return{bufferElements:i,cursorElement:n}}getLinesScrolled(e){if(e.deltaY===0||e.shiftKey)return 0;let t=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(t/=this._currentRowHeight+0,this._wheelPartialScroll+=t,t=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._bufferService.rows),t}_applyScrollModifier(e,t){let n=this._optionsService.rawOptions.fastScrollModifier;return n===`alt`&&t.altKey||n===`ctrl`&&t.ctrlKey||n===`shift`&&t.shiftKey?e*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:e*this._optionsService.rawOptions.scrollSensitivity}handleTouchStart(e){this._lastTouchY=e.touches[0].pageY}handleTouchMove(e){let t=this._lastTouchY-e.touches[0].pageY;return this._lastTouchY=e.touches[0].pageY,t!==0&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(e,t))}};t.Viewport=u=r([i(2,l.IBufferService),i(3,l.IOptionsService),i(4,o.ICharSizeService),i(5,o.IRenderService),i(6,o.ICoreBrowserService),i(7,o.IThemeService)],u)},3107:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferDecorationRenderer=void 0;let a=n(4725),o=n(844),s=n(2585),c=t.BufferDecorationRenderer=class extends o.Disposable{constructor(e,t,n,r,i){super(),this._screenElement=e,this._bufferService=t,this._coreBrowserService=n,this._decorationService=r,this._renderService=i,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement(`div`),this._container.classList.add(`xterm-decoration-container`),this._screenElement.appendChild(this._container),this.register(this._renderService.onRenderedViewportChange((()=>this._doRefreshDecorations()))),this.register(this._renderService.onDimensionsChange((()=>{this._dimensionsChanged=!0,this._queueRefresh()}))),this.register(this._coreBrowserService.onDprChange((()=>this._queueRefresh()))),this.register(this._bufferService.buffers.onBufferActivate((()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt}))),this.register(this._decorationService.onDecorationRegistered((()=>this._queueRefresh()))),this.register(this._decorationService.onDecorationRemoved((e=>this._removeDecoration(e)))),this.register((0,o.toDisposable)((()=>{this._container.remove(),this._decorationElements.clear()})))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback((()=>{this._doRefreshDecorations(),this._animationFrame=void 0})))}_doRefreshDecorations(){for(let e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){let t=this._coreBrowserService.mainDocument.createElement(`div`);t.classList.add(`xterm-decoration`),t.classList.toggle(`xterm-decoration-top-layer`,e?.options?.layer===`top`),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+`px`,t.style.top=(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height+`px`,t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;let n=e.options.x??0;return n&&n>this._bufferService.cols&&(t.style.display=`none`),this._refreshXPosition(e,t),t}_refreshStyle(e){let t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display=`none`,e.onRenderEmitter.fire(e.element));else{let n=this._decorationElements.get(e);n||(n=this._createElement(e),e.element=n,this._decorationElements.set(e,n),this._container.appendChild(n),e.onDispose((()=>{this._decorationElements.delete(e),n.remove()}))),n.style.top=t*this._renderService.dimensions.css.cell.height+`px`,n.style.display=this._altBufferIsActive?`none`:`block`,e.onRenderEmitter.fire(n)}}_refreshXPosition(e,t=e.element){if(!t)return;let n=e.options.x??0;(e.options.anchor||`left`)===`right`?t.style.right=n?n*this._renderService.dimensions.css.cell.width+`px`:``:t.style.left=n?n*this._renderService.dimensions.css.cell.width+`px`:``}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};t.BufferDecorationRenderer=c=r([i(1,s.IBufferService),i(2,a.ICoreBrowserService),i(3,s.IDecorationService),i(4,a.IRenderService)],c)},5871:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorZoneStore=void 0,t.ColorZoneStore=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(e){if(e.options.overviewRulerOptions){for(let t of this._zones)if(t.color===e.options.overviewRulerOptions.color&&t.position===e.options.overviewRulerOptions.position){if(this._lineIntersectsZone(t,e.marker.line))return;if(this._lineAdjacentToZone(t,e.marker.line,e.options.overviewRulerOptions.position))return void this._addLineToZone(t,e.marker.line)}if(this._zonePoolIndex=e.startBufferLine&&t<=e.endBufferLine}_lineAdjacentToZone(e,t,n){return t>=e.startBufferLine-this._linePadding[n||`full`]&&t<=e.endBufferLine+this._linePadding[n||`full`]}_addLineToZone(e,t){e.startBufferLine=Math.min(e.startBufferLine,t),e.endBufferLine=Math.max(e.endBufferLine,t)}}},5744:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OverviewRulerRenderer=void 0;let a=n(5871),o=n(4725),s=n(844),c=n(2585),l={full:0,left:0,center:0,right:0},u={full:0,left:0,center:0,right:0},d={full:0,left:0,center:0,right:0},f=t.OverviewRulerRenderer=class extends s.Disposable{get _width(){return this._optionsService.options.overviewRulerWidth||0}constructor(e,t,n,r,i,o,c){super(),this._viewportElement=e,this._screenElement=t,this._bufferService=n,this._decorationService=r,this._renderService=i,this._optionsService=o,this._coreBrowserService=c,this._colorZoneStore=new a.ColorZoneStore,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement(`canvas`),this._canvas.classList.add(`xterm-decoration-overview-ruler`),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement);let l=this._canvas.getContext(`2d`);if(!l)throw Error(`Ctx cannot be null`);this._ctx=l,this._registerDecorationListeners(),this._registerBufferChangeListeners(),this._registerDimensionChangeListeners(),this.register((0,s.toDisposable)((()=>{this._canvas?.remove()})))}_registerDecorationListeners(){this.register(this._decorationService.onDecorationRegistered((()=>this._queueRefresh(void 0,!0)))),this.register(this._decorationService.onDecorationRemoved((()=>this._queueRefresh(void 0,!0))))}_registerBufferChangeListeners(){this.register(this._renderService.onRenderedViewportChange((()=>this._queueRefresh()))),this.register(this._bufferService.buffers.onBufferActivate((()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?`none`:`block`}))),this.register(this._bufferService.onScroll((()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})))}_registerDimensionChangeListeners(){this.register(this._renderService.onRender((()=>{this._containerHeight&&this._containerHeight===this._screenElement.clientHeight||(this._queueRefresh(!0),this._containerHeight=this._screenElement.clientHeight)}))),this.register(this._optionsService.onSpecificOptionChange(`overviewRulerWidth`,(()=>this._queueRefresh(!0)))),this.register(this._coreBrowserService.onDprChange((()=>this._queueRefresh(!0)))),this._queueRefresh(!0)}_refreshDrawConstants(){let e=Math.floor(this._canvas.width/3),t=Math.ceil(this._canvas.width/3);u.full=this._canvas.width,u.left=e,u.center=t,u.right=e,this._refreshDrawHeightConstants(),d.full=0,d.left=0,d.center=u.left,d.right=u.left+u.center}_refreshDrawHeightConstants(){l.full=Math.round(2*this._coreBrowserService.dpr);let e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);l.left=t,l.center=t,l.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${this._screenElement.clientHeight}px`,this._canvas.height=Math.round(this._screenElement.clientHeight*this._coreBrowserService.dpr),this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(let e of this._decorationService.decorations)this._colorZoneStore.addDecoration(e);this._ctx.lineWidth=1;let e=this._colorZoneStore.zones;for(let t of e)t.position!==`full`&&this._renderColorZone(t);for(let t of e)t.position===`full`&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(d[e.position||`full`],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-l[e.position||`full`]/2),u[e.position||`full`],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+l[e.position||`full`]))}_queueRefresh(e,t){this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>{this._refreshDecorations(),this._animationFrame=void 0})))}};t.OverviewRulerRenderer=f=r([i(2,c.IBufferService),i(3,c.IDecorationService),i(4,o.IRenderService),i(5,c.IOptionsService),i(6,o.ICoreBrowserService)],f)},2950:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CompositionHelper=void 0;let a=n(4725),o=n(2585),s=n(2584),c=t.CompositionHelper=class{get isComposing(){return this._isComposing}constructor(e,t,n,r,i,a){this._textarea=e,this._compositionView=t,this._bufferService=n,this._optionsService=r,this._coreService=i,this._renderService=a,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=``}compositionstart(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent=``,this._dataAlreadySent=``,this._compositionView.classList.add(`active`)}compositionupdate(e){this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout((()=>{this._compositionPosition.end=this._textarea.value.length}),0)}compositionend(){this._finalizeComposition(!0)}keydown(e){if(this._isComposing||this._isSendingComposition){if(e.keyCode===229||e.keyCode===16||e.keyCode===17||e.keyCode===18)return!1;this._finalizeComposition(!1)}return e.keyCode!==229||(this._handleAnyTextareaChanges(),!1)}_finalizeComposition(e){if(this._compositionView.classList.remove(`active`),this._isComposing=!1,e){let e={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout((()=>{if(this._isSendingComposition){let t;this._isSendingComposition=!1,e.start+=this._dataAlreadySent.length,t=this._isComposing?this._textarea.value.substring(e.start,e.end):this._textarea.value.substring(e.start),t.length>0&&this._coreService.triggerDataEvent(t,!0)}}),0)}else{this._isSendingComposition=!1;let e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){let e=this._textarea.value;setTimeout((()=>{if(!this._isComposing){let t=this._textarea.value,n=t.replace(e,``);this._dataAlreadySent=n,t.length>e.length?this._coreService.triggerDataEvent(n,!0):t.lengththis.updateCompositionElements(!0)),0)}}};t.CompositionHelper=c=r([i(2,o.IBufferService),i(3,o.IOptionsService),i(4,o.ICoreService),i(5,a.IRenderService)],c)},9806:(e,t)=>{function n(e,t,n){let r=n.getBoundingClientRect(),i=e.getComputedStyle(n),a=parseInt(i.getPropertyValue(`padding-left`)),o=parseInt(i.getPropertyValue(`padding-top`));return[t.clientX-r.left-a,t.clientY-r.top-o]}Object.defineProperty(t,"__esModule",{value:!0}),t.getCoords=t.getCoordsRelativeToElement=void 0,t.getCoordsRelativeToElement=n,t.getCoords=function(e,t,r,i,a,o,s,c,l){if(!o)return;let u=n(e,t,r);return u?(u[0]=Math.ceil((u[0]+(l?s/2:0))/s),u[1]=Math.ceil(u[1]/c),u[0]=Math.min(Math.max(u[0],1),i+ +!!l),u[1]=Math.min(Math.max(u[1],1),a),u):void 0}},9504:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.moveToCellSequence=void 0;let r=n(2584);function i(e,t,n,r){let i=e-a(e,n),s=t-a(t,n);return l(Math.abs(i-s)-function(e,t,n){let r=0,i=e-a(e,n),s=t-a(t,n);for(let a=0;a=0&&et?`A`:`B`}function s(e,t,n,r,i,a){let o=e,s=t,c=``;for(;o!==n||s!==r;)o+=i?1:-1,i&&o>a.cols-1?(c+=a.buffer.translateBufferLineToString(s,!1,e,o),o=0,e=0,s++):!i&&o<0&&(c+=a.buffer.translateBufferLineToString(s,!1,0,e+1),o=a.cols-1,e=o,s--);return c+a.buffer.translateBufferLineToString(s,!1,e,o)}function c(e,t){let n=t?`O`:`[`;return r.C0.ESC+n+e}function l(e,t){e=Math.floor(e);let n=``;for(let r=0;r0?r-a(r,o):t;let f=r,p=function(e,t,n,r,o,s){let c;return c=i(n,r,o,s).length>0?r-a(r,o):t,e=n&&ce?`D`:`C`,l(Math.abs(o-e),c(d,r));d=u>t?`D`:`C`;let f=Math.abs(u-t);return l(function(e,t){return t.cols-e}(u>t?e:o,n)+(f-1)*n.cols+1+((u>t?o:e)-1),c(d,r))}},1296:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRenderer=void 0;let a=n(3787),o=n(2550),s=n(2223),c=n(6171),l=n(6052),u=n(4725),d=n(8055),f=n(8460),p=n(844),m=n(2585),h=`xterm-dom-renderer-owner-`,g=`xterm-rows`,_=`xterm-fg-`,v=`xterm-bg-`,y=`xterm-focus`,b=`xterm-selection`,x=1,S=t.DomRenderer=class extends p.Disposable{constructor(e,t,n,r,i,s,u,d,m,_,v,y,S){super(),this._terminal=e,this._document=t,this._element=n,this._screenElement=r,this._viewportElement=i,this._helperContainer=s,this._linkifier2=u,this._charSizeService=m,this._optionsService=_,this._bufferService=v,this._coreBrowserService=y,this._themeService=S,this._terminalClass=x++,this._rowElements=[],this._selectionRenderModel=(0,l.createSelectionRenderModel)(),this.onRequestRedraw=this.register(new f.EventEmitter).event,this._rowContainer=this._document.createElement(`div`),this._rowContainer.classList.add(g),this._rowContainer.style.lineHeight=`normal`,this._rowContainer.setAttribute(`aria-hidden`,`true`),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement(`div`),this._selectionContainer.classList.add(b),this._selectionContainer.setAttribute(`aria-hidden`,`true`),this.dimensions=(0,c.createRenderDimensions)(),this._updateDimensions(),this.register(this._optionsService.onOptionChange((()=>this._handleOptionsChanged()))),this.register(this._themeService.onChangeColors((e=>this._injectCss(e)))),this._injectCss(this._themeService.colors),this._rowFactory=d.createInstance(a.DomRendererRowFactory,document),this._element.classList.add(h+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this.register(this._linkifier2.onShowLinkUnderline((e=>this._handleLinkHover(e)))),this.register(this._linkifier2.onHideLinkUnderline((e=>this._handleLinkLeave(e)))),this.register((0,p.toDisposable)((()=>{this._element.classList.remove(h+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()}))),this._widthCache=new o.WidthCache(this._document,this._helperContainer),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){let e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(let e of this._rowElements)e.style.width=`${this.dimensions.css.canvas.width}px`,e.style.height=`${this.dimensions.css.cell.height}px`,e.style.lineHeight=`${this.dimensions.css.cell.height}px`,e.style.overflow=`hidden`;this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement(`style`),this._screenElement.appendChild(this._dimensionsStyleElement));let t=`${this._terminalSelector} .${g} span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement(`style`),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .${g} { color: ${e.foreground.css}; font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`;t+=`${this._terminalSelector} .${g} .xterm-dim { color: ${d.color.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}`;let n=`blink_underline_${this._terminalClass}`,r=`blink_bar_${this._terminalClass}`,i=`blink_block_${this._terminalClass}`;t+=`@keyframes ${n} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${r} { 50% { box-shadow: none; }}`,t+=`@keyframes ${i} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .${g}.${y} .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${n} 1s step-end infinite;}${this._terminalSelector} .${g}.${y} .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .${g}.${y} .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${i} 1s step-end infinite;}${this._terminalSelector} .${g} .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .${g} .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .${g} .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .${g} .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .${g} .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .${b} { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .${b} div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .${b} div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(let[n,r]of e.ansi.entries())t+=`${this._terminalSelector} .${_}${n} { color: ${r.css}; }${this._terminalSelector} .${_}${n}.xterm-dim { color: ${d.color.multiplyOpacity(r,.5).css}; }${this._terminalSelector} .${v}${n} { background-color: ${r.css}; }`;t+=`${this._terminalSelector} .${_}${s.INVERTED_DEFAULT_COLOR} { color: ${d.color.opaque(e.background).css}; }${this._terminalSelector} .${_}${s.INVERTED_DEFAULT_COLOR}.xterm-dim { color: ${d.color.multiplyOpacity(d.color.opaque(e.background),.5).css}; }${this._terminalSelector} .${v}${s.INVERTED_DEFAULT_COLOR} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){let e=this.dimensions.css.cell.width-this._widthCache.get(`W`,!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let e=this._rowElements.length;e<=t;e++){let e=this._document.createElement(`div`);this._rowContainer.appendChild(e),this._rowElements.push(e)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop())}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove(y),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add(y),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleSelectionChanged(e,t,n){if(this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,n),this.renderRows(0,this._bufferService.rows-1),!e||!t)return;this._selectionRenderModel.update(this._terminal,e,t,n);let r=this._selectionRenderModel.viewportStartRow,i=this._selectionRenderModel.viewportEndRow,a=this._selectionRenderModel.viewportCappedStartRow,o=this._selectionRenderModel.viewportCappedEndRow;if(a>=this._bufferService.rows||o<0)return;let s=this._document.createDocumentFragment();if(n){let n=e[0]>t[0];s.appendChild(this._createSelectionElement(a,n?t[0]:e[0],n?e[0]:t[0],o-a+1))}else{let n=r===a?e[0]:0,c=a===i?t[0]:this._bufferService.cols;s.appendChild(this._createSelectionElement(a,n,c));let l=o-a-1;if(s.appendChild(this._createSelectionElement(a+1,0,this._bufferService.cols,l)),a!==o){let e=i===o?t[0]:this._bufferService.cols;s.appendChild(this._createSelectionElement(o,0,e))}}this._selectionContainer.appendChild(s)}_createSelectionElement(e,t,n,r=1){let i=this._document.createElement(`div`),a=t*this.dimensions.css.cell.width,o=this.dimensions.css.cell.width*(n-t);return a+o>this.dimensions.css.canvas.width&&(o=this.dimensions.css.canvas.width-a),i.style.height=r*this.dimensions.css.cell.height+`px`,i.style.top=e*this.dimensions.css.cell.height+`px`,i.style.left=`${a}px`,i.style.width=`${o}px`,i}handleCursorMove(){}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(let e of this._rowElements)e.replaceChildren()}renderRows(e,t){let n=this._bufferService.buffer,r=n.ybase+n.y,i=Math.min(n.x,this._bufferService.cols-1),a=this._optionsService.rawOptions.cursorBlink,o=this._optionsService.rawOptions.cursorStyle,s=this._optionsService.rawOptions.cursorInactiveStyle;for(let c=e;c<=t;c++){let e=c+n.ydisp,t=this._rowElements[c],l=n.lines.get(e);if(!t||!l)break;t.replaceChildren(...this._rowFactory.createRow(l,e,e===r,o,s,i,a,this.dimensions.css.cell.width,this._widthCache,-1,-1))}}get _terminalSelector(){return`.${h}${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,n,r,i,a){n<0&&(e=0),r<0&&(t=0);let o=this._bufferService.rows-1;n=Math.max(Math.min(n,o),0),r=Math.max(Math.min(r,o),0),i=Math.min(i,this._bufferService.cols);let s=this._bufferService.buffer,c=s.ybase+s.y,l=Math.min(s.x,i-1),u=this._optionsService.rawOptions.cursorBlink,d=this._optionsService.rawOptions.cursorStyle,f=this._optionsService.rawOptions.cursorInactiveStyle;for(let o=n;o<=r;++o){let p=o+s.ydisp,m=this._rowElements[o],h=s.lines.get(p);if(!m||!h)break;m.replaceChildren(...this._rowFactory.createRow(h,p,p===c,d,f,l,u,this.dimensions.css.cell.width,this._widthCache,a?o===n?e:0:-1,a?(o===r?t:i)-1:-1))}}};t.DomRenderer=S=r([i(7,m.IInstantiationService),i(8,u.ICharSizeService),i(9,m.IOptionsService),i(10,m.IBufferService),i(11,u.ICoreBrowserService),i(12,u.IThemeService)],S)},3787:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRendererRowFactory=void 0;let a=n(2223),o=n(643),s=n(511),c=n(2585),l=n(8055),u=n(4725),d=n(4269),f=n(6171),p=n(3734),m=t.DomRendererRowFactory=class{constructor(e,t,n,r,i,a,o){this._document=e,this._characterJoinerService=t,this._optionsService=n,this._coreBrowserService=r,this._coreService=i,this._decorationService=a,this._themeService=o,this._workCell=new s.CellData,this._columnSelectMode=!1,this.defaultSpacing=0}handleSelectionChanged(e,t,n){this._selectionStart=e,this._selectionEnd=t,this._columnSelectMode=n}createRow(e,t,n,r,i,s,c,u,f,m,g){let _=[],v=this._characterJoinerService.getJoinedCharacters(t),y=this._themeService.colors,b,x=e.getNoBgTrimmedLength();n&&x0&&N===v[0][0]){P=!0;let t=v.shift();I=new d.JoinedCellData(this._workCell,e.translateToString(!0,t[0],t[1]),t[1]-t[0]),F=t[1]-1,x=I.getWidth()}let L=this._isCellInSelection(N,t),R=n&&N===s,z=M&&N>=m&&N<=g,B=!1;this._decorationService.forEachDecorationAtCell(N,t,void 0,(e=>{B=!0}));let V=I.getChars()||o.WHITESPACE_CELL_CHAR;if(V===` `&&(I.isUnderline()||I.isOverline())&&(V=`\xA0`),A=x*u-f.get(V,I.isBold(),I.isItalic()),b){if(S&&(L&&k||!L&&!k&&I.bg===w)&&(L&&k&&y.selectionForeground||I.fg===T)&&I.extended.ext===E&&z===D&&A===O&&!R&&!P&&!B){I.isInvisible()?C+=o.WHITESPACE_CELL_CHAR:C+=V,S++;continue}S&&(b.textContent=C),b=this._document.createElement(`span`),S=0,C=``}else b=this._document.createElement(`span`);if(w=I.bg,T=I.fg,E=I.extended.ext,D=z,O=A,k=L,P&&s>=N&&s<=F&&(s=N),!this._coreService.isCursorHidden&&R&&this._coreService.isCursorInitialized){if(j.push(`xterm-cursor`),this._coreBrowserService.isFocused)c&&j.push(`xterm-cursor-blink`),j.push(r===`bar`?`xterm-cursor-bar`:r===`underline`?`xterm-cursor-underline`:`xterm-cursor-block`);else if(i)switch(i){case`outline`:j.push(`xterm-cursor-outline`);break;case`block`:j.push(`xterm-cursor-block`);break;case`bar`:j.push(`xterm-cursor-bar`);break;case`underline`:j.push(`xterm-cursor-underline`)}}if(I.isBold()&&j.push(`xterm-bold`),I.isItalic()&&j.push(`xterm-italic`),I.isDim()&&j.push(`xterm-dim`),C=I.isInvisible()?o.WHITESPACE_CELL_CHAR:I.getChars()||o.WHITESPACE_CELL_CHAR,I.isUnderline()&&(j.push(`xterm-underline-${I.extended.underlineStyle}`),C===` `&&(C=`\xA0`),!I.isUnderlineColorDefault()))if(I.isUnderlineColorRGB())b.style.textDecorationColor=`rgb(${p.AttributeData.toColorRGB(I.getUnderlineColor()).join(`,`)})`;else{let e=I.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&I.isBold()&&e<8&&(e+=8),b.style.textDecorationColor=y.ansi[e].css}I.isOverline()&&(j.push(`xterm-overline`),C===` `&&(C=`\xA0`)),I.isStrikethrough()&&j.push(`xterm-strikethrough`),z&&(b.style.textDecoration=`underline`);let H=I.getFgColor(),U=I.getFgColorMode(),W=I.getBgColor(),G=I.getBgColorMode(),K=!!I.isInverse();if(K){let e=H;H=W,W=e;let t=U;U=G,G=t}let q,J,Y,X=!1;switch(this._decorationService.forEachDecorationAtCell(N,t,void 0,(e=>{e.options.layer!==`top`&&X||(e.backgroundColorRGB&&(G=50331648,W=e.backgroundColorRGB.rgba>>8&16777215,q=e.backgroundColorRGB),e.foregroundColorRGB&&(U=50331648,H=e.foregroundColorRGB.rgba>>8&16777215,J=e.foregroundColorRGB),X=e.options.layer===`top`)})),!X&&L&&(q=this._coreBrowserService.isFocused?y.selectionBackgroundOpaque:y.selectionInactiveBackgroundOpaque,W=q.rgba>>8&16777215,G=50331648,X=!0,y.selectionForeground&&(U=50331648,H=y.selectionForeground.rgba>>8&16777215,J=y.selectionForeground)),X&&j.push(`xterm-decoration-top`),G){case 16777216:case 33554432:Y=y.ansi[W],j.push(`xterm-bg-${W}`);break;case 50331648:Y=l.channels.toColor(W>>16,W>>8&255,255&W),this._addStyle(b,`background-color:#${h((W>>>0).toString(16),`0`,6)}`);break;default:K?(Y=y.foreground,j.push(`xterm-bg-${a.INVERTED_DEFAULT_COLOR}`)):Y=y.background}switch(q||I.isDim()&&(q=l.color.multiplyOpacity(Y,.5)),U){case 16777216:case 33554432:I.isBold()&&H<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(H+=8),this._applyMinimumContrast(b,Y,y.ansi[H],I,q,void 0)||j.push(`xterm-fg-${H}`);break;case 50331648:let e=l.channels.toColor(H>>16&255,H>>8&255,255&H);this._applyMinimumContrast(b,Y,e,I,q,J)||this._addStyle(b,`color:#${h(H.toString(16),`0`,6)}`);break;default:this._applyMinimumContrast(b,Y,y.foreground,I,q,J)||K&&j.push(`xterm-fg-${a.INVERTED_DEFAULT_COLOR}`)}j.length&&=(b.className=j.join(` `),0),R||P||B?b.textContent=C:S++,A!==this.defaultSpacing&&(b.style.letterSpacing=`${A}px`),_.push(b),N=F}return b&&S&&(b.textContent=C),_}_applyMinimumContrast(e,t,n,r,i,a){if(this._optionsService.rawOptions.minimumContrastRatio===1||(0,f.treatGlyphAsBackgroundColor)(r.getCode()))return!1;let o=this._getContrastCache(r),s;if(i||a||(s=o.getColor(t.rgba,n.rgba)),s===void 0){let e=this._optionsService.rawOptions.minimumContrastRatio/(r.isDim()?2:1);s=l.color.ensureContrastRatio(i||t,a||n,e),o.setColor((i||t).rgba,(a||n).rgba,s??null)}return!!s&&(this._addStyle(e,`color:${s.css}`),!0)}_getContrastCache(e){return e.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(e,t){e.setAttribute(`style`,`${e.getAttribute(`style`)||``}${t};`)}_isCellInSelection(e,t){let n=this._selectionStart,r=this._selectionEnd;return!(!n||!r)&&(this._columnSelectMode?n[0]<=r[0]?e>=n[0]&&t>=n[1]&&e=n[1]&&e>=r[0]&&t<=r[1]:t>n[1]&&t=n[0]&&e=n[0])}};function h(e,t,n){for(;e.length{Object.defineProperty(t,"__esModule",{value:!0}),t.WidthCache=void 0,t.WidthCache=class{constructor(e,t){this._flat=new Float32Array(256),this._font=``,this._fontSize=0,this._weight=`normal`,this._weightBold=`bold`,this._measureElements=[],this._container=e.createElement(`div`),this._container.classList.add(`xterm-width-cache-measure-container`),this._container.setAttribute(`aria-hidden`,`true`),this._container.style.whiteSpace=`pre`,this._container.style.fontKerning=`none`;let n=e.createElement(`span`);n.classList.add(`xterm-char-measure-element`);let r=e.createElement(`span`);r.classList.add(`xterm-char-measure-element`),r.style.fontWeight=`bold`;let i=e.createElement(`span`);i.classList.add(`xterm-char-measure-element`),i.style.fontStyle=`italic`;let a=e.createElement(`span`);a.classList.add(`xterm-char-measure-element`),a.style.fontWeight=`bold`,a.style.fontStyle=`italic`,this._measureElements=[n,r,i,a],this._container.appendChild(n),this._container.appendChild(r),this._container.appendChild(i),this._container.appendChild(a),t.appendChild(this._container),this.clear()}dispose(){this._container.remove(),this._measureElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(e,t,n,r){e===this._font&&t===this._fontSize&&n===this._weight&&r===this._weightBold||(this._font=e,this._fontSize=t,this._weight=n,this._weightBold=r,this._container.style.fontFamily=this._font,this._container.style.fontSize=`${this._fontSize}px`,this._measureElements[0].style.fontWeight=`${n}`,this._measureElements[1].style.fontWeight=`${r}`,this._measureElements[2].style.fontWeight=`${n}`,this._measureElements[3].style.fontWeight=`${r}`,this.clear())}get(e,t,n){let r=0;if(!t&&!n&&e.length===1&&(r=e.charCodeAt(0))<256){if(this._flat[r]!==-9999)return this._flat[r];let t=this._measure(e,0);return t>0&&(this._flat[r]=t),t}let i=e;t&&(i+=`B`),n&&(i+=`I`);let a=this._holey.get(i);if(a===void 0){let r=0;t&&(r|=1),n&&(r|=2),a=this._measure(e,r),a>0&&this._holey.set(i,a)}return a}_measure(e,t){let n=this._measureElements[t];return n.textContent=e.repeat(32),n.offsetWidth/32}}},2223:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TEXT_BASELINE=t.DIM_OPACITY=t.INVERTED_DEFAULT_COLOR=void 0;let r=n(6114);t.INVERTED_DEFAULT_COLOR=257,t.DIM_OPACITY=.5,t.TEXT_BASELINE=r.isFirefox||r.isLegacyEdge?`bottom`:`ideographic`},6171:(e,t)=>{function n(e){return 57508<=e&&e<=57558}function r(e){return e>=128512&&e<=128591||e>=127744&&e<=128511||e>=128640&&e<=128767||e>=9728&&e<=9983||e>=9984&&e<=10175||e>=65024&&e<=65039||e>=129280&&e<=129535||e>=127462&&e<=127487}Object.defineProperty(t,"__esModule",{value:!0}),t.computeNextVariantOffset=t.createRenderDimensions=t.treatGlyphAsBackgroundColor=t.allowRescaling=t.isEmoji=t.isRestrictedPowerlineGlyph=t.isPowerlineGlyph=t.throwIfFalsy=void 0,t.throwIfFalsy=function(e){if(!e)throw Error(`value must not be falsy`);return e},t.isPowerlineGlyph=n,t.isRestrictedPowerlineGlyph=function(e){return 57520<=e&&e<=57527},t.isEmoji=r,t.allowRescaling=function(e,t,i,a){return t===1&&i>Math.ceil(1.5*a)&&e!==void 0&&e>255&&!r(e)&&!n(e)&&!function(e){return 57344<=e&&e<=63743}(e)},t.treatGlyphAsBackgroundColor=function(e){return n(e)||function(e){return 9472<=e&&e<=9631}(e)},t.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},t.computeNextVariantOffset=function(e,t,n=0){return(e-(2*Math.round(t)-n))%(2*Math.round(t))}},6052:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionRenderModel=void 0;class n{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(e,t,n,r=!1){if(this.selectionStart=t,this.selectionEnd=n,!t||!n||t[0]===n[0]&&t[1]===n[1])return void this.clear();let i=e.buffers.active.ydisp,a=t[1]-i,o=n[1]-i,s=Math.max(a,0),c=Math.min(o,e.rows-1);s>=e.rows||c<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=r,this.viewportStartRow=a,this.viewportEndRow=o,this.viewportCappedStartRow=s,this.viewportCappedEndRow=c,this.startCol=t[0],this.endCol=n[0])}isCellSelected(e,t,n){return!!this.hasSelection&&(n-=e.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?t>=this.startCol&&n>=this.viewportCappedStartRow&&t=this.viewportCappedStartRow&&t>=this.endCol&&n<=this.viewportCappedEndRow:n>this.viewportStartRow&&n=this.startCol&&t=this.startCol)}}t.createSelectionRenderModel=function(){return new n}},456:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionModel=void 0,t.SelectionModel=class{constructor(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){let e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?e%this._bufferService.cols==0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){let e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[Math.max(e,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){let e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])}handleTrim(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)}}},428:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharSizeService=void 0;let a=n(2585),o=n(8460),s=n(844),c=t.CharSizeService=class extends s.Disposable{get hasValidSize(){return this.width>0&&this.height>0}constructor(e,t,n){super(),this._optionsService=n,this.width=0,this.height=0,this._onCharSizeChange=this.register(new o.EventEmitter),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this.register(new d(this._optionsService))}catch{this._measureStrategy=this.register(new u(e,t,this._optionsService))}this.register(this._optionsService.onMultipleOptionChange([`fontFamily`,`fontSize`],(()=>this.measure())))}measure(){let e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};t.CharSizeService=c=r([i(2,a.IOptionsService)],c);class l extends s.Disposable{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(e,t){e!==void 0&&e>0&&t!==void 0&&t>0&&(this._result.width=e,this._result.height=t)}}class u extends l{constructor(e,t,n){super(),this._document=e,this._parentElement=t,this._optionsService=n,this._measureElement=this._document.createElement(`span`),this._measureElement.classList.add(`xterm-char-measure-element`),this._measureElement.textContent=`W`.repeat(32),this._measureElement.setAttribute(`aria-hidden`,`true`),this._measureElement.style.whiteSpace=`pre`,this._measureElement.style.fontKerning=`none`,this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}}class d extends l{constructor(e){super(),this._optionsService=e,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext(`2d`);let t=this._ctx.measureText(`W`);if(!(`width`in t&&`fontBoundingBoxAscent`in t&&`fontBoundingBoxDescent`in t))throw Error(`Required font metrics not supported`)}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;let e=this._ctx.measureText(`W`);return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}}},4269:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharacterJoinerService=t.JoinedCellData=void 0;let a=n(3734),o=n(643),s=n(511),c=n(2585);class l extends a.AttributeData{constructor(e,t,n){super(),this.content=0,this.combinedData=``,this.fg=e.fg,this.bg=e.bg,this.combinedData=t,this._width=n}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw Error(`not implemented`)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}t.JoinedCellData=l;let u=t.CharacterJoinerService=class e{constructor(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new s.CellData}register(e){let t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id}deregister(e){for(let t=0;t1){let e=this._getJoinedRanges(r,s,a,t,i);for(let t=0;t1){let e=this._getJoinedRanges(r,s,a,t,i);for(let t=0;t{Object.defineProperty(t,"__esModule",{value:!0}),t.CoreBrowserService=void 0;let r=n(844),i=n(8460),a=n(3656);class o extends r.Disposable{constructor(e,t,n){super(),this._textarea=e,this._window=t,this.mainDocument=n,this._isFocused=!1,this._cachedIsFocused=void 0,this._screenDprMonitor=new s(this._window),this._onDprChange=this.register(new i.EventEmitter),this.onDprChange=this._onDprChange.event,this._onWindowChange=this.register(new i.EventEmitter),this.onWindowChange=this._onWindowChange.event,this.register(this.onWindowChange((e=>this._screenDprMonitor.setWindow(e)))),this.register((0,i.forwardEvent)(this._screenDprMonitor.onDprChange,this._onDprChange)),this._textarea.addEventListener(`focus`,(()=>this._isFocused=!0)),this._textarea.addEventListener(`blur`,(()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask((()=>this._cachedIsFocused=void 0))),this._cachedIsFocused}}t.CoreBrowserService=o;class s extends r.Disposable{constructor(e){super(),this._parentWindow=e,this._windowResizeListener=this.register(new r.MutableDisposable),this._onDprChange=this.register(new i.EventEmitter),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this.register((0,r.toDisposable)((()=>this.clearListener())))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=(0,a.addDisposableDomListener)(this._parentWindow,`resize`,(()=>this._setDprAndFireIfDiffers()))}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}}},779:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LinkProviderService=void 0;let r=n(844);class i extends r.Disposable{constructor(){super(),this.linkProviders=[],this.register((0,r.toDisposable)((()=>this.linkProviders.length=0)))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{let t=this.linkProviders.indexOf(e);t!==-1&&this.linkProviders.splice(t,1)}}}}t.LinkProviderService=i},8934:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseService=void 0;let a=n(4725),o=n(9806),s=t.MouseService=class{constructor(e,t){this._renderService=e,this._charSizeService=t}getCoords(e,t,n,r,i){return(0,o.getCoords)(window,e,t,n,r,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,i)}getMouseReportCoords(e,t){let n=(0,o.getCoordsRelativeToElement)(window,e,t);if(this._charSizeService.hasValidSize)return n[0]=Math.min(Math.max(n[0],0),this._renderService.dimensions.css.canvas.width-1),n[1]=Math.min(Math.max(n[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(n[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(n[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(n[0]),y:Math.floor(n[1])}}};t.MouseService=s=r([i(0,a.IRenderService),i(1,a.ICharSizeService)],s)},3230:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.RenderService=void 0;let a=n(6193),o=n(4725),s=n(8460),c=n(844),l=n(7226),u=n(2585),d=t.RenderService=class extends c.Disposable{get dimensions(){return this._renderer.value.dimensions}constructor(e,t,n,r,i,o,u,d){super(),this._rowCount=e,this._charSizeService=r,this._renderer=this.register(new c.MutableDisposable),this._pausedResizeTask=new l.DebouncedIdleTask,this._observerDisposable=this.register(new c.MutableDisposable),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this.register(new s.EventEmitter),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this.register(new s.EventEmitter),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this.register(new s.EventEmitter),this.onRender=this._onRender.event,this._onRefreshRequest=this.register(new s.EventEmitter),this.onRefreshRequest=this._onRefreshRequest.event,this._renderDebouncer=new a.RenderDebouncer(((e,t)=>this._renderRows(e,t)),u),this.register(this._renderDebouncer),this.register(u.onDprChange((()=>this.handleDevicePixelRatioChange()))),this.register(o.onResize((()=>this._fullRefresh()))),this.register(o.buffers.onBufferActivate((()=>this._renderer.value?.clear()))),this.register(n.onOptionChange((()=>this._handleOptionsChanged()))),this.register(this._charSizeService.onCharSizeChange((()=>this.handleCharSizeChanged()))),this.register(i.onDecorationRegistered((()=>this._fullRefresh()))),this.register(i.onDecorationRemoved((()=>this._fullRefresh()))),this.register(n.onMultipleOptionChange([`customGlyphs`,`drawBoldTextInBrightColors`,`letterSpacing`,`lineHeight`,`fontFamily`,`fontSize`,`fontWeight`,`fontWeightBold`,`minimumContrastRatio`,`rescaleOverlappingGlyphs`],(()=>{this.clear(),this.handleResize(o.cols,o.rows),this._fullRefresh()}))),this.register(n.onMultipleOptionChange([`cursorBlink`,`cursorStyle`],(()=>this.refreshRows(o.buffer.y,o.buffer.y,!0)))),this.register(d.onChangeColors((()=>this._fullRefresh()))),this._registerIntersectionObserver(u.window,t),this.register(u.onWindowChange((e=>this._registerIntersectionObserver(e,t))))}_registerIntersectionObserver(e,t){if(`IntersectionObserver`in e){let n=new e.IntersectionObserver((e=>this._handleIntersectionChange(e[e.length-1])),{threshold:0});n.observe(t),this._observerDisposable.value=(0,c.toDisposable)((()=>n.disconnect()))}}_handleIntersectionChange(e){this._isPaused=e.isIntersecting===void 0?e.intersectionRatio===0:!e.isIntersecting,this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,n=!1){this._isPaused?this._needsFullRefresh=!0:(n||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,t,this._rowCount))}_renderRows(e,t){this._renderer.value&&(e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&=(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0)}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw((e=>this.refreshRows(e.start,e.end,!0))),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set((()=>this._renderer.value?.handleResize(e,t))):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,n){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=n,this._renderer.value?.handleSelectionChanged(e,t,n)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};t.RenderService=d=r([i(2,u.IOptionsService),i(3,o.ICharSizeService),i(4,u.IDecorationService),i(5,u.IBufferService),i(6,o.ICoreBrowserService),i(7,o.IThemeService)],d)},9312:function(e,t,n){var r=this&&this.__decorate||function(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o},i=this&&this.__param||function(e,t){return function(n,r){t(n,r,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionService=void 0;let a=n(9806),o=n(9504),s=n(456),c=n(4725),l=n(8460),u=n(844),d=n(6114),f=n(4841),p=n(511),m=n(2585),h=RegExp(`\xA0`,`g`),g=t.SelectionService=class extends u.Disposable{constructor(e,t,n,r,i,a,o,c,d){super(),this._element=e,this._screenElement=t,this._linkifier=n,this._bufferService=r,this._coreService=i,this._mouseService=a,this._optionsService=o,this._renderService=c,this._coreBrowserService=d,this._dragScrollAmount=0,this._enabled=!0,this._workCell=new p.CellData,this._mouseDownTimeStamp=0,this._oldHasSelection=!1,this._oldSelectionStart=void 0,this._oldSelectionEnd=void 0,this._onLinuxMouseSelection=this.register(new l.EventEmitter),this.onLinuxMouseSelection=this._onLinuxMouseSelection.event,this._onRedrawRequest=this.register(new l.EventEmitter),this.onRequestRedraw=this._onRedrawRequest.event,this._onSelectionChange=this.register(new l.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onRequestScrollLines=this.register(new l.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this._mouseMoveListener=e=>this._handleMouseMove(e),this._mouseUpListener=e=>this._handleMouseUp(e),this._coreService.onUserInput((()=>{this.hasSelection&&this.clearSelection()})),this._trimListener=this._bufferService.buffer.lines.onTrim((e=>this._handleTrim(e))),this.register(this._bufferService.buffers.onBufferActivate((e=>this._handleBufferActivate(e)))),this.enable(),this._model=new s.SelectionModel(this._bufferService),this._activeSelectionMode=0,this.register((0,u.toDisposable)((()=>{this._removeMouseDownListeners()})))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t||e[0]===t[0]&&e[1]===t[1])}get selectionText(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return``;let n=this._bufferService.buffer,r=[];if(this._activeSelectionMode===3){if(e[0]===t[0])return``;let i=e[0]e.replace(h,` `))).join(d.isWindows?`\r `:` diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-BiIHlEw9.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-Blxijm2e.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-BiIHlEw9.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-Blxijm2e.js index 64c7b64e..79cea797 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-BiIHlEw9.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-Blxijm2e.js @@ -1,4 +1,4 @@ -import{C as e,D as t,b as n,d as r,f as i,i as a,l as o,m as s,t as ee,v as te,x as c}from"./index-CLJ0aycO.js";import{n as l,r as ne,t as re}from"./dist-B2R-c1vX.js";import{i as u,n as ie,r as ae}from"./dist-BxWz473c.js";var oe=1,d=194,f=195,se=196,p=197,ce=198,le=199,ue=200,de=2,m=3,h=201,g=24,fe=25,pe=49,me=50,he=55,ge=56,_e=57,ve=59,ye=60,be=61,xe=62,Se=63,Ce=65,we=238,Te=71,Ee=241,De=242,Oe=243,ke=244,Ae=245,_=246,v=247,y=248,b=72,x=249,S=250,C=251,je=252,Me=253,Ne=254,Pe=255,Fe=256,Ie=73,Le=77,Re=263,ze=112,Be=130,Ve=151,He=152,Ue=155,w=10,T=13,E=32,D=9,O=35,We=40,Ge=46,k=123,A=125,j=39,M=34,N=92,Ke=111,P=120,qe=78,Je=117,Ye=85,Xe=new Set([fe,pe,me,Re,Ce,Be,ge,_e,we,xe,Se,b,Ie,Le,ye,be,Ve,He,Ue,ze]);function F(e){return e==w||e==T}function I(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}var Ze=new l((e,t)=>{let n;if(e.next<0)e.acceptToken(le);else if(t.context.flags&L)F(e.next)&&e.acceptToken(ce,1);else if(((n=e.peek(-1))<0||F(n))&&t.canShift(p)){let t=0;for(;e.next==E||e.next==D;)e.advance(),t++;(e.next==w||e.next==T||e.next==O)&&e.acceptToken(p,-t)}else F(e.next)&&e.acceptToken(se,1)},{contextual:!0}),Qe=new l((e,t)=>{let n=t.context;if(n.flags)return;let r=e.peek(-1);if(r==w||r==T){let t=0,r=0;for(;;){if(e.next==E)t++;else if(e.next==D)t+=8-t%8;else break;e.advance(),r++}t!=n.indent&&e.next!=w&&e.next!=T&&e.next!=O&&(t[e,t|R])),tt=new re({start:$e,reduce(e,t,n,r){return e.flags&L&&Xe.has(t)||(t==Te||t==b)&&e.flags&R?e.parent:e},shift(e,t,n,r){return t==d?new U(e,et(r.read(r.pos,n.pos)),0):t==f?e.parent:t==g||t==he||t==ve||t==m?new U(e,0,L):W.has(t)?new U(e,0,W.get(t)|e.flags&L):e},hash(e){return e.hash}}),nt=new l(e=>{for(let t=0;t<5;t++){if(e.next!=`print`.charCodeAt(t))return;e.advance()}if(!/\w/.test(String.fromCharCode(e.next)))for(let t=0;;t++){let n=e.peek(t);if(!(n==E||n==D)){n!=We&&n!=Ge&&n!=w&&n!=T&&n!=O&&e.acceptToken(oe);return}}}),rt=new l((e,t)=>{let{flags:n}=t.context,r=n&z?M:j,i=(n&B)>0,a=!(n&V),o=(n&H)>0,s=e.pos;for(;!(e.next<0);)if(o&&e.next==k)if(e.peek(1)==k)e.advance(2);else{if(e.pos==s){e.acceptToken(m,1);return}break}else if(a&&e.next==N){if(e.pos==s){e.advance();let t=e.next;t>=0&&(e.advance(),it(e,t)),e.acceptToken(de);return}break}else if(e.next==N&&!a&&e.peek(1)>-1)e.advance(2);else if(e.next==r&&(!i||e.peek(1)==r&&e.peek(2)==r)){if(e.pos==s){e.acceptToken(h,i?3:1);return}break}else if(e.next==w){if(i)e.advance();else if(e.pos==s){e.acceptToken(h);return}break}else e.advance();e.pos>s&&e.acceptToken(ue)});function it(e,t){if(t==Ke)for(let t=0;t<2&&e.next>=48&&e.next<=55;t++)e.advance();else if(t==P)for(let t=0;t<2&&I(e.next);t++)e.advance();else if(t==Je)for(let t=0;t<4&&I(e.next);t++)e.advance();else if(t==Ye)for(let t=0;t<8&&I(e.next);t++)e.advance();else if(t==qe&&e.next==k){for(e.advance();e.next>=0&&e.next!=A&&e.next!=j&&e.next!=M&&e.next!=w;)e.advance();e.next==A&&e.advance()}}var at=n({'async "*" "**" FormatConversion FormatSpec':c.modifier,"for while if elif else try except finally return raise break continue with pass assert await yield match case":c.controlKeyword,"in not and or is del":c.operatorKeyword,"from def class global nonlocal lambda":c.definitionKeyword,import:c.moduleKeyword,"with as print":c.keyword,Boolean:c.bool,None:c.null,VariableName:c.variableName,"CallExpression/VariableName":c.function(c.variableName),"FunctionDefinition/VariableName":c.function(c.definition(c.variableName)),"ClassDefinition/VariableName":c.definition(c.className),PropertyName:c.propertyName,"CallExpression/MemberExpression/PropertyName":c.function(c.propertyName),Comment:c.lineComment,Number:c.number,String:c.string,FormatString:c.special(c.string),Escape:c.escape,UpdateOp:c.updateOperator,"ArithOp!":c.arithmeticOperator,BitOp:c.bitwiseOperator,CompareOp:c.compareOperator,AssignOp:c.definitionOperator,Ellipsis:c.punctuation,At:c.meta,"( )":c.paren,"[ ]":c.squareBracket,"{ }":c.brace,".":c.derefOperator,", ;":c.separator}),ot={__proto__:null,await:44,or:54,and:56,in:60,not:62,is:64,if:70,else:72,lambda:76,yield:94,from:96,async:102,for:104,None:162,True:164,False:164,del:178,pass:182,break:186,continue:190,return:194,raise:202,import:206,as:208,global:212,nonlocal:214,assert:218,type:223,elif:236,while:240,try:246,except:248,finally:250,with:254,def:258,class:268,match:279,case:285},st=ne.deserialize({version:14,states:"##jQ`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO3rQdO'#EfO3zQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO4VQdO'#EyO4^QdO'#FOO4iQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4nQdO'#F[P4uOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO5TQdO'#DoOOQS,5:Y,5:YO5hQdO'#HdOOQS,5:],5:]O5uQ!fO,5:]O5zQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8jQdO,59bO8oQdO,59bO8vQdO,59jO8}QdO'#HTO:TQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:lQdO,59aO'vQdO,59aO:zQdO,59aOOQS,59y,59yO;PQdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;_QdO,5:QO;dQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;uQdO,5:UO;zQdO,5:WOOOW'#Fy'#FyOOOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!/[QtO1G.|O!/cQtO1G.|O1lQdO1G.|O!0OQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!0VQdO1G/eO!0gQdO1G/eO!0oQdO1G/fO'vQdO'#H[O!0tQdO'#H[O!0yQtO1G.{O!1ZQdO,59iO!2aQdO,5=zO!2qQdO,5=zO!2yQdO1G/mO!3OQtO1G/mOOQS1G/l1G/lO!3`QdO,5=uO!4VQdO,5=uO0rQdO1G/qO!4tQdO1G/sO!4yQtO1G/sO!5ZQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!5kQdO'#HxO0rQdO'#HxO!5|QdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!6[Q#xO1G2zO!6{QtO1G2zO'vQdO,5kOOQS1G1`1G1`O!8RQdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!8WQdO'#FrO!8cQdO,59oO!8kQdO1G/XO!8uQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!9fQdO'#GtOOQS,5jO!;ZQdO,5>jO1XQdO,5>jO!;lQdO,5>iOOQS-E:R-E:RO!;qQdO1G0lO!;|QdO1G0lO!lO!lO!hO!=VQdO,5>hO!=hQdO'#EpO0rQdO1G0tO!=sQdO1G0tO!=xQgO1G0zO!AvQgO1G0}O!EqQdO,5>oO!E{QdO,5>oO!FTQtO,5>oO0rQdO1G1PO!F_QdO1G1PO4iQdO1G1UO!!vQdO1G1WOOQV,5;a,5;aO!FdQfO,5;aO!FiQgO1G1QO!JjQdO'#GZO4iQdO1G1QO4iQdO1G1QO!JzQdO,5>pO!KXQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!KaQdO'#FSO!KrQ!fO1G1WO!KzQdO1G1WOOQV1G1]1G1]O4iQdO1G1]O!LPQdO1G1]O!LXQdO'#F^OOQV1G1b1G1bO!#ZQtO1G1bPOOO1G2v1G2vP!L^OSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!LfQdO,5=|O!LyQdO,5=|OOQS1G/u1G/uO!MRQdO,5>PO!McQdO,5>PO!MkQdO,5>PO!NOQdO,5>PO!N`QdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!8kQdO7+$pO#!RQdO1G.|O#!YQdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO#!aQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO#!qQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO#!vQdO7+%PO##OQdO7+%QO##TQdO1G3fOOQS7+%X7+%XO##eQdO1G3fO##mQdO7+%XOOQS,5<_,5<_O'vQdO,5<_O##rQdO1G3aOOQS-E9q-E9qO#$iQdO7+%]OOQS7+%_7+%_O#$wQdO1G3aO#%fQdO7+%_O#%kQdO1G3gO#%{QdO1G3gO#&TQdO7+%]O#&YQdO,5>dO#&sQdO,5>dO#&sQdO,5>dOOQS'#Dx'#DxO#'UO&jO'#DzO#'aO`O'#HyOOOW1G3}1G3}O#'fQdO1G3}O#'nQdO1G3}O#'yQ#xO7+(fO#(jQtO1G2UP#)TQdO'#GOOOQS,5nQdO,5sQdO1G4OOOQS-E9y-E9yO#?^QdO1G4OO<[QdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#?oO&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#?zQdO7+)iO#@SQdO1G2zO#@mQdO1G2zP'vQdO'#FuO0rQdO<mO#BQQdO,5>mOOQS1G0v1G0vOOQS<rO#KgQdO,5>rO#KrQdO,5>rO#K}QdO,5>qO#L`QdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<VAN>VO$ oQdO<cAN>cO0rQdO1G1|O$!PQtO1G1|P$!ZQdO'#FvOOQS1G2R1G2RP$!hQdO'#F{O$!uQdO7+)jO$#`QdO,5>gOOOO-E9z-E9zOOOW<tO$4{QdO,5>tO1XQdO,5vO$)nQdO,5>vOOQS1G1p1G1pOOQS,5<[,5<[OOQU7+'P7+'PO$+zQdO1G/iO$)nQdO,5wO$8zQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$)nQdO'#GdO$9SQdO1G4bO$9^QdO1G4bO$9fQdO1G4bOOQS7+%T7+%TO$9tQdO1G1tO$:SQtO'#FaO$:ZQdO,5<}OOQS,5<},5<}O$:iQdO1G4cOOQS-E:a-E:aO$)nQdO,5<|O$:pQdO,5<|O$:uQdO7+)|OOQS-E:`-E:`O$;PQdO7+)|O$)nQdO,5S~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0cOv0qO!PrO~P'vOV#OOo0cOv0qO!W#PO~P'vOV#SOa#TOo0cOv0qO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0cOv0qO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0cOv0qO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0cOv0qO#g#SX%[#SX%_#SX~P'vOo0cOv0qO#g#WX%[#WX%_#WX~P'vOh$WO%uWO~O!f$YO!r$YO%uWO~OV$eO~P'vO!U$gO#s$hO#u$iO~O{$jO~OV$qO~P'vOS$sO%[$rO%_$rO%c$tO~OV$}Oa$}Og%POo0cOv0qO~P'vOo0cOv0qO{%SO~P'vO&Y%UO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%ZO~Oo%ZO~P'vOo0cO~P'vOk0eOl0fOm0dOn0dOo0mOp0nOs0rOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%]Og%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%_Oz%`O!T%dO!U%cO~Og%_O~Oz%gO!T%dO!U%cO!W&SX~O!W%kO~Oz%lO{%nO!T%dO!U%cO![%}X~O![%rO~O![%sO~OQ#XO%`#XO%a%uO~OV%wOo0cOv0qO!PrO~P'vOQ#^OR#[O%`#^O%a%zO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV&OOopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&TO%_&TO~O!f&UOh&sX%[&sXz&sX#[&sX#g&sX%_&sX#Z&sXg&sX~Oh!iO%[&WO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PEcO%z&YOz%yX{%yX~O%uWOz%yX{%yX~Oz&]O{wX~O{&_O~Oz%lO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0lOo0cOv0qO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&hO#g&PX%[&PX%_&PXn&PX~P%SOz&kO!Q&jO#g#Wa%[#Wa%_#Wa~Oz&lO#[&nO#g&rX%[&rX%_&rXg&rX~O!f$YO!r$YO#Z&qO%uWO~O#Z&qO~Oz&sO#g&tX%[&tX%_&tX~Oz&uO#g&pX%[&pX%_&pX{&pX~O!X&wO%z&xO~Oz&|On&wX~P%SOn'PO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['UO~P'vOt'YO#p'WO#q'XOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'ZO#[']O{&xX~Oh'_O!X&wO~Oh!iO{$jO!X&wO~O{'eO~P%SO%['hO%_'hO~OS'iO%['hO%_'hO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#uO%kWi~P!#uOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&pO%mWi%nWi~P!&pOa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)nOVWi_Wi%qWi%rWi%sWi~P!)nO!T%dO!U%cOg&VXz&VX~O%z'kO%{'kO~P,eOz'mOg&UX~Og'oO~Oz'pO{'rO!W&XX~Oo0cOv0qOz'pO{'sO!W&XX~P'vO!W'uO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!.aOlji~P!.aOk0eOl0fOm0dOn0dOo0mOp0nO~Ot'wO~P!/jOV'|Og'}Oo0cOv0qO~P'vOg'}Oz(OO~Og(QO~O!U(SO~Og(TOz(OO!T%dO!U%cO~P%SOk0eOl0fOm0dOn0dOo0mOp0nOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PEcOV'|Oo0cOv0qO!W&Sa~P'vOz(WO!W&Sa~O!W(XO~Oz(WO!T%dO!U%cO!W&Sa~P%SOV(]Oo0cOv0qO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(^O![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![(aO~Oz(^O!T%dO!U%cO![%}a~P%SOz(dO!T%dO!U%cO![&Ta~P%SOz(gO{&lX![&lX!m&lX%z&lX~O{(kO![(mO!m(nO%z(jO~OV&OOopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(pO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&UOh&sa%[&saz&sa#[&sa#g&sa%_&sa#Z&sag&sa~O%[(uO~OV#sOa#tO%uWO~Oz&]O{wa~OopOvqO~P'vOz(^O#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(zO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(}O#g&Pa%[&Pa%_&Pan&Pa~O%uWO#g&ra%[&ra%_&rag&ra~Oz)SO#g&ra%[&ra%_&rag&ra~Og)VO~OV)WOh$WO%uWO~O#Z)XO~O%uWO#g&ta%[&ta%_&ta~Oz)ZO#g&ta%[&ta%_&ta~Oo0cOv0qO#g&pa%[&pa%_&pa{&pa~P'vOz)^O#g&pa%[&pa%_&pa{&pa~OV)`Oa)`O%uWO~O%z)eO~Ot)hO#j)gOP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)iOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)kOn&wa~P'vOz)lOn&wa~Oz)lOn&wa~P%SOn)pO~O%Y)tO~Ot)wO#p'WO#q)vOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)zOo0cOv0qO{$jO~P'vOo0cOv0qO{&xa~P'vOz*OO{&xa~OV*SOa*TOg*WO%q*UO%uWO~O{$jO&{*YO~Oh'_O~Oh!iO{$jO~O%[*_O~O%[*aO%_*aO~OV$}Oa$}Oo0cOv0qOg&Ua~P'vOz*dOg&Ua~Oo0cOv0qO{*gO!W&Xa~P'vOz*hO!W&Xa~Oo0cOv0qOz*hO{*kO!W&Xa~P'vOo0cOv0qOz*hO!W&Xa~P'vOz*hO{*kO!W&Xa~Om0dOn0dOo0mOp0nOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0fO~P!NkOlji~P!NkOV'|Og*pOo0cOv0qO~P'vOn*rO~Og*pOz*tO~Og*uO~OV'|Oo0cOv0qO!W&Si~P'vOz*vO!W&Si~O!W*wO~OV(]Oo0cOv0qO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*zO!T%dO!U%cO![&Ti~Oz*}O![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![+OO~Oa+QOo0cOv0qO![&Ti~P'vOz*zO![&Ti~O![+SO~OV+UOo0cOv0qO{&la![&la!m&la%z&la~P'vOz+VO{&la![&la!m&la%z&la~O!]+YO&n+[O![!nX~O![+^O~O{(kO![+_O~O{(kO![+_O!m+`O~OV&OOopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV&OOopOvqO~P'vOV&OOo0cOv0qO#g%ha%[%ha%_%ha%z%ha~P'vOz+aO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+dO#g#Wq%[#Wq%_#Wq~O#[+eOz$va#g$va%[$va%_$vag$va~O%uWO#g&ri%[&ri%_&rig&ri~Oz+gO#g&ri%[&ri%_&rig&ri~OV+iOh$WO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0cOv0qO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+mO!W&uX~O!W+oO~Ot+rO#j)gOP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)kOn&wi~P'vOz+yOn&wi~Oz,TO{$jO#[,TO~O#q,VOP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,WOz%Oa{%Oa~Oo0cOv0qO{&xi~P'vOz,YO{&xi~O{#{O%z,[Og&zXz&zX~O%uWOg&zXz&zX~Oz,`Og&yX~Og,bO~O%Y,eO~O!T%dO!U%cOg&Viz&Vi~OV$}Oa$}Oo0cOv0qOg&Ui~P'vO{,hOz$la!W$la~Oo0cOv0qO{,iOz$la!W$la~P'vOo0cOv0qO{*gO!W&Xi~P'vOz,lO!W&Xi~Oo0cOv0qOz,lO!W&Xi~P'vOz,lO{,oO!W&Xi~Og$hiz$hi!W$hi~P%SOV'|Oo0cOv0qO~P'vOn,qO~OV'|Og,rOo0cOv0qO~P'vOV'|Oo0cOv0qO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(]Oo0cOv0qO~P'vOa+QOo0cOv0qO![&Tq~P'vOz,sO![&Tq~O![,tO~OV(]Oo0cOv0qO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,uO~OV+UOo0cOv0qO{&li![&li!m&li%z&li~P'vOz,zO{&li![&li!m&li%z&li~O!]+YO&n+[O![!na~O{(kO![,}O~OV&OOo0cOv0qO#g%hi%[%hi%_%hi%z%hi~P'vOz-OO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&rq%[&rq%_&rqg&rq~Oz-RO#g&rq%[&rq%_&rqg&rq~OV)`Oa)`O%uWO!W&ua~Oz-TO!W&ua~On$|iz$|i~P%SOV)kO~P'vOV)kOn&wq~P'vOt-XOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-]O%_-]O~P`O#q-^OP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-aO{$jO#[-aO~Oo0cOv0qO{&xq~P'vOz-dO{&xq~O%z,[Og&zaz&za~O{#{Og&zaz&za~OV*SOa*TO%q*UO%uWOg&ya~Oz-hOg&ya~O$S-lO~OV$}Oa$}Oo0cOv0qO~P'vOo0cOv0qO{-mOz$li!W$li~P'vOo0cOv0qOz$li!W$li~P'vO{-mOz$li!W$li~Oo0cOv0qO{*gO~P'vOo0cOv0qO{*gO!W&Xq~P'vOz-pO!W&Xq~Oo0cOv0qOz-pO!W&Xq~P'vOs-sO!T%dO!U%cOg&Oq!W&Oq![&Oqz&Oq~P!/jOa+QOo0cOv0qO![&Ty~P'vOz$ji![$ji~P%SOa+QOo0cOv0qO~P'vOV+UOo0cOv0qO~P'vOV+UOo0cOv0qO{&lq![&lq!m&lq%z&lq~P'vO{(kO![-xO!m-yO%z-wO~OV&OOo0cOv0qO#g%hq%[%hq%_%hq%z%hq~P'vO%uWO#g&ry%[&ry%_&ryg&ry~OV)`Oa)`O%uWO!W&ui~Ot-}OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0cOv0qO{&xy~P'vOV*SOa*TO%q*UO%uWOg&yi~O$S-lO%Z.VO%_.VO~OV.aOh._O!X.^O!].`O!h.YO!s.[O!t.[O%p.XO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0cOv0qOz$lq!W$lq~P'vO{.fOz$lq!W$lq~Oo0cOv0qO{*gO!W&Xy~P'vOz.gO!W&Xy~Oo0cOv.kO~P'vOs-sO!T%dO!U%cOg&Oy!W&Oy![&Oyz&Oy~P!/jO{(kO![.nO~O{(kO![.nO!m.oO~OV*SOa*TO%q*UO%uWO~Oh.tO!f.rOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$-bO%o.vO%p.vOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.xO~Oz.|O#[/OO%j.yOs&|X{&|X!W&|Xg&|X~Oa/RO~P$)zOh.tOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/VO{$jO~Oo0cOv0qOz$ly!W$ly~P'vOo0cOv0qO{*gO!W&X!R~P'vOz/ZO!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!/jOs-sO!T%dO!U%cOg&Qa!W&Qa![&Qaz&Qa~O{(kO![/^O~O!f.rOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/eO~O%o.vO%p.vOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.yOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$)nOz/jOs&|a{&|a!W&|ag&|a~O!W/mO~Og/mO~O{/oO~O![/pO~Oo0cOv0qO{*gO!W&X!Z~P'vO{/sO~O%z/tO~P$-bOz/uO#[/OO%j.yOg'PX~Oz/uOg'PX~Og/wO~O!h/xO~O#[/OOs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/OO%j.yOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$)nOz/zO#[/OO%j.yO!['Oa~Og'Pa~P$)nOz0SOg'Pa~Oa0UO!['Oi~P$)zOz0WO!['Oi~Oz0WO#[/OO%j.yO!['Oi~O#[/OO%j.yOg$biz$bi~O%z0ZO~P$-bO#[/OO%j.yOg%Vaz%Va~Og'Pi~P$)nO{0^O~Oa0UO!['Oq~P$)zOz0`O!['Oq~O#[/OO%j.yOz%Ui![%Ui~Oa0UO~P$)zOa0UO!['Oy~P$)zO#[/OO%j.yOg$ciz$ci~O#[/OO%j.yOz%Uq![%Uq~Oz+aO#g%ha%[%ha%_%ha%z%ha~P%SOV&OOo0cOv0qO~P'vOn0hO~Oo0hO~P'vO{0iO~Ot0jO~P!/jO&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~",goto:"!=j'QPPPPPP'RP'Z*s+[+t,_,y-fP.SP'Z.r.r'ZPPP'Z2[PPPPPP2[5PPP5PP7b7k=sPP=v>h>kPP'Z'ZPP>zPP'Z'ZPP'Z'Z'Z'Z'Z?O?w'ZP?zP@QDXGuGyPG|HWH['ZPPPH_Hk'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPHqH}IVPI^IdPI^PI^I^PPPI^PKrPK{LVL]KrPI^LfPI^PLmLsPLwM]MzNeLwLwNkNxLwLwLwLw! ^! d! g! l! o! y!!P!!]!!o!!u!#P!#V!#s!#y!$P!$Z!$a!$g!$y!%T!%Z!%a!%k!%q!%w!%}!&T!&Z!&e!&k!&u!&{!'U!'[!'k!'s!'}!(UPPPPPPPPPPP!([!(_!(e!(n!(x!)TPPPPPPPPPPPP!-u!/Z!3^!6oPP!6w!7W!7a!8Y!8P!8c!8i!8l!8o!8r!8z!9jPPPPPPPPPPPPPPPPP!9m!9q!9wP!:]!:a!:m!:v!;S!;j!;m!;p!;v!;|!_![!]Do!]!^Es!^!_FZ!_!`Gk!`!aHX!a!b%T!b!cIf!c!dJU!d!eK^!e!hJU!h!i!#f!i!tJU!t!u!,|!u!wJU!w!x!.t!x!}JU!}#O!0S#O#P&o#P#Q!0j#Q#R!1Q#R#SJU#S#T%T#T#UJU#U#VK^#V#YJU#Y#Z!#f#Z#fJU#f#g!,|#g#iJU#i#j!.t#j#oJU#o#p!1n#p#q!1s#q#r!2a#r#s!2f#s$g%T$g;'SJU;'S;=`KW<%lOJU`%YT&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T`%lP;=`<%l%To%v]&n`%c_OX%TXY%oY[%T[]%o]p%Tpq%oq#O%T#O#P&o#P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To&tX&n`OY%TYZ%oZ]%T]^%o^#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc'f[&n`O!_%T!_!`([!`#T%T#T#U(r#U#f%T#f#g(r#g#h(r#h#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(cTmR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(yT!mR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk)aV&n`&[ZOr%Trs)vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk){V&n`Or%Trs*bs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk*iT&n`&^ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To+PZS_&n`OY*xYZ%TZ]*x]^%T^#o*x#o#p+r#p#q*x#q#r+r#r;'S*x;'S;=`,^<%lO*x_+wTS_OY+rZ]+r^;'S+r;'S;=`,W<%lO+r_,ZP;=`<%l+ro,aP;=`<%l*xj,kV%rQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-XT!xY&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-oV%lQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.]V&n`&ZZOw%Twx.rx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.wV&n`Ow%Twx/^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/eT&n`&]ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/{ThZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc0cTgR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk0yXVZ&n`Oz%Tz{1f{!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk1mVaR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk2ZV%oZ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc2wTzR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To3_W%pZ&n`O!_%T!_!`-Q!`!a3w!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Td4OT&{S&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk4fX!fQ&n`O!O%T!O!P5R!P!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5WV&n`O!O%T!O!P5m!P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5tT!rZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti6[a!hX&n`O!Q%T!Q![6T![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S6T#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti7fZ&n`O{%T{|8X|}%T}!O8X!O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8^V&n`O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8z]!hX&n`O!Q%T!Q![8s![!l%T!l!m9s!m#R%T#R#S8s#S#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti9zT!hX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk:bX%qR&n`O!P%T!P!Q:}!Q!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj;UV%sQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti;ro!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!d%T!d!e?q!e!g%T!g!h7a!h!l%T!l!m9s!m!q%T!q!rA]!r!z%T!z!{Bq!{#R%T#R#S>_#S#U%T#U#V?q#V#X%T#X#Y7a#Y#^%T#^#_9s#_#c%T#c#dA]#d#l%T#l#mBq#m#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti=xV&n`O!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti>fc!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S>_#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti?vY&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti@mY!hX&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiAbX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBUX!hX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBv]&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiCv]!hX&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToDvV{_&n`O!_%T!_!`E]!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TcEdT%{R&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkEzT#gZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkFbXmR&n`O!^%T!^!_F}!_!`([!`!a([!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjGUV%mQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkGrV%zZ&n`O!_%T!_!`([!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkH`WmR&n`O!_%T!_!`([!`!aHx!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjIPV%nQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkIoV_Q#}P&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToJ_]&n`&YS%uZO!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoKZP;=`<%lJUoKge&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!tJU!t!uLx!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#gLx#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoMRa&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUkN_V&n`&`ZOr%TrsNts#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkNyV&n`Or%Trs! `s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! gT&n`&bZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! }V&n`&_ZOw%Twx!!dx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!!iV&n`Ow%Twx!#Ox#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!#VT&n`&aZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!#oe&n`&YS%uZOr%Trs!%Qsw%Twx!&px!Q%T!Q![JU![!c%T!c!tJU!t!u!(`!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#g!(`#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!%XV&n`&dZOr%Trs!%ns#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!%sV&n`Or%Trs!&Ys#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&aT&n`&fZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&wV&n`&cZOw%Twx!'^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!'cV&n`Ow%Twx!'xx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!(PT&n`&eZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!(ia&n`&YS%uZOr%Trs!)nsw%Twx!+^x!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!)uV&n`&hZOr%Trs!*[s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*aV&n`Or%Trs!*vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*}T&n`&jZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!+eV&n`&gZOw%Twx!+zx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,PV&n`Ow%Twx!,fx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,mT&n`&iZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!-Vi&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!dJU!d!eLx!e!hJU!h!i!(`!i!}JU!}#R%T#R#SJU#S#T%T#T#UJU#U#VLx#V#YJU#Y#Z!(`#Z#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUo!.}a&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!0ZT!XZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc!0qT!WR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj!1XV%kQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!1sO!]~k!1zV%jR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!2fO![~i!2mT%tX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T",tokenizers:[nt,Qe,Ze,rt,0,1,2,3,4],topRules:{Script:[0,5]},specialized:[{term:221,get:e=>ot[e]||-1}],tokenPrec:7668}),G=new t,K=new Set([`Script`,`Body`,`FunctionDefinition`,`ClassDefinition`,`LambdaExpression`,`ForStatement`,`MatchClause`]);function q(e){return(t,n,r)=>{if(r)return!1;let i=t.node.getChild(`VariableName`);return i&&n(i,e),!0}}var ct={FunctionDefinition:q(`function`),ClassDefinition:q(`class`),ForStatement(e,t,n){if(n){for(let n=e.node.firstChild;n;n=n.nextSibling)if(n.name==`VariableName`)t(n,`variable`);else if(n.name==`in`)break}},ImportStatement(e,t){let{node:n}=e,r=n.firstChild?.name==`from`;for(let e=n.getChild(`import`);e;e=e.nextSibling)e.name==`VariableName`&&e.nextSibling?.name!=`as`&&t(e,r?`variable`:`namespace`)},AssignStatement(e,t){for(let n=e.node.firstChild;n;n=n.nextSibling)if(n.name==`VariableName`)t(n,`variable`);else if(n.name==`:`||n.name==`AssignOp`)break},ParamList(e,t){for(let n=null,r=e.node.firstChild;r;r=r.nextSibling)r.name==`VariableName`&&(!n||!/\*|AssignOp/.test(n.name))&&t(r,`variable`),n=r},CapturePattern:q(`variable`),AsPattern:q(`variable`),__proto__:null};function J(t,n){let r=G.get(n);if(r)return r;let i=[],a=!0;function o(e,n){let r=t.sliceString(e.from,e.to);i.push({label:r,type:n})}return n.cursor(e.IncludeAnonymous).iterate(e=>{if(e.name){let t=ct[e.name];if(t&&t(e,o,a)||!a&&K.has(e.name))return!1;a=!1}else if(e.to-e.from>8192){for(let n of J(t,e.node))i.push(n);return!1}}),G.set(n,i),i}var Y=/^[\w\xa1-\uffff][\w\d\xa1-\uffff]*$/,X=[`String`,`FormatString`,`Comment`,`PropertyName`];function lt(e){let t=te(e.state).resolveInner(e.pos,-1);if(X.indexOf(t.name)>-1)return null;let n=t.name==`VariableName`||t.to-t.from<20&&Y.test(e.state.sliceDoc(t.from,t.to));if(!n&&!e.explicit)return null;let r=[];for(let n=t;n;n=n.parent)K.has(n.name)&&(r=r.concat(J(e.state.doc,n)));return{options:r,from:n?t.from:e.pos,validFor:Y}}var ut=[`__annotations__`,`__builtins__`,`__debug__`,`__doc__`,`__import__`,`__name__`,`__loader__`,`__package__`,`__spec__`,`False`,`None`,`True`].map(e=>({label:e,type:`constant`})).concat(`ArithmeticError.AssertionError.AttributeError.BaseException.BlockingIOError.BrokenPipeError.BufferError.BytesWarning.ChildProcessError.ConnectionAbortedError.ConnectionError.ConnectionRefusedError.ConnectionResetError.DeprecationWarning.EOFError.Ellipsis.EncodingWarning.EnvironmentError.Exception.FileExistsError.FileNotFoundError.FloatingPointError.FutureWarning.GeneratorExit.IOError.ImportError.ImportWarning.IndentationError.IndexError.InterruptedError.IsADirectoryError.KeyError.KeyboardInterrupt.LookupError.MemoryError.ModuleNotFoundError.NameError.NotADirectoryError.NotImplemented.NotImplementedError.OSError.OverflowError.PendingDeprecationWarning.PermissionError.ProcessLookupError.RecursionError.ReferenceError.ResourceWarning.RuntimeError.RuntimeWarning.StopAsyncIteration.StopIteration.SyntaxError.SyntaxWarning.SystemError.SystemExit.TabError.TimeoutError.TypeError.UnboundLocalError.UnicodeDecodeError.UnicodeEncodeError.UnicodeError.UnicodeTranslateError.UnicodeWarning.UserWarning.ValueError.Warning.ZeroDivisionError`.split(`.`).map(e=>({label:e,type:`type`}))).concat([`bool`,`bytearray`,`bytes`,`classmethod`,`complex`,`float`,`frozenset`,`int`,`list`,`map`,`memoryview`,`object`,`range`,`set`,`staticmethod`,`str`,`super`,`tuple`,`type`].map(e=>({label:e,type:`class`}))).concat(`abs.aiter.all.anext.any.ascii.bin.breakpoint.callable.chr.compile.delattr.dict.dir.divmod.enumerate.eval.exec.exit.filter.format.getattr.globals.hasattr.hash.help.hex.id.input.isinstance.issubclass.iter.len.license.locals.max.min.next.oct.open.ord.pow.print.property.quit.repr.reversed.round.setattr.slice.sorted.sum.vars.zip`.split(`.`).map(e=>({label:e,type:`function`}))),dt=[u("def ${name}(${params}):\n ${}",{label:`def`,detail:`function`,type:`keyword`}),u("for ${name} in ${collection}:\n ${}",{label:`for`,detail:`loop`,type:`keyword`}),u("while ${}:\n ${}",{label:`while`,detail:`loop`,type:`keyword`}),u(`try: +import{C as e,D as t,b as n,d as r,f as i,i as a,l as o,m as s,t as ee,v as te,x as c}from"./index-B377xynC.js";import{n as l,r as ne,t as re}from"./dist-CT28L0yn.js";import{i as u,n as ie,r as ae}from"./dist-cLIvjYCL.js";var oe=1,d=194,f=195,se=196,p=197,ce=198,le=199,ue=200,de=2,m=3,h=201,g=24,fe=25,pe=49,me=50,he=55,ge=56,_e=57,ve=59,ye=60,be=61,xe=62,Se=63,Ce=65,we=238,Te=71,Ee=241,De=242,Oe=243,ke=244,Ae=245,_=246,v=247,y=248,b=72,x=249,S=250,C=251,je=252,Me=253,Ne=254,Pe=255,Fe=256,Ie=73,Le=77,Re=263,ze=112,Be=130,Ve=151,He=152,Ue=155,w=10,T=13,E=32,D=9,O=35,We=40,Ge=46,k=123,A=125,j=39,M=34,N=92,Ke=111,P=120,qe=78,Je=117,Ye=85,Xe=new Set([fe,pe,me,Re,Ce,Be,ge,_e,we,xe,Se,b,Ie,Le,ye,be,Ve,He,Ue,ze]);function F(e){return e==w||e==T}function I(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}var Ze=new l((e,t)=>{let n;if(e.next<0)e.acceptToken(le);else if(t.context.flags&L)F(e.next)&&e.acceptToken(ce,1);else if(((n=e.peek(-1))<0||F(n))&&t.canShift(p)){let t=0;for(;e.next==E||e.next==D;)e.advance(),t++;(e.next==w||e.next==T||e.next==O)&&e.acceptToken(p,-t)}else F(e.next)&&e.acceptToken(se,1)},{contextual:!0}),Qe=new l((e,t)=>{let n=t.context;if(n.flags)return;let r=e.peek(-1);if(r==w||r==T){let t=0,r=0;for(;;){if(e.next==E)t++;else if(e.next==D)t+=8-t%8;else break;e.advance(),r++}t!=n.indent&&e.next!=w&&e.next!=T&&e.next!=O&&(t[e,t|R])),tt=new re({start:$e,reduce(e,t,n,r){return e.flags&L&&Xe.has(t)||(t==Te||t==b)&&e.flags&R?e.parent:e},shift(e,t,n,r){return t==d?new U(e,et(r.read(r.pos,n.pos)),0):t==f?e.parent:t==g||t==he||t==ve||t==m?new U(e,0,L):W.has(t)?new U(e,0,W.get(t)|e.flags&L):e},hash(e){return e.hash}}),nt=new l(e=>{for(let t=0;t<5;t++){if(e.next!=`print`.charCodeAt(t))return;e.advance()}if(!/\w/.test(String.fromCharCode(e.next)))for(let t=0;;t++){let n=e.peek(t);if(!(n==E||n==D)){n!=We&&n!=Ge&&n!=w&&n!=T&&n!=O&&e.acceptToken(oe);return}}}),rt=new l((e,t)=>{let{flags:n}=t.context,r=n&z?M:j,i=(n&B)>0,a=!(n&V),o=(n&H)>0,s=e.pos;for(;!(e.next<0);)if(o&&e.next==k)if(e.peek(1)==k)e.advance(2);else{if(e.pos==s){e.acceptToken(m,1);return}break}else if(a&&e.next==N){if(e.pos==s){e.advance();let t=e.next;t>=0&&(e.advance(),it(e,t)),e.acceptToken(de);return}break}else if(e.next==N&&!a&&e.peek(1)>-1)e.advance(2);else if(e.next==r&&(!i||e.peek(1)==r&&e.peek(2)==r)){if(e.pos==s){e.acceptToken(h,i?3:1);return}break}else if(e.next==w){if(i)e.advance();else if(e.pos==s){e.acceptToken(h);return}break}else e.advance();e.pos>s&&e.acceptToken(ue)});function it(e,t){if(t==Ke)for(let t=0;t<2&&e.next>=48&&e.next<=55;t++)e.advance();else if(t==P)for(let t=0;t<2&&I(e.next);t++)e.advance();else if(t==Je)for(let t=0;t<4&&I(e.next);t++)e.advance();else if(t==Ye)for(let t=0;t<8&&I(e.next);t++)e.advance();else if(t==qe&&e.next==k){for(e.advance();e.next>=0&&e.next!=A&&e.next!=j&&e.next!=M&&e.next!=w;)e.advance();e.next==A&&e.advance()}}var at=n({'async "*" "**" FormatConversion FormatSpec':c.modifier,"for while if elif else try except finally return raise break continue with pass assert await yield match case":c.controlKeyword,"in not and or is del":c.operatorKeyword,"from def class global nonlocal lambda":c.definitionKeyword,import:c.moduleKeyword,"with as print":c.keyword,Boolean:c.bool,None:c.null,VariableName:c.variableName,"CallExpression/VariableName":c.function(c.variableName),"FunctionDefinition/VariableName":c.function(c.definition(c.variableName)),"ClassDefinition/VariableName":c.definition(c.className),PropertyName:c.propertyName,"CallExpression/MemberExpression/PropertyName":c.function(c.propertyName),Comment:c.lineComment,Number:c.number,String:c.string,FormatString:c.special(c.string),Escape:c.escape,UpdateOp:c.updateOperator,"ArithOp!":c.arithmeticOperator,BitOp:c.bitwiseOperator,CompareOp:c.compareOperator,AssignOp:c.definitionOperator,Ellipsis:c.punctuation,At:c.meta,"( )":c.paren,"[ ]":c.squareBracket,"{ }":c.brace,".":c.derefOperator,", ;":c.separator}),ot={__proto__:null,await:44,or:54,and:56,in:60,not:62,is:64,if:70,else:72,lambda:76,yield:94,from:96,async:102,for:104,None:162,True:164,False:164,del:178,pass:182,break:186,continue:190,return:194,raise:202,import:206,as:208,global:212,nonlocal:214,assert:218,type:223,elif:236,while:240,try:246,except:248,finally:250,with:254,def:258,class:268,match:279,case:285},st=ne.deserialize({version:14,states:"##jQ`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO3rQdO'#EfO3zQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO4VQdO'#EyO4^QdO'#FOO4iQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4nQdO'#F[P4uOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO5TQdO'#DoOOQS,5:Y,5:YO5hQdO'#HdOOQS,5:],5:]O5uQ!fO,5:]O5zQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8jQdO,59bO8oQdO,59bO8vQdO,59jO8}QdO'#HTO:TQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:lQdO,59aO'vQdO,59aO:zQdO,59aOOQS,59y,59yO;PQdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;_QdO,5:QO;dQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;uQdO,5:UO;zQdO,5:WOOOW'#Fy'#FyOOOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!/[QtO1G.|O!/cQtO1G.|O1lQdO1G.|O!0OQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!0VQdO1G/eO!0gQdO1G/eO!0oQdO1G/fO'vQdO'#H[O!0tQdO'#H[O!0yQtO1G.{O!1ZQdO,59iO!2aQdO,5=zO!2qQdO,5=zO!2yQdO1G/mO!3OQtO1G/mOOQS1G/l1G/lO!3`QdO,5=uO!4VQdO,5=uO0rQdO1G/qO!4tQdO1G/sO!4yQtO1G/sO!5ZQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!5kQdO'#HxO0rQdO'#HxO!5|QdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!6[Q#xO1G2zO!6{QtO1G2zO'vQdO,5kOOQS1G1`1G1`O!8RQdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!8WQdO'#FrO!8cQdO,59oO!8kQdO1G/XO!8uQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!9fQdO'#GtOOQS,5jO!;ZQdO,5>jO1XQdO,5>jO!;lQdO,5>iOOQS-E:R-E:RO!;qQdO1G0lO!;|QdO1G0lO!lO!lO!hO!=VQdO,5>hO!=hQdO'#EpO0rQdO1G0tO!=sQdO1G0tO!=xQgO1G0zO!AvQgO1G0}O!EqQdO,5>oO!E{QdO,5>oO!FTQtO,5>oO0rQdO1G1PO!F_QdO1G1PO4iQdO1G1UO!!vQdO1G1WOOQV,5;a,5;aO!FdQfO,5;aO!FiQgO1G1QO!JjQdO'#GZO4iQdO1G1QO4iQdO1G1QO!JzQdO,5>pO!KXQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!KaQdO'#FSO!KrQ!fO1G1WO!KzQdO1G1WOOQV1G1]1G1]O4iQdO1G1]O!LPQdO1G1]O!LXQdO'#F^OOQV1G1b1G1bO!#ZQtO1G1bPOOO1G2v1G2vP!L^OSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!LfQdO,5=|O!LyQdO,5=|OOQS1G/u1G/uO!MRQdO,5>PO!McQdO,5>PO!MkQdO,5>PO!NOQdO,5>PO!N`QdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!8kQdO7+$pO#!RQdO1G.|O#!YQdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO#!aQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO#!qQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO#!vQdO7+%PO##OQdO7+%QO##TQdO1G3fOOQS7+%X7+%XO##eQdO1G3fO##mQdO7+%XOOQS,5<_,5<_O'vQdO,5<_O##rQdO1G3aOOQS-E9q-E9qO#$iQdO7+%]OOQS7+%_7+%_O#$wQdO1G3aO#%fQdO7+%_O#%kQdO1G3gO#%{QdO1G3gO#&TQdO7+%]O#&YQdO,5>dO#&sQdO,5>dO#&sQdO,5>dOOQS'#Dx'#DxO#'UO&jO'#DzO#'aO`O'#HyOOOW1G3}1G3}O#'fQdO1G3}O#'nQdO1G3}O#'yQ#xO7+(fO#(jQtO1G2UP#)TQdO'#GOOOQS,5nQdO,5sQdO1G4OOOQS-E9y-E9yO#?^QdO1G4OO<[QdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#?oO&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#?zQdO7+)iO#@SQdO1G2zO#@mQdO1G2zP'vQdO'#FuO0rQdO<mO#BQQdO,5>mOOQS1G0v1G0vOOQS<rO#KgQdO,5>rO#KrQdO,5>rO#K}QdO,5>qO#L`QdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<VAN>VO$ oQdO<cAN>cO0rQdO1G1|O$!PQtO1G1|P$!ZQdO'#FvOOQS1G2R1G2RP$!hQdO'#F{O$!uQdO7+)jO$#`QdO,5>gOOOO-E9z-E9zOOOW<tO$4{QdO,5>tO1XQdO,5vO$)nQdO,5>vOOQS1G1p1G1pOOQS,5<[,5<[OOQU7+'P7+'PO$+zQdO1G/iO$)nQdO,5wO$8zQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$)nQdO'#GdO$9SQdO1G4bO$9^QdO1G4bO$9fQdO1G4bOOQS7+%T7+%TO$9tQdO1G1tO$:SQtO'#FaO$:ZQdO,5<}OOQS,5<},5<}O$:iQdO1G4cOOQS-E:a-E:aO$)nQdO,5<|O$:pQdO,5<|O$:uQdO7+)|OOQS-E:`-E:`O$;PQdO7+)|O$)nQdO,5S~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0cOv0qO!PrO~P'vOV#OOo0cOv0qO!W#PO~P'vOV#SOa#TOo0cOv0qO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0cOv0qO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0cOv0qO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0cOv0qO#g#SX%[#SX%_#SX~P'vOo0cOv0qO#g#WX%[#WX%_#WX~P'vOh$WO%uWO~O!f$YO!r$YO%uWO~OV$eO~P'vO!U$gO#s$hO#u$iO~O{$jO~OV$qO~P'vOS$sO%[$rO%_$rO%c$tO~OV$}Oa$}Og%POo0cOv0qO~P'vOo0cOv0qO{%SO~P'vO&Y%UO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%ZO~Oo%ZO~P'vOo0cO~P'vOk0eOl0fOm0dOn0dOo0mOp0nOs0rOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%]Og%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%_Oz%`O!T%dO!U%cO~Og%_O~Oz%gO!T%dO!U%cO!W&SX~O!W%kO~Oz%lO{%nO!T%dO!U%cO![%}X~O![%rO~O![%sO~OQ#XO%`#XO%a%uO~OV%wOo0cOv0qO!PrO~P'vOQ#^OR#[O%`#^O%a%zO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV&OOopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&TO%_&TO~O!f&UOh&sX%[&sXz&sX#[&sX#g&sX%_&sX#Z&sXg&sX~Oh!iO%[&WO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PEcO%z&YOz%yX{%yX~O%uWOz%yX{%yX~Oz&]O{wX~O{&_O~Oz%lO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0lOo0cOv0qO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&hO#g&PX%[&PX%_&PXn&PX~P%SOz&kO!Q&jO#g#Wa%[#Wa%_#Wa~Oz&lO#[&nO#g&rX%[&rX%_&rXg&rX~O!f$YO!r$YO#Z&qO%uWO~O#Z&qO~Oz&sO#g&tX%[&tX%_&tX~Oz&uO#g&pX%[&pX%_&pX{&pX~O!X&wO%z&xO~Oz&|On&wX~P%SOn'PO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['UO~P'vOt'YO#p'WO#q'XOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'ZO#[']O{&xX~Oh'_O!X&wO~Oh!iO{$jO!X&wO~O{'eO~P%SO%['hO%_'hO~OS'iO%['hO%_'hO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#uO%kWi~P!#uOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&pO%mWi%nWi~P!&pOa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)nOVWi_Wi%qWi%rWi%sWi~P!)nO!T%dO!U%cOg&VXz&VX~O%z'kO%{'kO~P,eOz'mOg&UX~Og'oO~Oz'pO{'rO!W&XX~Oo0cOv0qOz'pO{'sO!W&XX~P'vO!W'uO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!.aOlji~P!.aOk0eOl0fOm0dOn0dOo0mOp0nO~Ot'wO~P!/jOV'|Og'}Oo0cOv0qO~P'vOg'}Oz(OO~Og(QO~O!U(SO~Og(TOz(OO!T%dO!U%cO~P%SOk0eOl0fOm0dOn0dOo0mOp0nOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PEcOV'|Oo0cOv0qO!W&Sa~P'vOz(WO!W&Sa~O!W(XO~Oz(WO!T%dO!U%cO!W&Sa~P%SOV(]Oo0cOv0qO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(^O![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![(aO~Oz(^O!T%dO!U%cO![%}a~P%SOz(dO!T%dO!U%cO![&Ta~P%SOz(gO{&lX![&lX!m&lX%z&lX~O{(kO![(mO!m(nO%z(jO~OV&OOopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(pO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&UOh&sa%[&saz&sa#[&sa#g&sa%_&sa#Z&sag&sa~O%[(uO~OV#sOa#tO%uWO~Oz&]O{wa~OopOvqO~P'vOz(^O#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(zO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(}O#g&Pa%[&Pa%_&Pan&Pa~O%uWO#g&ra%[&ra%_&rag&ra~Oz)SO#g&ra%[&ra%_&rag&ra~Og)VO~OV)WOh$WO%uWO~O#Z)XO~O%uWO#g&ta%[&ta%_&ta~Oz)ZO#g&ta%[&ta%_&ta~Oo0cOv0qO#g&pa%[&pa%_&pa{&pa~P'vOz)^O#g&pa%[&pa%_&pa{&pa~OV)`Oa)`O%uWO~O%z)eO~Ot)hO#j)gOP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)iOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)kOn&wa~P'vOz)lOn&wa~Oz)lOn&wa~P%SOn)pO~O%Y)tO~Ot)wO#p'WO#q)vOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)zOo0cOv0qO{$jO~P'vOo0cOv0qO{&xa~P'vOz*OO{&xa~OV*SOa*TOg*WO%q*UO%uWO~O{$jO&{*YO~Oh'_O~Oh!iO{$jO~O%[*_O~O%[*aO%_*aO~OV$}Oa$}Oo0cOv0qOg&Ua~P'vOz*dOg&Ua~Oo0cOv0qO{*gO!W&Xa~P'vOz*hO!W&Xa~Oo0cOv0qOz*hO{*kO!W&Xa~P'vOo0cOv0qOz*hO!W&Xa~P'vOz*hO{*kO!W&Xa~Om0dOn0dOo0mOp0nOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0fO~P!NkOlji~P!NkOV'|Og*pOo0cOv0qO~P'vOn*rO~Og*pOz*tO~Og*uO~OV'|Oo0cOv0qO!W&Si~P'vOz*vO!W&Si~O!W*wO~OV(]Oo0cOv0qO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*zO!T%dO!U%cO![&Ti~Oz*}O![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![+OO~Oa+QOo0cOv0qO![&Ti~P'vOz*zO![&Ti~O![+SO~OV+UOo0cOv0qO{&la![&la!m&la%z&la~P'vOz+VO{&la![&la!m&la%z&la~O!]+YO&n+[O![!nX~O![+^O~O{(kO![+_O~O{(kO![+_O!m+`O~OV&OOopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV&OOopOvqO~P'vOV&OOo0cOv0qO#g%ha%[%ha%_%ha%z%ha~P'vOz+aO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+dO#g#Wq%[#Wq%_#Wq~O#[+eOz$va#g$va%[$va%_$vag$va~O%uWO#g&ri%[&ri%_&rig&ri~Oz+gO#g&ri%[&ri%_&rig&ri~OV+iOh$WO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0cOv0qO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+mO!W&uX~O!W+oO~Ot+rO#j)gOP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)kOn&wi~P'vOz+yOn&wi~Oz,TO{$jO#[,TO~O#q,VOP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,WOz%Oa{%Oa~Oo0cOv0qO{&xi~P'vOz,YO{&xi~O{#{O%z,[Og&zXz&zX~O%uWOg&zXz&zX~Oz,`Og&yX~Og,bO~O%Y,eO~O!T%dO!U%cOg&Viz&Vi~OV$}Oa$}Oo0cOv0qOg&Ui~P'vO{,hOz$la!W$la~Oo0cOv0qO{,iOz$la!W$la~P'vOo0cOv0qO{*gO!W&Xi~P'vOz,lO!W&Xi~Oo0cOv0qOz,lO!W&Xi~P'vOz,lO{,oO!W&Xi~Og$hiz$hi!W$hi~P%SOV'|Oo0cOv0qO~P'vOn,qO~OV'|Og,rOo0cOv0qO~P'vOV'|Oo0cOv0qO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(]Oo0cOv0qO~P'vOa+QOo0cOv0qO![&Tq~P'vOz,sO![&Tq~O![,tO~OV(]Oo0cOv0qO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,uO~OV+UOo0cOv0qO{&li![&li!m&li%z&li~P'vOz,zO{&li![&li!m&li%z&li~O!]+YO&n+[O![!na~O{(kO![,}O~OV&OOo0cOv0qO#g%hi%[%hi%_%hi%z%hi~P'vOz-OO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&rq%[&rq%_&rqg&rq~Oz-RO#g&rq%[&rq%_&rqg&rq~OV)`Oa)`O%uWO!W&ua~Oz-TO!W&ua~On$|iz$|i~P%SOV)kO~P'vOV)kOn&wq~P'vOt-XOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-]O%_-]O~P`O#q-^OP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-aO{$jO#[-aO~Oo0cOv0qO{&xq~P'vOz-dO{&xq~O%z,[Og&zaz&za~O{#{Og&zaz&za~OV*SOa*TO%q*UO%uWOg&ya~Oz-hOg&ya~O$S-lO~OV$}Oa$}Oo0cOv0qO~P'vOo0cOv0qO{-mOz$li!W$li~P'vOo0cOv0qOz$li!W$li~P'vO{-mOz$li!W$li~Oo0cOv0qO{*gO~P'vOo0cOv0qO{*gO!W&Xq~P'vOz-pO!W&Xq~Oo0cOv0qOz-pO!W&Xq~P'vOs-sO!T%dO!U%cOg&Oq!W&Oq![&Oqz&Oq~P!/jOa+QOo0cOv0qO![&Ty~P'vOz$ji![$ji~P%SOa+QOo0cOv0qO~P'vOV+UOo0cOv0qO~P'vOV+UOo0cOv0qO{&lq![&lq!m&lq%z&lq~P'vO{(kO![-xO!m-yO%z-wO~OV&OOo0cOv0qO#g%hq%[%hq%_%hq%z%hq~P'vO%uWO#g&ry%[&ry%_&ryg&ry~OV)`Oa)`O%uWO!W&ui~Ot-}OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0cOv0qO{&xy~P'vOV*SOa*TO%q*UO%uWOg&yi~O$S-lO%Z.VO%_.VO~OV.aOh._O!X.^O!].`O!h.YO!s.[O!t.[O%p.XO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0cOv0qOz$lq!W$lq~P'vO{.fOz$lq!W$lq~Oo0cOv0qO{*gO!W&Xy~P'vOz.gO!W&Xy~Oo0cOv.kO~P'vOs-sO!T%dO!U%cOg&Oy!W&Oy![&Oyz&Oy~P!/jO{(kO![.nO~O{(kO![.nO!m.oO~OV*SOa*TO%q*UO%uWO~Oh.tO!f.rOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$-bO%o.vO%p.vOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.xO~Oz.|O#[/OO%j.yOs&|X{&|X!W&|Xg&|X~Oa/RO~P$)zOh.tOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/VO{$jO~Oo0cOv0qOz$ly!W$ly~P'vOo0cOv0qO{*gO!W&X!R~P'vOz/ZO!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!/jOs-sO!T%dO!U%cOg&Qa!W&Qa![&Qaz&Qa~O{(kO![/^O~O!f.rOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/eO~O%o.vO%p.vOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.yOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$)nOz/jOs&|a{&|a!W&|ag&|a~O!W/mO~Og/mO~O{/oO~O![/pO~Oo0cOv0qO{*gO!W&X!Z~P'vO{/sO~O%z/tO~P$-bOz/uO#[/OO%j.yOg'PX~Oz/uOg'PX~Og/wO~O!h/xO~O#[/OOs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/OO%j.yOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$)nOz/zO#[/OO%j.yO!['Oa~Og'Pa~P$)nOz0SOg'Pa~Oa0UO!['Oi~P$)zOz0WO!['Oi~Oz0WO#[/OO%j.yO!['Oi~O#[/OO%j.yOg$biz$bi~O%z0ZO~P$-bO#[/OO%j.yOg%Vaz%Va~Og'Pi~P$)nO{0^O~Oa0UO!['Oq~P$)zOz0`O!['Oq~O#[/OO%j.yOz%Ui![%Ui~Oa0UO~P$)zOa0UO!['Oy~P$)zO#[/OO%j.yOg$ciz$ci~O#[/OO%j.yOz%Uq![%Uq~Oz+aO#g%ha%[%ha%_%ha%z%ha~P%SOV&OOo0cOv0qO~P'vOn0hO~Oo0hO~P'vO{0iO~Ot0jO~P!/jO&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~",goto:"!=j'QPPPPPP'RP'Z*s+[+t,_,y-fP.SP'Z.r.r'ZPPP'Z2[PPPPPP2[5PPP5PP7b7k=sPP=v>h>kPP'Z'ZPP>zPP'Z'ZPP'Z'Z'Z'Z'Z?O?w'ZP?zP@QDXGuGyPG|HWH['ZPPPH_Hk'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPHqH}IVPI^IdPI^PI^I^PPPI^PKrPK{LVL]KrPI^LfPI^PLmLsPLwM]MzNeLwLwNkNxLwLwLwLw! ^! d! g! l! o! y!!P!!]!!o!!u!#P!#V!#s!#y!$P!$Z!$a!$g!$y!%T!%Z!%a!%k!%q!%w!%}!&T!&Z!&e!&k!&u!&{!'U!'[!'k!'s!'}!(UPPPPPPPPPPP!([!(_!(e!(n!(x!)TPPPPPPPPPPPP!-u!/Z!3^!6oPP!6w!7W!7a!8Y!8P!8c!8i!8l!8o!8r!8z!9jPPPPPPPPPPPPPPPPP!9m!9q!9wP!:]!:a!:m!:v!;S!;j!;m!;p!;v!;|!_![!]Do!]!^Es!^!_FZ!_!`Gk!`!aHX!a!b%T!b!cIf!c!dJU!d!eK^!e!hJU!h!i!#f!i!tJU!t!u!,|!u!wJU!w!x!.t!x!}JU!}#O!0S#O#P&o#P#Q!0j#Q#R!1Q#R#SJU#S#T%T#T#UJU#U#VK^#V#YJU#Y#Z!#f#Z#fJU#f#g!,|#g#iJU#i#j!.t#j#oJU#o#p!1n#p#q!1s#q#r!2a#r#s!2f#s$g%T$g;'SJU;'S;=`KW<%lOJU`%YT&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T`%lP;=`<%l%To%v]&n`%c_OX%TXY%oY[%T[]%o]p%Tpq%oq#O%T#O#P&o#P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To&tX&n`OY%TYZ%oZ]%T]^%o^#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc'f[&n`O!_%T!_!`([!`#T%T#T#U(r#U#f%T#f#g(r#g#h(r#h#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(cTmR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(yT!mR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk)aV&n`&[ZOr%Trs)vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk){V&n`Or%Trs*bs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk*iT&n`&^ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To+PZS_&n`OY*xYZ%TZ]*x]^%T^#o*x#o#p+r#p#q*x#q#r+r#r;'S*x;'S;=`,^<%lO*x_+wTS_OY+rZ]+r^;'S+r;'S;=`,W<%lO+r_,ZP;=`<%l+ro,aP;=`<%l*xj,kV%rQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-XT!xY&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-oV%lQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.]V&n`&ZZOw%Twx.rx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.wV&n`Ow%Twx/^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/eT&n`&]ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/{ThZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc0cTgR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk0yXVZ&n`Oz%Tz{1f{!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk1mVaR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk2ZV%oZ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc2wTzR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To3_W%pZ&n`O!_%T!_!`-Q!`!a3w!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Td4OT&{S&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk4fX!fQ&n`O!O%T!O!P5R!P!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5WV&n`O!O%T!O!P5m!P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5tT!rZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti6[a!hX&n`O!Q%T!Q![6T![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S6T#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti7fZ&n`O{%T{|8X|}%T}!O8X!O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8^V&n`O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8z]!hX&n`O!Q%T!Q![8s![!l%T!l!m9s!m#R%T#R#S8s#S#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti9zT!hX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk:bX%qR&n`O!P%T!P!Q:}!Q!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj;UV%sQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti;ro!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!d%T!d!e?q!e!g%T!g!h7a!h!l%T!l!m9s!m!q%T!q!rA]!r!z%T!z!{Bq!{#R%T#R#S>_#S#U%T#U#V?q#V#X%T#X#Y7a#Y#^%T#^#_9s#_#c%T#c#dA]#d#l%T#l#mBq#m#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti=xV&n`O!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti>fc!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S>_#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti?vY&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti@mY!hX&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiAbX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBUX!hX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBv]&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiCv]!hX&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToDvV{_&n`O!_%T!_!`E]!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TcEdT%{R&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkEzT#gZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkFbXmR&n`O!^%T!^!_F}!_!`([!`!a([!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjGUV%mQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkGrV%zZ&n`O!_%T!_!`([!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkH`WmR&n`O!_%T!_!`([!`!aHx!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjIPV%nQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkIoV_Q#}P&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToJ_]&n`&YS%uZO!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoKZP;=`<%lJUoKge&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!tJU!t!uLx!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#gLx#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoMRa&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUkN_V&n`&`ZOr%TrsNts#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkNyV&n`Or%Trs! `s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! gT&n`&bZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! }V&n`&_ZOw%Twx!!dx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!!iV&n`Ow%Twx!#Ox#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!#VT&n`&aZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!#oe&n`&YS%uZOr%Trs!%Qsw%Twx!&px!Q%T!Q![JU![!c%T!c!tJU!t!u!(`!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#g!(`#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!%XV&n`&dZOr%Trs!%ns#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!%sV&n`Or%Trs!&Ys#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&aT&n`&fZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&wV&n`&cZOw%Twx!'^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!'cV&n`Ow%Twx!'xx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!(PT&n`&eZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!(ia&n`&YS%uZOr%Trs!)nsw%Twx!+^x!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!)uV&n`&hZOr%Trs!*[s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*aV&n`Or%Trs!*vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*}T&n`&jZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!+eV&n`&gZOw%Twx!+zx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,PV&n`Ow%Twx!,fx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,mT&n`&iZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!-Vi&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!dJU!d!eLx!e!hJU!h!i!(`!i!}JU!}#R%T#R#SJU#S#T%T#T#UJU#U#VLx#V#YJU#Y#Z!(`#Z#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUo!.}a&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!0ZT!XZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc!0qT!WR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj!1XV%kQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!1sO!]~k!1zV%jR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!2fO![~i!2mT%tX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T",tokenizers:[nt,Qe,Ze,rt,0,1,2,3,4],topRules:{Script:[0,5]},specialized:[{term:221,get:e=>ot[e]||-1}],tokenPrec:7668}),G=new t,K=new Set([`Script`,`Body`,`FunctionDefinition`,`ClassDefinition`,`LambdaExpression`,`ForStatement`,`MatchClause`]);function q(e){return(t,n,r)=>{if(r)return!1;let i=t.node.getChild(`VariableName`);return i&&n(i,e),!0}}var ct={FunctionDefinition:q(`function`),ClassDefinition:q(`class`),ForStatement(e,t,n){if(n){for(let n=e.node.firstChild;n;n=n.nextSibling)if(n.name==`VariableName`)t(n,`variable`);else if(n.name==`in`)break}},ImportStatement(e,t){let{node:n}=e,r=n.firstChild?.name==`from`;for(let e=n.getChild(`import`);e;e=e.nextSibling)e.name==`VariableName`&&e.nextSibling?.name!=`as`&&t(e,r?`variable`:`namespace`)},AssignStatement(e,t){for(let n=e.node.firstChild;n;n=n.nextSibling)if(n.name==`VariableName`)t(n,`variable`);else if(n.name==`:`||n.name==`AssignOp`)break},ParamList(e,t){for(let n=null,r=e.node.firstChild;r;r=r.nextSibling)r.name==`VariableName`&&(!n||!/\*|AssignOp/.test(n.name))&&t(r,`variable`),n=r},CapturePattern:q(`variable`),AsPattern:q(`variable`),__proto__:null};function J(t,n){let r=G.get(n);if(r)return r;let i=[],a=!0;function o(e,n){let r=t.sliceString(e.from,e.to);i.push({label:r,type:n})}return n.cursor(e.IncludeAnonymous).iterate(e=>{if(e.name){let t=ct[e.name];if(t&&t(e,o,a)||!a&&K.has(e.name))return!1;a=!1}else if(e.to-e.from>8192){for(let n of J(t,e.node))i.push(n);return!1}}),G.set(n,i),i}var Y=/^[\w\xa1-\uffff][\w\d\xa1-\uffff]*$/,X=[`String`,`FormatString`,`Comment`,`PropertyName`];function lt(e){let t=te(e.state).resolveInner(e.pos,-1);if(X.indexOf(t.name)>-1)return null;let n=t.name==`VariableName`||t.to-t.from<20&&Y.test(e.state.sliceDoc(t.from,t.to));if(!n&&!e.explicit)return null;let r=[];for(let n=t;n;n=n.parent)K.has(n.name)&&(r=r.concat(J(e.state.doc,n)));return{options:r,from:n?t.from:e.pos,validFor:Y}}var ut=[`__annotations__`,`__builtins__`,`__debug__`,`__doc__`,`__import__`,`__name__`,`__loader__`,`__package__`,`__spec__`,`False`,`None`,`True`].map(e=>({label:e,type:`constant`})).concat(`ArithmeticError.AssertionError.AttributeError.BaseException.BlockingIOError.BrokenPipeError.BufferError.BytesWarning.ChildProcessError.ConnectionAbortedError.ConnectionError.ConnectionRefusedError.ConnectionResetError.DeprecationWarning.EOFError.Ellipsis.EncodingWarning.EnvironmentError.Exception.FileExistsError.FileNotFoundError.FloatingPointError.FutureWarning.GeneratorExit.IOError.ImportError.ImportWarning.IndentationError.IndexError.InterruptedError.IsADirectoryError.KeyError.KeyboardInterrupt.LookupError.MemoryError.ModuleNotFoundError.NameError.NotADirectoryError.NotImplemented.NotImplementedError.OSError.OverflowError.PendingDeprecationWarning.PermissionError.ProcessLookupError.RecursionError.ReferenceError.ResourceWarning.RuntimeError.RuntimeWarning.StopAsyncIteration.StopIteration.SyntaxError.SyntaxWarning.SystemError.SystemExit.TabError.TimeoutError.TypeError.UnboundLocalError.UnicodeDecodeError.UnicodeEncodeError.UnicodeError.UnicodeTranslateError.UnicodeWarning.UserWarning.ValueError.Warning.ZeroDivisionError`.split(`.`).map(e=>({label:e,type:`type`}))).concat([`bool`,`bytearray`,`bytes`,`classmethod`,`complex`,`float`,`frozenset`,`int`,`list`,`map`,`memoryview`,`object`,`range`,`set`,`staticmethod`,`str`,`super`,`tuple`,`type`].map(e=>({label:e,type:`class`}))).concat(`abs.aiter.all.anext.any.ascii.bin.breakpoint.callable.chr.compile.delattr.dict.dir.divmod.enumerate.eval.exec.exit.filter.format.getattr.globals.hasattr.hash.help.hex.id.input.isinstance.issubclass.iter.len.license.locals.max.min.next.oct.open.ord.pow.print.property.quit.repr.reversed.round.setattr.slice.sorted.sum.vars.zip`.split(`.`).map(e=>({label:e,type:`function`}))),dt=[u("def ${name}(${params}):\n ${}",{label:`def`,detail:`function`,type:`keyword`}),u("for ${name} in ${collection}:\n ${}",{label:`for`,detail:`loop`,type:`keyword`}),u("while ${}:\n ${}",{label:`while`,detail:`loop`,type:`keyword`}),u(`try: \${} except \${error}: \${}`,{label:`try`,detail:`/ except block`,type:`keyword`}),u(`if \${}: diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-DlUN4-j9.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-BsbV-A62.js similarity index 96% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-DlUN4-j9.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-BsbV-A62.js index c995020e..21197664 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-DlUN4-j9.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-BsbV-A62.js @@ -1 +1 @@ -import{b as e,d as t,f as n,i as r,m as i,s as a,t as o,x as s}from"./index-CLJ0aycO.js";import{r as c}from"./dist-B2R-c1vX.js";var l=e({String:s.string,Number:s.number,"True False":s.bool,PropertyName:s.propertyName,Null:s.null,", :":s.separator,"[ ]":s.squareBracket,"{ }":s.brace}),u=c.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:`#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O`,goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:`⚠ JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array`,maxTerm:25,nodeProps:[[`isolate`,-2,6,11,``],[`openedBy`,7,`{`,14,`[`],[`closedBy`,8,`}`,15,`]`]],propSources:[l],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0}),d=o.define({name:`json`,parser:u.configure({props:[i.add({Object:a({except:/^\s*\}/}),Array:a({except:/^\s*\]/})}),n.add({"Object Array":t})]}),languageData:{closeBrackets:{brackets:[`[`,`{`,`"`]},indentOnInput:/^\s*[\}\]]$/}});function f(){return new r(d)}export{f as json}; \ No newline at end of file +import{b as e,d as t,f as n,i as r,m as i,s as a,t as o,x as s}from"./index-B377xynC.js";import{r as c}from"./dist-CT28L0yn.js";var l=e({String:s.string,Number:s.number,"True False":s.bool,PropertyName:s.propertyName,Null:s.null,", :":s.separator,"[ ]":s.squareBracket,"{ }":s.brace}),u=c.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:`#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O`,goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:`⚠ JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array`,maxTerm:25,nodeProps:[[`isolate`,-2,6,11,``],[`openedBy`,7,`{`,14,`[`],[`closedBy`,8,`}`,15,`]`]],propSources:[l],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0}),d=o.define({name:`json`,parser:u.configure({props:[i.add({Object:a({except:/^\s*\}/}),Array:a({except:/^\s*\]/})}),n.add({"Object Array":t})]}),languageData:{closeBrackets:{brackets:[`[`,`{`,`"`]},indentOnInput:/^\s*[\}\]]$/}});function f(){return new r(d)}export{f as json}; \ No newline at end of file diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-B2R-c1vX.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-CT28L0yn.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-B2R-c1vX.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-CT28L0yn.js index 261b62df..cd315f37 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-B2R-c1vX.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-CT28L0yn.js @@ -1 +1 @@ -import{C as e,E as t,O as n,S as r,T as i,k as a,w as o}from"./index-CLJ0aycO.js";var s=class e{constructor(e,t,n,r,i,a,o,s,c,l=0,u){this.p=e,this.stack=t,this.state=n,this.reducePos=r,this.pos=i,this.score=a,this.buffer=o,this.bufferBase=s,this.curContext=c,this.lookAhead=l,this.parent=u}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?`!`+this.score:``}`}static start(t,n,r=0){let i=t.parser.context;return new e(t,[],n,r,r,0,[],0,i?new c(i,i.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){let t=e>>19,n=e&65535,{parser:r}=this.p,i=this.reducePos=2e3&&!this.p.parser.nodeSet.types[n]?.isAnonymous&&(s==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=c):this.p.lastBigReductionSizeo;)this.stack.pop();this.reduceContext(n,s)}storeNode(e,t,n,r=4,i=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[e-4]==0&&this.buffer[e-1]>-1){if(t==n)return;if(this.buffer[e-2]>=t){this.buffer[e-2]=n;return}}}if(!i||this.pos==n)this.buffer.push(e,t,n,r);else{let i=this.buffer.length;if(i>0&&(this.buffer[i-4]!=0||this.buffer[i-1]<0)){let e=!1;for(let t=i;t>0&&this.buffer[t-2]>n;t-=4)if(this.buffer[t-1]>=0){e=!0;break}if(e)for(;i>0&&this.buffer[i-2]>n;)this.buffer[i]=this.buffer[i-4],this.buffer[i+1]=this.buffer[i-3],this.buffer[i+2]=this.buffer[i-2],this.buffer[i+3]=this.buffer[i-1],i-=4,r>4&&(r-=4)}this.buffer[i]=e,this.buffer[i+1]=t,this.buffer[i+2]=n,this.buffer[i+3]=r}}shift(e,t,n,r){if(e&131072)this.pushState(e&65535,this.pos);else if(e&262144)this.pos=r,this.shiftContext(t,n),t<=this.p.parser.maxNode&&this.buffer.push(t,n,r,4);else{let i=e,{parser:a}=this.p;this.pos=r;let o=a.stateFlag(i,1);!o&&(r>n||t<=a.maxNode)&&(this.reducePos=r),this.pushState(i,o?n:Math.min(n,this.reducePos)),this.shiftContext(t,n),t<=a.maxNode&&this.buffer.push(t,n,r,4)}}apply(e,t,n,r){e&65536?this.reduce(e):this.shift(e,t,n,r)}useNode(e,t){let n=this.p.reused.length-1;(n<0||this.p.reused[n]!=e)&&(this.p.reused.push(e),n++);let r=this.pos;this.reducePos=this.pos=r+e.length,this.pushState(t,r),this.buffer.push(n,r,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let t=this,n=t.buffer.length;for(n&&t.buffer[n-4]==0&&(n-=4);n>0&&t.buffer[n-2]>t.reducePos;)n-=4;let r=t.buffer.slice(n),i=t.bufferBase+n;for(;t&&i==t.bufferBase;)t=t.parent;return new e(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,r,i,this.curContext,this.lookAhead,t)}recoverByDelete(e,t){let n=e<=this.p.parser.maxNode;n&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,n?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new l(this);;){let n=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(n==0)return!1;if(!(n&65536))return!0;t.reduce(n)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let n=[];for(let r=0,i;rt&1&&e==r)||n.push(t[e],r)}t=n}let n=[];for(let e=0;e>19,r=t&65535,i=this.stack.length-n*3;if(i<0||e.getGoto(this.stack[i],r,!1)<0){let e=this.findForcedReduction();if(e==null)return!1;t=e}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],n=(r,i)=>{if(!t.includes(r))return t.push(r),e.allActions(r,t=>{if(!(t&393216))if(t&65536){let n=(t>>19)-i;if(n>1){let r=t&65535,i=this.stack.length-n*3;if(i>=0&&e.getGoto(this.stack[i],r,!1)>=0)return n<<19|65536|r}}else{let e=n(t,i+1);if(e!=null)return e}})};return n(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}},c=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},l=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,n=e>>19;n==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(n-1)*3;let r=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=r}},u=class e{constructor(e,t,n){this.stack=e,this.pos=t,this.index=n,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(t,n=t.bufferBase+t.buffer.length){return new e(t,n,n-t.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new e(this.stack,this.pos,this.index)}};function d(e,t=Uint16Array){if(typeof e!=`string`)return e;let n=null;for(let r=0,i=0;r=92&&t--,t>=34&&t--;let i=t-32;if(i>=46&&(i-=46,n=!0),a+=i,n)break;a*=46}n?n[i++]=a:n=new t(a)}return n}var f=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},p=new f,m=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk=``,this.chunkOff=0,this.chunk2=``,this.chunk2Pos=0,this.next=-1,this.token=p,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let n=this.range,r=this.rangeIndex,i=this.pos+e;for(;in.to:i>=n.to;){if(r==this.ranges.length-1)return null;let e=this.ranges[++r];i+=e.from-n.to,n=e}return i}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,n,r;if(t>=0&&t=this.chunk2Pos&&nt.to&&(this.chunk2=this.chunk2.slice(0,t.to-n)),r=this.chunk2.charCodeAt(0)}}return n>=this.token.lookAhead&&(this.token.lookAhead=n+1),r}acceptToken(e,t=0){let n=t?this.resolveOffset(t,-1):this.pos;if(n==null||n=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk=``,this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=p,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let n=``;for(let r of this.ranges){if(r.from>=t)break;r.to>e&&(n+=this.input.read(Math.max(r.from,e),Math.min(r.to,t)))}return n}},h=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:n}=t.p;v(this.data,e,t,this.id,n.data,n.tokenPrecTable)}};h.prototype.contextual=h.prototype.fallback=h.prototype.extend=!1;var g=class{constructor(e,t,n){this.precTable=t,this.elseToken=n,this.data=typeof e==`string`?d(e):e}token(e,t){let n=e.pos,r=0;for(;;){let n=e.next<0,i=e.resolveOffset(1,1);if(v(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(n||r++,i==null)break;e.reset(i,e.token)}r&&(e.reset(n,e.token),e.acceptToken(this.elseToken,r))}};g.prototype.contextual=h.prototype.fallback=h.prototype.extend=!1;var _=class{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}};function v(e,t,n,r,i,a){let o=0,s=1<0){let n=e[r];if(c.allows(n)&&(t.token.value==-1||t.token.value==n||b(n,t.token.value,i,a))){t.acceptToken(n);break}}let r=t.next,l=0,u=e[o+2];if(t.next<0&&u>l&&e[n+u*3-3]==65535){o=e[n+u*3-1];continue scan}for(;l>1,a=n+i+(i<<1),s=e[a],c=e[a+1]||65536;if(r=c)l=i+1;else{o=e[a+2],t.advance();continue scan}}break}}function y(e,t,n){for(let r=t,i;(i=e[r])!=65535;r++)if(i==n)return r-t;return-1}function b(e,t,n,r){let i=y(n,r,t);return i<0||y(n,r,e)n)&&!i.type.isError)return r<0?Math.max(0,Math.min(i.to-1,n-25)):Math.min(t.length,Math.max(i.from+1,n+25));if(r<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return r<0?0:t.length}}var w=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?C(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?C(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=s,null;if(i instanceof a){if(s==e){if(s=Math.max(this.safeFrom,e)&&(this.trees.push(i),this.start.push(s),this.index.push(0))}else this.index[t]++,this.nextStart=s+i.length}}},T=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(e=>new f)}getActions(e){let t=0,n=null,{parser:r}=e.p,{tokenizers:i}=r,a=r.stateSlot(e.state,3),o=e.curContext?e.curContext.hash:0,s=0;for(let r=0;rl.end+25&&(s=Math.max(l.lookAhead,s)),l.value!=0)){let r=t;if(l.extended>-1&&(t=this.addActions(e,l.extended,l.end,t)),t=this.addActions(e,l.value,l.end,t),!c.extend&&(n=l,t>r))break}}for(;this.actions.length>t;)this.actions.pop();return s&&e.setLookAhead(s),!n&&e.pos==this.stream.end&&(n=new f,n.value=e.p.parser.eofTerm,n.start=n.end=e.pos,t=this.addActions(e,n.value,n.end,t)),this.mainToken=n,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new f,{pos:n,p:r}=e;return t.start=n,t.end=Math.min(n+1,r.stream.end),t.value=n==r.stream.end?r.parser.eofTerm:0,t}updateCachedToken(e,t,n){let r=this.stream.clipPos(n.pos);if(t.token(this.stream.reset(r,e),n),e.value>-1){let{parser:t}=n.p;for(let r=0;r=0&&n.p.parser.dialect.allows(i>>1)){i&1?e.extended=i>>1:e.value=i>>1;break}}}else e.value=0,e.end=this.stream.clipPos(r+1)}putAction(e,t,n,r){for(let t=0;te.bufferLength*4?new w(n,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,n=this.stacks=[],r,i;if(this.bigReductionCount>300&&e.length==1){let[t]=e;for(;t.forceReduce()&&t.stack.length&&t.stack[t.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let a=0;at)n.push(o);else if(this.advanceStack(o,n,e))continue;else{r||(r=[],i=[]),r.push(o);let e=this.tokens.getMainToken(o);i.push(e.value,e.end)}break}}if(!n.length){let e=r&&N(r);if(e)return x&&console.log(`Finish with `+this.stackID(e)),this.stackToTree(e);if(this.parser.strict)throw x&&r&&console.log(`Stuck with token `+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):`none`)),SyntaxError(`No parse at `+t);this.recovering||=5}if(this.recovering&&r){let e=this.stoppedAt!=null&&r[0].pos>this.stoppedAt?r[0]:this.runRecovery(r,i,n);if(e)return x&&console.log(`Force-finish `+this.stackID(e)),this.stackToTree(e.forceAll())}if(this.recovering){let e=this.recovering==1?1:this.recovering*3;if(n.length>e)for(n.sort((e,t)=>t.score-e.score);n.length>e;)n.pop();n.some(e=>e.reducePos>t)&&this.recovering--}else if(n.length>1){outer:for(let e=0;e500&&i.buffer.length>500)if((t.score-i.score||t.buffer.length-i.buffer.length)>0)n.splice(r--,1);else{n.splice(e--,1);continue outer}}}n.length>12&&(n.sort((e,t)=>t.score-e.score),n.splice(12,n.length-12))}this.minStackPos=n[0].pos;for(let e=1;e `:``;if(this.stoppedAt!=null&&r>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let t=e.curContext&&e.curContext.tracker.strict,n=t?e.curContext.hash:0;for(let c=this.fragments.nodeAt(r);c;){let r=this.parser.nodeSet.types[c.type.id]==c.type?i.getGoto(e.state,c.type.id):-1;if(r>-1&&c.length&&(!t||(c.prop(o.contextHash)||0)==n))return e.useNode(c,r),x&&console.log(s+this.stackID(e)+` (via reuse of ${i.getName(c.type.id)})`),!0;if(!(c instanceof a)||c.children.length==0||c.positions[0]>0)break;let l=c.children[0];if(l instanceof a&&c.positions[0]==0)c=l;else break}}let c=i.stateSlot(e.state,4);if(c>0)return e.reduce(c),x&&console.log(s+this.stackID(e)+` (via always-reduce ${i.getName(c&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let l=this.tokens.getActions(e);for(let a=0;ar?t.push(f):n.push(f)}return!1}advanceFully(e,t){let n=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>n)return D(e,t),!0}}runRecovery(e,t,n){let r=null,i=!1;for(let a=0;a `:``;if(o.deadEnd&&(i||(i=!0,o.restart(),x&&console.log(l+this.stackID(o)+` (restarted)`),this.advanceFully(o,n))))continue;let u=o.split(),d=l;for(let e=0;e<10&&u.forceReduce()&&(x&&console.log(d+this.stackID(u)+` (via force-reduce)`),!this.advanceFully(u,n));e++)x&&(d=this.stackID(u)+` -> `);for(let e of o.recoverByInsert(s))x&&console.log(l+this.stackID(e)+` (via recover-insert)`),this.advanceFully(e,n);this.stream.end>o.pos?(c==o.pos&&(c++,s=0),o.recoverByDelete(s,c),x&&console.log(l+this.stackID(o)+` (via recover-delete ${this.parser.getName(s)})`),D(o,n)):(!r||r.scoree,A=class{constructor(e){this.start=e.start,this.shift=e.shift||k,this.reduce=e.reduce||k,this.reuse=e.reuse||k,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}},j=class e extends n{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let n=e.nodeNames.split(` `);this.minRepeatTerm=n.length;for(let t=0;te.topRules[t][1]),s=[];for(let e=0;e=0)c(r,e,t[n++]);else{let i=t[n+-r];for(let a=-r;a>0;a--)c(t[n++],e,i);n++}}}this.nodeSet=new i(n.map((n,r)=>t.define({name:r>=this.minRepeatTerm?void 0:n,id:r,props:s[r],top:a.indexOf(r)>-1,error:r==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(r)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=r;let l=d(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let e=0;etypeof e==`number`?new h(l,e):e),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,n){let r=new E(this,e,t,n);for(let i of this.wrappers)r=i(r,e,t,n);return r}getGoto(e,t,n=!1){let r=this.goto;if(t>=r[0])return-1;for(let i=r[t+1];;){let t=r[i++],a=t&1,o=r[i++];if(a&&n)return o;for(let n=i+(t>>1);i0}validAction(e,t){return!!this.allActions(e,e=>e==t?!0:null)}allActions(e,t){let n=this.stateSlot(e,4),r=n?t(n):void 0;for(let n=this.stateSlot(e,1);r==null;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=M(this.data,n+2);else break;r=t(M(this.data,n+1))}return r}nextStates(e){let t=[];for(let n=this.stateSlot(e,1);;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=M(this.data,n+2);else break;if(!(this.data[n+2]&1)){let e=this.data[n+1];t.some((t,n)=>n&1&&t==e)||t.push(this.data[n],e)}}return t}configure(t){let n=Object.assign(Object.create(e.prototype),this);if(t.props&&(n.nodeSet=this.nodeSet.extend(...t.props)),t.top){let e=this.topRules[t.top];if(!e)throw RangeError(`Invalid top rule name ${t.top}`);n.top=e}return t.tokenizers&&(n.tokenizers=this.tokenizers.map(e=>{let n=t.tokenizers.find(t=>t.from==e);return n?n.to:e})),t.specializers&&(n.specializers=this.specializers.slice(),n.specializerSpecs=this.specializerSpecs.map((e,r)=>{let i=t.specializers.find(t=>t.from==e.external);if(!i)return e;let a=Object.assign(Object.assign({},e),{external:i.to});return n.specializers[r]=P(a),a})),t.contextTracker&&(n.context=t.contextTracker),t.dialect&&(n.dialect=this.parseDialect(t.dialect)),t.strict!=null&&(n.strict=t.strict),t.wrap&&(n.wrappers=n.wrappers.concat(t.wrap)),t.bufferLength!=null&&(n.bufferLength=t.bufferLength),n}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),n=t.map(()=>!1);if(e)for(let r of e.split(` `)){let e=t.indexOf(r);e>=0&&(n[e]=!0)}let r=null;for(let e=0;ee)&&n.p.parser.stateFlag(n.state,2)&&(!t||t.scoree.external(n,r)<<1|t}return e.get}export{g as i,_ as n,j as r,A as t}; \ No newline at end of file +import{C as e,E as t,O as n,S as r,T as i,k as a,w as o}from"./index-B377xynC.js";var s=class e{constructor(e,t,n,r,i,a,o,s,c,l=0,u){this.p=e,this.stack=t,this.state=n,this.reducePos=r,this.pos=i,this.score=a,this.buffer=o,this.bufferBase=s,this.curContext=c,this.lookAhead=l,this.parent=u}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?`!`+this.score:``}`}static start(t,n,r=0){let i=t.parser.context;return new e(t,[],n,r,r,0,[],0,i?new c(i,i.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){let t=e>>19,n=e&65535,{parser:r}=this.p,i=this.reducePos=2e3&&!this.p.parser.nodeSet.types[n]?.isAnonymous&&(s==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=c):this.p.lastBigReductionSizeo;)this.stack.pop();this.reduceContext(n,s)}storeNode(e,t,n,r=4,i=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[e-4]==0&&this.buffer[e-1]>-1){if(t==n)return;if(this.buffer[e-2]>=t){this.buffer[e-2]=n;return}}}if(!i||this.pos==n)this.buffer.push(e,t,n,r);else{let i=this.buffer.length;if(i>0&&(this.buffer[i-4]!=0||this.buffer[i-1]<0)){let e=!1;for(let t=i;t>0&&this.buffer[t-2]>n;t-=4)if(this.buffer[t-1]>=0){e=!0;break}if(e)for(;i>0&&this.buffer[i-2]>n;)this.buffer[i]=this.buffer[i-4],this.buffer[i+1]=this.buffer[i-3],this.buffer[i+2]=this.buffer[i-2],this.buffer[i+3]=this.buffer[i-1],i-=4,r>4&&(r-=4)}this.buffer[i]=e,this.buffer[i+1]=t,this.buffer[i+2]=n,this.buffer[i+3]=r}}shift(e,t,n,r){if(e&131072)this.pushState(e&65535,this.pos);else if(e&262144)this.pos=r,this.shiftContext(t,n),t<=this.p.parser.maxNode&&this.buffer.push(t,n,r,4);else{let i=e,{parser:a}=this.p;this.pos=r;let o=a.stateFlag(i,1);!o&&(r>n||t<=a.maxNode)&&(this.reducePos=r),this.pushState(i,o?n:Math.min(n,this.reducePos)),this.shiftContext(t,n),t<=a.maxNode&&this.buffer.push(t,n,r,4)}}apply(e,t,n,r){e&65536?this.reduce(e):this.shift(e,t,n,r)}useNode(e,t){let n=this.p.reused.length-1;(n<0||this.p.reused[n]!=e)&&(this.p.reused.push(e),n++);let r=this.pos;this.reducePos=this.pos=r+e.length,this.pushState(t,r),this.buffer.push(n,r,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let t=this,n=t.buffer.length;for(n&&t.buffer[n-4]==0&&(n-=4);n>0&&t.buffer[n-2]>t.reducePos;)n-=4;let r=t.buffer.slice(n),i=t.bufferBase+n;for(;t&&i==t.bufferBase;)t=t.parent;return new e(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,r,i,this.curContext,this.lookAhead,t)}recoverByDelete(e,t){let n=e<=this.p.parser.maxNode;n&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,n?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new l(this);;){let n=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(n==0)return!1;if(!(n&65536))return!0;t.reduce(n)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let n=[];for(let r=0,i;rt&1&&e==r)||n.push(t[e],r)}t=n}let n=[];for(let e=0;e>19,r=t&65535,i=this.stack.length-n*3;if(i<0||e.getGoto(this.stack[i],r,!1)<0){let e=this.findForcedReduction();if(e==null)return!1;t=e}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],n=(r,i)=>{if(!t.includes(r))return t.push(r),e.allActions(r,t=>{if(!(t&393216))if(t&65536){let n=(t>>19)-i;if(n>1){let r=t&65535,i=this.stack.length-n*3;if(i>=0&&e.getGoto(this.stack[i],r,!1)>=0)return n<<19|65536|r}}else{let e=n(t,i+1);if(e!=null)return e}})};return n(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}},c=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},l=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,n=e>>19;n==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(n-1)*3;let r=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=r}},u=class e{constructor(e,t,n){this.stack=e,this.pos=t,this.index=n,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(t,n=t.bufferBase+t.buffer.length){return new e(t,n,n-t.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new e(this.stack,this.pos,this.index)}};function d(e,t=Uint16Array){if(typeof e!=`string`)return e;let n=null;for(let r=0,i=0;r=92&&t--,t>=34&&t--;let i=t-32;if(i>=46&&(i-=46,n=!0),a+=i,n)break;a*=46}n?n[i++]=a:n=new t(a)}return n}var f=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},p=new f,m=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk=``,this.chunkOff=0,this.chunk2=``,this.chunk2Pos=0,this.next=-1,this.token=p,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let n=this.range,r=this.rangeIndex,i=this.pos+e;for(;in.to:i>=n.to;){if(r==this.ranges.length-1)return null;let e=this.ranges[++r];i+=e.from-n.to,n=e}return i}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,n,r;if(t>=0&&t=this.chunk2Pos&&nt.to&&(this.chunk2=this.chunk2.slice(0,t.to-n)),r=this.chunk2.charCodeAt(0)}}return n>=this.token.lookAhead&&(this.token.lookAhead=n+1),r}acceptToken(e,t=0){let n=t?this.resolveOffset(t,-1):this.pos;if(n==null||n=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk=``,this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=p,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let n=``;for(let r of this.ranges){if(r.from>=t)break;r.to>e&&(n+=this.input.read(Math.max(r.from,e),Math.min(r.to,t)))}return n}},h=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:n}=t.p;v(this.data,e,t,this.id,n.data,n.tokenPrecTable)}};h.prototype.contextual=h.prototype.fallback=h.prototype.extend=!1;var g=class{constructor(e,t,n){this.precTable=t,this.elseToken=n,this.data=typeof e==`string`?d(e):e}token(e,t){let n=e.pos,r=0;for(;;){let n=e.next<0,i=e.resolveOffset(1,1);if(v(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(n||r++,i==null)break;e.reset(i,e.token)}r&&(e.reset(n,e.token),e.acceptToken(this.elseToken,r))}};g.prototype.contextual=h.prototype.fallback=h.prototype.extend=!1;var _=class{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}};function v(e,t,n,r,i,a){let o=0,s=1<0){let n=e[r];if(c.allows(n)&&(t.token.value==-1||t.token.value==n||b(n,t.token.value,i,a))){t.acceptToken(n);break}}let r=t.next,l=0,u=e[o+2];if(t.next<0&&u>l&&e[n+u*3-3]==65535){o=e[n+u*3-1];continue scan}for(;l>1,a=n+i+(i<<1),s=e[a],c=e[a+1]||65536;if(r=c)l=i+1;else{o=e[a+2],t.advance();continue scan}}break}}function y(e,t,n){for(let r=t,i;(i=e[r])!=65535;r++)if(i==n)return r-t;return-1}function b(e,t,n,r){let i=y(n,r,t);return i<0||y(n,r,e)n)&&!i.type.isError)return r<0?Math.max(0,Math.min(i.to-1,n-25)):Math.min(t.length,Math.max(i.from+1,n+25));if(r<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return r<0?0:t.length}}var w=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?C(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?C(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=s,null;if(i instanceof a){if(s==e){if(s=Math.max(this.safeFrom,e)&&(this.trees.push(i),this.start.push(s),this.index.push(0))}else this.index[t]++,this.nextStart=s+i.length}}},T=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(e=>new f)}getActions(e){let t=0,n=null,{parser:r}=e.p,{tokenizers:i}=r,a=r.stateSlot(e.state,3),o=e.curContext?e.curContext.hash:0,s=0;for(let r=0;rl.end+25&&(s=Math.max(l.lookAhead,s)),l.value!=0)){let r=t;if(l.extended>-1&&(t=this.addActions(e,l.extended,l.end,t)),t=this.addActions(e,l.value,l.end,t),!c.extend&&(n=l,t>r))break}}for(;this.actions.length>t;)this.actions.pop();return s&&e.setLookAhead(s),!n&&e.pos==this.stream.end&&(n=new f,n.value=e.p.parser.eofTerm,n.start=n.end=e.pos,t=this.addActions(e,n.value,n.end,t)),this.mainToken=n,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new f,{pos:n,p:r}=e;return t.start=n,t.end=Math.min(n+1,r.stream.end),t.value=n==r.stream.end?r.parser.eofTerm:0,t}updateCachedToken(e,t,n){let r=this.stream.clipPos(n.pos);if(t.token(this.stream.reset(r,e),n),e.value>-1){let{parser:t}=n.p;for(let r=0;r=0&&n.p.parser.dialect.allows(i>>1)){i&1?e.extended=i>>1:e.value=i>>1;break}}}else e.value=0,e.end=this.stream.clipPos(r+1)}putAction(e,t,n,r){for(let t=0;te.bufferLength*4?new w(n,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,n=this.stacks=[],r,i;if(this.bigReductionCount>300&&e.length==1){let[t]=e;for(;t.forceReduce()&&t.stack.length&&t.stack[t.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let a=0;at)n.push(o);else if(this.advanceStack(o,n,e))continue;else{r||(r=[],i=[]),r.push(o);let e=this.tokens.getMainToken(o);i.push(e.value,e.end)}break}}if(!n.length){let e=r&&N(r);if(e)return x&&console.log(`Finish with `+this.stackID(e)),this.stackToTree(e);if(this.parser.strict)throw x&&r&&console.log(`Stuck with token `+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):`none`)),SyntaxError(`No parse at `+t);this.recovering||=5}if(this.recovering&&r){let e=this.stoppedAt!=null&&r[0].pos>this.stoppedAt?r[0]:this.runRecovery(r,i,n);if(e)return x&&console.log(`Force-finish `+this.stackID(e)),this.stackToTree(e.forceAll())}if(this.recovering){let e=this.recovering==1?1:this.recovering*3;if(n.length>e)for(n.sort((e,t)=>t.score-e.score);n.length>e;)n.pop();n.some(e=>e.reducePos>t)&&this.recovering--}else if(n.length>1){outer:for(let e=0;e500&&i.buffer.length>500)if((t.score-i.score||t.buffer.length-i.buffer.length)>0)n.splice(r--,1);else{n.splice(e--,1);continue outer}}}n.length>12&&(n.sort((e,t)=>t.score-e.score),n.splice(12,n.length-12))}this.minStackPos=n[0].pos;for(let e=1;e `:``;if(this.stoppedAt!=null&&r>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let t=e.curContext&&e.curContext.tracker.strict,n=t?e.curContext.hash:0;for(let c=this.fragments.nodeAt(r);c;){let r=this.parser.nodeSet.types[c.type.id]==c.type?i.getGoto(e.state,c.type.id):-1;if(r>-1&&c.length&&(!t||(c.prop(o.contextHash)||0)==n))return e.useNode(c,r),x&&console.log(s+this.stackID(e)+` (via reuse of ${i.getName(c.type.id)})`),!0;if(!(c instanceof a)||c.children.length==0||c.positions[0]>0)break;let l=c.children[0];if(l instanceof a&&c.positions[0]==0)c=l;else break}}let c=i.stateSlot(e.state,4);if(c>0)return e.reduce(c),x&&console.log(s+this.stackID(e)+` (via always-reduce ${i.getName(c&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let l=this.tokens.getActions(e);for(let a=0;ar?t.push(f):n.push(f)}return!1}advanceFully(e,t){let n=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>n)return D(e,t),!0}}runRecovery(e,t,n){let r=null,i=!1;for(let a=0;a `:``;if(o.deadEnd&&(i||(i=!0,o.restart(),x&&console.log(l+this.stackID(o)+` (restarted)`),this.advanceFully(o,n))))continue;let u=o.split(),d=l;for(let e=0;e<10&&u.forceReduce()&&(x&&console.log(d+this.stackID(u)+` (via force-reduce)`),!this.advanceFully(u,n));e++)x&&(d=this.stackID(u)+` -> `);for(let e of o.recoverByInsert(s))x&&console.log(l+this.stackID(e)+` (via recover-insert)`),this.advanceFully(e,n);this.stream.end>o.pos?(c==o.pos&&(c++,s=0),o.recoverByDelete(s,c),x&&console.log(l+this.stackID(o)+` (via recover-delete ${this.parser.getName(s)})`),D(o,n)):(!r||r.scoree,A=class{constructor(e){this.start=e.start,this.shift=e.shift||k,this.reduce=e.reduce||k,this.reuse=e.reuse||k,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}},j=class e extends n{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let n=e.nodeNames.split(` `);this.minRepeatTerm=n.length;for(let t=0;te.topRules[t][1]),s=[];for(let e=0;e=0)c(r,e,t[n++]);else{let i=t[n+-r];for(let a=-r;a>0;a--)c(t[n++],e,i);n++}}}this.nodeSet=new i(n.map((n,r)=>t.define({name:r>=this.minRepeatTerm?void 0:n,id:r,props:s[r],top:a.indexOf(r)>-1,error:r==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(r)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=r;let l=d(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let e=0;etypeof e==`number`?new h(l,e):e),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,n){let r=new E(this,e,t,n);for(let i of this.wrappers)r=i(r,e,t,n);return r}getGoto(e,t,n=!1){let r=this.goto;if(t>=r[0])return-1;for(let i=r[t+1];;){let t=r[i++],a=t&1,o=r[i++];if(a&&n)return o;for(let n=i+(t>>1);i0}validAction(e,t){return!!this.allActions(e,e=>e==t?!0:null)}allActions(e,t){let n=this.stateSlot(e,4),r=n?t(n):void 0;for(let n=this.stateSlot(e,1);r==null;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=M(this.data,n+2);else break;r=t(M(this.data,n+1))}return r}nextStates(e){let t=[];for(let n=this.stateSlot(e,1);;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=M(this.data,n+2);else break;if(!(this.data[n+2]&1)){let e=this.data[n+1];t.some((t,n)=>n&1&&t==e)||t.push(this.data[n],e)}}return t}configure(t){let n=Object.assign(Object.create(e.prototype),this);if(t.props&&(n.nodeSet=this.nodeSet.extend(...t.props)),t.top){let e=this.topRules[t.top];if(!e)throw RangeError(`Invalid top rule name ${t.top}`);n.top=e}return t.tokenizers&&(n.tokenizers=this.tokenizers.map(e=>{let n=t.tokenizers.find(t=>t.from==e);return n?n.to:e})),t.specializers&&(n.specializers=this.specializers.slice(),n.specializerSpecs=this.specializerSpecs.map((e,r)=>{let i=t.specializers.find(t=>t.from==e.external);if(!i)return e;let a=Object.assign(Object.assign({},e),{external:i.to});return n.specializers[r]=P(a),a})),t.contextTracker&&(n.context=t.contextTracker),t.dialect&&(n.dialect=this.parseDialect(t.dialect)),t.strict!=null&&(n.strict=t.strict),t.wrap&&(n.wrappers=n.wrappers.concat(t.wrap)),t.bufferLength!=null&&(n.bufferLength=t.bufferLength),n}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),n=t.map(()=>!1);if(e)for(let r of e.split(` `)){let e=t.indexOf(r);e>=0&&(n[e]=!0)}let r=null;for(let e=0;ee)&&n.p.parser.stateFlag(n.state,2)&&(!t||t.scoree.external(n,r)<<1|t}return e.get}export{g as i,_ as n,j as r,A as t}; \ No newline at end of file diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-17r-i6rR.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-CmkCPezG.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-17r-i6rR.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-CmkCPezG.js index 161484ee..a4de5567 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-17r-i6rR.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-CmkCPezG.js @@ -1,4 +1,4 @@ -import{$ as e,C as t,D as n,I as r,M as i,_ as a,b as o,c as s,d as c,f as ee,i as te,l as ne,m as re,s as l,t as ie,u,v as d,x as f}from"./index-CLJ0aycO.js";import{i as p,n as m,r as ae,t as oe}from"./dist-B2R-c1vX.js";import{i as h,n as g,r as se}from"./dist-BxWz473c.js";var ce=316,le=317,_=1,ue=2,de=3,fe=4,pe=318,me=320,he=321,ge=5,_e=6,ve=0,v=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],y=125,ye=59,b=47,x=42,S=43,C=45,w=60,T=44,E=63,D=46,O=91,k=new oe({start:!1,shift(e,t){return t==ge||t==_e||t==me?e:t==he},strict:!1}),A=new m((e,t)=>{let{next:n}=e;(n==y||n==-1||t.context)&&e.acceptToken(pe)},{contextual:!0,fallback:!0}),j=new m((e,t)=>{let{next:n}=e,r;v.indexOf(n)>-1||n==b&&((r=e.peek(1))==b||r==x)||n!=y&&n!=ye&&n!=-1&&!t.context&&e.acceptToken(ce)},{contextual:!0}),M=new m((e,t)=>{e.next==O&&!t.context&&e.acceptToken(le)},{contextual:!0}),N=new m((e,t)=>{let{next:n}=e;if(n==S||n==C){if(e.advance(),n==e.next){e.advance();let n=!t.context&&t.canShift(_);e.acceptToken(n?_:ue)}}else n==E&&e.peek(1)==D&&(e.advance(),e.advance(),(e.next<48||e.next>57)&&e.acceptToken(de))},{contextual:!0});function P(e,t){return e>=65&&e<=90||e>=97&&e<=122||e==95||e>=192||!t&&e>=48&&e<=57}var be=new m((e,t)=>{if(e.next!=w||!t.dialectEnabled(ve)||(e.advance(),e.next==b))return;let n=0;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(P(e.next,!0)){for(e.advance(),n++;P(e.next,!1);)e.advance(),n++;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(e.next==T)return;for(let t=0;;t++){if(t==7){if(!P(e.next,!0))return;break}if(e.next!=`extends`.charCodeAt(t))break;e.advance(),n++}}e.acceptToken(fe,-n)}),xe=o({"get set async static":f.modifier,"for while do if else switch try catch finally return throw break continue default case defer":f.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":f.operatorKeyword,"let var const using function class extends":f.definitionKeyword,"import export from":f.moduleKeyword,"with debugger new":f.keyword,TemplateString:f.special(f.string),super:f.atom,BooleanLiteral:f.bool,this:f.self,null:f.null,Star:f.modifier,VariableName:f.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":f.function(f.variableName),VariableDefinition:f.definition(f.variableName),Label:f.labelName,PropertyName:f.propertyName,PrivatePropertyName:f.special(f.propertyName),"CallExpression/MemberExpression/PropertyName":f.function(f.propertyName),"FunctionDeclaration/VariableDefinition":f.function(f.definition(f.variableName)),"ClassDeclaration/VariableDefinition":f.definition(f.className),"NewExpression/VariableName":f.className,PropertyDefinition:f.definition(f.propertyName),PrivatePropertyDefinition:f.definition(f.special(f.propertyName)),UpdateOp:f.updateOperator,"LineComment Hashbang":f.lineComment,BlockComment:f.blockComment,Number:f.number,String:f.string,Escape:f.escape,ArithOp:f.arithmeticOperator,LogicOp:f.logicOperator,BitOp:f.bitwiseOperator,CompareOp:f.compareOperator,RegExp:f.regexp,Equals:f.definitionOperator,Arrow:f.function(f.punctuation),": Spread":f.punctuation,"( )":f.paren,"[ ]":f.squareBracket,"{ }":f.brace,"InterpolationStart InterpolationEnd":f.special(f.brace),".":f.derefOperator,", ;":f.separator,"@":f.meta,TypeName:f.typeName,TypeDefinition:f.definition(f.typeName),"type enum interface implements namespace module declare":f.definitionKeyword,"abstract global Privacy readonly override":f.modifier,"is keyof unique infer asserts":f.operatorKeyword,JSXAttributeValue:f.attributeValue,JSXText:f.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":f.angleBracket,"JSXIdentifier JSXNameSpacedName":f.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":f.attributeName,"JSXBuiltin/JSXIdentifier":f.standard(f.tagName)}),Se={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},Ce={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},we={__proto__:null,"<":193},Te=ae.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem`,maxTerm:380,context:k,nodeProps:[[`isolate`,-8,5,6,14,37,39,51,53,55,``],[`group`,-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,`Statement`,-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,`Expression`,-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,`Type`,-3,88,103,109,`ClassItem`],[`openedBy`,23,`<`,38,`InterpolationStart`,56,`[`,60,`{`,73,`(`,160,`JSXStartCloseTag`],[`closedBy`,-2,24,168,`>`,40,`InterpolationEnd`,50,`]`,61,`}`,74,`)`,165,`JSXEndTag`]],propSources:[xe],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[j,M,N,be,2,3,4,5,6,7,8,9,10,11,12,13,14,A,new p("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new p(`j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~`,25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:e=>Se[e]||-1},{term:343,get:e=>Ce[e]||-1},{term:95,get:e=>we[e]||-1}],tokenPrec:15201}),Ee=e({autoCloseTags:()=>$,javascript:()=>Z,javascriptLanguage:()=>W,jsxLanguage:()=>q,localCompletionSource:()=>U,snippets:()=>F,tsxLanguage:()=>J,typescriptLanguage:()=>K,typescriptSnippets:()=>I}),F=[h("function ${name}(${params}) {\n ${}\n}",{label:`function`,detail:`definition`,type:`keyword`}),h("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:`for`,detail:`loop`,type:`keyword`}),h("for (let ${name} of ${collection}) {\n ${}\n}",{label:`for`,detail:`of loop`,type:`keyword`}),h(`do { +import{$ as e,C as t,D as n,I as r,M as i,_ as a,b as o,c as s,d as c,f as ee,i as te,l as ne,m as re,s as l,t as ie,u,v as d,x as f}from"./index-B377xynC.js";import{i as p,n as m,r as ae,t as oe}from"./dist-CT28L0yn.js";import{i as h,n as g,r as se}from"./dist-cLIvjYCL.js";var ce=316,le=317,_=1,ue=2,de=3,fe=4,pe=318,me=320,he=321,ge=5,_e=6,ve=0,v=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],y=125,ye=59,b=47,x=42,S=43,C=45,w=60,T=44,E=63,D=46,O=91,k=new oe({start:!1,shift(e,t){return t==ge||t==_e||t==me?e:t==he},strict:!1}),A=new m((e,t)=>{let{next:n}=e;(n==y||n==-1||t.context)&&e.acceptToken(pe)},{contextual:!0,fallback:!0}),j=new m((e,t)=>{let{next:n}=e,r;v.indexOf(n)>-1||n==b&&((r=e.peek(1))==b||r==x)||n!=y&&n!=ye&&n!=-1&&!t.context&&e.acceptToken(ce)},{contextual:!0}),M=new m((e,t)=>{e.next==O&&!t.context&&e.acceptToken(le)},{contextual:!0}),N=new m((e,t)=>{let{next:n}=e;if(n==S||n==C){if(e.advance(),n==e.next){e.advance();let n=!t.context&&t.canShift(_);e.acceptToken(n?_:ue)}}else n==E&&e.peek(1)==D&&(e.advance(),e.advance(),(e.next<48||e.next>57)&&e.acceptToken(de))},{contextual:!0});function P(e,t){return e>=65&&e<=90||e>=97&&e<=122||e==95||e>=192||!t&&e>=48&&e<=57}var be=new m((e,t)=>{if(e.next!=w||!t.dialectEnabled(ve)||(e.advance(),e.next==b))return;let n=0;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(P(e.next,!0)){for(e.advance(),n++;P(e.next,!1);)e.advance(),n++;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(e.next==T)return;for(let t=0;;t++){if(t==7){if(!P(e.next,!0))return;break}if(e.next!=`extends`.charCodeAt(t))break;e.advance(),n++}}e.acceptToken(fe,-n)}),xe=o({"get set async static":f.modifier,"for while do if else switch try catch finally return throw break continue default case defer":f.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":f.operatorKeyword,"let var const using function class extends":f.definitionKeyword,"import export from":f.moduleKeyword,"with debugger new":f.keyword,TemplateString:f.special(f.string),super:f.atom,BooleanLiteral:f.bool,this:f.self,null:f.null,Star:f.modifier,VariableName:f.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":f.function(f.variableName),VariableDefinition:f.definition(f.variableName),Label:f.labelName,PropertyName:f.propertyName,PrivatePropertyName:f.special(f.propertyName),"CallExpression/MemberExpression/PropertyName":f.function(f.propertyName),"FunctionDeclaration/VariableDefinition":f.function(f.definition(f.variableName)),"ClassDeclaration/VariableDefinition":f.definition(f.className),"NewExpression/VariableName":f.className,PropertyDefinition:f.definition(f.propertyName),PrivatePropertyDefinition:f.definition(f.special(f.propertyName)),UpdateOp:f.updateOperator,"LineComment Hashbang":f.lineComment,BlockComment:f.blockComment,Number:f.number,String:f.string,Escape:f.escape,ArithOp:f.arithmeticOperator,LogicOp:f.logicOperator,BitOp:f.bitwiseOperator,CompareOp:f.compareOperator,RegExp:f.regexp,Equals:f.definitionOperator,Arrow:f.function(f.punctuation),": Spread":f.punctuation,"( )":f.paren,"[ ]":f.squareBracket,"{ }":f.brace,"InterpolationStart InterpolationEnd":f.special(f.brace),".":f.derefOperator,", ;":f.separator,"@":f.meta,TypeName:f.typeName,TypeDefinition:f.definition(f.typeName),"type enum interface implements namespace module declare":f.definitionKeyword,"abstract global Privacy readonly override":f.modifier,"is keyof unique infer asserts":f.operatorKeyword,JSXAttributeValue:f.attributeValue,JSXText:f.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":f.angleBracket,"JSXIdentifier JSXNameSpacedName":f.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":f.attributeName,"JSXBuiltin/JSXIdentifier":f.standard(f.tagName)}),Se={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},Ce={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},we={__proto__:null,"<":193},Te=ae.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem`,maxTerm:380,context:k,nodeProps:[[`isolate`,-8,5,6,14,37,39,51,53,55,``],[`group`,-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,`Statement`,-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,`Expression`,-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,`Type`,-3,88,103,109,`ClassItem`],[`openedBy`,23,`<`,38,`InterpolationStart`,56,`[`,60,`{`,73,`(`,160,`JSXStartCloseTag`],[`closedBy`,-2,24,168,`>`,40,`InterpolationEnd`,50,`]`,61,`}`,74,`)`,165,`JSXEndTag`]],propSources:[xe],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[j,M,N,be,2,3,4,5,6,7,8,9,10,11,12,13,14,A,new p("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new p(`j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~`,25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:e=>Se[e]||-1},{term:343,get:e=>Ce[e]||-1},{term:95,get:e=>we[e]||-1}],tokenPrec:15201}),Ee=e({autoCloseTags:()=>$,javascript:()=>Z,javascriptLanguage:()=>W,jsxLanguage:()=>q,localCompletionSource:()=>U,snippets:()=>F,tsxLanguage:()=>J,typescriptLanguage:()=>K,typescriptSnippets:()=>I}),F=[h("function ${name}(${params}) {\n ${}\n}",{label:`function`,detail:`definition`,type:`keyword`}),h("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:`for`,detail:`loop`,type:`keyword`}),h("for (let ${name} of ${collection}) {\n ${}\n}",{label:`for`,detail:`of loop`,type:`keyword`}),h(`do { \${} } while (\${})`,{label:`do`,detail:`loop`,type:`keyword`}),h(`while (\${}) { \${} diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-jYLMKGSZ.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-CwGQmmSf.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-jYLMKGSZ.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-CwGQmmSf.js index 6549dcda..58f9452a 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-jYLMKGSZ.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-CwGQmmSf.js @@ -1 +1 @@ -import{A as e,I as t,M as n,b as r,f as i,i as a,m as o,o as s,t as c,v as l,x as u}from"./index-CLJ0aycO.js";import{n as d,r as ee,t as te}from"./dist-B2R-c1vX.js";import{n as f,t as ne}from"./dist-BJusfjLN.js";import{a as re,i as ie,n as ae,o as oe,r as p}from"./dist-17r-i6rR.js";var se=55,ce=1,le=56,ue=2,de=57,fe=3,m=4,pe=5,h=6,g=7,me=8,he=9,ge=10,_e=11,ve=12,ye=13,_=58,be=14,xe=15,v=59,y=21,Se=23,b=24,Ce=25,x=27,S=28,we=29,Te=32,Ee=35,De=37,Oe=38,ke=0,Ae=1,je={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},Me={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},C={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function Ne(e){return e==45||e==46||e==58||e>=65&&e<=90||e==95||e>=97&&e<=122||e>=161}var w=null,T=null,E=0;function D(e,t){let n=e.pos+t;if(E==n&&T==e)return w;let r=e.peek(t),i=``;for(;Ne(r);)i+=String.fromCharCode(r),r=e.peek(++t);return T=e,E=n,w=i?i.toLowerCase():r==Pe||r==Fe?void 0:null}var O=60,k=62,A=47,Pe=63,Fe=33,Ie=45;function j(e,t){this.name=e,this.parent=t}var Le=[h,ge,g,me,he],Re=new te({start:null,shift(e,t,n,r){return Le.indexOf(t)>-1?new j(D(r,1)||``,e):e},reduce(e,t){return t==y&&e?e.parent:e},reuse(e,t,n,r){let i=t.type.id;return i==h||i==De?new j(D(r,1)||``,e):e},strict:!1}),ze=new d((e,t)=>{if(e.next!=O){e.next<0&&t.context&&e.acceptToken(_);return}e.advance();let n=e.next==A;n&&e.advance();let r=D(e,0);if(r===void 0)return;if(!r)return e.acceptToken(n?xe:be);let i=t.context?t.context.name:null;if(n){if(r==i)return e.acceptToken(_e);if(i&&Me[i])return e.acceptToken(_,-2);if(t.dialectEnabled(ke))return e.acceptToken(ve);for(let e=t.context;e;e=e.parent)if(e.name==r)return;e.acceptToken(ye)}else{if(r==`script`)return e.acceptToken(g);if(r==`style`)return e.acceptToken(me);if(r==`textarea`)return e.acceptToken(he);if(je.hasOwnProperty(r))return e.acceptToken(ge);i&&C[i]&&C[i][r]?e.acceptToken(_,-1):e.acceptToken(h)}},{contextual:!0}),Be=new d(e=>{for(let t=0,n=0;;n++){if(e.next<0){n&&e.acceptToken(v);break}if(e.next==Ie)t++;else if(e.next==k&&t>=2){n>=3&&e.acceptToken(v,-2);break}else t=0;e.advance()}});function Ve(e){for(;e;e=e.parent)if(e.name==`svg`||e.name==`math`)return!0;return!1}var He=new d((e,t)=>{if(e.next==A&&e.peek(1)==k){let n=t.dialectEnabled(Ae)||Ve(t.context);e.acceptToken(n?pe:m,2)}else e.next==k&&e.acceptToken(m,1)});function M(e,t,n){let r=2+e.length;return new d(i=>{for(let a=0,o=0,s=0;;s++){if(i.next<0){s&&i.acceptToken(t);break}if(a==0&&i.next==O||a==1&&i.next==A||a>=2&&ao?i.acceptToken(t,-o):i.acceptToken(n,-(o-2));break}else if((i.next==10||i.next==13)&&s){i.acceptToken(t,1);break}else a=o=0;i.advance()}})}var Ue=M(`script`,se,ce),We=M(`style`,le,ue),Ge=M(`textarea`,de,fe),Ke=r({"Text RawText IncompleteTag IncompleteCloseTag":u.content,"StartTag StartCloseTag SelfClosingEndTag EndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/TagName":[u.tagName,u.invalid],AttributeName:u.attributeName,"AttributeValue UnquotedAttributeValue":u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta}),qe=ee.deserialize({version:14,states:",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[",stateData:`,c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~`,goto:"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",nodeNames:`⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl`,maxTerm:68,context:Re,nodeProps:[[`closedBy`,-10,1,2,3,7,8,9,10,11,12,13,`EndTag`,6,`EndTag SelfClosingEndTag`,-4,22,31,34,37,`CloseTag`],[`openedBy`,4,`StartTag StartCloseTag`,5,`StartTag`,-4,30,33,36,38,`OpenTag`],[`group`,-10,14,15,18,19,20,21,40,41,42,43,`Entity`,17,`Entity TextContent`,-3,29,32,35,`TextContent Entity`],[`isolate`,-11,22,30,31,33,34,36,37,38,39,42,43,`ltr`,-3,27,28,40,``]],propSources:[Ke],skippedNodes:[0],repeatNodeCount:9,tokenData:"!]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VP<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!{let n=e.type.id;if(n==we)return F(e,t,r);if(n==Te)return F(e,t,i);if(n==Ee)return F(e,t,a);if(n==y&&o.length){let n=e.node,r=n.firstChild,i=r&&P(r,t),a;if(i){for(let e of o)if(e.tag==i&&(!e.attrs||e.attrs(a||=N(r,t)))){let t=n.lastChild,i=t.type.id==Oe?t.from:n.to;if(i>r.to)return{parser:e.parser,overlay:[{from:r.to,to:i}]}}}}if(s&&n==b){let n=e.node,r;if(r=n.firstChild){let e=s[t.read(r.from,r.to)];if(e)for(let r of e){if(r.tagName&&r.tagName!=P(n.parent,t))continue;let e=n.lastChild;if(e.type.id==x){let t=e.from+1,n=e.lastChild,i=e.to-(n&&n.isError?0:1);if(i>t)return{parser:r.parser,overlay:[{from:t,to:i}],bracketed:!0}}else if(e.type.id==S)return{parser:r.parser,overlay:[{from:e.from,to:e.to}]}}}}return null})}var L=[`_blank`,`_self`,`_top`,`_parent`],R=[`ascii`,`utf-8`,`utf-16`,`latin1`,`latin1`],z=[`get`,`post`,`put`,`delete`],B=[`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`],V=[`true`,`false`],H={},Je={a:{attrs:{href:null,ping:null,type:null,media:null,target:L,hreflang:null}},abbr:H,address:H,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[`default`,`rect`,`circle`,`poly`]}},article:H,aside:H,audio:{attrs:{src:null,mediagroup:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`none`,`metadata`,`auto`],autoplay:[`autoplay`],loop:[`loop`],controls:[`controls`]}},b:H,base:{attrs:{href:null,target:L}},bdi:H,bdo:H,blockquote:{attrs:{cite:null}},body:H,br:H,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[`autofocus`],disabled:[`autofocus`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,type:[`submit`,`reset`,`button`]}},canvas:{attrs:{width:null,height:null}},caption:H,center:H,cite:H,code:H,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[`command`,`checkbox`,`radio`],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[`disabled`],checked:[`checked`]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[`disabled`],multiple:[`multiple`]}},datalist:{attrs:{data:null}},dd:H,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[`open`]}},dfn:H,div:H,dl:H,dt:H,em:H,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[`disabled`],form:null,name:null}},figcaption:H,figure:H,footer:H,form:{attrs:{action:null,name:null,"accept-charset":R,autocomplete:[`on`,`off`],enctype:B,method:z,novalidate:[`novalidate`],target:L}},h1:H,h2:H,h3:H,h4:H,h5:H,h6:H,head:{children:[`title`,`base`,`link`,`style`,`meta`,`script`,`noscript`,`command`]},header:H,hgroup:H,hr:H,html:{attrs:{manifest:null}},i:H,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[`allow-top-navigation`,`allow-same-origin`,`allow-forms`,`allow-scripts`],seamless:[`seamless`]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[`audio/*`,`video/*`,`image/*`],autocomplete:[`on`,`off`],autofocus:[`autofocus`],checked:[`checked`],disabled:[`disabled`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,multiple:[`multiple`],readonly:[`readonly`],required:[`required`],type:[`hidden`,`text`,`search`,`tel`,`url`,`email`,`password`,`datetime`,`date`,`month`,`week`,`time`,`datetime-local`,`number`,`range`,`color`,`checkbox`,`radio`,`file`,`submit`,`image`,`reset`,`button`]}},ins:{attrs:{cite:null,datetime:null}},kbd:H,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[`autofocus`],disabled:[`disabled`],keytype:[`RSA`]}},label:{attrs:{for:null,form:null}},legend:H,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[`all`,`16x16`,`16x16 32x32`,`16x16 32x32 64x64`]}},map:{attrs:{name:null}},mark:H,menu:{attrs:{label:null,type:[`list`,`context`,`toolbar`]}},meta:{attrs:{content:null,charset:R,name:[`viewport`,`application-name`,`author`,`description`,`generator`,`keywords`],"http-equiv":[`content-language`,`content-type`,`default-style`,`refresh`]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:H,noscript:H,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[`typemustmatch`]}},ol:{attrs:{reversed:[`reversed`],start:null,type:[`1`,`a`,`A`,`i`,`I`]},children:[`li`,`script`,`template`,`ul`,`ol`]},optgroup:{attrs:{disabled:[`disabled`],label:null}},option:{attrs:{disabled:[`disabled`],label:null,selected:[`selected`],value:null}},output:{attrs:{for:null,form:null,name:null}},p:H,param:{attrs:{name:null,value:null}},pre:H,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:H,rt:H,ruby:H,samp:H,script:{attrs:{type:[`text/javascript`],src:null,async:[`async`],defer:[`defer`],charset:R}},section:H,select:{attrs:{form:null,name:null,size:null,autofocus:[`autofocus`],disabled:[`disabled`],multiple:[`multiple`]}},slot:{attrs:{name:null}},small:H,source:{attrs:{src:null,type:null,media:null}},span:H,strong:H,style:{attrs:{type:[`text/css`],media:null,scoped:null}},sub:H,summary:H,sup:H,table:H,tbody:H,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:H,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[`autofocus`],disabled:[`disabled`],readonly:[`readonly`],required:[`required`],wrap:[`soft`,`hard`]}},tfoot:H,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[`row`,`col`,`rowgroup`,`colgroup`]}},thead:H,time:{attrs:{datetime:null}},title:H,tr:H,track:{attrs:{src:null,label:null,default:null,kind:[`subtitles`,`captions`,`descriptions`,`chapters`,`metadata`],srclang:null}},ul:{children:[`li`,`script`,`template`,`ul`,`ol`]},var:H,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`auto`,`metadata`,`none`],autoplay:[`autoplay`],mediagroup:[`movie`],muted:[`muted`],controls:[`controls`]}},wbr:H},U={accesskey:null,class:null,contenteditable:V,contextmenu:null,dir:[`ltr`,`rtl`,`auto`],draggable:[`true`,`false`,`auto`],dropzone:[`copy`,`move`,`link`,`string:`,`file:`],hidden:[`hidden`],id:null,inert:[`inert`],itemid:null,itemprop:null,itemref:null,itemscope:[`itemscope`],itemtype:null,lang:[`ar`,`bn`,`de`,`en-GB`,`en-US`,`es`,`fr`,`hi`,`id`,`ja`,`pa`,`pt`,`ru`,`tr`,`zh`],spellcheck:V,autocorrect:V,autocapitalize:V,style:null,tabindex:null,title:null,translate:[`yes`,`no`],rel:[`stylesheet`,`alternate`,`author`,`bookmark`,`help`,`license`,`next`,`nofollow`,`noreferrer`,`prefetch`,`prev`,`search`,`tag`],role:`alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer`.split(` `),"aria-activedescendant":null,"aria-atomic":V,"aria-autocomplete":[`inline`,`list`,`both`,`none`],"aria-busy":V,"aria-checked":[`true`,`false`,`mixed`,`undefined`],"aria-controls":null,"aria-describedby":null,"aria-disabled":V,"aria-dropeffect":null,"aria-expanded":[`true`,`false`,`undefined`],"aria-flowto":null,"aria-grabbed":[`true`,`false`,`undefined`],"aria-haspopup":V,"aria-hidden":V,"aria-invalid":[`true`,`false`,`grammar`,`spelling`],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":[`off`,`polite`,`assertive`],"aria-multiline":V,"aria-multiselectable":V,"aria-owns":null,"aria-posinset":null,"aria-pressed":[`true`,`false`,`mixed`,`undefined`],"aria-readonly":V,"aria-relevant":null,"aria-required":V,"aria-selected":[`true`,`false`,`undefined`],"aria-setsize":null,"aria-sort":[`ascending`,`descending`,`none`,`other`],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},W=`beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload`.split(` `).map(e=>`on`+e);for(let e of W)U[e]=null;var G=class{constructor(e,t){this.tags={...Je,...e},this.globalAttrs={...U,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};G.default=new G;function K(e,t,n=e.length){if(!t)return``;let r=t.firstChild,i=r&&r.getChild(`TagName`);return i?e.sliceString(i.from,Math.min(i.to,n)):``}function q(e,t=!1){for(;e;e=e.parent)if(e.name==`Element`)if(t)t=!1;else return e;return null}function J(e,t,n){return n.tags[K(e,q(t))]?.children||n.allTags}function Y(e,t){let n=[];for(let r=q(t);r&&!r.type.isTop;r=q(r.parent)){let i=K(e,r);if(i&&r.lastChild.name==`CloseTag`)break;i&&n.indexOf(i)<0&&(t.name==`EndTag`||t.from>=r.firstChild.to)&&n.push(i)}return n}var X=/^[:\-\.\w\u00b7-\uffff]*$/;function Ye(e,t,n,r,i){let a=/\s*>/.test(e.sliceDoc(i,i+5))?``:`>`,o=q(n,n.name==`StartTag`||n.name==`TagName`);return{from:r,to:i,options:J(e.doc,o,t).map(e=>({label:e,type:`type`})).concat(Y(e.doc,n).map((e,t)=>({label:`/`+e,apply:`/`+e+a,type:`type`,boost:99-t}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Xe(e,t,n,r){let i=/\s*>/.test(e.sliceDoc(r,r+5))?``:`>`;return{from:n,to:r,options:Y(e.doc,t).map((e,t)=>({label:e,apply:e+i,type:`type`,boost:99-t})),validFor:X}}function Ze(e,t,n,r){let i=[],a=0;for(let r of J(e.doc,n,t))i.push({label:`<`+r,type:`type`});for(let t of Y(e.doc,n))i.push({label:``,type:`type`,boost:99-a++});return{from:r,to:r,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function Qe(e,t,n,r,i){let a=q(n),o=a?t.tags[K(e.doc,a)]:null,s=o&&o.attrs?Object.keys(o.attrs):[];return{from:r,to:i,options:(o&&o.globalAttrs===!1?s:s.length?s.concat(t.globalAttrNames):t.globalAttrNames).map(e=>({label:e,type:`property`})),validFor:X}}function $e(e,t,n,r,i){let a=n.parent?.getChild(`AttributeName`),o=[],s;if(a){let c=e.sliceDoc(a.from,a.to),l=t.globalAttrs[c];if(!l){let r=q(n),i=r?t.tags[K(e.doc,r)]:null;l=i?.attrs&&i.attrs[c]}if(l){let t=e.sliceDoc(r,i).toLowerCase(),n=`"`,a=`"`;/^['"]/.test(t)?(s=t[0]==`"`?/^[^"]*$/:/^[^']*$/,n=``,a=e.sliceDoc(i,i+1)==t[0]?``:t[0],t=t.slice(1),r++):s=/^[^\s<>='"]*$/;for(let e of l)o.push({label:e,apply:n+e+a,type:`constant`})}}return{from:r,to:i,options:o,validFor:s}}function Z(e,t){let{state:n,pos:r}=t,i=l(n).resolveInner(r,-1),a=i.resolve(r);for(let e=r,t;a==i&&(t=i.childBefore(e));){let n=t.lastChild;if(!n||!n.type.isError||n.fromZ(r,e)}var nt=p.parser.configure({top:`SingleExpression`}),rt=[{tag:`script`,attrs:e=>e.type==`text/typescript`||e.lang==`ts`,parser:oe.parser},{tag:`script`,attrs:e=>e.type==`text/babel`||e.type==`text/jsx`,parser:ie.parser},{tag:`script`,attrs:e=>e.type==`text/typescript-jsx`,parser:re.parser},{tag:`script`,attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:nt},{tag:`script`,attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:p.parser},{tag:`style`,attrs(e){return(!e.lang||e.lang==`css`)&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:f.parser}],it=[{name:`style`,parser:f.parser.configure({top:`Styles`})}].concat(W.map(e=>({name:e,parser:p.parser}))),at=c.define({name:`html`,parser:qe.configure({props:[o.add({Element(e){let t=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+t[0].length?e.continue():e.lineIndent(e.node.from)+(t[2]?0:e.unit)},"OpenTag CloseTag SelfClosingTag"(e){return e.column(e.node.from)+e.unit},Document(e){if(e.pos+/\s*/.exec(e.textAfter)[0].lengthe.getChild(`TagName`)})]}),languageData:{commentTokens:{block:{open:``}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),Q=at.configure({wrap:I(rt,it)});function ot(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(rt),(e.nestedAttributes||[]).concat(it))),new a(n?at.configure({wrap:n,dialect:t}):t?Q.configure({dialect:t}):Q,[Q.data.of({autocomplete:tt(e)}),e.autoCloseTags===!1?[]:st,ae().support,ne().support])}var $=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `)),st=n.inputHandler.of((e,n,r,i,a)=>{if(e.composing||e.state.readOnly||n!=r||i!=`>`&&i!=`/`||!Q.isActiveAt(e.state,n,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let n=s.doc.sliceString(e.from-1,e.to)==i,{head:r}=e,a=l(s).resolveInner(r,-1),o;if(n&&i==`>`&&a.name==`EndTag`){let t=a.parent;if(t.parent?.lastChild?.name!=`CloseTag`&&(o=K(s.doc,t.parent,r))&&!$.has(o))return{range:e,changes:{from:r,to:r+ +(s.doc.sliceString(r,r+1)===`>`),insert:``}}}else if(n&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==r-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,r))&&!$.has(o)){let e=r+ +(s.doc.sliceString(r,r+1)===`>`),n=`${o}>`;return{range:t.cursor(r+n.length,-1),changes:{from:r,to:e,insert:n}}}}return{range:e}});return c.changes.empty?!1:(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{ot as html,et as htmlCompletionSource}; \ No newline at end of file +import{A as e,I as t,M as n,b as r,f as i,i as a,m as o,o as s,t as c,v as l,x as u}from"./index-B377xynC.js";import{n as d,r as ee,t as te}from"./dist-CT28L0yn.js";import{n as f,t as ne}from"./dist-Dh1TSPID.js";import{a as re,i as ie,n as ae,o as oe,r as p}from"./dist-CmkCPezG.js";var se=55,ce=1,le=56,ue=2,de=57,fe=3,m=4,pe=5,h=6,g=7,me=8,he=9,ge=10,_e=11,ve=12,ye=13,_=58,be=14,xe=15,v=59,y=21,Se=23,b=24,Ce=25,x=27,S=28,we=29,Te=32,Ee=35,De=37,Oe=38,ke=0,Ae=1,je={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},Me={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},C={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function Ne(e){return e==45||e==46||e==58||e>=65&&e<=90||e==95||e>=97&&e<=122||e>=161}var w=null,T=null,E=0;function D(e,t){let n=e.pos+t;if(E==n&&T==e)return w;let r=e.peek(t),i=``;for(;Ne(r);)i+=String.fromCharCode(r),r=e.peek(++t);return T=e,E=n,w=i?i.toLowerCase():r==Pe||r==Fe?void 0:null}var O=60,k=62,A=47,Pe=63,Fe=33,Ie=45;function j(e,t){this.name=e,this.parent=t}var Le=[h,ge,g,me,he],Re=new te({start:null,shift(e,t,n,r){return Le.indexOf(t)>-1?new j(D(r,1)||``,e):e},reduce(e,t){return t==y&&e?e.parent:e},reuse(e,t,n,r){let i=t.type.id;return i==h||i==De?new j(D(r,1)||``,e):e},strict:!1}),ze=new d((e,t)=>{if(e.next!=O){e.next<0&&t.context&&e.acceptToken(_);return}e.advance();let n=e.next==A;n&&e.advance();let r=D(e,0);if(r===void 0)return;if(!r)return e.acceptToken(n?xe:be);let i=t.context?t.context.name:null;if(n){if(r==i)return e.acceptToken(_e);if(i&&Me[i])return e.acceptToken(_,-2);if(t.dialectEnabled(ke))return e.acceptToken(ve);for(let e=t.context;e;e=e.parent)if(e.name==r)return;e.acceptToken(ye)}else{if(r==`script`)return e.acceptToken(g);if(r==`style`)return e.acceptToken(me);if(r==`textarea`)return e.acceptToken(he);if(je.hasOwnProperty(r))return e.acceptToken(ge);i&&C[i]&&C[i][r]?e.acceptToken(_,-1):e.acceptToken(h)}},{contextual:!0}),Be=new d(e=>{for(let t=0,n=0;;n++){if(e.next<0){n&&e.acceptToken(v);break}if(e.next==Ie)t++;else if(e.next==k&&t>=2){n>=3&&e.acceptToken(v,-2);break}else t=0;e.advance()}});function Ve(e){for(;e;e=e.parent)if(e.name==`svg`||e.name==`math`)return!0;return!1}var He=new d((e,t)=>{if(e.next==A&&e.peek(1)==k){let n=t.dialectEnabled(Ae)||Ve(t.context);e.acceptToken(n?pe:m,2)}else e.next==k&&e.acceptToken(m,1)});function M(e,t,n){let r=2+e.length;return new d(i=>{for(let a=0,o=0,s=0;;s++){if(i.next<0){s&&i.acceptToken(t);break}if(a==0&&i.next==O||a==1&&i.next==A||a>=2&&ao?i.acceptToken(t,-o):i.acceptToken(n,-(o-2));break}else if((i.next==10||i.next==13)&&s){i.acceptToken(t,1);break}else a=o=0;i.advance()}})}var Ue=M(`script`,se,ce),We=M(`style`,le,ue),Ge=M(`textarea`,de,fe),Ke=r({"Text RawText IncompleteTag IncompleteCloseTag":u.content,"StartTag StartCloseTag SelfClosingEndTag EndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/TagName":[u.tagName,u.invalid],AttributeName:u.attributeName,"AttributeValue UnquotedAttributeValue":u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta}),qe=ee.deserialize({version:14,states:",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[",stateData:`,c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~`,goto:"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",nodeNames:`⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl`,maxTerm:68,context:Re,nodeProps:[[`closedBy`,-10,1,2,3,7,8,9,10,11,12,13,`EndTag`,6,`EndTag SelfClosingEndTag`,-4,22,31,34,37,`CloseTag`],[`openedBy`,4,`StartTag StartCloseTag`,5,`StartTag`,-4,30,33,36,38,`OpenTag`],[`group`,-10,14,15,18,19,20,21,40,41,42,43,`Entity`,17,`Entity TextContent`,-3,29,32,35,`TextContent Entity`],[`isolate`,-11,22,30,31,33,34,36,37,38,39,42,43,`ltr`,-3,27,28,40,``]],propSources:[Ke],skippedNodes:[0],repeatNodeCount:9,tokenData:"!]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VP<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!{let n=e.type.id;if(n==we)return F(e,t,r);if(n==Te)return F(e,t,i);if(n==Ee)return F(e,t,a);if(n==y&&o.length){let n=e.node,r=n.firstChild,i=r&&P(r,t),a;if(i){for(let e of o)if(e.tag==i&&(!e.attrs||e.attrs(a||=N(r,t)))){let t=n.lastChild,i=t.type.id==Oe?t.from:n.to;if(i>r.to)return{parser:e.parser,overlay:[{from:r.to,to:i}]}}}}if(s&&n==b){let n=e.node,r;if(r=n.firstChild){let e=s[t.read(r.from,r.to)];if(e)for(let r of e){if(r.tagName&&r.tagName!=P(n.parent,t))continue;let e=n.lastChild;if(e.type.id==x){let t=e.from+1,n=e.lastChild,i=e.to-(n&&n.isError?0:1);if(i>t)return{parser:r.parser,overlay:[{from:t,to:i}],bracketed:!0}}else if(e.type.id==S)return{parser:r.parser,overlay:[{from:e.from,to:e.to}]}}}}return null})}var L=[`_blank`,`_self`,`_top`,`_parent`],R=[`ascii`,`utf-8`,`utf-16`,`latin1`,`latin1`],z=[`get`,`post`,`put`,`delete`],B=[`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`],V=[`true`,`false`],H={},Je={a:{attrs:{href:null,ping:null,type:null,media:null,target:L,hreflang:null}},abbr:H,address:H,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[`default`,`rect`,`circle`,`poly`]}},article:H,aside:H,audio:{attrs:{src:null,mediagroup:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`none`,`metadata`,`auto`],autoplay:[`autoplay`],loop:[`loop`],controls:[`controls`]}},b:H,base:{attrs:{href:null,target:L}},bdi:H,bdo:H,blockquote:{attrs:{cite:null}},body:H,br:H,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[`autofocus`],disabled:[`autofocus`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,type:[`submit`,`reset`,`button`]}},canvas:{attrs:{width:null,height:null}},caption:H,center:H,cite:H,code:H,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[`command`,`checkbox`,`radio`],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[`disabled`],checked:[`checked`]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[`disabled`],multiple:[`multiple`]}},datalist:{attrs:{data:null}},dd:H,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[`open`]}},dfn:H,div:H,dl:H,dt:H,em:H,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[`disabled`],form:null,name:null}},figcaption:H,figure:H,footer:H,form:{attrs:{action:null,name:null,"accept-charset":R,autocomplete:[`on`,`off`],enctype:B,method:z,novalidate:[`novalidate`],target:L}},h1:H,h2:H,h3:H,h4:H,h5:H,h6:H,head:{children:[`title`,`base`,`link`,`style`,`meta`,`script`,`noscript`,`command`]},header:H,hgroup:H,hr:H,html:{attrs:{manifest:null}},i:H,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[`allow-top-navigation`,`allow-same-origin`,`allow-forms`,`allow-scripts`],seamless:[`seamless`]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[`audio/*`,`video/*`,`image/*`],autocomplete:[`on`,`off`],autofocus:[`autofocus`],checked:[`checked`],disabled:[`disabled`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,multiple:[`multiple`],readonly:[`readonly`],required:[`required`],type:[`hidden`,`text`,`search`,`tel`,`url`,`email`,`password`,`datetime`,`date`,`month`,`week`,`time`,`datetime-local`,`number`,`range`,`color`,`checkbox`,`radio`,`file`,`submit`,`image`,`reset`,`button`]}},ins:{attrs:{cite:null,datetime:null}},kbd:H,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[`autofocus`],disabled:[`disabled`],keytype:[`RSA`]}},label:{attrs:{for:null,form:null}},legend:H,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[`all`,`16x16`,`16x16 32x32`,`16x16 32x32 64x64`]}},map:{attrs:{name:null}},mark:H,menu:{attrs:{label:null,type:[`list`,`context`,`toolbar`]}},meta:{attrs:{content:null,charset:R,name:[`viewport`,`application-name`,`author`,`description`,`generator`,`keywords`],"http-equiv":[`content-language`,`content-type`,`default-style`,`refresh`]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:H,noscript:H,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[`typemustmatch`]}},ol:{attrs:{reversed:[`reversed`],start:null,type:[`1`,`a`,`A`,`i`,`I`]},children:[`li`,`script`,`template`,`ul`,`ol`]},optgroup:{attrs:{disabled:[`disabled`],label:null}},option:{attrs:{disabled:[`disabled`],label:null,selected:[`selected`],value:null}},output:{attrs:{for:null,form:null,name:null}},p:H,param:{attrs:{name:null,value:null}},pre:H,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:H,rt:H,ruby:H,samp:H,script:{attrs:{type:[`text/javascript`],src:null,async:[`async`],defer:[`defer`],charset:R}},section:H,select:{attrs:{form:null,name:null,size:null,autofocus:[`autofocus`],disabled:[`disabled`],multiple:[`multiple`]}},slot:{attrs:{name:null}},small:H,source:{attrs:{src:null,type:null,media:null}},span:H,strong:H,style:{attrs:{type:[`text/css`],media:null,scoped:null}},sub:H,summary:H,sup:H,table:H,tbody:H,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:H,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[`autofocus`],disabled:[`disabled`],readonly:[`readonly`],required:[`required`],wrap:[`soft`,`hard`]}},tfoot:H,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[`row`,`col`,`rowgroup`,`colgroup`]}},thead:H,time:{attrs:{datetime:null}},title:H,tr:H,track:{attrs:{src:null,label:null,default:null,kind:[`subtitles`,`captions`,`descriptions`,`chapters`,`metadata`],srclang:null}},ul:{children:[`li`,`script`,`template`,`ul`,`ol`]},var:H,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`auto`,`metadata`,`none`],autoplay:[`autoplay`],mediagroup:[`movie`],muted:[`muted`],controls:[`controls`]}},wbr:H},U={accesskey:null,class:null,contenteditable:V,contextmenu:null,dir:[`ltr`,`rtl`,`auto`],draggable:[`true`,`false`,`auto`],dropzone:[`copy`,`move`,`link`,`string:`,`file:`],hidden:[`hidden`],id:null,inert:[`inert`],itemid:null,itemprop:null,itemref:null,itemscope:[`itemscope`],itemtype:null,lang:[`ar`,`bn`,`de`,`en-GB`,`en-US`,`es`,`fr`,`hi`,`id`,`ja`,`pa`,`pt`,`ru`,`tr`,`zh`],spellcheck:V,autocorrect:V,autocapitalize:V,style:null,tabindex:null,title:null,translate:[`yes`,`no`],rel:[`stylesheet`,`alternate`,`author`,`bookmark`,`help`,`license`,`next`,`nofollow`,`noreferrer`,`prefetch`,`prev`,`search`,`tag`],role:`alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer`.split(` `),"aria-activedescendant":null,"aria-atomic":V,"aria-autocomplete":[`inline`,`list`,`both`,`none`],"aria-busy":V,"aria-checked":[`true`,`false`,`mixed`,`undefined`],"aria-controls":null,"aria-describedby":null,"aria-disabled":V,"aria-dropeffect":null,"aria-expanded":[`true`,`false`,`undefined`],"aria-flowto":null,"aria-grabbed":[`true`,`false`,`undefined`],"aria-haspopup":V,"aria-hidden":V,"aria-invalid":[`true`,`false`,`grammar`,`spelling`],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":[`off`,`polite`,`assertive`],"aria-multiline":V,"aria-multiselectable":V,"aria-owns":null,"aria-posinset":null,"aria-pressed":[`true`,`false`,`mixed`,`undefined`],"aria-readonly":V,"aria-relevant":null,"aria-required":V,"aria-selected":[`true`,`false`,`undefined`],"aria-setsize":null,"aria-sort":[`ascending`,`descending`,`none`,`other`],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},W=`beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload`.split(` `).map(e=>`on`+e);for(let e of W)U[e]=null;var G=class{constructor(e,t){this.tags={...Je,...e},this.globalAttrs={...U,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};G.default=new G;function K(e,t,n=e.length){if(!t)return``;let r=t.firstChild,i=r&&r.getChild(`TagName`);return i?e.sliceString(i.from,Math.min(i.to,n)):``}function q(e,t=!1){for(;e;e=e.parent)if(e.name==`Element`)if(t)t=!1;else return e;return null}function J(e,t,n){return n.tags[K(e,q(t))]?.children||n.allTags}function Y(e,t){let n=[];for(let r=q(t);r&&!r.type.isTop;r=q(r.parent)){let i=K(e,r);if(i&&r.lastChild.name==`CloseTag`)break;i&&n.indexOf(i)<0&&(t.name==`EndTag`||t.from>=r.firstChild.to)&&n.push(i)}return n}var X=/^[:\-\.\w\u00b7-\uffff]*$/;function Ye(e,t,n,r,i){let a=/\s*>/.test(e.sliceDoc(i,i+5))?``:`>`,o=q(n,n.name==`StartTag`||n.name==`TagName`);return{from:r,to:i,options:J(e.doc,o,t).map(e=>({label:e,type:`type`})).concat(Y(e.doc,n).map((e,t)=>({label:`/`+e,apply:`/`+e+a,type:`type`,boost:99-t}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Xe(e,t,n,r){let i=/\s*>/.test(e.sliceDoc(r,r+5))?``:`>`;return{from:n,to:r,options:Y(e.doc,t).map((e,t)=>({label:e,apply:e+i,type:`type`,boost:99-t})),validFor:X}}function Ze(e,t,n,r){let i=[],a=0;for(let r of J(e.doc,n,t))i.push({label:`<`+r,type:`type`});for(let t of Y(e.doc,n))i.push({label:``,type:`type`,boost:99-a++});return{from:r,to:r,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function Qe(e,t,n,r,i){let a=q(n),o=a?t.tags[K(e.doc,a)]:null,s=o&&o.attrs?Object.keys(o.attrs):[];return{from:r,to:i,options:(o&&o.globalAttrs===!1?s:s.length?s.concat(t.globalAttrNames):t.globalAttrNames).map(e=>({label:e,type:`property`})),validFor:X}}function $e(e,t,n,r,i){let a=n.parent?.getChild(`AttributeName`),o=[],s;if(a){let c=e.sliceDoc(a.from,a.to),l=t.globalAttrs[c];if(!l){let r=q(n),i=r?t.tags[K(e.doc,r)]:null;l=i?.attrs&&i.attrs[c]}if(l){let t=e.sliceDoc(r,i).toLowerCase(),n=`"`,a=`"`;/^['"]/.test(t)?(s=t[0]==`"`?/^[^"]*$/:/^[^']*$/,n=``,a=e.sliceDoc(i,i+1)==t[0]?``:t[0],t=t.slice(1),r++):s=/^[^\s<>='"]*$/;for(let e of l)o.push({label:e,apply:n+e+a,type:`constant`})}}return{from:r,to:i,options:o,validFor:s}}function Z(e,t){let{state:n,pos:r}=t,i=l(n).resolveInner(r,-1),a=i.resolve(r);for(let e=r,t;a==i&&(t=i.childBefore(e));){let n=t.lastChild;if(!n||!n.type.isError||n.fromZ(r,e)}var nt=p.parser.configure({top:`SingleExpression`}),rt=[{tag:`script`,attrs:e=>e.type==`text/typescript`||e.lang==`ts`,parser:oe.parser},{tag:`script`,attrs:e=>e.type==`text/babel`||e.type==`text/jsx`,parser:ie.parser},{tag:`script`,attrs:e=>e.type==`text/typescript-jsx`,parser:re.parser},{tag:`script`,attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:nt},{tag:`script`,attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:p.parser},{tag:`style`,attrs(e){return(!e.lang||e.lang==`css`)&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:f.parser}],it=[{name:`style`,parser:f.parser.configure({top:`Styles`})}].concat(W.map(e=>({name:e,parser:p.parser}))),at=c.define({name:`html`,parser:qe.configure({props:[o.add({Element(e){let t=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+t[0].length?e.continue():e.lineIndent(e.node.from)+(t[2]?0:e.unit)},"OpenTag CloseTag SelfClosingTag"(e){return e.column(e.node.from)+e.unit},Document(e){if(e.pos+/\s*/.exec(e.textAfter)[0].lengthe.getChild(`TagName`)})]}),languageData:{commentTokens:{block:{open:``}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),Q=at.configure({wrap:I(rt,it)});function ot(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(rt),(e.nestedAttributes||[]).concat(it))),new a(n?at.configure({wrap:n,dialect:t}):t?Q.configure({dialect:t}):Q,[Q.data.of({autocomplete:tt(e)}),e.autoCloseTags===!1?[]:st,ae().support,ne().support])}var $=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `)),st=n.inputHandler.of((e,n,r,i,a)=>{if(e.composing||e.state.readOnly||n!=r||i!=`>`&&i!=`/`||!Q.isActiveAt(e.state,n,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let n=s.doc.sliceString(e.from-1,e.to)==i,{head:r}=e,a=l(s).resolveInner(r,-1),o;if(n&&i==`>`&&a.name==`EndTag`){let t=a.parent;if(t.parent?.lastChild?.name!=`CloseTag`&&(o=K(s.doc,t.parent,r))&&!$.has(o))return{range:e,changes:{from:r,to:r+ +(s.doc.sliceString(r,r+1)===`>`),insert:``}}}else if(n&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==r-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,r))&&!$.has(o)){let e=r+ +(s.doc.sliceString(r,r+1)===`>`),n=`${o}>`;return{range:t.cursor(r+n.length,-1),changes:{from:r,to:e,insert:n}}}}return{range:e}});return c.changes.empty?!1:(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{ot as html,et as htmlCompletionSource}; \ No newline at end of file diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-DvbxHIw3.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-DKcsGq7b.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-DvbxHIw3.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-DKcsGq7b.js index e73bbc70..7fe5a131 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-DvbxHIw3.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-DKcsGq7b.js @@ -1,4 +1,4 @@ -import{A as e,B as t,E as n,I as r,K as i,L as a,M as o,O as s,P as c,T as l,a as u,b as d,c as f,f as p,g as m,h,i as g,k as _,m as ee,n as te,p as ne,r as re,v,w as y,x as b,y as ie}from"./index-CLJ0aycO.js";import{t as ae}from"./dist-BxWz473c.js";import{html as oe,htmlCompletionSource as se}from"./dist-jYLMKGSZ.js";var ce=class e{static create(t,n,r,i,a){return new e(t,n,r,i+(i<<8)+t+(n<<4)|0,a,[],[])}constructor(e,t,n,r,i,a,o){this.type=e,this.value=t,this.from=n,this.hash=r,this.end=i,this.children=a,this.positions=o,this.hashProp=[[y.contextHash,r]]}addChild(e,t){e.prop(y.contextHash)!=this.hash&&(e=new _(e.type,e.children,e.positions,e.length,this.hashProp)),this.children.push(e),this.positions.push(t)}toTree(e,t=this.end){let r=this.children.length-1;return r>=0&&(t=Math.max(t,this.positions[r]+this.children[r].length+this.from)),new _(e.types[this.type],this.children,this.positions,t-this.from).balance({makeTree:(e,t,r)=>new _(n.none,e,t,r,this.hashProp)})}},x;(function(e){e[e.Document=1]=`Document`,e[e.CodeBlock=2]=`CodeBlock`,e[e.FencedCode=3]=`FencedCode`,e[e.Blockquote=4]=`Blockquote`,e[e.HorizontalRule=5]=`HorizontalRule`,e[e.BulletList=6]=`BulletList`,e[e.OrderedList=7]=`OrderedList`,e[e.ListItem=8]=`ListItem`,e[e.ATXHeading1=9]=`ATXHeading1`,e[e.ATXHeading2=10]=`ATXHeading2`,e[e.ATXHeading3=11]=`ATXHeading3`,e[e.ATXHeading4=12]=`ATXHeading4`,e[e.ATXHeading5=13]=`ATXHeading5`,e[e.ATXHeading6=14]=`ATXHeading6`,e[e.SetextHeading1=15]=`SetextHeading1`,e[e.SetextHeading2=16]=`SetextHeading2`,e[e.HTMLBlock=17]=`HTMLBlock`,e[e.LinkReference=18]=`LinkReference`,e[e.Paragraph=19]=`Paragraph`,e[e.CommentBlock=20]=`CommentBlock`,e[e.ProcessingInstructionBlock=21]=`ProcessingInstructionBlock`,e[e.Escape=22]=`Escape`,e[e.Entity=23]=`Entity`,e[e.HardBreak=24]=`HardBreak`,e[e.Emphasis=25]=`Emphasis`,e[e.StrongEmphasis=26]=`StrongEmphasis`,e[e.Link=27]=`Link`,e[e.Image=28]=`Image`,e[e.InlineCode=29]=`InlineCode`,e[e.HTMLTag=30]=`HTMLTag`,e[e.Comment=31]=`Comment`,e[e.ProcessingInstruction=32]=`ProcessingInstruction`,e[e.Autolink=33]=`Autolink`,e[e.HeaderMark=34]=`HeaderMark`,e[e.QuoteMark=35]=`QuoteMark`,e[e.ListMark=36]=`ListMark`,e[e.LinkMark=37]=`LinkMark`,e[e.EmphasisMark=38]=`EmphasisMark`,e[e.CodeMark=39]=`CodeMark`,e[e.CodeText=40]=`CodeText`,e[e.CodeInfo=41]=`CodeInfo`,e[e.LinkTitle=42]=`LinkTitle`,e[e.LinkLabel=43]=`LinkLabel`,e[e.URL=44]=`URL`})(x||={});var le=class{constructor(e,t){this.start=e,this.content=t,this.marks=[],this.parsers=[]}},ue=class{constructor(){this.text=``,this.baseIndent=0,this.basePos=0,this.depth=0,this.markers=[],this.pos=0,this.indent=0,this.next=-1}forward(){this.basePos>this.pos&&this.forwardInner()}forwardInner(){let e=this.skipSpace(this.basePos);this.indent=this.countIndent(e,this.pos,this.indent),this.pos=e,this.next=e==this.text.length?-1:this.text.charCodeAt(e)}skipSpace(e){return C(this.text,e)}reset(e){for(this.text=e,this.baseIndent=this.basePos=this.pos=this.indent=0,this.forwardInner(),this.depth=1;this.markers.length;)this.markers.pop()}moveBase(e){this.basePos=e,this.baseIndent=this.countIndent(e,this.pos,this.indent)}moveBaseColumn(e){this.baseIndent=e,this.basePos=this.findColumn(e)}addMarker(e){this.markers.push(e)}countIndent(e,t=0,n=0){for(let r=t;r=t.stack[n.depth+1].value+n.baseIndent)return!0;if(n.indent>=n.baseIndent+4)return!1;let r=(e.type==x.OrderedList?E:T)(n,t,!1);return r>0&&(e.type!=x.BulletList||w(n,t,!1)<0)&&n.text.charCodeAt(n.pos+r-1)==e.value}var fe={[x.Blockquote](e,t,n){return n.next==62?(n.markers.push(L(x.QuoteMark,t.lineStart+n.pos,t.lineStart+n.pos+1)),n.moveBase(n.pos+(S(n.text.charCodeAt(n.pos+1))?2:1)),e.end=t.lineStart+n.text.length,!0):!1},[x.ListItem](e,t,n){return n.indent-1?!1:(n.moveBaseColumn(n.baseIndent+e.value),!0)},[x.OrderedList]:de,[x.BulletList]:de,[x.Document](){return!0}};function S(e){return e==32||e==9||e==10||e==13}function C(e,t=0){for(;tn&&S(e.charCodeAt(t-1));)t--;return t}function me(e){if(e.next!=96&&e.next!=126)return-1;let t=e.pos+1;for(;t-1&&e.depth==t.stack.length&&t.parser.leafBlockParsers.indexOf(Te.SetextHeading)>-1||r<3?-1:1}function ge(e,t){for(let n=e.stack.length-1;n>=0;n--)if(e.stack[n].type==t)return!0;return!1}function T(e,t,n){return(e.next==45||e.next==43||e.next==42)&&(e.pos==e.text.length-1||S(e.text.charCodeAt(e.pos+1)))&&(!n||ge(t,x.BulletList)||e.skipSpace(e.pos+2)=48&&i<=57;){if(r++,r==e.text.length)return-1;i=e.text.charCodeAt(r)}return r==e.pos||r>e.pos+9||i!=46&&i!=41||re.pos+1||e.next!=49)?-1:r+1-e.pos}function _e(e){if(e.next!=35)return-1;let t=e.pos+1;for(;t6?-1:n}function ve(e){if(e.next!=45&&e.next!=61||e.indent>=e.baseIndent+4)return-1;let t=e.pos+1;for(;t/,be=/\?>/,O=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*/,be=/\?>/,O=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*`}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),Q=at.configure({wrap:I(rt,it)});function ot(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(rt),(e.nestedAttributes||[]).concat(it))),new a(n?at.configure({wrap:n,dialect:t}):t?Q.configure({dialect:t}):Q,[Q.data.of({autocomplete:tt(e)}),e.autoCloseTags===!1?[]:st,ae().support,ne().support])}var $=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `)),st=n.inputHandler.of((e,n,r,i,a)=>{if(e.composing||e.state.readOnly||n!=r||i!=`>`&&i!=`/`||!Q.isActiveAt(e.state,n,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let n=s.doc.sliceString(e.from-1,e.to)==i,{head:r}=e,a=l(s).resolveInner(r,-1),o;if(n&&i==`>`&&a.name==`EndTag`){let t=a.parent;if(t.parent?.lastChild?.name!=`CloseTag`&&(o=K(s.doc,t.parent,r))&&!$.has(o))return{range:e,changes:{from:r,to:r+ +(s.doc.sliceString(r,r+1)===`>`),insert:``}}}else if(n&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==r-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,r))&&!$.has(o)){let e=r+ +(s.doc.sliceString(r,r+1)===`>`),n=`${o}>`;return{range:t.cursor(r+n.length,-1),changes:{from:r,to:e,insert:n}}}}return{range:e}});return c.changes.empty?!1:(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{ot as html,et as htmlCompletionSource}; \ No newline at end of file +import{A as e,I as t,M as n,b as r,f as i,i as a,m as o,o as s,t as c,v as l,x as u}from"./index-DSHMid84.js";import{n as d,r as ee,t as te}from"./dist-7HJpzQIj.js";import{n as f,t as ne}from"./dist-IL2Xm5LR.js";import{a as re,i as ie,n as ae,o as oe,r as p}from"./dist-DEAqHkpk.js";var se=55,ce=1,le=56,ue=2,de=57,fe=3,m=4,pe=5,h=6,g=7,me=8,he=9,ge=10,_e=11,ve=12,ye=13,_=58,be=14,xe=15,v=59,y=21,Se=23,b=24,Ce=25,x=27,S=28,we=29,Te=32,Ee=35,De=37,Oe=38,ke=0,Ae=1,je={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},Me={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},C={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function Ne(e){return e==45||e==46||e==58||e>=65&&e<=90||e==95||e>=97&&e<=122||e>=161}var w=null,T=null,E=0;function D(e,t){let n=e.pos+t;if(E==n&&T==e)return w;let r=e.peek(t),i=``;for(;Ne(r);)i+=String.fromCharCode(r),r=e.peek(++t);return T=e,E=n,w=i?i.toLowerCase():r==Pe||r==Fe?void 0:null}var O=60,k=62,A=47,Pe=63,Fe=33,Ie=45;function j(e,t){this.name=e,this.parent=t}var Le=[h,ge,g,me,he],Re=new te({start:null,shift(e,t,n,r){return Le.indexOf(t)>-1?new j(D(r,1)||``,e):e},reduce(e,t){return t==y&&e?e.parent:e},reuse(e,t,n,r){let i=t.type.id;return i==h||i==De?new j(D(r,1)||``,e):e},strict:!1}),ze=new d((e,t)=>{if(e.next!=O){e.next<0&&t.context&&e.acceptToken(_);return}e.advance();let n=e.next==A;n&&e.advance();let r=D(e,0);if(r===void 0)return;if(!r)return e.acceptToken(n?xe:be);let i=t.context?t.context.name:null;if(n){if(r==i)return e.acceptToken(_e);if(i&&Me[i])return e.acceptToken(_,-2);if(t.dialectEnabled(ke))return e.acceptToken(ve);for(let e=t.context;e;e=e.parent)if(e.name==r)return;e.acceptToken(ye)}else{if(r==`script`)return e.acceptToken(g);if(r==`style`)return e.acceptToken(me);if(r==`textarea`)return e.acceptToken(he);if(je.hasOwnProperty(r))return e.acceptToken(ge);i&&C[i]&&C[i][r]?e.acceptToken(_,-1):e.acceptToken(h)}},{contextual:!0}),Be=new d(e=>{for(let t=0,n=0;;n++){if(e.next<0){n&&e.acceptToken(v);break}if(e.next==Ie)t++;else if(e.next==k&&t>=2){n>=3&&e.acceptToken(v,-2);break}else t=0;e.advance()}});function Ve(e){for(;e;e=e.parent)if(e.name==`svg`||e.name==`math`)return!0;return!1}var He=new d((e,t)=>{if(e.next==A&&e.peek(1)==k){let n=t.dialectEnabled(Ae)||Ve(t.context);e.acceptToken(n?pe:m,2)}else e.next==k&&e.acceptToken(m,1)});function M(e,t,n){let r=2+e.length;return new d(i=>{for(let a=0,o=0,s=0;;s++){if(i.next<0){s&&i.acceptToken(t);break}if(a==0&&i.next==O||a==1&&i.next==A||a>=2&&ao?i.acceptToken(t,-o):i.acceptToken(n,-(o-2));break}else if((i.next==10||i.next==13)&&s){i.acceptToken(t,1);break}else a=o=0;i.advance()}})}var Ue=M(`script`,se,ce),We=M(`style`,le,ue),Ge=M(`textarea`,de,fe),Ke=r({"Text RawText IncompleteTag IncompleteCloseTag":u.content,"StartTag StartCloseTag SelfClosingEndTag EndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/TagName":[u.tagName,u.invalid],AttributeName:u.attributeName,"AttributeValue UnquotedAttributeValue":u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta}),qe=ee.deserialize({version:14,states:",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[",stateData:`,c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~`,goto:"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",nodeNames:`⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl`,maxTerm:68,context:Re,nodeProps:[[`closedBy`,-10,1,2,3,7,8,9,10,11,12,13,`EndTag`,6,`EndTag SelfClosingEndTag`,-4,22,31,34,37,`CloseTag`],[`openedBy`,4,`StartTag StartCloseTag`,5,`StartTag`,-4,30,33,36,38,`OpenTag`],[`group`,-10,14,15,18,19,20,21,40,41,42,43,`Entity`,17,`Entity TextContent`,-3,29,32,35,`TextContent Entity`],[`isolate`,-11,22,30,31,33,34,36,37,38,39,42,43,`ltr`,-3,27,28,40,``]],propSources:[Ke],skippedNodes:[0],repeatNodeCount:9,tokenData:"!]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VP<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!{let n=e.type.id;if(n==we)return F(e,t,r);if(n==Te)return F(e,t,i);if(n==Ee)return F(e,t,a);if(n==y&&o.length){let n=e.node,r=n.firstChild,i=r&&P(r,t),a;if(i){for(let e of o)if(e.tag==i&&(!e.attrs||e.attrs(a||=N(r,t)))){let t=n.lastChild,i=t.type.id==Oe?t.from:n.to;if(i>r.to)return{parser:e.parser,overlay:[{from:r.to,to:i}]}}}}if(s&&n==b){let n=e.node,r;if(r=n.firstChild){let e=s[t.read(r.from,r.to)];if(e)for(let r of e){if(r.tagName&&r.tagName!=P(n.parent,t))continue;let e=n.lastChild;if(e.type.id==x){let t=e.from+1,n=e.lastChild,i=e.to-(n&&n.isError?0:1);if(i>t)return{parser:r.parser,overlay:[{from:t,to:i}],bracketed:!0}}else if(e.type.id==S)return{parser:r.parser,overlay:[{from:e.from,to:e.to}]}}}}return null})}var L=[`_blank`,`_self`,`_top`,`_parent`],R=[`ascii`,`utf-8`,`utf-16`,`latin1`,`latin1`],z=[`get`,`post`,`put`,`delete`],B=[`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`],V=[`true`,`false`],H={},Je={a:{attrs:{href:null,ping:null,type:null,media:null,target:L,hreflang:null}},abbr:H,address:H,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[`default`,`rect`,`circle`,`poly`]}},article:H,aside:H,audio:{attrs:{src:null,mediagroup:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`none`,`metadata`,`auto`],autoplay:[`autoplay`],loop:[`loop`],controls:[`controls`]}},b:H,base:{attrs:{href:null,target:L}},bdi:H,bdo:H,blockquote:{attrs:{cite:null}},body:H,br:H,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[`autofocus`],disabled:[`autofocus`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,type:[`submit`,`reset`,`button`]}},canvas:{attrs:{width:null,height:null}},caption:H,center:H,cite:H,code:H,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[`command`,`checkbox`,`radio`],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[`disabled`],checked:[`checked`]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[`disabled`],multiple:[`multiple`]}},datalist:{attrs:{data:null}},dd:H,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[`open`]}},dfn:H,div:H,dl:H,dt:H,em:H,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[`disabled`],form:null,name:null}},figcaption:H,figure:H,footer:H,form:{attrs:{action:null,name:null,"accept-charset":R,autocomplete:[`on`,`off`],enctype:B,method:z,novalidate:[`novalidate`],target:L}},h1:H,h2:H,h3:H,h4:H,h5:H,h6:H,head:{children:[`title`,`base`,`link`,`style`,`meta`,`script`,`noscript`,`command`]},header:H,hgroup:H,hr:H,html:{attrs:{manifest:null}},i:H,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[`allow-top-navigation`,`allow-same-origin`,`allow-forms`,`allow-scripts`],seamless:[`seamless`]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[`audio/*`,`video/*`,`image/*`],autocomplete:[`on`,`off`],autofocus:[`autofocus`],checked:[`checked`],disabled:[`disabled`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,multiple:[`multiple`],readonly:[`readonly`],required:[`required`],type:[`hidden`,`text`,`search`,`tel`,`url`,`email`,`password`,`datetime`,`date`,`month`,`week`,`time`,`datetime-local`,`number`,`range`,`color`,`checkbox`,`radio`,`file`,`submit`,`image`,`reset`,`button`]}},ins:{attrs:{cite:null,datetime:null}},kbd:H,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[`autofocus`],disabled:[`disabled`],keytype:[`RSA`]}},label:{attrs:{for:null,form:null}},legend:H,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[`all`,`16x16`,`16x16 32x32`,`16x16 32x32 64x64`]}},map:{attrs:{name:null}},mark:H,menu:{attrs:{label:null,type:[`list`,`context`,`toolbar`]}},meta:{attrs:{content:null,charset:R,name:[`viewport`,`application-name`,`author`,`description`,`generator`,`keywords`],"http-equiv":[`content-language`,`content-type`,`default-style`,`refresh`]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:H,noscript:H,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[`typemustmatch`]}},ol:{attrs:{reversed:[`reversed`],start:null,type:[`1`,`a`,`A`,`i`,`I`]},children:[`li`,`script`,`template`,`ul`,`ol`]},optgroup:{attrs:{disabled:[`disabled`],label:null}},option:{attrs:{disabled:[`disabled`],label:null,selected:[`selected`],value:null}},output:{attrs:{for:null,form:null,name:null}},p:H,param:{attrs:{name:null,value:null}},pre:H,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:H,rt:H,ruby:H,samp:H,script:{attrs:{type:[`text/javascript`],src:null,async:[`async`],defer:[`defer`],charset:R}},section:H,select:{attrs:{form:null,name:null,size:null,autofocus:[`autofocus`],disabled:[`disabled`],multiple:[`multiple`]}},slot:{attrs:{name:null}},small:H,source:{attrs:{src:null,type:null,media:null}},span:H,strong:H,style:{attrs:{type:[`text/css`],media:null,scoped:null}},sub:H,summary:H,sup:H,table:H,tbody:H,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:H,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[`autofocus`],disabled:[`disabled`],readonly:[`readonly`],required:[`required`],wrap:[`soft`,`hard`]}},tfoot:H,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[`row`,`col`,`rowgroup`,`colgroup`]}},thead:H,time:{attrs:{datetime:null}},title:H,tr:H,track:{attrs:{src:null,label:null,default:null,kind:[`subtitles`,`captions`,`descriptions`,`chapters`,`metadata`],srclang:null}},ul:{children:[`li`,`script`,`template`,`ul`,`ol`]},var:H,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`auto`,`metadata`,`none`],autoplay:[`autoplay`],mediagroup:[`movie`],muted:[`muted`],controls:[`controls`]}},wbr:H},U={accesskey:null,class:null,contenteditable:V,contextmenu:null,dir:[`ltr`,`rtl`,`auto`],draggable:[`true`,`false`,`auto`],dropzone:[`copy`,`move`,`link`,`string:`,`file:`],hidden:[`hidden`],id:null,inert:[`inert`],itemid:null,itemprop:null,itemref:null,itemscope:[`itemscope`],itemtype:null,lang:[`ar`,`bn`,`de`,`en-GB`,`en-US`,`es`,`fr`,`hi`,`id`,`ja`,`pa`,`pt`,`ru`,`tr`,`zh`],spellcheck:V,autocorrect:V,autocapitalize:V,style:null,tabindex:null,title:null,translate:[`yes`,`no`],rel:[`stylesheet`,`alternate`,`author`,`bookmark`,`help`,`license`,`next`,`nofollow`,`noreferrer`,`prefetch`,`prev`,`search`,`tag`],role:`alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer`.split(` `),"aria-activedescendant":null,"aria-atomic":V,"aria-autocomplete":[`inline`,`list`,`both`,`none`],"aria-busy":V,"aria-checked":[`true`,`false`,`mixed`,`undefined`],"aria-controls":null,"aria-describedby":null,"aria-disabled":V,"aria-dropeffect":null,"aria-expanded":[`true`,`false`,`undefined`],"aria-flowto":null,"aria-grabbed":[`true`,`false`,`undefined`],"aria-haspopup":V,"aria-hidden":V,"aria-invalid":[`true`,`false`,`grammar`,`spelling`],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":[`off`,`polite`,`assertive`],"aria-multiline":V,"aria-multiselectable":V,"aria-owns":null,"aria-posinset":null,"aria-pressed":[`true`,`false`,`mixed`,`undefined`],"aria-readonly":V,"aria-relevant":null,"aria-required":V,"aria-selected":[`true`,`false`,`undefined`],"aria-setsize":null,"aria-sort":[`ascending`,`descending`,`none`,`other`],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},W=`beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload`.split(` `).map(e=>`on`+e);for(let e of W)U[e]=null;var G=class{constructor(e,t){this.tags={...Je,...e},this.globalAttrs={...U,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};G.default=new G;function K(e,t,n=e.length){if(!t)return``;let r=t.firstChild,i=r&&r.getChild(`TagName`);return i?e.sliceString(i.from,Math.min(i.to,n)):``}function q(e,t=!1){for(;e;e=e.parent)if(e.name==`Element`)if(t)t=!1;else return e;return null}function J(e,t,n){return n.tags[K(e,q(t))]?.children||n.allTags}function Y(e,t){let n=[];for(let r=q(t);r&&!r.type.isTop;r=q(r.parent)){let i=K(e,r);if(i&&r.lastChild.name==`CloseTag`)break;i&&n.indexOf(i)<0&&(t.name==`EndTag`||t.from>=r.firstChild.to)&&n.push(i)}return n}var X=/^[:\-\.\w\u00b7-\uffff]*$/;function Ye(e,t,n,r,i){let a=/\s*>/.test(e.sliceDoc(i,i+5))?``:`>`,o=q(n,n.name==`StartTag`||n.name==`TagName`);return{from:r,to:i,options:J(e.doc,o,t).map(e=>({label:e,type:`type`})).concat(Y(e.doc,n).map((e,t)=>({label:`/`+e,apply:`/`+e+a,type:`type`,boost:99-t}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Xe(e,t,n,r){let i=/\s*>/.test(e.sliceDoc(r,r+5))?``:`>`;return{from:n,to:r,options:Y(e.doc,t).map((e,t)=>({label:e,apply:e+i,type:`type`,boost:99-t})),validFor:X}}function Ze(e,t,n,r){let i=[],a=0;for(let r of J(e.doc,n,t))i.push({label:`<`+r,type:`type`});for(let t of Y(e.doc,n))i.push({label:``,type:`type`,boost:99-a++});return{from:r,to:r,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function Qe(e,t,n,r,i){let a=q(n),o=a?t.tags[K(e.doc,a)]:null,s=o&&o.attrs?Object.keys(o.attrs):[];return{from:r,to:i,options:(o&&o.globalAttrs===!1?s:s.length?s.concat(t.globalAttrNames):t.globalAttrNames).map(e=>({label:e,type:`property`})),validFor:X}}function $e(e,t,n,r,i){let a=n.parent?.getChild(`AttributeName`),o=[],s;if(a){let c=e.sliceDoc(a.from,a.to),l=t.globalAttrs[c];if(!l){let r=q(n),i=r?t.tags[K(e.doc,r)]:null;l=i?.attrs&&i.attrs[c]}if(l){let t=e.sliceDoc(r,i).toLowerCase(),n=`"`,a=`"`;/^['"]/.test(t)?(s=t[0]==`"`?/^[^"]*$/:/^[^']*$/,n=``,a=e.sliceDoc(i,i+1)==t[0]?``:t[0],t=t.slice(1),r++):s=/^[^\s<>='"]*$/;for(let e of l)o.push({label:e,apply:n+e+a,type:`constant`})}}return{from:r,to:i,options:o,validFor:s}}function Z(e,t){let{state:n,pos:r}=t,i=l(n).resolveInner(r,-1),a=i.resolve(r);for(let e=r,t;a==i&&(t=i.childBefore(e));){let n=t.lastChild;if(!n||!n.type.isError||n.fromZ(r,e)}var nt=p.parser.configure({top:`SingleExpression`}),rt=[{tag:`script`,attrs:e=>e.type==`text/typescript`||e.lang==`ts`,parser:oe.parser},{tag:`script`,attrs:e=>e.type==`text/babel`||e.type==`text/jsx`,parser:ie.parser},{tag:`script`,attrs:e=>e.type==`text/typescript-jsx`,parser:re.parser},{tag:`script`,attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:nt},{tag:`script`,attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:p.parser},{tag:`style`,attrs(e){return(!e.lang||e.lang==`css`)&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:f.parser}],it=[{name:`style`,parser:f.parser.configure({top:`Styles`})}].concat(W.map(e=>({name:e,parser:p.parser}))),at=c.define({name:`html`,parser:qe.configure({props:[o.add({Element(e){let t=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+t[0].length?e.continue():e.lineIndent(e.node.from)+(t[2]?0:e.unit)},"OpenTag CloseTag SelfClosingTag"(e){return e.column(e.node.from)+e.unit},Document(e){if(e.pos+/\s*/.exec(e.textAfter)[0].lengthe.getChild(`TagName`)})]}),languageData:{commentTokens:{block:{open:``}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),Q=at.configure({wrap:I(rt,it)});function ot(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(rt),(e.nestedAttributes||[]).concat(it))),new a(n?at.configure({wrap:n,dialect:t}):t?Q.configure({dialect:t}):Q,[Q.data.of({autocomplete:tt(e)}),e.autoCloseTags===!1?[]:st,ae().support,ne().support])}var $=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `)),st=n.inputHandler.of((e,n,r,i,a)=>{if(e.composing||e.state.readOnly||n!=r||i!=`>`&&i!=`/`||!Q.isActiveAt(e.state,n,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let n=s.doc.sliceString(e.from-1,e.to)==i,{head:r}=e,a=l(s).resolveInner(r,-1),o;if(n&&i==`>`&&a.name==`EndTag`){let t=a.parent;if(t.parent?.lastChild?.name!=`CloseTag`&&(o=K(s.doc,t.parent,r))&&!$.has(o))return{range:e,changes:{from:r,to:r+ +(s.doc.sliceString(r,r+1)===`>`),insert:``}}}else if(n&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==r-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,r))&&!$.has(o)){let e=r+ +(s.doc.sliceString(r,r+1)===`>`),n=`${o}>`;return{range:t.cursor(r+n.length,-1),changes:{from:r,to:e,insert:n}}}}return{range:e}});return c.changes.empty?!1:(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{ot as html,et as htmlCompletionSource}; \ No newline at end of file diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-CmkCPezG.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-DEAqHkpk.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-CmkCPezG.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-DEAqHkpk.js index a4de5567..499d2e53 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-CmkCPezG.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-DEAqHkpk.js @@ -1,4 +1,4 @@ -import{$ as e,C as t,D as n,I as r,M as i,_ as a,b as o,c as s,d as c,f as ee,i as te,l as ne,m as re,s as l,t as ie,u,v as d,x as f}from"./index-B377xynC.js";import{i as p,n as m,r as ae,t as oe}from"./dist-CT28L0yn.js";import{i as h,n as g,r as se}from"./dist-cLIvjYCL.js";var ce=316,le=317,_=1,ue=2,de=3,fe=4,pe=318,me=320,he=321,ge=5,_e=6,ve=0,v=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],y=125,ye=59,b=47,x=42,S=43,C=45,w=60,T=44,E=63,D=46,O=91,k=new oe({start:!1,shift(e,t){return t==ge||t==_e||t==me?e:t==he},strict:!1}),A=new m((e,t)=>{let{next:n}=e;(n==y||n==-1||t.context)&&e.acceptToken(pe)},{contextual:!0,fallback:!0}),j=new m((e,t)=>{let{next:n}=e,r;v.indexOf(n)>-1||n==b&&((r=e.peek(1))==b||r==x)||n!=y&&n!=ye&&n!=-1&&!t.context&&e.acceptToken(ce)},{contextual:!0}),M=new m((e,t)=>{e.next==O&&!t.context&&e.acceptToken(le)},{contextual:!0}),N=new m((e,t)=>{let{next:n}=e;if(n==S||n==C){if(e.advance(),n==e.next){e.advance();let n=!t.context&&t.canShift(_);e.acceptToken(n?_:ue)}}else n==E&&e.peek(1)==D&&(e.advance(),e.advance(),(e.next<48||e.next>57)&&e.acceptToken(de))},{contextual:!0});function P(e,t){return e>=65&&e<=90||e>=97&&e<=122||e==95||e>=192||!t&&e>=48&&e<=57}var be=new m((e,t)=>{if(e.next!=w||!t.dialectEnabled(ve)||(e.advance(),e.next==b))return;let n=0;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(P(e.next,!0)){for(e.advance(),n++;P(e.next,!1);)e.advance(),n++;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(e.next==T)return;for(let t=0;;t++){if(t==7){if(!P(e.next,!0))return;break}if(e.next!=`extends`.charCodeAt(t))break;e.advance(),n++}}e.acceptToken(fe,-n)}),xe=o({"get set async static":f.modifier,"for while do if else switch try catch finally return throw break continue default case defer":f.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":f.operatorKeyword,"let var const using function class extends":f.definitionKeyword,"import export from":f.moduleKeyword,"with debugger new":f.keyword,TemplateString:f.special(f.string),super:f.atom,BooleanLiteral:f.bool,this:f.self,null:f.null,Star:f.modifier,VariableName:f.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":f.function(f.variableName),VariableDefinition:f.definition(f.variableName),Label:f.labelName,PropertyName:f.propertyName,PrivatePropertyName:f.special(f.propertyName),"CallExpression/MemberExpression/PropertyName":f.function(f.propertyName),"FunctionDeclaration/VariableDefinition":f.function(f.definition(f.variableName)),"ClassDeclaration/VariableDefinition":f.definition(f.className),"NewExpression/VariableName":f.className,PropertyDefinition:f.definition(f.propertyName),PrivatePropertyDefinition:f.definition(f.special(f.propertyName)),UpdateOp:f.updateOperator,"LineComment Hashbang":f.lineComment,BlockComment:f.blockComment,Number:f.number,String:f.string,Escape:f.escape,ArithOp:f.arithmeticOperator,LogicOp:f.logicOperator,BitOp:f.bitwiseOperator,CompareOp:f.compareOperator,RegExp:f.regexp,Equals:f.definitionOperator,Arrow:f.function(f.punctuation),": Spread":f.punctuation,"( )":f.paren,"[ ]":f.squareBracket,"{ }":f.brace,"InterpolationStart InterpolationEnd":f.special(f.brace),".":f.derefOperator,", ;":f.separator,"@":f.meta,TypeName:f.typeName,TypeDefinition:f.definition(f.typeName),"type enum interface implements namespace module declare":f.definitionKeyword,"abstract global Privacy readonly override":f.modifier,"is keyof unique infer asserts":f.operatorKeyword,JSXAttributeValue:f.attributeValue,JSXText:f.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":f.angleBracket,"JSXIdentifier JSXNameSpacedName":f.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":f.attributeName,"JSXBuiltin/JSXIdentifier":f.standard(f.tagName)}),Se={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},Ce={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},we={__proto__:null,"<":193},Te=ae.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem`,maxTerm:380,context:k,nodeProps:[[`isolate`,-8,5,6,14,37,39,51,53,55,``],[`group`,-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,`Statement`,-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,`Expression`,-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,`Type`,-3,88,103,109,`ClassItem`],[`openedBy`,23,`<`,38,`InterpolationStart`,56,`[`,60,`{`,73,`(`,160,`JSXStartCloseTag`],[`closedBy`,-2,24,168,`>`,40,`InterpolationEnd`,50,`]`,61,`}`,74,`)`,165,`JSXEndTag`]],propSources:[xe],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[j,M,N,be,2,3,4,5,6,7,8,9,10,11,12,13,14,A,new p("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new p(`j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~`,25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:e=>Se[e]||-1},{term:343,get:e=>Ce[e]||-1},{term:95,get:e=>we[e]||-1}],tokenPrec:15201}),Ee=e({autoCloseTags:()=>$,javascript:()=>Z,javascriptLanguage:()=>W,jsxLanguage:()=>q,localCompletionSource:()=>U,snippets:()=>F,tsxLanguage:()=>J,typescriptLanguage:()=>K,typescriptSnippets:()=>I}),F=[h("function ${name}(${params}) {\n ${}\n}",{label:`function`,detail:`definition`,type:`keyword`}),h("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:`for`,detail:`loop`,type:`keyword`}),h("for (let ${name} of ${collection}) {\n ${}\n}",{label:`for`,detail:`of loop`,type:`keyword`}),h(`do { +import{$ as e,C as t,D as n,I as r,M as i,_ as a,b as o,c as s,d as c,f as ee,i as te,l as ne,m as re,s as l,t as ie,u,v as d,x as f}from"./index-DSHMid84.js";import{i as p,n as m,r as ae,t as oe}from"./dist-7HJpzQIj.js";import{i as h,n as g,r as se}from"./dist-C_2x3ggP.js";var ce=316,le=317,_=1,ue=2,de=3,fe=4,pe=318,me=320,he=321,ge=5,_e=6,ve=0,v=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],y=125,ye=59,b=47,x=42,S=43,C=45,w=60,T=44,E=63,D=46,O=91,k=new oe({start:!1,shift(e,t){return t==ge||t==_e||t==me?e:t==he},strict:!1}),A=new m((e,t)=>{let{next:n}=e;(n==y||n==-1||t.context)&&e.acceptToken(pe)},{contextual:!0,fallback:!0}),j=new m((e,t)=>{let{next:n}=e,r;v.indexOf(n)>-1||n==b&&((r=e.peek(1))==b||r==x)||n!=y&&n!=ye&&n!=-1&&!t.context&&e.acceptToken(ce)},{contextual:!0}),M=new m((e,t)=>{e.next==O&&!t.context&&e.acceptToken(le)},{contextual:!0}),N=new m((e,t)=>{let{next:n}=e;if(n==S||n==C){if(e.advance(),n==e.next){e.advance();let n=!t.context&&t.canShift(_);e.acceptToken(n?_:ue)}}else n==E&&e.peek(1)==D&&(e.advance(),e.advance(),(e.next<48||e.next>57)&&e.acceptToken(de))},{contextual:!0});function P(e,t){return e>=65&&e<=90||e>=97&&e<=122||e==95||e>=192||!t&&e>=48&&e<=57}var be=new m((e,t)=>{if(e.next!=w||!t.dialectEnabled(ve)||(e.advance(),e.next==b))return;let n=0;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(P(e.next,!0)){for(e.advance(),n++;P(e.next,!1);)e.advance(),n++;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(e.next==T)return;for(let t=0;;t++){if(t==7){if(!P(e.next,!0))return;break}if(e.next!=`extends`.charCodeAt(t))break;e.advance(),n++}}e.acceptToken(fe,-n)}),xe=o({"get set async static":f.modifier,"for while do if else switch try catch finally return throw break continue default case defer":f.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":f.operatorKeyword,"let var const using function class extends":f.definitionKeyword,"import export from":f.moduleKeyword,"with debugger new":f.keyword,TemplateString:f.special(f.string),super:f.atom,BooleanLiteral:f.bool,this:f.self,null:f.null,Star:f.modifier,VariableName:f.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":f.function(f.variableName),VariableDefinition:f.definition(f.variableName),Label:f.labelName,PropertyName:f.propertyName,PrivatePropertyName:f.special(f.propertyName),"CallExpression/MemberExpression/PropertyName":f.function(f.propertyName),"FunctionDeclaration/VariableDefinition":f.function(f.definition(f.variableName)),"ClassDeclaration/VariableDefinition":f.definition(f.className),"NewExpression/VariableName":f.className,PropertyDefinition:f.definition(f.propertyName),PrivatePropertyDefinition:f.definition(f.special(f.propertyName)),UpdateOp:f.updateOperator,"LineComment Hashbang":f.lineComment,BlockComment:f.blockComment,Number:f.number,String:f.string,Escape:f.escape,ArithOp:f.arithmeticOperator,LogicOp:f.logicOperator,BitOp:f.bitwiseOperator,CompareOp:f.compareOperator,RegExp:f.regexp,Equals:f.definitionOperator,Arrow:f.function(f.punctuation),": Spread":f.punctuation,"( )":f.paren,"[ ]":f.squareBracket,"{ }":f.brace,"InterpolationStart InterpolationEnd":f.special(f.brace),".":f.derefOperator,", ;":f.separator,"@":f.meta,TypeName:f.typeName,TypeDefinition:f.definition(f.typeName),"type enum interface implements namespace module declare":f.definitionKeyword,"abstract global Privacy readonly override":f.modifier,"is keyof unique infer asserts":f.operatorKeyword,JSXAttributeValue:f.attributeValue,JSXText:f.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":f.angleBracket,"JSXIdentifier JSXNameSpacedName":f.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":f.attributeName,"JSXBuiltin/JSXIdentifier":f.standard(f.tagName)}),Se={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},Ce={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},we={__proto__:null,"<":193},Te=ae.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem`,maxTerm:380,context:k,nodeProps:[[`isolate`,-8,5,6,14,37,39,51,53,55,``],[`group`,-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,`Statement`,-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,`Expression`,-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,`Type`,-3,88,103,109,`ClassItem`],[`openedBy`,23,`<`,38,`InterpolationStart`,56,`[`,60,`{`,73,`(`,160,`JSXStartCloseTag`],[`closedBy`,-2,24,168,`>`,40,`InterpolationEnd`,50,`]`,61,`}`,74,`)`,165,`JSXEndTag`]],propSources:[xe],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[j,M,N,be,2,3,4,5,6,7,8,9,10,11,12,13,14,A,new p("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new p(`j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~`,25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:e=>Se[e]||-1},{term:343,get:e=>Ce[e]||-1},{term:95,get:e=>we[e]||-1}],tokenPrec:15201}),Ee=e({autoCloseTags:()=>$,javascript:()=>Z,javascriptLanguage:()=>W,jsxLanguage:()=>q,localCompletionSource:()=>U,snippets:()=>F,tsxLanguage:()=>J,typescriptLanguage:()=>K,typescriptSnippets:()=>I}),F=[h("function ${name}(${params}) {\n ${}\n}",{label:`function`,detail:`definition`,type:`keyword`}),h("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:`for`,detail:`loop`,type:`keyword`}),h("for (let ${name} of ${collection}) {\n ${}\n}",{label:`for`,detail:`of loop`,type:`keyword`}),h(`do { \${} } while (\${})`,{label:`do`,detail:`loop`,type:`keyword`}),h(`while (\${}) { \${} diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-Dh1TSPID.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-IL2Xm5LR.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-Dh1TSPID.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-IL2Xm5LR.js index 6e9c2cf1..d17bc49b 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-Dh1TSPID.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-IL2Xm5LR.js @@ -1 +1 @@ -import{$ as e,C as t,D as n,b as r,d as i,f as a,i as o,m as s,s as c,t as ee,v as l,x as u}from"./index-B377xynC.js";import{i as d,n as f,r as p}from"./dist-CT28L0yn.js";var m=145,h=1,te=146,ne=147,g=2,_=148,v=3,re=4,y=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],b=58,x=40,S=95,ie=91,C=45,ae=46,oe=35,se=37,w=38,T=92,E=10,D=42;function O(e){return e>=65&&e<=90||e>=97&&e<=122||e>=161}function k(e){return e>=48&&e<=57}function A(e){return k(e)||e>=97&&e<=102||e>=65&&e<=70}var j=(e,t,n)=>(r,i)=>{for(let a=!1,o=0,s=0;;s++){let{next:c}=r;if(O(c)||c==C||c==S||a&&k(c))!a&&(c!=C||s>0)&&(a=!0),o===s&&c==C&&o++,r.advance();else if(c==T&&r.peek(1)!=E){if(r.advance(),A(r.next)){do r.advance();while(A(r.next));r.next==32&&r.advance()}else r.next>-1&&r.advance();a=!0}else{a&&r.acceptToken(o==2&&i.canShift(g)?t:c==x?n:e);break}}},M=new f(j(te,g,ne),{contextual:!0}),N=new f(j(_,v,re),{contextual:!0}),P=new f(e=>{if(y.includes(e.peek(-1))){let{next:t}=e;(O(t)||t==S||t==oe||t==ae||t==D||t==ie||t==b&&O(e.peek(1))||t==C||t==w)&&e.acceptToken(m)}}),F=new f(e=>{if(!y.includes(e.peek(-1))){let{next:t}=e;if(t==se&&(e.advance(),e.acceptToken(h)),O(t)){do e.advance();while(O(e.next)||k(e.next));e.acceptToken(h)}}}),I=r({"AtKeyword import charset namespace keyframes media supports font-feature-values":u.definitionKeyword,"from to selector scope MatchFlag":u.keyword,NamespaceName:u.namespace,KeyframeName:u.labelName,KeyframeRangeName:u.operatorKeyword,TagName:u.tagName,ClassName:u.className,PseudoClassName:u.constant(u.className),IdName:u.labelName,"FeatureName PropertyName":u.propertyName,AttributeName:u.attributeName,NumberLiteral:u.number,KeywordQuery:u.keyword,UnaryQueryOp:u.operatorKeyword,"CallTag ValueName FontName":u.atom,VariableName:u.variableName,Callee:u.operatorKeyword,Unit:u.unit,"UniversalSelector NestingSelector":u.definitionOperator,"MatchOp CompareOp":u.compareOperator,"ChildOp SiblingOp, LogicOp":u.logicOperator,BinOp:u.arithmeticOperator,Important:u.modifier,Comment:u.blockComment,ColorLiteral:u.color,"ParenthesizedContent StringLiteral":u.string,":":u.punctuation,"PseudoOp #":u.derefOperator,"; , |":u.separator,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace}),L={__proto__:null,lang:44,"nth-child":44,"nth-last-child":44,"nth-of-type":44,"nth-last-of-type":44,dir:44,"host-context":44,if:90,url:152,"url-prefix":152,domain:152,regexp:152},R={__proto__:null,or:104,and:104,not:112,only:112,layer:206},z={__proto__:null,selector:118,style:124,layer:202},ce={__proto__:null,"@import":198,"@media":210,"@charset":214,"@namespace":218,"@keyframes":224,"@supports":236,"@scope":240,"@font-feature-values":246},B={__proto__:null,to:243},V=p.deserialize({version:14,states:"MlQYQdOOO#}QdOOP$UO`OOO%OQaO'#CfOOQP'#Ce'#CeO%VQdO'#CgO%[Q`O'#CgO%aQaO'#FnO&XQdO'#CkO&xQaO'#CcO'SQdO'#CnO'_QdO'#EOO'dQdO'#EQO'oQdO'#EXO'oQdO'#E[OOQP'#Fn'#FnO)RQhO'#E}OOQS'#Fm'#FmOOQS'#FQ'#FQQYQdOOO)YQdO'#EbO*iQhO'#EhO)YQdO'#EjO*pQdO'#ElO*{QdO'#EoO)}QhO'#EuO+TQdO'#EwO+`QdO'#EzO+eQaO'#CfO+lQ`O'#E_O+qQ`O'#F{O+|QdO'#F{QOQ`OOP,WO&jO'#CaPOOO)CA])CA]OOQP'#Ci'#CiOOQP,59R,59RO%VQdO,59ROOQP'#Cm'#CmOOQP,59V,59VO&XQdO,59VO,cQdO,59YO'_QdO,5:jO'dQdO,5:lO'oQdO,5:sO'oQdO,5:uO'oQdO,5:vO'oQdO'#FXO,nQ`O,58}O,vQdO'#E^OOQS,58},58}OOQP'#Cq'#CqOOQO'#D|'#D|OOQP,59Y,59YO,}Q`O,59YO-SQ`O,59YOOQP'#EP'#EPOOQP,5:j,5:jO-XQpO'#ERO-dQdO'#ESO-iQ`O'#ESO-nQpO,5:lO.XQaO,5:sO.oQaO,5:vOOQW'#D^'#D^O/nQhO'#DgO0RQhO,5;iO)}QhO'#DeO0`Q`O'#DnO0eQhO'#DxOOQW'#Ft'#FtOOQS,5;i,5;iO0jQ`O'#DhO0oQ`O'#DkOOQS-E9O-E9OOOQ['#Cv'#CvO0tQdO'#CwO1[QdO'#C}O1rQdO'#DQO2YQ!pO'#DSO4fQ!jO,5:|OOQO'#DX'#DXO-SQ`O'#DWO4vQ!nO'#FqO6|Q`O'#DYO7RQ`O'#DyOOQ['#Fq'#FqO7WQhO'#GOO7fQ`O,5;SO7kQ!bO,5;UOOQS'#En'#EnO7sQ`O,5;WO7xQdO,5;WOOQO'#Eq'#EqO8QQ`O,5;ZO8VQhO,5;aO'oQdO'#DjOOQS,5;c,5;cO0jQ`O,5;cO8_QdO,5;cOOQS'#F`'#F`O8gQdO'#E|O7fQ`O,5;fO8oQdO,5:yO9PQdO'#FZO9^Q`O,5lQhO'#DoOOQW,5:Y,5:YOOQW,5:d,5:dOOQW,5:S,5:SO>vQhO,5:VO?bQ!fO'#FrOOQS'#Fr'#FrOOQS'#FS'#FSO@rQdO,59cOOQ[,59c,59cOAYQdO,59iOOQ[,59i,59iOApQdO,59lOOQ[,59l,59lOOQ[,59n,59nO)YQdO,59pOBWQhO'#EdOOQW'#Ed'#EdOBuQ`O1G0hO4oQhO1G0hOOQ[,59r,59rO)}QhO'#D[OOQ[,59t,59tOBzQ#tO,5:eOCVQhO'#F]OCdQ`O,5vQhO'#DmOI_QhO'#DqOIgQhO'#DsOIlQhO'#FwOOQO'#Fw'#FwOItQ!bO'#DwOOQO'#Fy'#FyOOQO'#Fv'#FvOIyQ`O1G/qOOQS-E9Q-E9QOOQ[1G.}1G.}OOQ[1G/T1G/TOOQ[1G/W1G/WOOQ[1G/[1G/[OJOQdO,5;OOOQS7+&S7+&SOJTQ`O7+&SOJYQhO'#D]OJbQ`O,59vO)}QhO,59vOOQ[1G0P1G0POJjQ`O1G0POJoQhO,5;wOOQO-E9Z-E9ZOOQS7+&^7+&^OJ}QbO'#DSOOQO'#Et'#EtOK]Q`O'#EsOOQO'#Es'#EsOKhQ`O'#F^OKpQdO,5;^OOQS,5;^,5;^OOQ[1G/p1G/pOOQS7+&i7+&iO7fQ`O7+&iOK{Q!fO'#FYO)YQdO'#FYOMSQdO7+&POOQO7+&P7+&POOQO,5:{,5:{OOQO1G1a1G1aOMgQ!bO<vQhO'#DrOOQO,5:],5:]O! hQhO,5:_OGUQhO,5:cOOQW7+%]7+%]OOQO'#Ef'#EfO! pQ`O1G0jOOQS<xAN>xO!#zQ`OAN>xO!$PQaO,5;rOOQO-E9U-E9UO!$ZQdO,5;qOOQO-E9T-E9TOOQW<vQhO'#DuOOQO1G/y1G/yO!%vQ!bO1G/}OJOQdO'#F[O!&OQ`O7+&UOOQW7+&U7+&UO!&WQ!bO1G/cOOQ[7+$|7+$|O!&cQhO7+$|P!&jQ`O'#FTOOQO,5;y,5;yOOQO-E9]-E9]OOQS1G1d1G1dOOQPG24dG24dO!&oQ`OAN>ZO)YQdO1G1[O!&tQ`O7+'jOOQO1G/x1G/xO!&|Q`O,5:aO!$eQhO7+%iOOQO,5;v,5;vOOQO-E9Y-E9YOOQW<Q!]!^>|!^!_?_!_!`@Z!`!a@n!a!b%Z!b!cAo!c!k%Z!k!lC|!l!u%Z!u!vC|!v!}%Z!}#OD_#O#P%Z#P#QDp#Q#R2X#R#]%Z#]#^ER#^#g%Z#g#hC|#h#o%Z#o#pIf#p#qIw#q#rJ`#r#sJq#s#y%Z#y#z&R#z$f%Z$f$g&R$g#BY%Z#BY#BZ&R#BZ$IS%Z$IS$I_&R$I_$I|%Z$I|$JO&R$JO$JT%Z$JT$JU&R$JU$KV%Z$KV$KW&R$KW&FU%Z&FU&FV&R&FV;'S%Z;'S;=`KY<%lO%Z`%^SOy%jz;'S%j;'S;=`%{<%lO%j`%oS!o`Oy%jz;'S%j;'S;=`%{<%lO%j`&OP;=`<%l%j~&Wh$[~OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%j~'yh$[~!o`OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%jj)jS$qYOy%jz;'S%j;'S;=`%{<%lO%j~)yWOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d<%lO)v~*hOw~~*kRO;'S)v;'S;=`*t;=`O)v~*wXOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d;=`<%l)v<%lO)v~+gP;=`<%l)vj+oYmYOy%jz!Q%j!Q![,_![!c%j!c!i,_!i#T%j#T#Z,_#Z;'S%j;'S;=`%{<%lO%jj,dY!o`Oy%jz!Q%j!Q![-S![!c%j!c!i-S!i#T%j#T#Z-S#Z;'S%j;'S;=`%{<%lO%jj-XY!o`Oy%jz!Q%j!Q![-w![!c%j!c!i-w!i#T%j#T#Z-w#Z;'S%j;'S;=`%{<%lO%jj.OYuY!o`Oy%jz!Q%j!Q![.n![!c%j!c!i.n!i#T%j#T#Z.n#Z;'S%j;'S;=`%{<%lO%jj.uYuY!o`Oy%jz!Q%j!Q![/e![!c%j!c!i/e!i#T%j#T#Z/e#Z;'S%j;'S;=`%{<%lO%jj/jY!o`Oy%jz!Q%j!Q![0Y![!c%j!c!i0Y!i#T%j#T#Z0Y#Z;'S%j;'S;=`%{<%lO%jj0aYuY!o`Oy%jz!Q%j!Q![1P![!c%j!c!i1P!i#T%j#T#Z1P#Z;'S%j;'S;=`%{<%lO%jj1UY!o`Oy%jz!Q%j!Q![1t![!c%j!c!i1t!i#T%j#T#Z1t#Z;'S%j;'S;=`%{<%lO%jj1{SuY!o`Oy%jz;'S%j;'S;=`%{<%lO%jd2[UOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jd2uS!yS!o`Oy%jz;'S%j;'S;=`%{<%lO%jb3WS^QOy%jz;'S%j;'S;=`%{<%lO%j~3gWOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{<%lO3d~4SRO;'S3d;'S;=`4];=`O3d~4`XOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{;=`<%l3d<%lO3d~5OP;=`<%l3dj5WShYOy%jz;'S%j;'S;=`%{<%lO%j~5iOg~n5pUWQyWOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jj6ZWyW#PQOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj6xU!o`Oy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%jj7cY!o`$gYOy%jz!Q%j!Q![7[![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj8WY!o`Oy%jz{%j{|8v|}%j}!O8v!O!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj8{U!o`Oy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj9fU!o`$gYOy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj:P[!o`$gYOy%jz!O%j!O!P7[!P!Q%j!Q![9x![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj:zS!dYOy%jz;'S%j;'S;=`%{<%lO%jj;]WyWOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj;zU`YOy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%j~VUcYOy%jz![%j![!]>i!];'S%j;'S;=`%{<%lO%jj>pSdY!o`Oy%jz;'S%j;'S;=`%{<%lO%jj?RSnYOy%jz;'S%j;'S;=`%{<%lO%jh?dU!WWOy%jz!_%j!_!`?v!`;'S%j;'S;=`%{<%lO%jh?}S!WW!o`Oy%jz;'S%j;'S;=`%{<%lO%jl@bS!WW!ySOy%jz;'S%j;'S;=`%{<%lO%jj@uV!|Q!WWOy%jz!_%j!_!`?v!`!aA[!a;'S%j;'S;=`%{<%lO%jbAcS!|Q!o`Oy%jz;'S%j;'S;=`%{<%lO%jjArYOy%jz}%j}!OBb!O!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjBgW!o`Oy%jz!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjCW[lY!o`Oy%jz}%j}!OCP!O!Q%j!Q![CP![!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jhDRS!zWOy%jz;'S%j;'S;=`%{<%lO%jjDdSpYOy%jz;'S%j;'S;=`%{<%lO%jnDuSo^Oy%jz;'S%j;'S;=`%{<%lO%jjEWU!zWOy%jz#a%j#a#bEj#b;'S%j;'S;=`%{<%lO%jbEoU!o`Oy%jz#d%j#d#eFR#e;'S%j;'S;=`%{<%lO%jbFWU!o`Oy%jz#c%j#c#dFj#d;'S%j;'S;=`%{<%lO%jbFoU!o`Oy%jz#f%j#f#gGR#g;'S%j;'S;=`%{<%lO%jbGWU!o`Oy%jz#h%j#h#iGj#i;'S%j;'S;=`%{<%lO%jbGoU!o`Oy%jz#T%j#T#UHR#U;'S%j;'S;=`%{<%lO%jbHWU!o`Oy%jz#b%j#b#cHj#c;'S%j;'S;=`%{<%lO%jbHoU!o`Oy%jz#h%j#h#iIR#i;'S%j;'S;=`%{<%lO%jbIYS$pQ!o`Oy%jz;'S%j;'S;=`%{<%lO%jjIkSsYOy%jz;'S%j;'S;=`%{<%lO%jfI|U$cUOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jjJeSrYOy%jz;'S%j;'S;=`%{<%lO%jfJvU#PQOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%j`K]P;=`<%l%Z",tokenizers:[P,F,M,N,1,2,3,4,new d("m~RRYZ[z{a~~g~aO$_~~dP!P!Qg~lO$`~~",28,152)],topRules:{StyleSheet:[0,6],Styles:[1,126]},dynamicPrecedences:{94:1},specialized:[{term:147,get:e=>L[e]||-1},{term:148,get:e=>R[e]||-1},{term:4,get:e=>z[e]||-1},{term:28,get:e=>ce[e]||-1},{term:146,get:e=>B[e]||-1}],tokenPrec:2405}),H=e({css:()=>$,cssCompletionSource:()=>Z,cssLanguage:()=>Q,defineCSSCompletionSource:()=>X}),U=null;function W(){if(!U&&typeof document==`object`&&document.body){let{style:e}=document.body,t=[],n=new Set;for(let r in e)r!=`cssText`&&r!=`cssFloat`&&typeof e[r]==`string`&&(/[A-Z]/.test(r)&&(r=r.replace(/[A-Z]/g,e=>`-`+e.toLowerCase())),n.has(r)||(t.push(r),n.add(r)));U=t.sort().map(e=>({type:`property`,label:e,apply:e+`: `}))}return U||[]}var G=`active.after.any-link.autofill.backdrop.before.checked.cue.default.defined.disabled.empty.enabled.file-selector-button.first.first-child.first-letter.first-line.first-of-type.focus.focus-visible.focus-within.fullscreen.has.host.host-context.hover.in-range.indeterminate.invalid.is.lang.last-child.last-of-type.left.link.marker.modal.not.nth-child.nth-last-child.nth-last-of-type.nth-of-type.only-child.only-of-type.optional.out-of-range.part.placeholder.placeholder-shown.read-only.read-write.required.right.root.scope.selection.slotted.target.target-text.valid.visited.where`.split(`.`).map(e=>({type:`class`,label:e})),K=`above.absolute.activeborder.additive.activecaption.after-white-space.ahead.alias.all.all-scroll.alphabetic.alternate.always.antialiased.appworkspace.asterisks.attr.auto.auto-flow.avoid.avoid-column.avoid-page.avoid-region.axis-pan.background.backwards.baseline.below.bidi-override.blink.block.block-axis.bold.bolder.border.border-box.both.bottom.break.break-all.break-word.bullets.button.button-bevel.buttonface.buttonhighlight.buttonshadow.buttontext.calc.capitalize.caps-lock-indicator.caption.captiontext.caret.cell.center.checkbox.circle.cjk-decimal.clear.clip.close-quote.col-resize.collapse.color.color-burn.color-dodge.column.column-reverse.compact.condensed.contain.content.contents.content-box.context-menu.continuous.copy.counter.counters.cover.crop.cross.crosshair.currentcolor.cursive.cyclic.darken.dashed.decimal.decimal-leading-zero.default.default-button.dense.destination-atop.destination-in.destination-out.destination-over.difference.disc.discard.disclosure-closed.disclosure-open.document.dot-dash.dot-dot-dash.dotted.double.down.e-resize.ease.ease-in.ease-in-out.ease-out.element.ellipse.ellipsis.embed.end.ethiopic-abegede-gez.ethiopic-halehame-aa-er.ethiopic-halehame-gez.ew-resize.exclusion.expanded.extends.extra-condensed.extra-expanded.fantasy.fast.fill.fill-box.fixed.flat.flex.flex-end.flex-start.footnotes.forwards.from.geometricPrecision.graytext.grid.groove.hand.hard-light.help.hidden.hide.higher.highlight.highlighttext.horizontal.hsl.hsla.hue.icon.ignore.inactiveborder.inactivecaption.inactivecaptiontext.infinite.infobackground.infotext.inherit.initial.inline.inline-axis.inline-block.inline-flex.inline-grid.inline-table.inset.inside.intrinsic.invert.italic.justify.keep-all.landscape.large.larger.left.level.lighter.lighten.line-through.linear.linear-gradient.lines.list-item.listbox.listitem.local.logical.loud.lower.lower-hexadecimal.lower-latin.lower-norwegian.lowercase.ltr.luminosity.manipulation.match.matrix.matrix3d.medium.menu.menutext.message-box.middle.min-intrinsic.mix.monospace.move.multiple.multiple_mask_images.multiply.n-resize.narrower.ne-resize.nesw-resize.no-close-quote.no-drop.no-open-quote.no-repeat.none.normal.not-allowed.nowrap.ns-resize.numbers.numeric.nw-resize.nwse-resize.oblique.opacity.open-quote.optimizeLegibility.optimizeSpeed.outset.outside.outside-shape.overlay.overline.padding.padding-box.painted.page.paused.perspective.pinch-zoom.plus-darker.plus-lighter.pointer.polygon.portrait.pre.pre-line.pre-wrap.preserve-3d.progress.push-button.radial-gradient.radio.read-only.read-write.read-write-plaintext-only.rectangle.region.relative.repeat.repeating-linear-gradient.repeating-radial-gradient.repeat-x.repeat-y.reset.reverse.rgb.rgba.ridge.right.rotate.rotate3d.rotateX.rotateY.rotateZ.round.row.row-resize.row-reverse.rtl.run-in.running.s-resize.sans-serif.saturation.scale.scale3d.scaleX.scaleY.scaleZ.screen.scroll.scrollbar.scroll-position.se-resize.self-start.self-end.semi-condensed.semi-expanded.separate.serif.show.single.skew.skewX.skewY.skip-white-space.slide.slider-horizontal.slider-vertical.sliderthumb-horizontal.sliderthumb-vertical.slow.small.small-caps.small-caption.smaller.soft-light.solid.source-atop.source-in.source-out.source-over.space.space-around.space-between.space-evenly.spell-out.square.start.static.status-bar.stretch.stroke.stroke-box.sub.subpixel-antialiased.svg_masks.super.sw-resize.symbolic.symbols.system-ui.table.table-caption.table-cell.table-column.table-column-group.table-footer-group.table-header-group.table-row.table-row-group.text.text-bottom.text-top.textarea.textfield.thick.thin.threeddarkshadow.threedface.threedhighlight.threedlightshadow.threedshadow.to.top.transform.translate.translate3d.translateX.translateY.translateZ.transparent.ultra-condensed.ultra-expanded.underline.unidirectional-pan.unset.up.upper-latin.uppercase.url.var.vertical.vertical-text.view-box.visible.visibleFill.visiblePainted.visibleStroke.visual.w-resize.wait.wave.wider.window.windowframe.windowtext.words.wrap.wrap-reverse.x-large.x-small.xor.xx-large.xx-small`.split(`.`).map(e=>({type:`keyword`,label:e})).concat(`aliceblue.antiquewhite.aqua.aquamarine.azure.beige.bisque.black.blanchedalmond.blue.blueviolet.brown.burlywood.cadetblue.chartreuse.chocolate.coral.cornflowerblue.cornsilk.crimson.cyan.darkblue.darkcyan.darkgoldenrod.darkgray.darkgreen.darkkhaki.darkmagenta.darkolivegreen.darkorange.darkorchid.darkred.darksalmon.darkseagreen.darkslateblue.darkslategray.darkturquoise.darkviolet.deeppink.deepskyblue.dimgray.dodgerblue.firebrick.floralwhite.forestgreen.fuchsia.gainsboro.ghostwhite.gold.goldenrod.gray.grey.green.greenyellow.honeydew.hotpink.indianred.indigo.ivory.khaki.lavender.lavenderblush.lawngreen.lemonchiffon.lightblue.lightcoral.lightcyan.lightgoldenrodyellow.lightgray.lightgreen.lightpink.lightsalmon.lightseagreen.lightskyblue.lightslategray.lightsteelblue.lightyellow.lime.limegreen.linen.magenta.maroon.mediumaquamarine.mediumblue.mediumorchid.mediumpurple.mediumseagreen.mediumslateblue.mediumspringgreen.mediumturquoise.mediumvioletred.midnightblue.mintcream.mistyrose.moccasin.navajowhite.navy.oldlace.olive.olivedrab.orange.orangered.orchid.palegoldenrod.palegreen.paleturquoise.palevioletred.papayawhip.peachpuff.peru.pink.plum.powderblue.purple.rebeccapurple.red.rosybrown.royalblue.saddlebrown.salmon.sandybrown.seagreen.seashell.sienna.silver.skyblue.slateblue.slategray.snow.springgreen.steelblue.tan.teal.thistle.tomato.turquoise.violet.wheat.white.whitesmoke.yellow.yellowgreen`.split(`.`).map(e=>({type:`constant`,label:e}))),le=`a.abbr.address.article.aside.b.bdi.bdo.blockquote.body.br.button.canvas.caption.cite.code.col.colgroup.dd.del.details.dfn.dialog.div.dl.dt.em.figcaption.figure.footer.form.header.hgroup.h1.h2.h3.h4.h5.h6.hr.html.i.iframe.img.input.ins.kbd.label.legend.li.main.meter.nav.ol.output.p.pre.ruby.section.select.small.source.span.strong.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.tr.u.ul`.split(`.`).map(e=>({type:`type`,label:e})),ue=[`@charset`,`@color-profile`,`@container`,`@counter-style`,`@font-face`,`@font-feature-values`,`@font-palette-values`,`@import`,`@keyframes`,`@layer`,`@media`,`@namespace`,`@page`,`@position-try`,`@property`,`@scope`,`@starting-style`,`@supports`,`@view-transition`].map(e=>({type:`keyword`,label:e})),q=/^(\w[\w-]*|-\w[\w-]*|)$/,de=/^-(-[\w-]*)?$/;function fe(e,t){if((e.name==`(`||e.type.isError)&&(e=e.parent||e),e.name!=`ArgList`)return!1;let n=e.parent?.firstChild;return n?.name==`Callee`?t.sliceString(n.from,n.to)==`var`:!1}var J=new n,pe=[`Declaration`];function me(e){for(let t=e;;){if(t.type.isTop)return t;if(!(t=t.parent))return e}}function Y(e,n,r){if(n.to-n.from>4096){let i=J.get(n);if(i)return i;let a=[],o=new Set,s=n.cursor(t.IncludeAnonymous);if(s.firstChild())do for(let t of Y(e,s.node,r))o.has(t.label)||(o.add(t.label),a.push(t));while(s.nextSibling());return J.set(n,a),a}else{let t=[],i=new Set;return n.cursor().iterate(n=>{if(r(n)&&n.matchContext(pe)&&n.node.nextSibling?.name==`:`){let r=e.sliceString(n.from,n.to);i.has(r)||(i.add(r),t.push({label:r,type:`variable`}))}}),t}}var X=e=>t=>{let{state:n,pos:r}=t,i=l(n).resolveInner(r,-1),a=i.type.isError&&i.from==i.to-1&&n.doc.sliceString(i.from,i.to)==`-`;if(i.name==`PropertyName`||(a||i.name==`TagName`)&&/^(Block|Styles)$/.test(i.resolve(i.to).name))return{from:i.from,options:W(),validFor:q};if(i.name==`ValueName`)return{from:i.from,options:K,validFor:q};if(i.name==`PseudoClassName`)return{from:i.from,options:G,validFor:q};if(e(i)||(t.explicit||a)&&fe(i,n.doc))return{from:e(i)||a?i.from:r,options:Y(n.doc,me(i),e),validFor:de};if(i.name==`TagName`){for(let{parent:e}=i;e;e=e.parent)if(e.name==`Block`)return{from:i.from,options:W(),validFor:q};return{from:i.from,options:le,validFor:q}}if(i.name==`AtKeyword`)return{from:i.from,options:ue,validFor:q};if(!t.explicit)return null;let o=i.resolve(r),s=o.childBefore(r);return s&&s.name==`:`&&o.name==`PseudoClassSelector`?{from:r,options:G,validFor:q}:s&&s.name==`:`&&o.name==`Declaration`||o.name==`ArgList`?{from:r,options:K,validFor:q}:o.name==`Block`||o.name==`Styles`?{from:r,options:W(),validFor:q}:null},Z=X(e=>e.name==`VariableName`),Q=ee.define({name:`css`,parser:V.configure({props:[s.add({Declaration:c()}),a.add({"Block KeyframeList":i})]}),languageData:{commentTokens:{block:{open:`/*`,close:`*/`}},indentOnInput:/^\s*\}$/,wordChars:`-`}});function $(){return new o(Q,Q.data.of({autocomplete:Z}))}export{Q as n,H as r,$ as t}; \ No newline at end of file +import{$ as e,C as t,D as n,b as r,d as i,f as a,i as o,m as s,s as c,t as ee,v as l,x as u}from"./index-DSHMid84.js";import{i as d,n as f,r as p}from"./dist-7HJpzQIj.js";var m=145,h=1,te=146,ne=147,g=2,_=148,v=3,re=4,y=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],b=58,x=40,S=95,ie=91,C=45,ae=46,oe=35,se=37,w=38,T=92,E=10,D=42;function O(e){return e>=65&&e<=90||e>=97&&e<=122||e>=161}function k(e){return e>=48&&e<=57}function A(e){return k(e)||e>=97&&e<=102||e>=65&&e<=70}var j=(e,t,n)=>(r,i)=>{for(let a=!1,o=0,s=0;;s++){let{next:c}=r;if(O(c)||c==C||c==S||a&&k(c))!a&&(c!=C||s>0)&&(a=!0),o===s&&c==C&&o++,r.advance();else if(c==T&&r.peek(1)!=E){if(r.advance(),A(r.next)){do r.advance();while(A(r.next));r.next==32&&r.advance()}else r.next>-1&&r.advance();a=!0}else{a&&r.acceptToken(o==2&&i.canShift(g)?t:c==x?n:e);break}}},M=new f(j(te,g,ne),{contextual:!0}),N=new f(j(_,v,re),{contextual:!0}),P=new f(e=>{if(y.includes(e.peek(-1))){let{next:t}=e;(O(t)||t==S||t==oe||t==ae||t==D||t==ie||t==b&&O(e.peek(1))||t==C||t==w)&&e.acceptToken(m)}}),F=new f(e=>{if(!y.includes(e.peek(-1))){let{next:t}=e;if(t==se&&(e.advance(),e.acceptToken(h)),O(t)){do e.advance();while(O(e.next)||k(e.next));e.acceptToken(h)}}}),I=r({"AtKeyword import charset namespace keyframes media supports font-feature-values":u.definitionKeyword,"from to selector scope MatchFlag":u.keyword,NamespaceName:u.namespace,KeyframeName:u.labelName,KeyframeRangeName:u.operatorKeyword,TagName:u.tagName,ClassName:u.className,PseudoClassName:u.constant(u.className),IdName:u.labelName,"FeatureName PropertyName":u.propertyName,AttributeName:u.attributeName,NumberLiteral:u.number,KeywordQuery:u.keyword,UnaryQueryOp:u.operatorKeyword,"CallTag ValueName FontName":u.atom,VariableName:u.variableName,Callee:u.operatorKeyword,Unit:u.unit,"UniversalSelector NestingSelector":u.definitionOperator,"MatchOp CompareOp":u.compareOperator,"ChildOp SiblingOp, LogicOp":u.logicOperator,BinOp:u.arithmeticOperator,Important:u.modifier,Comment:u.blockComment,ColorLiteral:u.color,"ParenthesizedContent StringLiteral":u.string,":":u.punctuation,"PseudoOp #":u.derefOperator,"; , |":u.separator,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace}),L={__proto__:null,lang:44,"nth-child":44,"nth-last-child":44,"nth-of-type":44,"nth-last-of-type":44,dir:44,"host-context":44,if:90,url:152,"url-prefix":152,domain:152,regexp:152},R={__proto__:null,or:104,and:104,not:112,only:112,layer:206},z={__proto__:null,selector:118,style:124,layer:202},ce={__proto__:null,"@import":198,"@media":210,"@charset":214,"@namespace":218,"@keyframes":224,"@supports":236,"@scope":240,"@font-feature-values":246},B={__proto__:null,to:243},V=p.deserialize({version:14,states:"MlQYQdOOO#}QdOOP$UO`OOO%OQaO'#CfOOQP'#Ce'#CeO%VQdO'#CgO%[Q`O'#CgO%aQaO'#FnO&XQdO'#CkO&xQaO'#CcO'SQdO'#CnO'_QdO'#EOO'dQdO'#EQO'oQdO'#EXO'oQdO'#E[OOQP'#Fn'#FnO)RQhO'#E}OOQS'#Fm'#FmOOQS'#FQ'#FQQYQdOOO)YQdO'#EbO*iQhO'#EhO)YQdO'#EjO*pQdO'#ElO*{QdO'#EoO)}QhO'#EuO+TQdO'#EwO+`QdO'#EzO+eQaO'#CfO+lQ`O'#E_O+qQ`O'#F{O+|QdO'#F{QOQ`OOP,WO&jO'#CaPOOO)CA])CA]OOQP'#Ci'#CiOOQP,59R,59RO%VQdO,59ROOQP'#Cm'#CmOOQP,59V,59VO&XQdO,59VO,cQdO,59YO'_QdO,5:jO'dQdO,5:lO'oQdO,5:sO'oQdO,5:uO'oQdO,5:vO'oQdO'#FXO,nQ`O,58}O,vQdO'#E^OOQS,58},58}OOQP'#Cq'#CqOOQO'#D|'#D|OOQP,59Y,59YO,}Q`O,59YO-SQ`O,59YOOQP'#EP'#EPOOQP,5:j,5:jO-XQpO'#ERO-dQdO'#ESO-iQ`O'#ESO-nQpO,5:lO.XQaO,5:sO.oQaO,5:vOOQW'#D^'#D^O/nQhO'#DgO0RQhO,5;iO)}QhO'#DeO0`Q`O'#DnO0eQhO'#DxOOQW'#Ft'#FtOOQS,5;i,5;iO0jQ`O'#DhO0oQ`O'#DkOOQS-E9O-E9OOOQ['#Cv'#CvO0tQdO'#CwO1[QdO'#C}O1rQdO'#DQO2YQ!pO'#DSO4fQ!jO,5:|OOQO'#DX'#DXO-SQ`O'#DWO4vQ!nO'#FqO6|Q`O'#DYO7RQ`O'#DyOOQ['#Fq'#FqO7WQhO'#GOO7fQ`O,5;SO7kQ!bO,5;UOOQS'#En'#EnO7sQ`O,5;WO7xQdO,5;WOOQO'#Eq'#EqO8QQ`O,5;ZO8VQhO,5;aO'oQdO'#DjOOQS,5;c,5;cO0jQ`O,5;cO8_QdO,5;cOOQS'#F`'#F`O8gQdO'#E|O7fQ`O,5;fO8oQdO,5:yO9PQdO'#FZO9^Q`O,5lQhO'#DoOOQW,5:Y,5:YOOQW,5:d,5:dOOQW,5:S,5:SO>vQhO,5:VO?bQ!fO'#FrOOQS'#Fr'#FrOOQS'#FS'#FSO@rQdO,59cOOQ[,59c,59cOAYQdO,59iOOQ[,59i,59iOApQdO,59lOOQ[,59l,59lOOQ[,59n,59nO)YQdO,59pOBWQhO'#EdOOQW'#Ed'#EdOBuQ`O1G0hO4oQhO1G0hOOQ[,59r,59rO)}QhO'#D[OOQ[,59t,59tOBzQ#tO,5:eOCVQhO'#F]OCdQ`O,5vQhO'#DmOI_QhO'#DqOIgQhO'#DsOIlQhO'#FwOOQO'#Fw'#FwOItQ!bO'#DwOOQO'#Fy'#FyOOQO'#Fv'#FvOIyQ`O1G/qOOQS-E9Q-E9QOOQ[1G.}1G.}OOQ[1G/T1G/TOOQ[1G/W1G/WOOQ[1G/[1G/[OJOQdO,5;OOOQS7+&S7+&SOJTQ`O7+&SOJYQhO'#D]OJbQ`O,59vO)}QhO,59vOOQ[1G0P1G0POJjQ`O1G0POJoQhO,5;wOOQO-E9Z-E9ZOOQS7+&^7+&^OJ}QbO'#DSOOQO'#Et'#EtOK]Q`O'#EsOOQO'#Es'#EsOKhQ`O'#F^OKpQdO,5;^OOQS,5;^,5;^OOQ[1G/p1G/pOOQS7+&i7+&iO7fQ`O7+&iOK{Q!fO'#FYO)YQdO'#FYOMSQdO7+&POOQO7+&P7+&POOQO,5:{,5:{OOQO1G1a1G1aOMgQ!bO<vQhO'#DrOOQO,5:],5:]O! hQhO,5:_OGUQhO,5:cOOQW7+%]7+%]OOQO'#Ef'#EfO! pQ`O1G0jOOQS<xAN>xO!#zQ`OAN>xO!$PQaO,5;rOOQO-E9U-E9UO!$ZQdO,5;qOOQO-E9T-E9TOOQW<vQhO'#DuOOQO1G/y1G/yO!%vQ!bO1G/}OJOQdO'#F[O!&OQ`O7+&UOOQW7+&U7+&UO!&WQ!bO1G/cOOQ[7+$|7+$|O!&cQhO7+$|P!&jQ`O'#FTOOQO,5;y,5;yOOQO-E9]-E9]OOQS1G1d1G1dOOQPG24dG24dO!&oQ`OAN>ZO)YQdO1G1[O!&tQ`O7+'jOOQO1G/x1G/xO!&|Q`O,5:aO!$eQhO7+%iOOQO,5;v,5;vOOQO-E9Y-E9YOOQW<Q!]!^>|!^!_?_!_!`@Z!`!a@n!a!b%Z!b!cAo!c!k%Z!k!lC|!l!u%Z!u!vC|!v!}%Z!}#OD_#O#P%Z#P#QDp#Q#R2X#R#]%Z#]#^ER#^#g%Z#g#hC|#h#o%Z#o#pIf#p#qIw#q#rJ`#r#sJq#s#y%Z#y#z&R#z$f%Z$f$g&R$g#BY%Z#BY#BZ&R#BZ$IS%Z$IS$I_&R$I_$I|%Z$I|$JO&R$JO$JT%Z$JT$JU&R$JU$KV%Z$KV$KW&R$KW&FU%Z&FU&FV&R&FV;'S%Z;'S;=`KY<%lO%Z`%^SOy%jz;'S%j;'S;=`%{<%lO%j`%oS!o`Oy%jz;'S%j;'S;=`%{<%lO%j`&OP;=`<%l%j~&Wh$[~OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%j~'yh$[~!o`OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%jj)jS$qYOy%jz;'S%j;'S;=`%{<%lO%j~)yWOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d<%lO)v~*hOw~~*kRO;'S)v;'S;=`*t;=`O)v~*wXOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d;=`<%l)v<%lO)v~+gP;=`<%l)vj+oYmYOy%jz!Q%j!Q![,_![!c%j!c!i,_!i#T%j#T#Z,_#Z;'S%j;'S;=`%{<%lO%jj,dY!o`Oy%jz!Q%j!Q![-S![!c%j!c!i-S!i#T%j#T#Z-S#Z;'S%j;'S;=`%{<%lO%jj-XY!o`Oy%jz!Q%j!Q![-w![!c%j!c!i-w!i#T%j#T#Z-w#Z;'S%j;'S;=`%{<%lO%jj.OYuY!o`Oy%jz!Q%j!Q![.n![!c%j!c!i.n!i#T%j#T#Z.n#Z;'S%j;'S;=`%{<%lO%jj.uYuY!o`Oy%jz!Q%j!Q![/e![!c%j!c!i/e!i#T%j#T#Z/e#Z;'S%j;'S;=`%{<%lO%jj/jY!o`Oy%jz!Q%j!Q![0Y![!c%j!c!i0Y!i#T%j#T#Z0Y#Z;'S%j;'S;=`%{<%lO%jj0aYuY!o`Oy%jz!Q%j!Q![1P![!c%j!c!i1P!i#T%j#T#Z1P#Z;'S%j;'S;=`%{<%lO%jj1UY!o`Oy%jz!Q%j!Q![1t![!c%j!c!i1t!i#T%j#T#Z1t#Z;'S%j;'S;=`%{<%lO%jj1{SuY!o`Oy%jz;'S%j;'S;=`%{<%lO%jd2[UOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jd2uS!yS!o`Oy%jz;'S%j;'S;=`%{<%lO%jb3WS^QOy%jz;'S%j;'S;=`%{<%lO%j~3gWOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{<%lO3d~4SRO;'S3d;'S;=`4];=`O3d~4`XOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{;=`<%l3d<%lO3d~5OP;=`<%l3dj5WShYOy%jz;'S%j;'S;=`%{<%lO%j~5iOg~n5pUWQyWOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jj6ZWyW#PQOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj6xU!o`Oy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%jj7cY!o`$gYOy%jz!Q%j!Q![7[![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj8WY!o`Oy%jz{%j{|8v|}%j}!O8v!O!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj8{U!o`Oy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj9fU!o`$gYOy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj:P[!o`$gYOy%jz!O%j!O!P7[!P!Q%j!Q![9x![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj:zS!dYOy%jz;'S%j;'S;=`%{<%lO%jj;]WyWOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj;zU`YOy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%j~VUcYOy%jz![%j![!]>i!];'S%j;'S;=`%{<%lO%jj>pSdY!o`Oy%jz;'S%j;'S;=`%{<%lO%jj?RSnYOy%jz;'S%j;'S;=`%{<%lO%jh?dU!WWOy%jz!_%j!_!`?v!`;'S%j;'S;=`%{<%lO%jh?}S!WW!o`Oy%jz;'S%j;'S;=`%{<%lO%jl@bS!WW!ySOy%jz;'S%j;'S;=`%{<%lO%jj@uV!|Q!WWOy%jz!_%j!_!`?v!`!aA[!a;'S%j;'S;=`%{<%lO%jbAcS!|Q!o`Oy%jz;'S%j;'S;=`%{<%lO%jjArYOy%jz}%j}!OBb!O!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjBgW!o`Oy%jz!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjCW[lY!o`Oy%jz}%j}!OCP!O!Q%j!Q![CP![!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jhDRS!zWOy%jz;'S%j;'S;=`%{<%lO%jjDdSpYOy%jz;'S%j;'S;=`%{<%lO%jnDuSo^Oy%jz;'S%j;'S;=`%{<%lO%jjEWU!zWOy%jz#a%j#a#bEj#b;'S%j;'S;=`%{<%lO%jbEoU!o`Oy%jz#d%j#d#eFR#e;'S%j;'S;=`%{<%lO%jbFWU!o`Oy%jz#c%j#c#dFj#d;'S%j;'S;=`%{<%lO%jbFoU!o`Oy%jz#f%j#f#gGR#g;'S%j;'S;=`%{<%lO%jbGWU!o`Oy%jz#h%j#h#iGj#i;'S%j;'S;=`%{<%lO%jbGoU!o`Oy%jz#T%j#T#UHR#U;'S%j;'S;=`%{<%lO%jbHWU!o`Oy%jz#b%j#b#cHj#c;'S%j;'S;=`%{<%lO%jbHoU!o`Oy%jz#h%j#h#iIR#i;'S%j;'S;=`%{<%lO%jbIYS$pQ!o`Oy%jz;'S%j;'S;=`%{<%lO%jjIkSsYOy%jz;'S%j;'S;=`%{<%lO%jfI|U$cUOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jjJeSrYOy%jz;'S%j;'S;=`%{<%lO%jfJvU#PQOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%j`K]P;=`<%l%Z",tokenizers:[P,F,M,N,1,2,3,4,new d("m~RRYZ[z{a~~g~aO$_~~dP!P!Qg~lO$`~~",28,152)],topRules:{StyleSheet:[0,6],Styles:[1,126]},dynamicPrecedences:{94:1},specialized:[{term:147,get:e=>L[e]||-1},{term:148,get:e=>R[e]||-1},{term:4,get:e=>z[e]||-1},{term:28,get:e=>ce[e]||-1},{term:146,get:e=>B[e]||-1}],tokenPrec:2405}),H=e({css:()=>$,cssCompletionSource:()=>Z,cssLanguage:()=>Q,defineCSSCompletionSource:()=>X}),U=null;function W(){if(!U&&typeof document==`object`&&document.body){let{style:e}=document.body,t=[],n=new Set;for(let r in e)r!=`cssText`&&r!=`cssFloat`&&typeof e[r]==`string`&&(/[A-Z]/.test(r)&&(r=r.replace(/[A-Z]/g,e=>`-`+e.toLowerCase())),n.has(r)||(t.push(r),n.add(r)));U=t.sort().map(e=>({type:`property`,label:e,apply:e+`: `}))}return U||[]}var G=`active.after.any-link.autofill.backdrop.before.checked.cue.default.defined.disabled.empty.enabled.file-selector-button.first.first-child.first-letter.first-line.first-of-type.focus.focus-visible.focus-within.fullscreen.has.host.host-context.hover.in-range.indeterminate.invalid.is.lang.last-child.last-of-type.left.link.marker.modal.not.nth-child.nth-last-child.nth-last-of-type.nth-of-type.only-child.only-of-type.optional.out-of-range.part.placeholder.placeholder-shown.read-only.read-write.required.right.root.scope.selection.slotted.target.target-text.valid.visited.where`.split(`.`).map(e=>({type:`class`,label:e})),K=`above.absolute.activeborder.additive.activecaption.after-white-space.ahead.alias.all.all-scroll.alphabetic.alternate.always.antialiased.appworkspace.asterisks.attr.auto.auto-flow.avoid.avoid-column.avoid-page.avoid-region.axis-pan.background.backwards.baseline.below.bidi-override.blink.block.block-axis.bold.bolder.border.border-box.both.bottom.break.break-all.break-word.bullets.button.button-bevel.buttonface.buttonhighlight.buttonshadow.buttontext.calc.capitalize.caps-lock-indicator.caption.captiontext.caret.cell.center.checkbox.circle.cjk-decimal.clear.clip.close-quote.col-resize.collapse.color.color-burn.color-dodge.column.column-reverse.compact.condensed.contain.content.contents.content-box.context-menu.continuous.copy.counter.counters.cover.crop.cross.crosshair.currentcolor.cursive.cyclic.darken.dashed.decimal.decimal-leading-zero.default.default-button.dense.destination-atop.destination-in.destination-out.destination-over.difference.disc.discard.disclosure-closed.disclosure-open.document.dot-dash.dot-dot-dash.dotted.double.down.e-resize.ease.ease-in.ease-in-out.ease-out.element.ellipse.ellipsis.embed.end.ethiopic-abegede-gez.ethiopic-halehame-aa-er.ethiopic-halehame-gez.ew-resize.exclusion.expanded.extends.extra-condensed.extra-expanded.fantasy.fast.fill.fill-box.fixed.flat.flex.flex-end.flex-start.footnotes.forwards.from.geometricPrecision.graytext.grid.groove.hand.hard-light.help.hidden.hide.higher.highlight.highlighttext.horizontal.hsl.hsla.hue.icon.ignore.inactiveborder.inactivecaption.inactivecaptiontext.infinite.infobackground.infotext.inherit.initial.inline.inline-axis.inline-block.inline-flex.inline-grid.inline-table.inset.inside.intrinsic.invert.italic.justify.keep-all.landscape.large.larger.left.level.lighter.lighten.line-through.linear.linear-gradient.lines.list-item.listbox.listitem.local.logical.loud.lower.lower-hexadecimal.lower-latin.lower-norwegian.lowercase.ltr.luminosity.manipulation.match.matrix.matrix3d.medium.menu.menutext.message-box.middle.min-intrinsic.mix.monospace.move.multiple.multiple_mask_images.multiply.n-resize.narrower.ne-resize.nesw-resize.no-close-quote.no-drop.no-open-quote.no-repeat.none.normal.not-allowed.nowrap.ns-resize.numbers.numeric.nw-resize.nwse-resize.oblique.opacity.open-quote.optimizeLegibility.optimizeSpeed.outset.outside.outside-shape.overlay.overline.padding.padding-box.painted.page.paused.perspective.pinch-zoom.plus-darker.plus-lighter.pointer.polygon.portrait.pre.pre-line.pre-wrap.preserve-3d.progress.push-button.radial-gradient.radio.read-only.read-write.read-write-plaintext-only.rectangle.region.relative.repeat.repeating-linear-gradient.repeating-radial-gradient.repeat-x.repeat-y.reset.reverse.rgb.rgba.ridge.right.rotate.rotate3d.rotateX.rotateY.rotateZ.round.row.row-resize.row-reverse.rtl.run-in.running.s-resize.sans-serif.saturation.scale.scale3d.scaleX.scaleY.scaleZ.screen.scroll.scrollbar.scroll-position.se-resize.self-start.self-end.semi-condensed.semi-expanded.separate.serif.show.single.skew.skewX.skewY.skip-white-space.slide.slider-horizontal.slider-vertical.sliderthumb-horizontal.sliderthumb-vertical.slow.small.small-caps.small-caption.smaller.soft-light.solid.source-atop.source-in.source-out.source-over.space.space-around.space-between.space-evenly.spell-out.square.start.static.status-bar.stretch.stroke.stroke-box.sub.subpixel-antialiased.svg_masks.super.sw-resize.symbolic.symbols.system-ui.table.table-caption.table-cell.table-column.table-column-group.table-footer-group.table-header-group.table-row.table-row-group.text.text-bottom.text-top.textarea.textfield.thick.thin.threeddarkshadow.threedface.threedhighlight.threedlightshadow.threedshadow.to.top.transform.translate.translate3d.translateX.translateY.translateZ.transparent.ultra-condensed.ultra-expanded.underline.unidirectional-pan.unset.up.upper-latin.uppercase.url.var.vertical.vertical-text.view-box.visible.visibleFill.visiblePainted.visibleStroke.visual.w-resize.wait.wave.wider.window.windowframe.windowtext.words.wrap.wrap-reverse.x-large.x-small.xor.xx-large.xx-small`.split(`.`).map(e=>({type:`keyword`,label:e})).concat(`aliceblue.antiquewhite.aqua.aquamarine.azure.beige.bisque.black.blanchedalmond.blue.blueviolet.brown.burlywood.cadetblue.chartreuse.chocolate.coral.cornflowerblue.cornsilk.crimson.cyan.darkblue.darkcyan.darkgoldenrod.darkgray.darkgreen.darkkhaki.darkmagenta.darkolivegreen.darkorange.darkorchid.darkred.darksalmon.darkseagreen.darkslateblue.darkslategray.darkturquoise.darkviolet.deeppink.deepskyblue.dimgray.dodgerblue.firebrick.floralwhite.forestgreen.fuchsia.gainsboro.ghostwhite.gold.goldenrod.gray.grey.green.greenyellow.honeydew.hotpink.indianred.indigo.ivory.khaki.lavender.lavenderblush.lawngreen.lemonchiffon.lightblue.lightcoral.lightcyan.lightgoldenrodyellow.lightgray.lightgreen.lightpink.lightsalmon.lightseagreen.lightskyblue.lightslategray.lightsteelblue.lightyellow.lime.limegreen.linen.magenta.maroon.mediumaquamarine.mediumblue.mediumorchid.mediumpurple.mediumseagreen.mediumslateblue.mediumspringgreen.mediumturquoise.mediumvioletred.midnightblue.mintcream.mistyrose.moccasin.navajowhite.navy.oldlace.olive.olivedrab.orange.orangered.orchid.palegoldenrod.palegreen.paleturquoise.palevioletred.papayawhip.peachpuff.peru.pink.plum.powderblue.purple.rebeccapurple.red.rosybrown.royalblue.saddlebrown.salmon.sandybrown.seagreen.seashell.sienna.silver.skyblue.slateblue.slategray.snow.springgreen.steelblue.tan.teal.thistle.tomato.turquoise.violet.wheat.white.whitesmoke.yellow.yellowgreen`.split(`.`).map(e=>({type:`constant`,label:e}))),le=`a.abbr.address.article.aside.b.bdi.bdo.blockquote.body.br.button.canvas.caption.cite.code.col.colgroup.dd.del.details.dfn.dialog.div.dl.dt.em.figcaption.figure.footer.form.header.hgroup.h1.h2.h3.h4.h5.h6.hr.html.i.iframe.img.input.ins.kbd.label.legend.li.main.meter.nav.ol.output.p.pre.ruby.section.select.small.source.span.strong.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.tr.u.ul`.split(`.`).map(e=>({type:`type`,label:e})),ue=[`@charset`,`@color-profile`,`@container`,`@counter-style`,`@font-face`,`@font-feature-values`,`@font-palette-values`,`@import`,`@keyframes`,`@layer`,`@media`,`@namespace`,`@page`,`@position-try`,`@property`,`@scope`,`@starting-style`,`@supports`,`@view-transition`].map(e=>({type:`keyword`,label:e})),q=/^(\w[\w-]*|-\w[\w-]*|)$/,de=/^-(-[\w-]*)?$/;function fe(e,t){if((e.name==`(`||e.type.isError)&&(e=e.parent||e),e.name!=`ArgList`)return!1;let n=e.parent?.firstChild;return n?.name==`Callee`?t.sliceString(n.from,n.to)==`var`:!1}var J=new n,pe=[`Declaration`];function me(e){for(let t=e;;){if(t.type.isTop)return t;if(!(t=t.parent))return e}}function Y(e,n,r){if(n.to-n.from>4096){let i=J.get(n);if(i)return i;let a=[],o=new Set,s=n.cursor(t.IncludeAnonymous);if(s.firstChild())do for(let t of Y(e,s.node,r))o.has(t.label)||(o.add(t.label),a.push(t));while(s.nextSibling());return J.set(n,a),a}else{let t=[],i=new Set;return n.cursor().iterate(n=>{if(r(n)&&n.matchContext(pe)&&n.node.nextSibling?.name==`:`){let r=e.sliceString(n.from,n.to);i.has(r)||(i.add(r),t.push({label:r,type:`variable`}))}}),t}}var X=e=>t=>{let{state:n,pos:r}=t,i=l(n).resolveInner(r,-1),a=i.type.isError&&i.from==i.to-1&&n.doc.sliceString(i.from,i.to)==`-`;if(i.name==`PropertyName`||(a||i.name==`TagName`)&&/^(Block|Styles)$/.test(i.resolve(i.to).name))return{from:i.from,options:W(),validFor:q};if(i.name==`ValueName`)return{from:i.from,options:K,validFor:q};if(i.name==`PseudoClassName`)return{from:i.from,options:G,validFor:q};if(e(i)||(t.explicit||a)&&fe(i,n.doc))return{from:e(i)||a?i.from:r,options:Y(n.doc,me(i),e),validFor:de};if(i.name==`TagName`){for(let{parent:e}=i;e;e=e.parent)if(e.name==`Block`)return{from:i.from,options:W(),validFor:q};return{from:i.from,options:le,validFor:q}}if(i.name==`AtKeyword`)return{from:i.from,options:ue,validFor:q};if(!t.explicit)return null;let o=i.resolve(r),s=o.childBefore(r);return s&&s.name==`:`&&o.name==`PseudoClassSelector`?{from:r,options:G,validFor:q}:s&&s.name==`:`&&o.name==`Declaration`||o.name==`ArgList`?{from:r,options:K,validFor:q}:o.name==`Block`||o.name==`Styles`?{from:r,options:W(),validFor:q}:null},Z=X(e=>e.name==`VariableName`),Q=ee.define({name:`css`,parser:V.configure({props:[s.add({Declaration:c()}),a.add({"Block KeyframeList":i})]}),languageData:{commentTokens:{block:{open:`/*`,close:`*/`}},indentOnInput:/^\s*\}$/,wordChars:`-`}});function $(){return new o(Q,Q.data.of({autocomplete:Z}))}export{Q as n,H as r,$ as t}; \ No newline at end of file diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-DKcsGq7b.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-aCX5cBC3.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-DKcsGq7b.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-aCX5cBC3.js index 7fe5a131..35024725 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-DKcsGq7b.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-aCX5cBC3.js @@ -1,4 +1,4 @@ -import{A as e,B as t,E as n,I as r,K as i,L as a,M as o,O as s,P as c,T as l,a as u,b as d,c as f,f as p,g as m,h,i as g,k as _,m as ee,n as te,p as ne,r as re,v,w as y,x as b,y as ie}from"./index-B377xynC.js";import{t as ae}from"./dist-cLIvjYCL.js";import{html as oe,htmlCompletionSource as se}from"./dist-CwGQmmSf.js";var ce=class e{static create(t,n,r,i,a){return new e(t,n,r,i+(i<<8)+t+(n<<4)|0,a,[],[])}constructor(e,t,n,r,i,a,o){this.type=e,this.value=t,this.from=n,this.hash=r,this.end=i,this.children=a,this.positions=o,this.hashProp=[[y.contextHash,r]]}addChild(e,t){e.prop(y.contextHash)!=this.hash&&(e=new _(e.type,e.children,e.positions,e.length,this.hashProp)),this.children.push(e),this.positions.push(t)}toTree(e,t=this.end){let r=this.children.length-1;return r>=0&&(t=Math.max(t,this.positions[r]+this.children[r].length+this.from)),new _(e.types[this.type],this.children,this.positions,t-this.from).balance({makeTree:(e,t,r)=>new _(n.none,e,t,r,this.hashProp)})}},x;(function(e){e[e.Document=1]=`Document`,e[e.CodeBlock=2]=`CodeBlock`,e[e.FencedCode=3]=`FencedCode`,e[e.Blockquote=4]=`Blockquote`,e[e.HorizontalRule=5]=`HorizontalRule`,e[e.BulletList=6]=`BulletList`,e[e.OrderedList=7]=`OrderedList`,e[e.ListItem=8]=`ListItem`,e[e.ATXHeading1=9]=`ATXHeading1`,e[e.ATXHeading2=10]=`ATXHeading2`,e[e.ATXHeading3=11]=`ATXHeading3`,e[e.ATXHeading4=12]=`ATXHeading4`,e[e.ATXHeading5=13]=`ATXHeading5`,e[e.ATXHeading6=14]=`ATXHeading6`,e[e.SetextHeading1=15]=`SetextHeading1`,e[e.SetextHeading2=16]=`SetextHeading2`,e[e.HTMLBlock=17]=`HTMLBlock`,e[e.LinkReference=18]=`LinkReference`,e[e.Paragraph=19]=`Paragraph`,e[e.CommentBlock=20]=`CommentBlock`,e[e.ProcessingInstructionBlock=21]=`ProcessingInstructionBlock`,e[e.Escape=22]=`Escape`,e[e.Entity=23]=`Entity`,e[e.HardBreak=24]=`HardBreak`,e[e.Emphasis=25]=`Emphasis`,e[e.StrongEmphasis=26]=`StrongEmphasis`,e[e.Link=27]=`Link`,e[e.Image=28]=`Image`,e[e.InlineCode=29]=`InlineCode`,e[e.HTMLTag=30]=`HTMLTag`,e[e.Comment=31]=`Comment`,e[e.ProcessingInstruction=32]=`ProcessingInstruction`,e[e.Autolink=33]=`Autolink`,e[e.HeaderMark=34]=`HeaderMark`,e[e.QuoteMark=35]=`QuoteMark`,e[e.ListMark=36]=`ListMark`,e[e.LinkMark=37]=`LinkMark`,e[e.EmphasisMark=38]=`EmphasisMark`,e[e.CodeMark=39]=`CodeMark`,e[e.CodeText=40]=`CodeText`,e[e.CodeInfo=41]=`CodeInfo`,e[e.LinkTitle=42]=`LinkTitle`,e[e.LinkLabel=43]=`LinkLabel`,e[e.URL=44]=`URL`})(x||={});var le=class{constructor(e,t){this.start=e,this.content=t,this.marks=[],this.parsers=[]}},ue=class{constructor(){this.text=``,this.baseIndent=0,this.basePos=0,this.depth=0,this.markers=[],this.pos=0,this.indent=0,this.next=-1}forward(){this.basePos>this.pos&&this.forwardInner()}forwardInner(){let e=this.skipSpace(this.basePos);this.indent=this.countIndent(e,this.pos,this.indent),this.pos=e,this.next=e==this.text.length?-1:this.text.charCodeAt(e)}skipSpace(e){return C(this.text,e)}reset(e){for(this.text=e,this.baseIndent=this.basePos=this.pos=this.indent=0,this.forwardInner(),this.depth=1;this.markers.length;)this.markers.pop()}moveBase(e){this.basePos=e,this.baseIndent=this.countIndent(e,this.pos,this.indent)}moveBaseColumn(e){this.baseIndent=e,this.basePos=this.findColumn(e)}addMarker(e){this.markers.push(e)}countIndent(e,t=0,n=0){for(let r=t;r=t.stack[n.depth+1].value+n.baseIndent)return!0;if(n.indent>=n.baseIndent+4)return!1;let r=(e.type==x.OrderedList?E:T)(n,t,!1);return r>0&&(e.type!=x.BulletList||w(n,t,!1)<0)&&n.text.charCodeAt(n.pos+r-1)==e.value}var fe={[x.Blockquote](e,t,n){return n.next==62?(n.markers.push(L(x.QuoteMark,t.lineStart+n.pos,t.lineStart+n.pos+1)),n.moveBase(n.pos+(S(n.text.charCodeAt(n.pos+1))?2:1)),e.end=t.lineStart+n.text.length,!0):!1},[x.ListItem](e,t,n){return n.indent-1?!1:(n.moveBaseColumn(n.baseIndent+e.value),!0)},[x.OrderedList]:de,[x.BulletList]:de,[x.Document](){return!0}};function S(e){return e==32||e==9||e==10||e==13}function C(e,t=0){for(;tn&&S(e.charCodeAt(t-1));)t--;return t}function me(e){if(e.next!=96&&e.next!=126)return-1;let t=e.pos+1;for(;t-1&&e.depth==t.stack.length&&t.parser.leafBlockParsers.indexOf(Te.SetextHeading)>-1||r<3?-1:1}function ge(e,t){for(let n=e.stack.length-1;n>=0;n--)if(e.stack[n].type==t)return!0;return!1}function T(e,t,n){return(e.next==45||e.next==43||e.next==42)&&(e.pos==e.text.length-1||S(e.text.charCodeAt(e.pos+1)))&&(!n||ge(t,x.BulletList)||e.skipSpace(e.pos+2)=48&&i<=57;){if(r++,r==e.text.length)return-1;i=e.text.charCodeAt(r)}return r==e.pos||r>e.pos+9||i!=46&&i!=41||re.pos+1||e.next!=49)?-1:r+1-e.pos}function _e(e){if(e.next!=35)return-1;let t=e.pos+1;for(;t6?-1:n}function ve(e){if(e.next!=45&&e.next!=61||e.indent>=e.baseIndent+4)return-1;let t=e.pos+1;for(;t/,be=/\?>/,O=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*/,be=/\?>/,O=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*`}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),Q=at.configure({wrap:I(rt,it)});function ot(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(rt),(e.nestedAttributes||[]).concat(it))),new a(n?at.configure({wrap:n,dialect:t}):t?Q.configure({dialect:t}):Q,[Q.data.of({autocomplete:tt(e)}),e.autoCloseTags===!1?[]:st,ae().support,ne().support])}var $=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `)),st=n.inputHandler.of((e,n,r,i,a)=>{if(e.composing||e.state.readOnly||n!=r||i!=`>`&&i!=`/`||!Q.isActiveAt(e.state,n,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let n=s.doc.sliceString(e.from-1,e.to)==i,{head:r}=e,a=l(s).resolveInner(r,-1),o;if(n&&i==`>`&&a.name==`EndTag`){let t=a.parent;if(t.parent?.lastChild?.name!=`CloseTag`&&(o=K(s.doc,t.parent,r))&&!$.has(o))return{range:e,changes:{from:r,to:r+ +(s.doc.sliceString(r,r+1)===`>`),insert:``}}}else if(n&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==r-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,r))&&!$.has(o)){let e=r+ +(s.doc.sliceString(r,r+1)===`>`),n=`${o}>`;return{range:t.cursor(r+n.length,-1),changes:{from:r,to:e,insert:n}}}}return{range:e}});return c.changes.empty?!1:(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{ot as html,et as htmlCompletionSource}; \ No newline at end of file +import{A as e,I as t,M as n,b as r,f as i,i as a,m as o,o as s,t as c,v as l,x as u}from"./index-DAxEjaIY.js";import{n as d,r as ee,t as te}from"./dist-DlsKzrFf.js";import{n as f,t as ne}from"./dist-D4hiqd_b.js";import{a as re,i as ie,n as ae,o as oe,r as p}from"./dist-p8Em0oNh.js";var se=55,ce=1,le=56,ue=2,de=57,fe=3,m=4,pe=5,h=6,g=7,me=8,he=9,ge=10,_e=11,ve=12,ye=13,_=58,be=14,xe=15,v=59,y=21,Se=23,b=24,Ce=25,x=27,S=28,we=29,Te=32,Ee=35,De=37,Oe=38,ke=0,Ae=1,je={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},Me={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},C={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function Ne(e){return e==45||e==46||e==58||e>=65&&e<=90||e==95||e>=97&&e<=122||e>=161}var w=null,T=null,E=0;function D(e,t){let n=e.pos+t;if(E==n&&T==e)return w;let r=e.peek(t),i=``;for(;Ne(r);)i+=String.fromCharCode(r),r=e.peek(++t);return T=e,E=n,w=i?i.toLowerCase():r==Pe||r==Fe?void 0:null}var O=60,k=62,A=47,Pe=63,Fe=33,Ie=45;function j(e,t){this.name=e,this.parent=t}var Le=[h,ge,g,me,he],Re=new te({start:null,shift(e,t,n,r){return Le.indexOf(t)>-1?new j(D(r,1)||``,e):e},reduce(e,t){return t==y&&e?e.parent:e},reuse(e,t,n,r){let i=t.type.id;return i==h||i==De?new j(D(r,1)||``,e):e},strict:!1}),ze=new d((e,t)=>{if(e.next!=O){e.next<0&&t.context&&e.acceptToken(_);return}e.advance();let n=e.next==A;n&&e.advance();let r=D(e,0);if(r===void 0)return;if(!r)return e.acceptToken(n?xe:be);let i=t.context?t.context.name:null;if(n){if(r==i)return e.acceptToken(_e);if(i&&Me[i])return e.acceptToken(_,-2);if(t.dialectEnabled(ke))return e.acceptToken(ve);for(let e=t.context;e;e=e.parent)if(e.name==r)return;e.acceptToken(ye)}else{if(r==`script`)return e.acceptToken(g);if(r==`style`)return e.acceptToken(me);if(r==`textarea`)return e.acceptToken(he);if(je.hasOwnProperty(r))return e.acceptToken(ge);i&&C[i]&&C[i][r]?e.acceptToken(_,-1):e.acceptToken(h)}},{contextual:!0}),Be=new d(e=>{for(let t=0,n=0;;n++){if(e.next<0){n&&e.acceptToken(v);break}if(e.next==Ie)t++;else if(e.next==k&&t>=2){n>=3&&e.acceptToken(v,-2);break}else t=0;e.advance()}});function Ve(e){for(;e;e=e.parent)if(e.name==`svg`||e.name==`math`)return!0;return!1}var He=new d((e,t)=>{if(e.next==A&&e.peek(1)==k){let n=t.dialectEnabled(Ae)||Ve(t.context);e.acceptToken(n?pe:m,2)}else e.next==k&&e.acceptToken(m,1)});function M(e,t,n){let r=2+e.length;return new d(i=>{for(let a=0,o=0,s=0;;s++){if(i.next<0){s&&i.acceptToken(t);break}if(a==0&&i.next==O||a==1&&i.next==A||a>=2&&ao?i.acceptToken(t,-o):i.acceptToken(n,-(o-2));break}else if((i.next==10||i.next==13)&&s){i.acceptToken(t,1);break}else a=o=0;i.advance()}})}var Ue=M(`script`,se,ce),We=M(`style`,le,ue),Ge=M(`textarea`,de,fe),Ke=r({"Text RawText IncompleteTag IncompleteCloseTag":u.content,"StartTag StartCloseTag SelfClosingEndTag EndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/TagName":[u.tagName,u.invalid],AttributeName:u.attributeName,"AttributeValue UnquotedAttributeValue":u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta}),qe=ee.deserialize({version:14,states:",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[",stateData:`,c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~`,goto:"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",nodeNames:`⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl`,maxTerm:68,context:Re,nodeProps:[[`closedBy`,-10,1,2,3,7,8,9,10,11,12,13,`EndTag`,6,`EndTag SelfClosingEndTag`,-4,22,31,34,37,`CloseTag`],[`openedBy`,4,`StartTag StartCloseTag`,5,`StartTag`,-4,30,33,36,38,`OpenTag`],[`group`,-10,14,15,18,19,20,21,40,41,42,43,`Entity`,17,`Entity TextContent`,-3,29,32,35,`TextContent Entity`],[`isolate`,-11,22,30,31,33,34,36,37,38,39,42,43,`ltr`,-3,27,28,40,``]],propSources:[Ke],skippedNodes:[0],repeatNodeCount:9,tokenData:"!]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VP<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!{let n=e.type.id;if(n==we)return F(e,t,r);if(n==Te)return F(e,t,i);if(n==Ee)return F(e,t,a);if(n==y&&o.length){let n=e.node,r=n.firstChild,i=r&&P(r,t),a;if(i){for(let e of o)if(e.tag==i&&(!e.attrs||e.attrs(a||=N(r,t)))){let t=n.lastChild,i=t.type.id==Oe?t.from:n.to;if(i>r.to)return{parser:e.parser,overlay:[{from:r.to,to:i}]}}}}if(s&&n==b){let n=e.node,r;if(r=n.firstChild){let e=s[t.read(r.from,r.to)];if(e)for(let r of e){if(r.tagName&&r.tagName!=P(n.parent,t))continue;let e=n.lastChild;if(e.type.id==x){let t=e.from+1,n=e.lastChild,i=e.to-(n&&n.isError?0:1);if(i>t)return{parser:r.parser,overlay:[{from:t,to:i}],bracketed:!0}}else if(e.type.id==S)return{parser:r.parser,overlay:[{from:e.from,to:e.to}]}}}}return null})}var L=[`_blank`,`_self`,`_top`,`_parent`],R=[`ascii`,`utf-8`,`utf-16`,`latin1`,`latin1`],z=[`get`,`post`,`put`,`delete`],B=[`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`],V=[`true`,`false`],H={},Je={a:{attrs:{href:null,ping:null,type:null,media:null,target:L,hreflang:null}},abbr:H,address:H,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[`default`,`rect`,`circle`,`poly`]}},article:H,aside:H,audio:{attrs:{src:null,mediagroup:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`none`,`metadata`,`auto`],autoplay:[`autoplay`],loop:[`loop`],controls:[`controls`]}},b:H,base:{attrs:{href:null,target:L}},bdi:H,bdo:H,blockquote:{attrs:{cite:null}},body:H,br:H,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[`autofocus`],disabled:[`autofocus`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,type:[`submit`,`reset`,`button`]}},canvas:{attrs:{width:null,height:null}},caption:H,center:H,cite:H,code:H,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[`command`,`checkbox`,`radio`],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[`disabled`],checked:[`checked`]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[`disabled`],multiple:[`multiple`]}},datalist:{attrs:{data:null}},dd:H,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[`open`]}},dfn:H,div:H,dl:H,dt:H,em:H,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[`disabled`],form:null,name:null}},figcaption:H,figure:H,footer:H,form:{attrs:{action:null,name:null,"accept-charset":R,autocomplete:[`on`,`off`],enctype:B,method:z,novalidate:[`novalidate`],target:L}},h1:H,h2:H,h3:H,h4:H,h5:H,h6:H,head:{children:[`title`,`base`,`link`,`style`,`meta`,`script`,`noscript`,`command`]},header:H,hgroup:H,hr:H,html:{attrs:{manifest:null}},i:H,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[`allow-top-navigation`,`allow-same-origin`,`allow-forms`,`allow-scripts`],seamless:[`seamless`]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[`audio/*`,`video/*`,`image/*`],autocomplete:[`on`,`off`],autofocus:[`autofocus`],checked:[`checked`],disabled:[`disabled`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,multiple:[`multiple`],readonly:[`readonly`],required:[`required`],type:[`hidden`,`text`,`search`,`tel`,`url`,`email`,`password`,`datetime`,`date`,`month`,`week`,`time`,`datetime-local`,`number`,`range`,`color`,`checkbox`,`radio`,`file`,`submit`,`image`,`reset`,`button`]}},ins:{attrs:{cite:null,datetime:null}},kbd:H,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[`autofocus`],disabled:[`disabled`],keytype:[`RSA`]}},label:{attrs:{for:null,form:null}},legend:H,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[`all`,`16x16`,`16x16 32x32`,`16x16 32x32 64x64`]}},map:{attrs:{name:null}},mark:H,menu:{attrs:{label:null,type:[`list`,`context`,`toolbar`]}},meta:{attrs:{content:null,charset:R,name:[`viewport`,`application-name`,`author`,`description`,`generator`,`keywords`],"http-equiv":[`content-language`,`content-type`,`default-style`,`refresh`]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:H,noscript:H,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[`typemustmatch`]}},ol:{attrs:{reversed:[`reversed`],start:null,type:[`1`,`a`,`A`,`i`,`I`]},children:[`li`,`script`,`template`,`ul`,`ol`]},optgroup:{attrs:{disabled:[`disabled`],label:null}},option:{attrs:{disabled:[`disabled`],label:null,selected:[`selected`],value:null}},output:{attrs:{for:null,form:null,name:null}},p:H,param:{attrs:{name:null,value:null}},pre:H,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:H,rt:H,ruby:H,samp:H,script:{attrs:{type:[`text/javascript`],src:null,async:[`async`],defer:[`defer`],charset:R}},section:H,select:{attrs:{form:null,name:null,size:null,autofocus:[`autofocus`],disabled:[`disabled`],multiple:[`multiple`]}},slot:{attrs:{name:null}},small:H,source:{attrs:{src:null,type:null,media:null}},span:H,strong:H,style:{attrs:{type:[`text/css`],media:null,scoped:null}},sub:H,summary:H,sup:H,table:H,tbody:H,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:H,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[`autofocus`],disabled:[`disabled`],readonly:[`readonly`],required:[`required`],wrap:[`soft`,`hard`]}},tfoot:H,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[`row`,`col`,`rowgroup`,`colgroup`]}},thead:H,time:{attrs:{datetime:null}},title:H,tr:H,track:{attrs:{src:null,label:null,default:null,kind:[`subtitles`,`captions`,`descriptions`,`chapters`,`metadata`],srclang:null}},ul:{children:[`li`,`script`,`template`,`ul`,`ol`]},var:H,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`auto`,`metadata`,`none`],autoplay:[`autoplay`],mediagroup:[`movie`],muted:[`muted`],controls:[`controls`]}},wbr:H},U={accesskey:null,class:null,contenteditable:V,contextmenu:null,dir:[`ltr`,`rtl`,`auto`],draggable:[`true`,`false`,`auto`],dropzone:[`copy`,`move`,`link`,`string:`,`file:`],hidden:[`hidden`],id:null,inert:[`inert`],itemid:null,itemprop:null,itemref:null,itemscope:[`itemscope`],itemtype:null,lang:[`ar`,`bn`,`de`,`en-GB`,`en-US`,`es`,`fr`,`hi`,`id`,`ja`,`pa`,`pt`,`ru`,`tr`,`zh`],spellcheck:V,autocorrect:V,autocapitalize:V,style:null,tabindex:null,title:null,translate:[`yes`,`no`],rel:[`stylesheet`,`alternate`,`author`,`bookmark`,`help`,`license`,`next`,`nofollow`,`noreferrer`,`prefetch`,`prev`,`search`,`tag`],role:`alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer`.split(` `),"aria-activedescendant":null,"aria-atomic":V,"aria-autocomplete":[`inline`,`list`,`both`,`none`],"aria-busy":V,"aria-checked":[`true`,`false`,`mixed`,`undefined`],"aria-controls":null,"aria-describedby":null,"aria-disabled":V,"aria-dropeffect":null,"aria-expanded":[`true`,`false`,`undefined`],"aria-flowto":null,"aria-grabbed":[`true`,`false`,`undefined`],"aria-haspopup":V,"aria-hidden":V,"aria-invalid":[`true`,`false`,`grammar`,`spelling`],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":[`off`,`polite`,`assertive`],"aria-multiline":V,"aria-multiselectable":V,"aria-owns":null,"aria-posinset":null,"aria-pressed":[`true`,`false`,`mixed`,`undefined`],"aria-readonly":V,"aria-relevant":null,"aria-required":V,"aria-selected":[`true`,`false`,`undefined`],"aria-setsize":null,"aria-sort":[`ascending`,`descending`,`none`,`other`],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},W=`beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload`.split(` `).map(e=>`on`+e);for(let e of W)U[e]=null;var G=class{constructor(e,t){this.tags={...Je,...e},this.globalAttrs={...U,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};G.default=new G;function K(e,t,n=e.length){if(!t)return``;let r=t.firstChild,i=r&&r.getChild(`TagName`);return i?e.sliceString(i.from,Math.min(i.to,n)):``}function q(e,t=!1){for(;e;e=e.parent)if(e.name==`Element`)if(t)t=!1;else return e;return null}function J(e,t,n){return n.tags[K(e,q(t))]?.children||n.allTags}function Y(e,t){let n=[];for(let r=q(t);r&&!r.type.isTop;r=q(r.parent)){let i=K(e,r);if(i&&r.lastChild.name==`CloseTag`)break;i&&n.indexOf(i)<0&&(t.name==`EndTag`||t.from>=r.firstChild.to)&&n.push(i)}return n}var X=/^[:\-\.\w\u00b7-\uffff]*$/;function Ye(e,t,n,r,i){let a=/\s*>/.test(e.sliceDoc(i,i+5))?``:`>`,o=q(n,n.name==`StartTag`||n.name==`TagName`);return{from:r,to:i,options:J(e.doc,o,t).map(e=>({label:e,type:`type`})).concat(Y(e.doc,n).map((e,t)=>({label:`/`+e,apply:`/`+e+a,type:`type`,boost:99-t}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Xe(e,t,n,r){let i=/\s*>/.test(e.sliceDoc(r,r+5))?``:`>`;return{from:n,to:r,options:Y(e.doc,t).map((e,t)=>({label:e,apply:e+i,type:`type`,boost:99-t})),validFor:X}}function Ze(e,t,n,r){let i=[],a=0;for(let r of J(e.doc,n,t))i.push({label:`<`+r,type:`type`});for(let t of Y(e.doc,n))i.push({label:``,type:`type`,boost:99-a++});return{from:r,to:r,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function Qe(e,t,n,r,i){let a=q(n),o=a?t.tags[K(e.doc,a)]:null,s=o&&o.attrs?Object.keys(o.attrs):[];return{from:r,to:i,options:(o&&o.globalAttrs===!1?s:s.length?s.concat(t.globalAttrNames):t.globalAttrNames).map(e=>({label:e,type:`property`})),validFor:X}}function $e(e,t,n,r,i){let a=n.parent?.getChild(`AttributeName`),o=[],s;if(a){let c=e.sliceDoc(a.from,a.to),l=t.globalAttrs[c];if(!l){let r=q(n),i=r?t.tags[K(e.doc,r)]:null;l=i?.attrs&&i.attrs[c]}if(l){let t=e.sliceDoc(r,i).toLowerCase(),n=`"`,a=`"`;/^['"]/.test(t)?(s=t[0]==`"`?/^[^"]*$/:/^[^']*$/,n=``,a=e.sliceDoc(i,i+1)==t[0]?``:t[0],t=t.slice(1),r++):s=/^[^\s<>='"]*$/;for(let e of l)o.push({label:e,apply:n+e+a,type:`constant`})}}return{from:r,to:i,options:o,validFor:s}}function Z(e,t){let{state:n,pos:r}=t,i=l(n).resolveInner(r,-1),a=i.resolve(r);for(let e=r,t;a==i&&(t=i.childBefore(e));){let n=t.lastChild;if(!n||!n.type.isError||n.fromZ(r,e)}var nt=p.parser.configure({top:`SingleExpression`}),rt=[{tag:`script`,attrs:e=>e.type==`text/typescript`||e.lang==`ts`,parser:oe.parser},{tag:`script`,attrs:e=>e.type==`text/babel`||e.type==`text/jsx`,parser:ie.parser},{tag:`script`,attrs:e=>e.type==`text/typescript-jsx`,parser:re.parser},{tag:`script`,attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:nt},{tag:`script`,attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:p.parser},{tag:`style`,attrs(e){return(!e.lang||e.lang==`css`)&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:f.parser}],it=[{name:`style`,parser:f.parser.configure({top:`Styles`})}].concat(W.map(e=>({name:e,parser:p.parser}))),at=c.define({name:`html`,parser:qe.configure({props:[o.add({Element(e){let t=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+t[0].length?e.continue():e.lineIndent(e.node.from)+(t[2]?0:e.unit)},"OpenTag CloseTag SelfClosingTag"(e){return e.column(e.node.from)+e.unit},Document(e){if(e.pos+/\s*/.exec(e.textAfter)[0].lengthe.getChild(`TagName`)})]}),languageData:{commentTokens:{block:{open:``}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),Q=at.configure({wrap:I(rt,it)});function ot(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(rt),(e.nestedAttributes||[]).concat(it))),new a(n?at.configure({wrap:n,dialect:t}):t?Q.configure({dialect:t}):Q,[Q.data.of({autocomplete:tt(e)}),e.autoCloseTags===!1?[]:st,ae().support,ne().support])}var $=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `)),st=n.inputHandler.of((e,n,r,i,a)=>{if(e.composing||e.state.readOnly||n!=r||i!=`>`&&i!=`/`||!Q.isActiveAt(e.state,n,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let n=s.doc.sliceString(e.from-1,e.to)==i,{head:r}=e,a=l(s).resolveInner(r,-1),o;if(n&&i==`>`&&a.name==`EndTag`){let t=a.parent;if(t.parent?.lastChild?.name!=`CloseTag`&&(o=K(s.doc,t.parent,r))&&!$.has(o))return{range:e,changes:{from:r,to:r+ +(s.doc.sliceString(r,r+1)===`>`),insert:``}}}else if(n&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==r-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,r))&&!$.has(o)){let e=r+ +(s.doc.sliceString(r,r+1)===`>`),n=`${o}>`;return{range:t.cursor(r+n.length,-1),changes:{from:r,to:e,insert:n}}}}return{range:e}});return c.changes.empty?!1:(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{ot as html,et as htmlCompletionSource}; \ No newline at end of file diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-aCX5cBC3.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-Cv27Jldz.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-aCX5cBC3.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-Cv27Jldz.js index 35024725..00f097a0 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-aCX5cBC3.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-Cv27Jldz.js @@ -1,4 +1,4 @@ -import{A as e,B as t,E as n,I as r,K as i,L as a,M as o,O as s,P as c,T as l,a as u,b as d,c as f,f as p,g as m,h,i as g,k as _,m as ee,n as te,p as ne,r as re,v,w as y,x as b,y as ie}from"./index-DSHMid84.js";import{t as ae}from"./dist-C_2x3ggP.js";import{html as oe,htmlCompletionSource as se}from"./dist-D1k0UEHx.js";var ce=class e{static create(t,n,r,i,a){return new e(t,n,r,i+(i<<8)+t+(n<<4)|0,a,[],[])}constructor(e,t,n,r,i,a,o){this.type=e,this.value=t,this.from=n,this.hash=r,this.end=i,this.children=a,this.positions=o,this.hashProp=[[y.contextHash,r]]}addChild(e,t){e.prop(y.contextHash)!=this.hash&&(e=new _(e.type,e.children,e.positions,e.length,this.hashProp)),this.children.push(e),this.positions.push(t)}toTree(e,t=this.end){let r=this.children.length-1;return r>=0&&(t=Math.max(t,this.positions[r]+this.children[r].length+this.from)),new _(e.types[this.type],this.children,this.positions,t-this.from).balance({makeTree:(e,t,r)=>new _(n.none,e,t,r,this.hashProp)})}},x;(function(e){e[e.Document=1]=`Document`,e[e.CodeBlock=2]=`CodeBlock`,e[e.FencedCode=3]=`FencedCode`,e[e.Blockquote=4]=`Blockquote`,e[e.HorizontalRule=5]=`HorizontalRule`,e[e.BulletList=6]=`BulletList`,e[e.OrderedList=7]=`OrderedList`,e[e.ListItem=8]=`ListItem`,e[e.ATXHeading1=9]=`ATXHeading1`,e[e.ATXHeading2=10]=`ATXHeading2`,e[e.ATXHeading3=11]=`ATXHeading3`,e[e.ATXHeading4=12]=`ATXHeading4`,e[e.ATXHeading5=13]=`ATXHeading5`,e[e.ATXHeading6=14]=`ATXHeading6`,e[e.SetextHeading1=15]=`SetextHeading1`,e[e.SetextHeading2=16]=`SetextHeading2`,e[e.HTMLBlock=17]=`HTMLBlock`,e[e.LinkReference=18]=`LinkReference`,e[e.Paragraph=19]=`Paragraph`,e[e.CommentBlock=20]=`CommentBlock`,e[e.ProcessingInstructionBlock=21]=`ProcessingInstructionBlock`,e[e.Escape=22]=`Escape`,e[e.Entity=23]=`Entity`,e[e.HardBreak=24]=`HardBreak`,e[e.Emphasis=25]=`Emphasis`,e[e.StrongEmphasis=26]=`StrongEmphasis`,e[e.Link=27]=`Link`,e[e.Image=28]=`Image`,e[e.InlineCode=29]=`InlineCode`,e[e.HTMLTag=30]=`HTMLTag`,e[e.Comment=31]=`Comment`,e[e.ProcessingInstruction=32]=`ProcessingInstruction`,e[e.Autolink=33]=`Autolink`,e[e.HeaderMark=34]=`HeaderMark`,e[e.QuoteMark=35]=`QuoteMark`,e[e.ListMark=36]=`ListMark`,e[e.LinkMark=37]=`LinkMark`,e[e.EmphasisMark=38]=`EmphasisMark`,e[e.CodeMark=39]=`CodeMark`,e[e.CodeText=40]=`CodeText`,e[e.CodeInfo=41]=`CodeInfo`,e[e.LinkTitle=42]=`LinkTitle`,e[e.LinkLabel=43]=`LinkLabel`,e[e.URL=44]=`URL`})(x||={});var le=class{constructor(e,t){this.start=e,this.content=t,this.marks=[],this.parsers=[]}},ue=class{constructor(){this.text=``,this.baseIndent=0,this.basePos=0,this.depth=0,this.markers=[],this.pos=0,this.indent=0,this.next=-1}forward(){this.basePos>this.pos&&this.forwardInner()}forwardInner(){let e=this.skipSpace(this.basePos);this.indent=this.countIndent(e,this.pos,this.indent),this.pos=e,this.next=e==this.text.length?-1:this.text.charCodeAt(e)}skipSpace(e){return C(this.text,e)}reset(e){for(this.text=e,this.baseIndent=this.basePos=this.pos=this.indent=0,this.forwardInner(),this.depth=1;this.markers.length;)this.markers.pop()}moveBase(e){this.basePos=e,this.baseIndent=this.countIndent(e,this.pos,this.indent)}moveBaseColumn(e){this.baseIndent=e,this.basePos=this.findColumn(e)}addMarker(e){this.markers.push(e)}countIndent(e,t=0,n=0){for(let r=t;r=t.stack[n.depth+1].value+n.baseIndent)return!0;if(n.indent>=n.baseIndent+4)return!1;let r=(e.type==x.OrderedList?E:T)(n,t,!1);return r>0&&(e.type!=x.BulletList||w(n,t,!1)<0)&&n.text.charCodeAt(n.pos+r-1)==e.value}var fe={[x.Blockquote](e,t,n){return n.next==62?(n.markers.push(L(x.QuoteMark,t.lineStart+n.pos,t.lineStart+n.pos+1)),n.moveBase(n.pos+(S(n.text.charCodeAt(n.pos+1))?2:1)),e.end=t.lineStart+n.text.length,!0):!1},[x.ListItem](e,t,n){return n.indent-1?!1:(n.moveBaseColumn(n.baseIndent+e.value),!0)},[x.OrderedList]:de,[x.BulletList]:de,[x.Document](){return!0}};function S(e){return e==32||e==9||e==10||e==13}function C(e,t=0){for(;tn&&S(e.charCodeAt(t-1));)t--;return t}function me(e){if(e.next!=96&&e.next!=126)return-1;let t=e.pos+1;for(;t-1&&e.depth==t.stack.length&&t.parser.leafBlockParsers.indexOf(Te.SetextHeading)>-1||r<3?-1:1}function ge(e,t){for(let n=e.stack.length-1;n>=0;n--)if(e.stack[n].type==t)return!0;return!1}function T(e,t,n){return(e.next==45||e.next==43||e.next==42)&&(e.pos==e.text.length-1||S(e.text.charCodeAt(e.pos+1)))&&(!n||ge(t,x.BulletList)||e.skipSpace(e.pos+2)=48&&i<=57;){if(r++,r==e.text.length)return-1;i=e.text.charCodeAt(r)}return r==e.pos||r>e.pos+9||i!=46&&i!=41||re.pos+1||e.next!=49)?-1:r+1-e.pos}function _e(e){if(e.next!=35)return-1;let t=e.pos+1;for(;t6?-1:n}function ve(e){if(e.next!=45&&e.next!=61||e.indent>=e.baseIndent+4)return-1;let t=e.pos+1;for(;t/,be=/\?>/,O=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*/,be=/\?>/,O=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*`}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),Q=at.configure({wrap:I(rt,it)});function ot(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(rt),(e.nestedAttributes||[]).concat(it))),new a(n?at.configure({wrap:n,dialect:t}):t?Q.configure({dialect:t}):Q,[Q.data.of({autocomplete:tt(e)}),e.autoCloseTags===!1?[]:st,ae().support,ne().support])}var $=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `)),st=n.inputHandler.of((e,n,r,i,a)=>{if(e.composing||e.state.readOnly||n!=r||i!=`>`&&i!=`/`||!Q.isActiveAt(e.state,n,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let n=s.doc.sliceString(e.from-1,e.to)==i,{head:r}=e,a=l(s).resolveInner(r,-1),o;if(n&&i==`>`&&a.name==`EndTag`){let t=a.parent;if(t.parent?.lastChild?.name!=`CloseTag`&&(o=K(s.doc,t.parent,r))&&!$.has(o))return{range:e,changes:{from:r,to:r+ +(s.doc.sliceString(r,r+1)===`>`),insert:``}}}else if(n&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==r-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,r))&&!$.has(o)){let e=r+ +(s.doc.sliceString(r,r+1)===`>`),n=`${o}>`;return{range:t.cursor(r+n.length,-1),changes:{from:r,to:e,insert:n}}}}return{range:e}});return c.changes.empty?!1:(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{ot as html,et as htmlCompletionSource}; \ No newline at end of file +import{A as e,I as t,M as n,b as r,f as i,i as a,m as o,o as s,t as c,v as l,x as u}from"./index-nWZaQUdZ.js";import{n as d,r as ee,t as te}from"./dist-fdzu-F4-.js";import{n as f,t as ne}from"./dist-iLl8KPXM.js";import{a as re,i as ie,n as ae,o as oe,r as p}from"./dist-CCXomA9h.js";var se=55,ce=1,le=56,ue=2,de=57,fe=3,m=4,pe=5,h=6,g=7,me=8,he=9,ge=10,_e=11,ve=12,ye=13,_=58,be=14,xe=15,v=59,y=21,Se=23,b=24,Ce=25,x=27,S=28,we=29,Te=32,Ee=35,De=37,Oe=38,ke=0,Ae=1,je={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},Me={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},C={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function Ne(e){return e==45||e==46||e==58||e>=65&&e<=90||e==95||e>=97&&e<=122||e>=161}var w=null,T=null,E=0;function D(e,t){let n=e.pos+t;if(E==n&&T==e)return w;let r=e.peek(t),i=``;for(;Ne(r);)i+=String.fromCharCode(r),r=e.peek(++t);return T=e,E=n,w=i?i.toLowerCase():r==Pe||r==Fe?void 0:null}var O=60,k=62,A=47,Pe=63,Fe=33,Ie=45;function j(e,t){this.name=e,this.parent=t}var Le=[h,ge,g,me,he],Re=new te({start:null,shift(e,t,n,r){return Le.indexOf(t)>-1?new j(D(r,1)||``,e):e},reduce(e,t){return t==y&&e?e.parent:e},reuse(e,t,n,r){let i=t.type.id;return i==h||i==De?new j(D(r,1)||``,e):e},strict:!1}),ze=new d((e,t)=>{if(e.next!=O){e.next<0&&t.context&&e.acceptToken(_);return}e.advance();let n=e.next==A;n&&e.advance();let r=D(e,0);if(r===void 0)return;if(!r)return e.acceptToken(n?xe:be);let i=t.context?t.context.name:null;if(n){if(r==i)return e.acceptToken(_e);if(i&&Me[i])return e.acceptToken(_,-2);if(t.dialectEnabled(ke))return e.acceptToken(ve);for(let e=t.context;e;e=e.parent)if(e.name==r)return;e.acceptToken(ye)}else{if(r==`script`)return e.acceptToken(g);if(r==`style`)return e.acceptToken(me);if(r==`textarea`)return e.acceptToken(he);if(je.hasOwnProperty(r))return e.acceptToken(ge);i&&C[i]&&C[i][r]?e.acceptToken(_,-1):e.acceptToken(h)}},{contextual:!0}),Be=new d(e=>{for(let t=0,n=0;;n++){if(e.next<0){n&&e.acceptToken(v);break}if(e.next==Ie)t++;else if(e.next==k&&t>=2){n>=3&&e.acceptToken(v,-2);break}else t=0;e.advance()}});function Ve(e){for(;e;e=e.parent)if(e.name==`svg`||e.name==`math`)return!0;return!1}var He=new d((e,t)=>{if(e.next==A&&e.peek(1)==k){let n=t.dialectEnabled(Ae)||Ve(t.context);e.acceptToken(n?pe:m,2)}else e.next==k&&e.acceptToken(m,1)});function M(e,t,n){let r=2+e.length;return new d(i=>{for(let a=0,o=0,s=0;;s++){if(i.next<0){s&&i.acceptToken(t);break}if(a==0&&i.next==O||a==1&&i.next==A||a>=2&&ao?i.acceptToken(t,-o):i.acceptToken(n,-(o-2));break}else if((i.next==10||i.next==13)&&s){i.acceptToken(t,1);break}else a=o=0;i.advance()}})}var Ue=M(`script`,se,ce),We=M(`style`,le,ue),Ge=M(`textarea`,de,fe),Ke=r({"Text RawText IncompleteTag IncompleteCloseTag":u.content,"StartTag StartCloseTag SelfClosingEndTag EndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/TagName":[u.tagName,u.invalid],AttributeName:u.attributeName,"AttributeValue UnquotedAttributeValue":u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta}),qe=ee.deserialize({version:14,states:",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[",stateData:`,c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~`,goto:"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",nodeNames:`⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl`,maxTerm:68,context:Re,nodeProps:[[`closedBy`,-10,1,2,3,7,8,9,10,11,12,13,`EndTag`,6,`EndTag SelfClosingEndTag`,-4,22,31,34,37,`CloseTag`],[`openedBy`,4,`StartTag StartCloseTag`,5,`StartTag`,-4,30,33,36,38,`OpenTag`],[`group`,-10,14,15,18,19,20,21,40,41,42,43,`Entity`,17,`Entity TextContent`,-3,29,32,35,`TextContent Entity`],[`isolate`,-11,22,30,31,33,34,36,37,38,39,42,43,`ltr`,-3,27,28,40,``]],propSources:[Ke],skippedNodes:[0],repeatNodeCount:9,tokenData:"!]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VP<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!{let n=e.type.id;if(n==we)return F(e,t,r);if(n==Te)return F(e,t,i);if(n==Ee)return F(e,t,a);if(n==y&&o.length){let n=e.node,r=n.firstChild,i=r&&P(r,t),a;if(i){for(let e of o)if(e.tag==i&&(!e.attrs||e.attrs(a||=N(r,t)))){let t=n.lastChild,i=t.type.id==Oe?t.from:n.to;if(i>r.to)return{parser:e.parser,overlay:[{from:r.to,to:i}]}}}}if(s&&n==b){let n=e.node,r;if(r=n.firstChild){let e=s[t.read(r.from,r.to)];if(e)for(let r of e){if(r.tagName&&r.tagName!=P(n.parent,t))continue;let e=n.lastChild;if(e.type.id==x){let t=e.from+1,n=e.lastChild,i=e.to-(n&&n.isError?0:1);if(i>t)return{parser:r.parser,overlay:[{from:t,to:i}],bracketed:!0}}else if(e.type.id==S)return{parser:r.parser,overlay:[{from:e.from,to:e.to}]}}}}return null})}var L=[`_blank`,`_self`,`_top`,`_parent`],R=[`ascii`,`utf-8`,`utf-16`,`latin1`,`latin1`],z=[`get`,`post`,`put`,`delete`],B=[`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`],V=[`true`,`false`],H={},Je={a:{attrs:{href:null,ping:null,type:null,media:null,target:L,hreflang:null}},abbr:H,address:H,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[`default`,`rect`,`circle`,`poly`]}},article:H,aside:H,audio:{attrs:{src:null,mediagroup:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`none`,`metadata`,`auto`],autoplay:[`autoplay`],loop:[`loop`],controls:[`controls`]}},b:H,base:{attrs:{href:null,target:L}},bdi:H,bdo:H,blockquote:{attrs:{cite:null}},body:H,br:H,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[`autofocus`],disabled:[`autofocus`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,type:[`submit`,`reset`,`button`]}},canvas:{attrs:{width:null,height:null}},caption:H,center:H,cite:H,code:H,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[`command`,`checkbox`,`radio`],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[`disabled`],checked:[`checked`]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[`disabled`],multiple:[`multiple`]}},datalist:{attrs:{data:null}},dd:H,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[`open`]}},dfn:H,div:H,dl:H,dt:H,em:H,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[`disabled`],form:null,name:null}},figcaption:H,figure:H,footer:H,form:{attrs:{action:null,name:null,"accept-charset":R,autocomplete:[`on`,`off`],enctype:B,method:z,novalidate:[`novalidate`],target:L}},h1:H,h2:H,h3:H,h4:H,h5:H,h6:H,head:{children:[`title`,`base`,`link`,`style`,`meta`,`script`,`noscript`,`command`]},header:H,hgroup:H,hr:H,html:{attrs:{manifest:null}},i:H,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[`allow-top-navigation`,`allow-same-origin`,`allow-forms`,`allow-scripts`],seamless:[`seamless`]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[`audio/*`,`video/*`,`image/*`],autocomplete:[`on`,`off`],autofocus:[`autofocus`],checked:[`checked`],disabled:[`disabled`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,multiple:[`multiple`],readonly:[`readonly`],required:[`required`],type:[`hidden`,`text`,`search`,`tel`,`url`,`email`,`password`,`datetime`,`date`,`month`,`week`,`time`,`datetime-local`,`number`,`range`,`color`,`checkbox`,`radio`,`file`,`submit`,`image`,`reset`,`button`]}},ins:{attrs:{cite:null,datetime:null}},kbd:H,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[`autofocus`],disabled:[`disabled`],keytype:[`RSA`]}},label:{attrs:{for:null,form:null}},legend:H,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[`all`,`16x16`,`16x16 32x32`,`16x16 32x32 64x64`]}},map:{attrs:{name:null}},mark:H,menu:{attrs:{label:null,type:[`list`,`context`,`toolbar`]}},meta:{attrs:{content:null,charset:R,name:[`viewport`,`application-name`,`author`,`description`,`generator`,`keywords`],"http-equiv":[`content-language`,`content-type`,`default-style`,`refresh`]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:H,noscript:H,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[`typemustmatch`]}},ol:{attrs:{reversed:[`reversed`],start:null,type:[`1`,`a`,`A`,`i`,`I`]},children:[`li`,`script`,`template`,`ul`,`ol`]},optgroup:{attrs:{disabled:[`disabled`],label:null}},option:{attrs:{disabled:[`disabled`],label:null,selected:[`selected`],value:null}},output:{attrs:{for:null,form:null,name:null}},p:H,param:{attrs:{name:null,value:null}},pre:H,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:H,rt:H,ruby:H,samp:H,script:{attrs:{type:[`text/javascript`],src:null,async:[`async`],defer:[`defer`],charset:R}},section:H,select:{attrs:{form:null,name:null,size:null,autofocus:[`autofocus`],disabled:[`disabled`],multiple:[`multiple`]}},slot:{attrs:{name:null}},small:H,source:{attrs:{src:null,type:null,media:null}},span:H,strong:H,style:{attrs:{type:[`text/css`],media:null,scoped:null}},sub:H,summary:H,sup:H,table:H,tbody:H,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:H,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[`autofocus`],disabled:[`disabled`],readonly:[`readonly`],required:[`required`],wrap:[`soft`,`hard`]}},tfoot:H,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[`row`,`col`,`rowgroup`,`colgroup`]}},thead:H,time:{attrs:{datetime:null}},title:H,tr:H,track:{attrs:{src:null,label:null,default:null,kind:[`subtitles`,`captions`,`descriptions`,`chapters`,`metadata`],srclang:null}},ul:{children:[`li`,`script`,`template`,`ul`,`ol`]},var:H,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`auto`,`metadata`,`none`],autoplay:[`autoplay`],mediagroup:[`movie`],muted:[`muted`],controls:[`controls`]}},wbr:H},U={accesskey:null,class:null,contenteditable:V,contextmenu:null,dir:[`ltr`,`rtl`,`auto`],draggable:[`true`,`false`,`auto`],dropzone:[`copy`,`move`,`link`,`string:`,`file:`],hidden:[`hidden`],id:null,inert:[`inert`],itemid:null,itemprop:null,itemref:null,itemscope:[`itemscope`],itemtype:null,lang:[`ar`,`bn`,`de`,`en-GB`,`en-US`,`es`,`fr`,`hi`,`id`,`ja`,`pa`,`pt`,`ru`,`tr`,`zh`],spellcheck:V,autocorrect:V,autocapitalize:V,style:null,tabindex:null,title:null,translate:[`yes`,`no`],rel:[`stylesheet`,`alternate`,`author`,`bookmark`,`help`,`license`,`next`,`nofollow`,`noreferrer`,`prefetch`,`prev`,`search`,`tag`],role:`alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer`.split(` `),"aria-activedescendant":null,"aria-atomic":V,"aria-autocomplete":[`inline`,`list`,`both`,`none`],"aria-busy":V,"aria-checked":[`true`,`false`,`mixed`,`undefined`],"aria-controls":null,"aria-describedby":null,"aria-disabled":V,"aria-dropeffect":null,"aria-expanded":[`true`,`false`,`undefined`],"aria-flowto":null,"aria-grabbed":[`true`,`false`,`undefined`],"aria-haspopup":V,"aria-hidden":V,"aria-invalid":[`true`,`false`,`grammar`,`spelling`],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":[`off`,`polite`,`assertive`],"aria-multiline":V,"aria-multiselectable":V,"aria-owns":null,"aria-posinset":null,"aria-pressed":[`true`,`false`,`mixed`,`undefined`],"aria-readonly":V,"aria-relevant":null,"aria-required":V,"aria-selected":[`true`,`false`,`undefined`],"aria-setsize":null,"aria-sort":[`ascending`,`descending`,`none`,`other`],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},W=`beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload`.split(` `).map(e=>`on`+e);for(let e of W)U[e]=null;var G=class{constructor(e,t){this.tags={...Je,...e},this.globalAttrs={...U,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};G.default=new G;function K(e,t,n=e.length){if(!t)return``;let r=t.firstChild,i=r&&r.getChild(`TagName`);return i?e.sliceString(i.from,Math.min(i.to,n)):``}function q(e,t=!1){for(;e;e=e.parent)if(e.name==`Element`)if(t)t=!1;else return e;return null}function J(e,t,n){return n.tags[K(e,q(t))]?.children||n.allTags}function Y(e,t){let n=[];for(let r=q(t);r&&!r.type.isTop;r=q(r.parent)){let i=K(e,r);if(i&&r.lastChild.name==`CloseTag`)break;i&&n.indexOf(i)<0&&(t.name==`EndTag`||t.from>=r.firstChild.to)&&n.push(i)}return n}var X=/^[:\-\.\w\u00b7-\uffff]*$/;function Ye(e,t,n,r,i){let a=/\s*>/.test(e.sliceDoc(i,i+5))?``:`>`,o=q(n,n.name==`StartTag`||n.name==`TagName`);return{from:r,to:i,options:J(e.doc,o,t).map(e=>({label:e,type:`type`})).concat(Y(e.doc,n).map((e,t)=>({label:`/`+e,apply:`/`+e+a,type:`type`,boost:99-t}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Xe(e,t,n,r){let i=/\s*>/.test(e.sliceDoc(r,r+5))?``:`>`;return{from:n,to:r,options:Y(e.doc,t).map((e,t)=>({label:e,apply:e+i,type:`type`,boost:99-t})),validFor:X}}function Ze(e,t,n,r){let i=[],a=0;for(let r of J(e.doc,n,t))i.push({label:`<`+r,type:`type`});for(let t of Y(e.doc,n))i.push({label:``,type:`type`,boost:99-a++});return{from:r,to:r,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function Qe(e,t,n,r,i){let a=q(n),o=a?t.tags[K(e.doc,a)]:null,s=o&&o.attrs?Object.keys(o.attrs):[];return{from:r,to:i,options:(o&&o.globalAttrs===!1?s:s.length?s.concat(t.globalAttrNames):t.globalAttrNames).map(e=>({label:e,type:`property`})),validFor:X}}function $e(e,t,n,r,i){let a=n.parent?.getChild(`AttributeName`),o=[],s;if(a){let c=e.sliceDoc(a.from,a.to),l=t.globalAttrs[c];if(!l){let r=q(n),i=r?t.tags[K(e.doc,r)]:null;l=i?.attrs&&i.attrs[c]}if(l){let t=e.sliceDoc(r,i).toLowerCase(),n=`"`,a=`"`;/^['"]/.test(t)?(s=t[0]==`"`?/^[^"]*$/:/^[^']*$/,n=``,a=e.sliceDoc(i,i+1)==t[0]?``:t[0],t=t.slice(1),r++):s=/^[^\s<>='"]*$/;for(let e of l)o.push({label:e,apply:n+e+a,type:`constant`})}}return{from:r,to:i,options:o,validFor:s}}function Z(e,t){let{state:n,pos:r}=t,i=l(n).resolveInner(r,-1),a=i.resolve(r);for(let e=r,t;a==i&&(t=i.childBefore(e));){let n=t.lastChild;if(!n||!n.type.isError||n.fromZ(r,e)}var nt=p.parser.configure({top:`SingleExpression`}),rt=[{tag:`script`,attrs:e=>e.type==`text/typescript`||e.lang==`ts`,parser:oe.parser},{tag:`script`,attrs:e=>e.type==`text/babel`||e.type==`text/jsx`,parser:ie.parser},{tag:`script`,attrs:e=>e.type==`text/typescript-jsx`,parser:re.parser},{tag:`script`,attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:nt},{tag:`script`,attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:p.parser},{tag:`style`,attrs(e){return(!e.lang||e.lang==`css`)&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:f.parser}],it=[{name:`style`,parser:f.parser.configure({top:`Styles`})}].concat(W.map(e=>({name:e,parser:p.parser}))),at=c.define({name:`html`,parser:qe.configure({props:[o.add({Element(e){let t=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+t[0].length?e.continue():e.lineIndent(e.node.from)+(t[2]?0:e.unit)},"OpenTag CloseTag SelfClosingTag"(e){return e.column(e.node.from)+e.unit},Document(e){if(e.pos+/\s*/.exec(e.textAfter)[0].lengthe.getChild(`TagName`)})]}),languageData:{commentTokens:{block:{open:``}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),Q=at.configure({wrap:I(rt,it)});function ot(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(rt),(e.nestedAttributes||[]).concat(it))),new a(n?at.configure({wrap:n,dialect:t}):t?Q.configure({dialect:t}):Q,[Q.data.of({autocomplete:tt(e)}),e.autoCloseTags===!1?[]:st,ae().support,ne().support])}var $=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `)),st=n.inputHandler.of((e,n,r,i,a)=>{if(e.composing||e.state.readOnly||n!=r||i!=`>`&&i!=`/`||!Q.isActiveAt(e.state,n,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let n=s.doc.sliceString(e.from-1,e.to)==i,{head:r}=e,a=l(s).resolveInner(r,-1),o;if(n&&i==`>`&&a.name==`EndTag`){let t=a.parent;if(t.parent?.lastChild?.name!=`CloseTag`&&(o=K(s.doc,t.parent,r))&&!$.has(o))return{range:e,changes:{from:r,to:r+ +(s.doc.sliceString(r,r+1)===`>`),insert:``}}}else if(n&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==r-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,r))&&!$.has(o)){let e=r+ +(s.doc.sliceString(r,r+1)===`>`),n=`${o}>`;return{range:t.cursor(r+n.length,-1),changes:{from:r,to:e,insert:n}}}}return{range:e}});return c.changes.empty?!1:(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{ot as html,et as htmlCompletionSource}; \ No newline at end of file diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-p8Em0oNh.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-CCXomA9h.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-p8Em0oNh.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-CCXomA9h.js index 9d34e145..9919bb5e 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-p8Em0oNh.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-CCXomA9h.js @@ -1,4 +1,4 @@ -import{$ as e,C as t,D as n,I as r,M as i,_ as a,b as o,c as s,d as c,f as ee,i as te,l as ne,m as re,s as l,t as ie,u,v as d,x as f}from"./index-DAxEjaIY.js";import{i as p,n as m,r as ae,t as oe}from"./dist-DlsKzrFf.js";import{i as h,n as g,r as se}from"./dist-CEIxIXTX.js";var ce=316,le=317,_=1,ue=2,de=3,fe=4,pe=318,me=320,he=321,ge=5,_e=6,ve=0,v=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],y=125,ye=59,b=47,x=42,S=43,C=45,w=60,T=44,E=63,D=46,O=91,k=new oe({start:!1,shift(e,t){return t==ge||t==_e||t==me?e:t==he},strict:!1}),A=new m((e,t)=>{let{next:n}=e;(n==y||n==-1||t.context)&&e.acceptToken(pe)},{contextual:!0,fallback:!0}),j=new m((e,t)=>{let{next:n}=e,r;v.indexOf(n)>-1||n==b&&((r=e.peek(1))==b||r==x)||n!=y&&n!=ye&&n!=-1&&!t.context&&e.acceptToken(ce)},{contextual:!0}),M=new m((e,t)=>{e.next==O&&!t.context&&e.acceptToken(le)},{contextual:!0}),N=new m((e,t)=>{let{next:n}=e;if(n==S||n==C){if(e.advance(),n==e.next){e.advance();let n=!t.context&&t.canShift(_);e.acceptToken(n?_:ue)}}else n==E&&e.peek(1)==D&&(e.advance(),e.advance(),(e.next<48||e.next>57)&&e.acceptToken(de))},{contextual:!0});function P(e,t){return e>=65&&e<=90||e>=97&&e<=122||e==95||e>=192||!t&&e>=48&&e<=57}var be=new m((e,t)=>{if(e.next!=w||!t.dialectEnabled(ve)||(e.advance(),e.next==b))return;let n=0;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(P(e.next,!0)){for(e.advance(),n++;P(e.next,!1);)e.advance(),n++;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(e.next==T)return;for(let t=0;;t++){if(t==7){if(!P(e.next,!0))return;break}if(e.next!=`extends`.charCodeAt(t))break;e.advance(),n++}}e.acceptToken(fe,-n)}),xe=o({"get set async static":f.modifier,"for while do if else switch try catch finally return throw break continue default case defer":f.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":f.operatorKeyword,"let var const using function class extends":f.definitionKeyword,"import export from":f.moduleKeyword,"with debugger new":f.keyword,TemplateString:f.special(f.string),super:f.atom,BooleanLiteral:f.bool,this:f.self,null:f.null,Star:f.modifier,VariableName:f.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":f.function(f.variableName),VariableDefinition:f.definition(f.variableName),Label:f.labelName,PropertyName:f.propertyName,PrivatePropertyName:f.special(f.propertyName),"CallExpression/MemberExpression/PropertyName":f.function(f.propertyName),"FunctionDeclaration/VariableDefinition":f.function(f.definition(f.variableName)),"ClassDeclaration/VariableDefinition":f.definition(f.className),"NewExpression/VariableName":f.className,PropertyDefinition:f.definition(f.propertyName),PrivatePropertyDefinition:f.definition(f.special(f.propertyName)),UpdateOp:f.updateOperator,"LineComment Hashbang":f.lineComment,BlockComment:f.blockComment,Number:f.number,String:f.string,Escape:f.escape,ArithOp:f.arithmeticOperator,LogicOp:f.logicOperator,BitOp:f.bitwiseOperator,CompareOp:f.compareOperator,RegExp:f.regexp,Equals:f.definitionOperator,Arrow:f.function(f.punctuation),": Spread":f.punctuation,"( )":f.paren,"[ ]":f.squareBracket,"{ }":f.brace,"InterpolationStart InterpolationEnd":f.special(f.brace),".":f.derefOperator,", ;":f.separator,"@":f.meta,TypeName:f.typeName,TypeDefinition:f.definition(f.typeName),"type enum interface implements namespace module declare":f.definitionKeyword,"abstract global Privacy readonly override":f.modifier,"is keyof unique infer asserts":f.operatorKeyword,JSXAttributeValue:f.attributeValue,JSXText:f.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":f.angleBracket,"JSXIdentifier JSXNameSpacedName":f.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":f.attributeName,"JSXBuiltin/JSXIdentifier":f.standard(f.tagName)}),Se={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},Ce={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},we={__proto__:null,"<":193},Te=ae.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem`,maxTerm:380,context:k,nodeProps:[[`isolate`,-8,5,6,14,37,39,51,53,55,``],[`group`,-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,`Statement`,-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,`Expression`,-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,`Type`,-3,88,103,109,`ClassItem`],[`openedBy`,23,`<`,38,`InterpolationStart`,56,`[`,60,`{`,73,`(`,160,`JSXStartCloseTag`],[`closedBy`,-2,24,168,`>`,40,`InterpolationEnd`,50,`]`,61,`}`,74,`)`,165,`JSXEndTag`]],propSources:[xe],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[j,M,N,be,2,3,4,5,6,7,8,9,10,11,12,13,14,A,new p("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new p(`j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~`,25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:e=>Se[e]||-1},{term:343,get:e=>Ce[e]||-1},{term:95,get:e=>we[e]||-1}],tokenPrec:15201}),Ee=e({autoCloseTags:()=>$,javascript:()=>Z,javascriptLanguage:()=>W,jsxLanguage:()=>q,localCompletionSource:()=>U,snippets:()=>F,tsxLanguage:()=>J,typescriptLanguage:()=>K,typescriptSnippets:()=>I}),F=[h("function ${name}(${params}) {\n ${}\n}",{label:`function`,detail:`definition`,type:`keyword`}),h("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:`for`,detail:`loop`,type:`keyword`}),h("for (let ${name} of ${collection}) {\n ${}\n}",{label:`for`,detail:`of loop`,type:`keyword`}),h(`do { +import{$ as e,C as t,D as n,I as r,M as i,_ as a,b as o,c as s,d as c,f as ee,i as te,l as ne,m as re,s as l,t as ie,u,v as d,x as f}from"./index-nWZaQUdZ.js";import{i as p,n as m,r as ae,t as oe}from"./dist-fdzu-F4-.js";import{i as h,n as g,r as se}from"./dist-BUu4dMye.js";var ce=316,le=317,_=1,ue=2,de=3,fe=4,pe=318,me=320,he=321,ge=5,_e=6,ve=0,v=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],y=125,ye=59,b=47,x=42,S=43,C=45,w=60,T=44,E=63,D=46,O=91,k=new oe({start:!1,shift(e,t){return t==ge||t==_e||t==me?e:t==he},strict:!1}),A=new m((e,t)=>{let{next:n}=e;(n==y||n==-1||t.context)&&e.acceptToken(pe)},{contextual:!0,fallback:!0}),j=new m((e,t)=>{let{next:n}=e,r;v.indexOf(n)>-1||n==b&&((r=e.peek(1))==b||r==x)||n!=y&&n!=ye&&n!=-1&&!t.context&&e.acceptToken(ce)},{contextual:!0}),M=new m((e,t)=>{e.next==O&&!t.context&&e.acceptToken(le)},{contextual:!0}),N=new m((e,t)=>{let{next:n}=e;if(n==S||n==C){if(e.advance(),n==e.next){e.advance();let n=!t.context&&t.canShift(_);e.acceptToken(n?_:ue)}}else n==E&&e.peek(1)==D&&(e.advance(),e.advance(),(e.next<48||e.next>57)&&e.acceptToken(de))},{contextual:!0});function P(e,t){return e>=65&&e<=90||e>=97&&e<=122||e==95||e>=192||!t&&e>=48&&e<=57}var be=new m((e,t)=>{if(e.next!=w||!t.dialectEnabled(ve)||(e.advance(),e.next==b))return;let n=0;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(P(e.next,!0)){for(e.advance(),n++;P(e.next,!1);)e.advance(),n++;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(e.next==T)return;for(let t=0;;t++){if(t==7){if(!P(e.next,!0))return;break}if(e.next!=`extends`.charCodeAt(t))break;e.advance(),n++}}e.acceptToken(fe,-n)}),xe=o({"get set async static":f.modifier,"for while do if else switch try catch finally return throw break continue default case defer":f.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":f.operatorKeyword,"let var const using function class extends":f.definitionKeyword,"import export from":f.moduleKeyword,"with debugger new":f.keyword,TemplateString:f.special(f.string),super:f.atom,BooleanLiteral:f.bool,this:f.self,null:f.null,Star:f.modifier,VariableName:f.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":f.function(f.variableName),VariableDefinition:f.definition(f.variableName),Label:f.labelName,PropertyName:f.propertyName,PrivatePropertyName:f.special(f.propertyName),"CallExpression/MemberExpression/PropertyName":f.function(f.propertyName),"FunctionDeclaration/VariableDefinition":f.function(f.definition(f.variableName)),"ClassDeclaration/VariableDefinition":f.definition(f.className),"NewExpression/VariableName":f.className,PropertyDefinition:f.definition(f.propertyName),PrivatePropertyDefinition:f.definition(f.special(f.propertyName)),UpdateOp:f.updateOperator,"LineComment Hashbang":f.lineComment,BlockComment:f.blockComment,Number:f.number,String:f.string,Escape:f.escape,ArithOp:f.arithmeticOperator,LogicOp:f.logicOperator,BitOp:f.bitwiseOperator,CompareOp:f.compareOperator,RegExp:f.regexp,Equals:f.definitionOperator,Arrow:f.function(f.punctuation),": Spread":f.punctuation,"( )":f.paren,"[ ]":f.squareBracket,"{ }":f.brace,"InterpolationStart InterpolationEnd":f.special(f.brace),".":f.derefOperator,", ;":f.separator,"@":f.meta,TypeName:f.typeName,TypeDefinition:f.definition(f.typeName),"type enum interface implements namespace module declare":f.definitionKeyword,"abstract global Privacy readonly override":f.modifier,"is keyof unique infer asserts":f.operatorKeyword,JSXAttributeValue:f.attributeValue,JSXText:f.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":f.angleBracket,"JSXIdentifier JSXNameSpacedName":f.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":f.attributeName,"JSXBuiltin/JSXIdentifier":f.standard(f.tagName)}),Se={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},Ce={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},we={__proto__:null,"<":193},Te=ae.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem`,maxTerm:380,context:k,nodeProps:[[`isolate`,-8,5,6,14,37,39,51,53,55,``],[`group`,-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,`Statement`,-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,`Expression`,-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,`Type`,-3,88,103,109,`ClassItem`],[`openedBy`,23,`<`,38,`InterpolationStart`,56,`[`,60,`{`,73,`(`,160,`JSXStartCloseTag`],[`closedBy`,-2,24,168,`>`,40,`InterpolationEnd`,50,`]`,61,`}`,74,`)`,165,`JSXEndTag`]],propSources:[xe],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[j,M,N,be,2,3,4,5,6,7,8,9,10,11,12,13,14,A,new p("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new p(`j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~`,25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:e=>Se[e]||-1},{term:343,get:e=>Ce[e]||-1},{term:95,get:e=>we[e]||-1}],tokenPrec:15201}),Ee=e({autoCloseTags:()=>$,javascript:()=>Z,javascriptLanguage:()=>W,jsxLanguage:()=>q,localCompletionSource:()=>U,snippets:()=>F,tsxLanguage:()=>J,typescriptLanguage:()=>K,typescriptSnippets:()=>I}),F=[h("function ${name}(${params}) {\n ${}\n}",{label:`function`,detail:`definition`,type:`keyword`}),h("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:`for`,detail:`loop`,type:`keyword`}),h("for (let ${name} of ${collection}) {\n ${}\n}",{label:`for`,detail:`of loop`,type:`keyword`}),h(`do { \${} } while (\${})`,{label:`do`,detail:`loop`,type:`keyword`}),h(`while (\${}) { \${} diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-Cv27Jldz.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-CMpAMLlq.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-Cv27Jldz.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-CMpAMLlq.js index 00f097a0..2e52e2a3 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-Cv27Jldz.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-CMpAMLlq.js @@ -1,4 +1,4 @@ -import{A as e,B as t,E as n,I as r,K as i,L as a,M as o,O as s,P as c,T as l,a as u,b as d,c as f,f as p,g as m,h,i as g,k as _,m as ee,n as te,p as ne,r as re,v,w as y,x as b,y as ie}from"./index-DAxEjaIY.js";import{t as ae}from"./dist-CEIxIXTX.js";import{html as oe,htmlCompletionSource as se}from"./dist-CYcIWAr7.js";var ce=class e{static create(t,n,r,i,a){return new e(t,n,r,i+(i<<8)+t+(n<<4)|0,a,[],[])}constructor(e,t,n,r,i,a,o){this.type=e,this.value=t,this.from=n,this.hash=r,this.end=i,this.children=a,this.positions=o,this.hashProp=[[y.contextHash,r]]}addChild(e,t){e.prop(y.contextHash)!=this.hash&&(e=new _(e.type,e.children,e.positions,e.length,this.hashProp)),this.children.push(e),this.positions.push(t)}toTree(e,t=this.end){let r=this.children.length-1;return r>=0&&(t=Math.max(t,this.positions[r]+this.children[r].length+this.from)),new _(e.types[this.type],this.children,this.positions,t-this.from).balance({makeTree:(e,t,r)=>new _(n.none,e,t,r,this.hashProp)})}},x;(function(e){e[e.Document=1]=`Document`,e[e.CodeBlock=2]=`CodeBlock`,e[e.FencedCode=3]=`FencedCode`,e[e.Blockquote=4]=`Blockquote`,e[e.HorizontalRule=5]=`HorizontalRule`,e[e.BulletList=6]=`BulletList`,e[e.OrderedList=7]=`OrderedList`,e[e.ListItem=8]=`ListItem`,e[e.ATXHeading1=9]=`ATXHeading1`,e[e.ATXHeading2=10]=`ATXHeading2`,e[e.ATXHeading3=11]=`ATXHeading3`,e[e.ATXHeading4=12]=`ATXHeading4`,e[e.ATXHeading5=13]=`ATXHeading5`,e[e.ATXHeading6=14]=`ATXHeading6`,e[e.SetextHeading1=15]=`SetextHeading1`,e[e.SetextHeading2=16]=`SetextHeading2`,e[e.HTMLBlock=17]=`HTMLBlock`,e[e.LinkReference=18]=`LinkReference`,e[e.Paragraph=19]=`Paragraph`,e[e.CommentBlock=20]=`CommentBlock`,e[e.ProcessingInstructionBlock=21]=`ProcessingInstructionBlock`,e[e.Escape=22]=`Escape`,e[e.Entity=23]=`Entity`,e[e.HardBreak=24]=`HardBreak`,e[e.Emphasis=25]=`Emphasis`,e[e.StrongEmphasis=26]=`StrongEmphasis`,e[e.Link=27]=`Link`,e[e.Image=28]=`Image`,e[e.InlineCode=29]=`InlineCode`,e[e.HTMLTag=30]=`HTMLTag`,e[e.Comment=31]=`Comment`,e[e.ProcessingInstruction=32]=`ProcessingInstruction`,e[e.Autolink=33]=`Autolink`,e[e.HeaderMark=34]=`HeaderMark`,e[e.QuoteMark=35]=`QuoteMark`,e[e.ListMark=36]=`ListMark`,e[e.LinkMark=37]=`LinkMark`,e[e.EmphasisMark=38]=`EmphasisMark`,e[e.CodeMark=39]=`CodeMark`,e[e.CodeText=40]=`CodeText`,e[e.CodeInfo=41]=`CodeInfo`,e[e.LinkTitle=42]=`LinkTitle`,e[e.LinkLabel=43]=`LinkLabel`,e[e.URL=44]=`URL`})(x||={});var le=class{constructor(e,t){this.start=e,this.content=t,this.marks=[],this.parsers=[]}},ue=class{constructor(){this.text=``,this.baseIndent=0,this.basePos=0,this.depth=0,this.markers=[],this.pos=0,this.indent=0,this.next=-1}forward(){this.basePos>this.pos&&this.forwardInner()}forwardInner(){let e=this.skipSpace(this.basePos);this.indent=this.countIndent(e,this.pos,this.indent),this.pos=e,this.next=e==this.text.length?-1:this.text.charCodeAt(e)}skipSpace(e){return C(this.text,e)}reset(e){for(this.text=e,this.baseIndent=this.basePos=this.pos=this.indent=0,this.forwardInner(),this.depth=1;this.markers.length;)this.markers.pop()}moveBase(e){this.basePos=e,this.baseIndent=this.countIndent(e,this.pos,this.indent)}moveBaseColumn(e){this.baseIndent=e,this.basePos=this.findColumn(e)}addMarker(e){this.markers.push(e)}countIndent(e,t=0,n=0){for(let r=t;r=t.stack[n.depth+1].value+n.baseIndent)return!0;if(n.indent>=n.baseIndent+4)return!1;let r=(e.type==x.OrderedList?E:T)(n,t,!1);return r>0&&(e.type!=x.BulletList||w(n,t,!1)<0)&&n.text.charCodeAt(n.pos+r-1)==e.value}var fe={[x.Blockquote](e,t,n){return n.next==62?(n.markers.push(L(x.QuoteMark,t.lineStart+n.pos,t.lineStart+n.pos+1)),n.moveBase(n.pos+(S(n.text.charCodeAt(n.pos+1))?2:1)),e.end=t.lineStart+n.text.length,!0):!1},[x.ListItem](e,t,n){return n.indent-1?!1:(n.moveBaseColumn(n.baseIndent+e.value),!0)},[x.OrderedList]:de,[x.BulletList]:de,[x.Document](){return!0}};function S(e){return e==32||e==9||e==10||e==13}function C(e,t=0){for(;tn&&S(e.charCodeAt(t-1));)t--;return t}function me(e){if(e.next!=96&&e.next!=126)return-1;let t=e.pos+1;for(;t-1&&e.depth==t.stack.length&&t.parser.leafBlockParsers.indexOf(Te.SetextHeading)>-1||r<3?-1:1}function ge(e,t){for(let n=e.stack.length-1;n>=0;n--)if(e.stack[n].type==t)return!0;return!1}function T(e,t,n){return(e.next==45||e.next==43||e.next==42)&&(e.pos==e.text.length-1||S(e.text.charCodeAt(e.pos+1)))&&(!n||ge(t,x.BulletList)||e.skipSpace(e.pos+2)=48&&i<=57;){if(r++,r==e.text.length)return-1;i=e.text.charCodeAt(r)}return r==e.pos||r>e.pos+9||i!=46&&i!=41||re.pos+1||e.next!=49)?-1:r+1-e.pos}function _e(e){if(e.next!=35)return-1;let t=e.pos+1;for(;t6?-1:n}function ve(e){if(e.next!=45&&e.next!=61||e.indent>=e.baseIndent+4)return-1;let t=e.pos+1;for(;t/,be=/\?>/,O=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*/,be=/\?>/,O=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*/,be=/\?>/,O=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*/,be=/\?>/,O=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*`}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),Q=at.configure({wrap:I(rt,it)});function ot(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(rt),(e.nestedAttributes||[]).concat(it))),new a(n?at.configure({wrap:n,dialect:t}):t?Q.configure({dialect:t}):Q,[Q.data.of({autocomplete:tt(e)}),e.autoCloseTags===!1?[]:st,ae().support,ne().support])}var $=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `)),st=n.inputHandler.of((e,n,r,i,a)=>{if(e.composing||e.state.readOnly||n!=r||i!=`>`&&i!=`/`||!Q.isActiveAt(e.state,n,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let n=s.doc.sliceString(e.from-1,e.to)==i,{head:r}=e,a=l(s).resolveInner(r,-1),o;if(n&&i==`>`&&a.name==`EndTag`){let t=a.parent;if(t.parent?.lastChild?.name!=`CloseTag`&&(o=K(s.doc,t.parent,r))&&!$.has(o))return{range:e,changes:{from:r,to:r+ +(s.doc.sliceString(r,r+1)===`>`),insert:``}}}else if(n&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==r-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,r))&&!$.has(o)){let e=r+ +(s.doc.sliceString(r,r+1)===`>`),n=`${o}>`;return{range:t.cursor(r+n.length,-1),changes:{from:r,to:e,insert:n}}}}return{range:e}});return c.changes.empty?!1:(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{ot as html,et as htmlCompletionSource}; \ No newline at end of file +import{A as e,I as t,M as n,b as r,f as i,i as a,m as o,o as s,t as c,v as l,x as u}from"./index-DFlPXY2S.js";import{n as d,r as ee,t as te}from"./dist-BObfczsO.js";import{n as f,t as ne}from"./dist-DutnYvKJ.js";import{a as re,i as ie,n as ae,o as oe,r as p}from"./dist-Dffou3cZ.js";var se=55,ce=1,le=56,ue=2,de=57,fe=3,m=4,pe=5,h=6,g=7,me=8,he=9,ge=10,_e=11,ve=12,ye=13,_=58,be=14,xe=15,v=59,y=21,Se=23,b=24,Ce=25,x=27,S=28,we=29,Te=32,Ee=35,De=37,Oe=38,ke=0,Ae=1,je={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},Me={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},C={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function Ne(e){return e==45||e==46||e==58||e>=65&&e<=90||e==95||e>=97&&e<=122||e>=161}var w=null,T=null,E=0;function D(e,t){let n=e.pos+t;if(E==n&&T==e)return w;let r=e.peek(t),i=``;for(;Ne(r);)i+=String.fromCharCode(r),r=e.peek(++t);return T=e,E=n,w=i?i.toLowerCase():r==Pe||r==Fe?void 0:null}var O=60,k=62,A=47,Pe=63,Fe=33,Ie=45;function j(e,t){this.name=e,this.parent=t}var Le=[h,ge,g,me,he],Re=new te({start:null,shift(e,t,n,r){return Le.indexOf(t)>-1?new j(D(r,1)||``,e):e},reduce(e,t){return t==y&&e?e.parent:e},reuse(e,t,n,r){let i=t.type.id;return i==h||i==De?new j(D(r,1)||``,e):e},strict:!1}),ze=new d((e,t)=>{if(e.next!=O){e.next<0&&t.context&&e.acceptToken(_);return}e.advance();let n=e.next==A;n&&e.advance();let r=D(e,0);if(r===void 0)return;if(!r)return e.acceptToken(n?xe:be);let i=t.context?t.context.name:null;if(n){if(r==i)return e.acceptToken(_e);if(i&&Me[i])return e.acceptToken(_,-2);if(t.dialectEnabled(ke))return e.acceptToken(ve);for(let e=t.context;e;e=e.parent)if(e.name==r)return;e.acceptToken(ye)}else{if(r==`script`)return e.acceptToken(g);if(r==`style`)return e.acceptToken(me);if(r==`textarea`)return e.acceptToken(he);if(je.hasOwnProperty(r))return e.acceptToken(ge);i&&C[i]&&C[i][r]?e.acceptToken(_,-1):e.acceptToken(h)}},{contextual:!0}),Be=new d(e=>{for(let t=0,n=0;;n++){if(e.next<0){n&&e.acceptToken(v);break}if(e.next==Ie)t++;else if(e.next==k&&t>=2){n>=3&&e.acceptToken(v,-2);break}else t=0;e.advance()}});function Ve(e){for(;e;e=e.parent)if(e.name==`svg`||e.name==`math`)return!0;return!1}var He=new d((e,t)=>{if(e.next==A&&e.peek(1)==k){let n=t.dialectEnabled(Ae)||Ve(t.context);e.acceptToken(n?pe:m,2)}else e.next==k&&e.acceptToken(m,1)});function M(e,t,n){let r=2+e.length;return new d(i=>{for(let a=0,o=0,s=0;;s++){if(i.next<0){s&&i.acceptToken(t);break}if(a==0&&i.next==O||a==1&&i.next==A||a>=2&&ao?i.acceptToken(t,-o):i.acceptToken(n,-(o-2));break}else if((i.next==10||i.next==13)&&s){i.acceptToken(t,1);break}else a=o=0;i.advance()}})}var Ue=M(`script`,se,ce),We=M(`style`,le,ue),Ge=M(`textarea`,de,fe),Ke=r({"Text RawText IncompleteTag IncompleteCloseTag":u.content,"StartTag StartCloseTag SelfClosingEndTag EndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/TagName":[u.tagName,u.invalid],AttributeName:u.attributeName,"AttributeValue UnquotedAttributeValue":u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta}),qe=ee.deserialize({version:14,states:",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[",stateData:`,c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~`,goto:"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",nodeNames:`⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl`,maxTerm:68,context:Re,nodeProps:[[`closedBy`,-10,1,2,3,7,8,9,10,11,12,13,`EndTag`,6,`EndTag SelfClosingEndTag`,-4,22,31,34,37,`CloseTag`],[`openedBy`,4,`StartTag StartCloseTag`,5,`StartTag`,-4,30,33,36,38,`OpenTag`],[`group`,-10,14,15,18,19,20,21,40,41,42,43,`Entity`,17,`Entity TextContent`,-3,29,32,35,`TextContent Entity`],[`isolate`,-11,22,30,31,33,34,36,37,38,39,42,43,`ltr`,-3,27,28,40,``]],propSources:[Ke],skippedNodes:[0],repeatNodeCount:9,tokenData:"!]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VP<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!{let n=e.type.id;if(n==we)return F(e,t,r);if(n==Te)return F(e,t,i);if(n==Ee)return F(e,t,a);if(n==y&&o.length){let n=e.node,r=n.firstChild,i=r&&P(r,t),a;if(i){for(let e of o)if(e.tag==i&&(!e.attrs||e.attrs(a||=N(r,t)))){let t=n.lastChild,i=t.type.id==Oe?t.from:n.to;if(i>r.to)return{parser:e.parser,overlay:[{from:r.to,to:i}]}}}}if(s&&n==b){let n=e.node,r;if(r=n.firstChild){let e=s[t.read(r.from,r.to)];if(e)for(let r of e){if(r.tagName&&r.tagName!=P(n.parent,t))continue;let e=n.lastChild;if(e.type.id==x){let t=e.from+1,n=e.lastChild,i=e.to-(n&&n.isError?0:1);if(i>t)return{parser:r.parser,overlay:[{from:t,to:i}],bracketed:!0}}else if(e.type.id==S)return{parser:r.parser,overlay:[{from:e.from,to:e.to}]}}}}return null})}var L=[`_blank`,`_self`,`_top`,`_parent`],R=[`ascii`,`utf-8`,`utf-16`,`latin1`,`latin1`],z=[`get`,`post`,`put`,`delete`],B=[`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`],V=[`true`,`false`],H={},Je={a:{attrs:{href:null,ping:null,type:null,media:null,target:L,hreflang:null}},abbr:H,address:H,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[`default`,`rect`,`circle`,`poly`]}},article:H,aside:H,audio:{attrs:{src:null,mediagroup:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`none`,`metadata`,`auto`],autoplay:[`autoplay`],loop:[`loop`],controls:[`controls`]}},b:H,base:{attrs:{href:null,target:L}},bdi:H,bdo:H,blockquote:{attrs:{cite:null}},body:H,br:H,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[`autofocus`],disabled:[`autofocus`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,type:[`submit`,`reset`,`button`]}},canvas:{attrs:{width:null,height:null}},caption:H,center:H,cite:H,code:H,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[`command`,`checkbox`,`radio`],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[`disabled`],checked:[`checked`]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[`disabled`],multiple:[`multiple`]}},datalist:{attrs:{data:null}},dd:H,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[`open`]}},dfn:H,div:H,dl:H,dt:H,em:H,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[`disabled`],form:null,name:null}},figcaption:H,figure:H,footer:H,form:{attrs:{action:null,name:null,"accept-charset":R,autocomplete:[`on`,`off`],enctype:B,method:z,novalidate:[`novalidate`],target:L}},h1:H,h2:H,h3:H,h4:H,h5:H,h6:H,head:{children:[`title`,`base`,`link`,`style`,`meta`,`script`,`noscript`,`command`]},header:H,hgroup:H,hr:H,html:{attrs:{manifest:null}},i:H,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[`allow-top-navigation`,`allow-same-origin`,`allow-forms`,`allow-scripts`],seamless:[`seamless`]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[`audio/*`,`video/*`,`image/*`],autocomplete:[`on`,`off`],autofocus:[`autofocus`],checked:[`checked`],disabled:[`disabled`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,multiple:[`multiple`],readonly:[`readonly`],required:[`required`],type:[`hidden`,`text`,`search`,`tel`,`url`,`email`,`password`,`datetime`,`date`,`month`,`week`,`time`,`datetime-local`,`number`,`range`,`color`,`checkbox`,`radio`,`file`,`submit`,`image`,`reset`,`button`]}},ins:{attrs:{cite:null,datetime:null}},kbd:H,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[`autofocus`],disabled:[`disabled`],keytype:[`RSA`]}},label:{attrs:{for:null,form:null}},legend:H,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[`all`,`16x16`,`16x16 32x32`,`16x16 32x32 64x64`]}},map:{attrs:{name:null}},mark:H,menu:{attrs:{label:null,type:[`list`,`context`,`toolbar`]}},meta:{attrs:{content:null,charset:R,name:[`viewport`,`application-name`,`author`,`description`,`generator`,`keywords`],"http-equiv":[`content-language`,`content-type`,`default-style`,`refresh`]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:H,noscript:H,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[`typemustmatch`]}},ol:{attrs:{reversed:[`reversed`],start:null,type:[`1`,`a`,`A`,`i`,`I`]},children:[`li`,`script`,`template`,`ul`,`ol`]},optgroup:{attrs:{disabled:[`disabled`],label:null}},option:{attrs:{disabled:[`disabled`],label:null,selected:[`selected`],value:null}},output:{attrs:{for:null,form:null,name:null}},p:H,param:{attrs:{name:null,value:null}},pre:H,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:H,rt:H,ruby:H,samp:H,script:{attrs:{type:[`text/javascript`],src:null,async:[`async`],defer:[`defer`],charset:R}},section:H,select:{attrs:{form:null,name:null,size:null,autofocus:[`autofocus`],disabled:[`disabled`],multiple:[`multiple`]}},slot:{attrs:{name:null}},small:H,source:{attrs:{src:null,type:null,media:null}},span:H,strong:H,style:{attrs:{type:[`text/css`],media:null,scoped:null}},sub:H,summary:H,sup:H,table:H,tbody:H,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:H,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[`autofocus`],disabled:[`disabled`],readonly:[`readonly`],required:[`required`],wrap:[`soft`,`hard`]}},tfoot:H,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[`row`,`col`,`rowgroup`,`colgroup`]}},thead:H,time:{attrs:{datetime:null}},title:H,tr:H,track:{attrs:{src:null,label:null,default:null,kind:[`subtitles`,`captions`,`descriptions`,`chapters`,`metadata`],srclang:null}},ul:{children:[`li`,`script`,`template`,`ul`,`ol`]},var:H,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`auto`,`metadata`,`none`],autoplay:[`autoplay`],mediagroup:[`movie`],muted:[`muted`],controls:[`controls`]}},wbr:H},U={accesskey:null,class:null,contenteditable:V,contextmenu:null,dir:[`ltr`,`rtl`,`auto`],draggable:[`true`,`false`,`auto`],dropzone:[`copy`,`move`,`link`,`string:`,`file:`],hidden:[`hidden`],id:null,inert:[`inert`],itemid:null,itemprop:null,itemref:null,itemscope:[`itemscope`],itemtype:null,lang:[`ar`,`bn`,`de`,`en-GB`,`en-US`,`es`,`fr`,`hi`,`id`,`ja`,`pa`,`pt`,`ru`,`tr`,`zh`],spellcheck:V,autocorrect:V,autocapitalize:V,style:null,tabindex:null,title:null,translate:[`yes`,`no`],rel:[`stylesheet`,`alternate`,`author`,`bookmark`,`help`,`license`,`next`,`nofollow`,`noreferrer`,`prefetch`,`prev`,`search`,`tag`],role:`alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer`.split(` `),"aria-activedescendant":null,"aria-atomic":V,"aria-autocomplete":[`inline`,`list`,`both`,`none`],"aria-busy":V,"aria-checked":[`true`,`false`,`mixed`,`undefined`],"aria-controls":null,"aria-describedby":null,"aria-disabled":V,"aria-dropeffect":null,"aria-expanded":[`true`,`false`,`undefined`],"aria-flowto":null,"aria-grabbed":[`true`,`false`,`undefined`],"aria-haspopup":V,"aria-hidden":V,"aria-invalid":[`true`,`false`,`grammar`,`spelling`],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":[`off`,`polite`,`assertive`],"aria-multiline":V,"aria-multiselectable":V,"aria-owns":null,"aria-posinset":null,"aria-pressed":[`true`,`false`,`mixed`,`undefined`],"aria-readonly":V,"aria-relevant":null,"aria-required":V,"aria-selected":[`true`,`false`,`undefined`],"aria-setsize":null,"aria-sort":[`ascending`,`descending`,`none`,`other`],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},W=`beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload`.split(` `).map(e=>`on`+e);for(let e of W)U[e]=null;var G=class{constructor(e,t){this.tags={...Je,...e},this.globalAttrs={...U,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};G.default=new G;function K(e,t,n=e.length){if(!t)return``;let r=t.firstChild,i=r&&r.getChild(`TagName`);return i?e.sliceString(i.from,Math.min(i.to,n)):``}function q(e,t=!1){for(;e;e=e.parent)if(e.name==`Element`)if(t)t=!1;else return e;return null}function J(e,t,n){return n.tags[K(e,q(t))]?.children||n.allTags}function Y(e,t){let n=[];for(let r=q(t);r&&!r.type.isTop;r=q(r.parent)){let i=K(e,r);if(i&&r.lastChild.name==`CloseTag`)break;i&&n.indexOf(i)<0&&(t.name==`EndTag`||t.from>=r.firstChild.to)&&n.push(i)}return n}var X=/^[:\-\.\w\u00b7-\uffff]*$/;function Ye(e,t,n,r,i){let a=/\s*>/.test(e.sliceDoc(i,i+5))?``:`>`,o=q(n,n.name==`StartTag`||n.name==`TagName`);return{from:r,to:i,options:J(e.doc,o,t).map(e=>({label:e,type:`type`})).concat(Y(e.doc,n).map((e,t)=>({label:`/`+e,apply:`/`+e+a,type:`type`,boost:99-t}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Xe(e,t,n,r){let i=/\s*>/.test(e.sliceDoc(r,r+5))?``:`>`;return{from:n,to:r,options:Y(e.doc,t).map((e,t)=>({label:e,apply:e+i,type:`type`,boost:99-t})),validFor:X}}function Ze(e,t,n,r){let i=[],a=0;for(let r of J(e.doc,n,t))i.push({label:`<`+r,type:`type`});for(let t of Y(e.doc,n))i.push({label:``,type:`type`,boost:99-a++});return{from:r,to:r,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function Qe(e,t,n,r,i){let a=q(n),o=a?t.tags[K(e.doc,a)]:null,s=o&&o.attrs?Object.keys(o.attrs):[];return{from:r,to:i,options:(o&&o.globalAttrs===!1?s:s.length?s.concat(t.globalAttrNames):t.globalAttrNames).map(e=>({label:e,type:`property`})),validFor:X}}function $e(e,t,n,r,i){let a=n.parent?.getChild(`AttributeName`),o=[],s;if(a){let c=e.sliceDoc(a.from,a.to),l=t.globalAttrs[c];if(!l){let r=q(n),i=r?t.tags[K(e.doc,r)]:null;l=i?.attrs&&i.attrs[c]}if(l){let t=e.sliceDoc(r,i).toLowerCase(),n=`"`,a=`"`;/^['"]/.test(t)?(s=t[0]==`"`?/^[^"]*$/:/^[^']*$/,n=``,a=e.sliceDoc(i,i+1)==t[0]?``:t[0],t=t.slice(1),r++):s=/^[^\s<>='"]*$/;for(let e of l)o.push({label:e,apply:n+e+a,type:`constant`})}}return{from:r,to:i,options:o,validFor:s}}function Z(e,t){let{state:n,pos:r}=t,i=l(n).resolveInner(r,-1),a=i.resolve(r);for(let e=r,t;a==i&&(t=i.childBefore(e));){let n=t.lastChild;if(!n||!n.type.isError||n.fromZ(r,e)}var nt=p.parser.configure({top:`SingleExpression`}),rt=[{tag:`script`,attrs:e=>e.type==`text/typescript`||e.lang==`ts`,parser:oe.parser},{tag:`script`,attrs:e=>e.type==`text/babel`||e.type==`text/jsx`,parser:ie.parser},{tag:`script`,attrs:e=>e.type==`text/typescript-jsx`,parser:re.parser},{tag:`script`,attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:nt},{tag:`script`,attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:p.parser},{tag:`style`,attrs(e){return(!e.lang||e.lang==`css`)&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:f.parser}],it=[{name:`style`,parser:f.parser.configure({top:`Styles`})}].concat(W.map(e=>({name:e,parser:p.parser}))),at=c.define({name:`html`,parser:qe.configure({props:[o.add({Element(e){let t=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+t[0].length?e.continue():e.lineIndent(e.node.from)+(t[2]?0:e.unit)},"OpenTag CloseTag SelfClosingTag"(e){return e.column(e.node.from)+e.unit},Document(e){if(e.pos+/\s*/.exec(e.textAfter)[0].lengthe.getChild(`TagName`)})]}),languageData:{commentTokens:{block:{open:``}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),Q=at.configure({wrap:I(rt,it)});function ot(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(rt),(e.nestedAttributes||[]).concat(it))),new a(n?at.configure({wrap:n,dialect:t}):t?Q.configure({dialect:t}):Q,[Q.data.of({autocomplete:tt(e)}),e.autoCloseTags===!1?[]:st,ae().support,ne().support])}var $=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `)),st=n.inputHandler.of((e,n,r,i,a)=>{if(e.composing||e.state.readOnly||n!=r||i!=`>`&&i!=`/`||!Q.isActiveAt(e.state,n,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let n=s.doc.sliceString(e.from-1,e.to)==i,{head:r}=e,a=l(s).resolveInner(r,-1),o;if(n&&i==`>`&&a.name==`EndTag`){let t=a.parent;if(t.parent?.lastChild?.name!=`CloseTag`&&(o=K(s.doc,t.parent,r))&&!$.has(o))return{range:e,changes:{from:r,to:r+ +(s.doc.sliceString(r,r+1)===`>`),insert:``}}}else if(n&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==r-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,r))&&!$.has(o)){let e=r+ +(s.doc.sliceString(r,r+1)===`>`),n=`${o}>`;return{range:t.cursor(r+n.length,-1),changes:{from:r,to:e,insert:n}}}}return{range:e}});return c.changes.empty?!1:(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{ot as html,et as htmlCompletionSource}; \ No newline at end of file diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-CCXomA9h.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-Dffou3cZ.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-CCXomA9h.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-Dffou3cZ.js index 9919bb5e..c1795b87 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-CCXomA9h.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-Dffou3cZ.js @@ -1,4 +1,4 @@ -import{$ as e,C as t,D as n,I as r,M as i,_ as a,b as o,c as s,d as c,f as ee,i as te,l as ne,m as re,s as l,t as ie,u,v as d,x as f}from"./index-nWZaQUdZ.js";import{i as p,n as m,r as ae,t as oe}from"./dist-fdzu-F4-.js";import{i as h,n as g,r as se}from"./dist-BUu4dMye.js";var ce=316,le=317,_=1,ue=2,de=3,fe=4,pe=318,me=320,he=321,ge=5,_e=6,ve=0,v=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],y=125,ye=59,b=47,x=42,S=43,C=45,w=60,T=44,E=63,D=46,O=91,k=new oe({start:!1,shift(e,t){return t==ge||t==_e||t==me?e:t==he},strict:!1}),A=new m((e,t)=>{let{next:n}=e;(n==y||n==-1||t.context)&&e.acceptToken(pe)},{contextual:!0,fallback:!0}),j=new m((e,t)=>{let{next:n}=e,r;v.indexOf(n)>-1||n==b&&((r=e.peek(1))==b||r==x)||n!=y&&n!=ye&&n!=-1&&!t.context&&e.acceptToken(ce)},{contextual:!0}),M=new m((e,t)=>{e.next==O&&!t.context&&e.acceptToken(le)},{contextual:!0}),N=new m((e,t)=>{let{next:n}=e;if(n==S||n==C){if(e.advance(),n==e.next){e.advance();let n=!t.context&&t.canShift(_);e.acceptToken(n?_:ue)}}else n==E&&e.peek(1)==D&&(e.advance(),e.advance(),(e.next<48||e.next>57)&&e.acceptToken(de))},{contextual:!0});function P(e,t){return e>=65&&e<=90||e>=97&&e<=122||e==95||e>=192||!t&&e>=48&&e<=57}var be=new m((e,t)=>{if(e.next!=w||!t.dialectEnabled(ve)||(e.advance(),e.next==b))return;let n=0;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(P(e.next,!0)){for(e.advance(),n++;P(e.next,!1);)e.advance(),n++;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(e.next==T)return;for(let t=0;;t++){if(t==7){if(!P(e.next,!0))return;break}if(e.next!=`extends`.charCodeAt(t))break;e.advance(),n++}}e.acceptToken(fe,-n)}),xe=o({"get set async static":f.modifier,"for while do if else switch try catch finally return throw break continue default case defer":f.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":f.operatorKeyword,"let var const using function class extends":f.definitionKeyword,"import export from":f.moduleKeyword,"with debugger new":f.keyword,TemplateString:f.special(f.string),super:f.atom,BooleanLiteral:f.bool,this:f.self,null:f.null,Star:f.modifier,VariableName:f.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":f.function(f.variableName),VariableDefinition:f.definition(f.variableName),Label:f.labelName,PropertyName:f.propertyName,PrivatePropertyName:f.special(f.propertyName),"CallExpression/MemberExpression/PropertyName":f.function(f.propertyName),"FunctionDeclaration/VariableDefinition":f.function(f.definition(f.variableName)),"ClassDeclaration/VariableDefinition":f.definition(f.className),"NewExpression/VariableName":f.className,PropertyDefinition:f.definition(f.propertyName),PrivatePropertyDefinition:f.definition(f.special(f.propertyName)),UpdateOp:f.updateOperator,"LineComment Hashbang":f.lineComment,BlockComment:f.blockComment,Number:f.number,String:f.string,Escape:f.escape,ArithOp:f.arithmeticOperator,LogicOp:f.logicOperator,BitOp:f.bitwiseOperator,CompareOp:f.compareOperator,RegExp:f.regexp,Equals:f.definitionOperator,Arrow:f.function(f.punctuation),": Spread":f.punctuation,"( )":f.paren,"[ ]":f.squareBracket,"{ }":f.brace,"InterpolationStart InterpolationEnd":f.special(f.brace),".":f.derefOperator,", ;":f.separator,"@":f.meta,TypeName:f.typeName,TypeDefinition:f.definition(f.typeName),"type enum interface implements namespace module declare":f.definitionKeyword,"abstract global Privacy readonly override":f.modifier,"is keyof unique infer asserts":f.operatorKeyword,JSXAttributeValue:f.attributeValue,JSXText:f.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":f.angleBracket,"JSXIdentifier JSXNameSpacedName":f.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":f.attributeName,"JSXBuiltin/JSXIdentifier":f.standard(f.tagName)}),Se={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},Ce={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},we={__proto__:null,"<":193},Te=ae.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem`,maxTerm:380,context:k,nodeProps:[[`isolate`,-8,5,6,14,37,39,51,53,55,``],[`group`,-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,`Statement`,-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,`Expression`,-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,`Type`,-3,88,103,109,`ClassItem`],[`openedBy`,23,`<`,38,`InterpolationStart`,56,`[`,60,`{`,73,`(`,160,`JSXStartCloseTag`],[`closedBy`,-2,24,168,`>`,40,`InterpolationEnd`,50,`]`,61,`}`,74,`)`,165,`JSXEndTag`]],propSources:[xe],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[j,M,N,be,2,3,4,5,6,7,8,9,10,11,12,13,14,A,new p("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new p(`j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~`,25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:e=>Se[e]||-1},{term:343,get:e=>Ce[e]||-1},{term:95,get:e=>we[e]||-1}],tokenPrec:15201}),Ee=e({autoCloseTags:()=>$,javascript:()=>Z,javascriptLanguage:()=>W,jsxLanguage:()=>q,localCompletionSource:()=>U,snippets:()=>F,tsxLanguage:()=>J,typescriptLanguage:()=>K,typescriptSnippets:()=>I}),F=[h("function ${name}(${params}) {\n ${}\n}",{label:`function`,detail:`definition`,type:`keyword`}),h("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:`for`,detail:`loop`,type:`keyword`}),h("for (let ${name} of ${collection}) {\n ${}\n}",{label:`for`,detail:`of loop`,type:`keyword`}),h(`do { +import{$ as e,C as t,D as n,I as r,M as i,_ as a,b as o,c as s,d as c,f as ee,i as te,l as ne,m as re,s as l,t as ie,u,v as d,x as f}from"./index-DFlPXY2S.js";import{i as p,n as m,r as ae,t as oe}from"./dist-BObfczsO.js";import{i as h,n as g,r as se}from"./dist-B4wkeQMq.js";var ce=316,le=317,_=1,ue=2,de=3,fe=4,pe=318,me=320,he=321,ge=5,_e=6,ve=0,v=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],y=125,ye=59,b=47,x=42,S=43,C=45,w=60,T=44,E=63,D=46,O=91,k=new oe({start:!1,shift(e,t){return t==ge||t==_e||t==me?e:t==he},strict:!1}),A=new m((e,t)=>{let{next:n}=e;(n==y||n==-1||t.context)&&e.acceptToken(pe)},{contextual:!0,fallback:!0}),j=new m((e,t)=>{let{next:n}=e,r;v.indexOf(n)>-1||n==b&&((r=e.peek(1))==b||r==x)||n!=y&&n!=ye&&n!=-1&&!t.context&&e.acceptToken(ce)},{contextual:!0}),M=new m((e,t)=>{e.next==O&&!t.context&&e.acceptToken(le)},{contextual:!0}),N=new m((e,t)=>{let{next:n}=e;if(n==S||n==C){if(e.advance(),n==e.next){e.advance();let n=!t.context&&t.canShift(_);e.acceptToken(n?_:ue)}}else n==E&&e.peek(1)==D&&(e.advance(),e.advance(),(e.next<48||e.next>57)&&e.acceptToken(de))},{contextual:!0});function P(e,t){return e>=65&&e<=90||e>=97&&e<=122||e==95||e>=192||!t&&e>=48&&e<=57}var be=new m((e,t)=>{if(e.next!=w||!t.dialectEnabled(ve)||(e.advance(),e.next==b))return;let n=0;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(P(e.next,!0)){for(e.advance(),n++;P(e.next,!1);)e.advance(),n++;for(;v.indexOf(e.next)>-1;)e.advance(),n++;if(e.next==T)return;for(let t=0;;t++){if(t==7){if(!P(e.next,!0))return;break}if(e.next!=`extends`.charCodeAt(t))break;e.advance(),n++}}e.acceptToken(fe,-n)}),xe=o({"get set async static":f.modifier,"for while do if else switch try catch finally return throw break continue default case defer":f.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":f.operatorKeyword,"let var const using function class extends":f.definitionKeyword,"import export from":f.moduleKeyword,"with debugger new":f.keyword,TemplateString:f.special(f.string),super:f.atom,BooleanLiteral:f.bool,this:f.self,null:f.null,Star:f.modifier,VariableName:f.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":f.function(f.variableName),VariableDefinition:f.definition(f.variableName),Label:f.labelName,PropertyName:f.propertyName,PrivatePropertyName:f.special(f.propertyName),"CallExpression/MemberExpression/PropertyName":f.function(f.propertyName),"FunctionDeclaration/VariableDefinition":f.function(f.definition(f.variableName)),"ClassDeclaration/VariableDefinition":f.definition(f.className),"NewExpression/VariableName":f.className,PropertyDefinition:f.definition(f.propertyName),PrivatePropertyDefinition:f.definition(f.special(f.propertyName)),UpdateOp:f.updateOperator,"LineComment Hashbang":f.lineComment,BlockComment:f.blockComment,Number:f.number,String:f.string,Escape:f.escape,ArithOp:f.arithmeticOperator,LogicOp:f.logicOperator,BitOp:f.bitwiseOperator,CompareOp:f.compareOperator,RegExp:f.regexp,Equals:f.definitionOperator,Arrow:f.function(f.punctuation),": Spread":f.punctuation,"( )":f.paren,"[ ]":f.squareBracket,"{ }":f.brace,"InterpolationStart InterpolationEnd":f.special(f.brace),".":f.derefOperator,", ;":f.separator,"@":f.meta,TypeName:f.typeName,TypeDefinition:f.definition(f.typeName),"type enum interface implements namespace module declare":f.definitionKeyword,"abstract global Privacy readonly override":f.modifier,"is keyof unique infer asserts":f.operatorKeyword,JSXAttributeValue:f.attributeValue,JSXText:f.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":f.angleBracket,"JSXIdentifier JSXNameSpacedName":f.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":f.attributeName,"JSXBuiltin/JSXIdentifier":f.standard(f.tagName)}),Se={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},Ce={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},we={__proto__:null,"<":193},Te=ae.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem`,maxTerm:380,context:k,nodeProps:[[`isolate`,-8,5,6,14,37,39,51,53,55,``],[`group`,-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,`Statement`,-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,`Expression`,-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,`Type`,-3,88,103,109,`ClassItem`],[`openedBy`,23,`<`,38,`InterpolationStart`,56,`[`,60,`{`,73,`(`,160,`JSXStartCloseTag`],[`closedBy`,-2,24,168,`>`,40,`InterpolationEnd`,50,`]`,61,`}`,74,`)`,165,`JSXEndTag`]],propSources:[xe],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[j,M,N,be,2,3,4,5,6,7,8,9,10,11,12,13,14,A,new p("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new p(`j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~`,25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:e=>Se[e]||-1},{term:343,get:e=>Ce[e]||-1},{term:95,get:e=>we[e]||-1}],tokenPrec:15201}),Ee=e({autoCloseTags:()=>$,javascript:()=>Z,javascriptLanguage:()=>W,jsxLanguage:()=>q,localCompletionSource:()=>U,snippets:()=>F,tsxLanguage:()=>J,typescriptLanguage:()=>K,typescriptSnippets:()=>I}),F=[h("function ${name}(${params}) {\n ${}\n}",{label:`function`,detail:`definition`,type:`keyword`}),h("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:`for`,detail:`loop`,type:`keyword`}),h("for (let ${name} of ${collection}) {\n ${}\n}",{label:`for`,detail:`of loop`,type:`keyword`}),h(`do { \${} } while (\${})`,{label:`do`,detail:`loop`,type:`keyword`}),h(`while (\${}) { \${} diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/dist-iLl8KPXM.js b/mcp/src/agents_remember/package_data/dashboard/assets/dist-DutnYvKJ.js similarity index 99% rename from mcp/src/agents_remember/package_data/dashboard/assets/dist-iLl8KPXM.js rename to mcp/src/agents_remember/package_data/dashboard/assets/dist-DutnYvKJ.js index d162e727..9ac97872 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/dist-iLl8KPXM.js +++ b/mcp/src/agents_remember/package_data/dashboard/assets/dist-DutnYvKJ.js @@ -1 +1 @@ -import{$ as e,C as t,D as n,b as r,d as i,f as a,i as o,m as s,s as c,t as ee,v as l,x as u}from"./index-nWZaQUdZ.js";import{i as d,n as f,r as p}from"./dist-fdzu-F4-.js";var m=145,h=1,te=146,ne=147,g=2,_=148,v=3,re=4,y=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],b=58,x=40,S=95,ie=91,C=45,ae=46,oe=35,se=37,w=38,T=92,E=10,D=42;function O(e){return e>=65&&e<=90||e>=97&&e<=122||e>=161}function k(e){return e>=48&&e<=57}function A(e){return k(e)||e>=97&&e<=102||e>=65&&e<=70}var j=(e,t,n)=>(r,i)=>{for(let a=!1,o=0,s=0;;s++){let{next:c}=r;if(O(c)||c==C||c==S||a&&k(c))!a&&(c!=C||s>0)&&(a=!0),o===s&&c==C&&o++,r.advance();else if(c==T&&r.peek(1)!=E){if(r.advance(),A(r.next)){do r.advance();while(A(r.next));r.next==32&&r.advance()}else r.next>-1&&r.advance();a=!0}else{a&&r.acceptToken(o==2&&i.canShift(g)?t:c==x?n:e);break}}},M=new f(j(te,g,ne),{contextual:!0}),N=new f(j(_,v,re),{contextual:!0}),P=new f(e=>{if(y.includes(e.peek(-1))){let{next:t}=e;(O(t)||t==S||t==oe||t==ae||t==D||t==ie||t==b&&O(e.peek(1))||t==C||t==w)&&e.acceptToken(m)}}),F=new f(e=>{if(!y.includes(e.peek(-1))){let{next:t}=e;if(t==se&&(e.advance(),e.acceptToken(h)),O(t)){do e.advance();while(O(e.next)||k(e.next));e.acceptToken(h)}}}),I=r({"AtKeyword import charset namespace keyframes media supports font-feature-values":u.definitionKeyword,"from to selector scope MatchFlag":u.keyword,NamespaceName:u.namespace,KeyframeName:u.labelName,KeyframeRangeName:u.operatorKeyword,TagName:u.tagName,ClassName:u.className,PseudoClassName:u.constant(u.className),IdName:u.labelName,"FeatureName PropertyName":u.propertyName,AttributeName:u.attributeName,NumberLiteral:u.number,KeywordQuery:u.keyword,UnaryQueryOp:u.operatorKeyword,"CallTag ValueName FontName":u.atom,VariableName:u.variableName,Callee:u.operatorKeyword,Unit:u.unit,"UniversalSelector NestingSelector":u.definitionOperator,"MatchOp CompareOp":u.compareOperator,"ChildOp SiblingOp, LogicOp":u.logicOperator,BinOp:u.arithmeticOperator,Important:u.modifier,Comment:u.blockComment,ColorLiteral:u.color,"ParenthesizedContent StringLiteral":u.string,":":u.punctuation,"PseudoOp #":u.derefOperator,"; , |":u.separator,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace}),L={__proto__:null,lang:44,"nth-child":44,"nth-last-child":44,"nth-of-type":44,"nth-last-of-type":44,dir:44,"host-context":44,if:90,url:152,"url-prefix":152,domain:152,regexp:152},R={__proto__:null,or:104,and:104,not:112,only:112,layer:206},z={__proto__:null,selector:118,style:124,layer:202},ce={__proto__:null,"@import":198,"@media":210,"@charset":214,"@namespace":218,"@keyframes":224,"@supports":236,"@scope":240,"@font-feature-values":246},B={__proto__:null,to:243},V=p.deserialize({version:14,states:"MlQYQdOOO#}QdOOP$UO`OOO%OQaO'#CfOOQP'#Ce'#CeO%VQdO'#CgO%[Q`O'#CgO%aQaO'#FnO&XQdO'#CkO&xQaO'#CcO'SQdO'#CnO'_QdO'#EOO'dQdO'#EQO'oQdO'#EXO'oQdO'#E[OOQP'#Fn'#FnO)RQhO'#E}OOQS'#Fm'#FmOOQS'#FQ'#FQQYQdOOO)YQdO'#EbO*iQhO'#EhO)YQdO'#EjO*pQdO'#ElO*{QdO'#EoO)}QhO'#EuO+TQdO'#EwO+`QdO'#EzO+eQaO'#CfO+lQ`O'#E_O+qQ`O'#F{O+|QdO'#F{QOQ`OOP,WO&jO'#CaPOOO)CA])CA]OOQP'#Ci'#CiOOQP,59R,59RO%VQdO,59ROOQP'#Cm'#CmOOQP,59V,59VO&XQdO,59VO,cQdO,59YO'_QdO,5:jO'dQdO,5:lO'oQdO,5:sO'oQdO,5:uO'oQdO,5:vO'oQdO'#FXO,nQ`O,58}O,vQdO'#E^OOQS,58},58}OOQP'#Cq'#CqOOQO'#D|'#D|OOQP,59Y,59YO,}Q`O,59YO-SQ`O,59YOOQP'#EP'#EPOOQP,5:j,5:jO-XQpO'#ERO-dQdO'#ESO-iQ`O'#ESO-nQpO,5:lO.XQaO,5:sO.oQaO,5:vOOQW'#D^'#D^O/nQhO'#DgO0RQhO,5;iO)}QhO'#DeO0`Q`O'#DnO0eQhO'#DxOOQW'#Ft'#FtOOQS,5;i,5;iO0jQ`O'#DhO0oQ`O'#DkOOQS-E9O-E9OOOQ['#Cv'#CvO0tQdO'#CwO1[QdO'#C}O1rQdO'#DQO2YQ!pO'#DSO4fQ!jO,5:|OOQO'#DX'#DXO-SQ`O'#DWO4vQ!nO'#FqO6|Q`O'#DYO7RQ`O'#DyOOQ['#Fq'#FqO7WQhO'#GOO7fQ`O,5;SO7kQ!bO,5;UOOQS'#En'#EnO7sQ`O,5;WO7xQdO,5;WOOQO'#Eq'#EqO8QQ`O,5;ZO8VQhO,5;aO'oQdO'#DjOOQS,5;c,5;cO0jQ`O,5;cO8_QdO,5;cOOQS'#F`'#F`O8gQdO'#E|O7fQ`O,5;fO8oQdO,5:yO9PQdO'#FZO9^Q`O,5lQhO'#DoOOQW,5:Y,5:YOOQW,5:d,5:dOOQW,5:S,5:SO>vQhO,5:VO?bQ!fO'#FrOOQS'#Fr'#FrOOQS'#FS'#FSO@rQdO,59cOOQ[,59c,59cOAYQdO,59iOOQ[,59i,59iOApQdO,59lOOQ[,59l,59lOOQ[,59n,59nO)YQdO,59pOBWQhO'#EdOOQW'#Ed'#EdOBuQ`O1G0hO4oQhO1G0hOOQ[,59r,59rO)}QhO'#D[OOQ[,59t,59tOBzQ#tO,5:eOCVQhO'#F]OCdQ`O,5vQhO'#DmOI_QhO'#DqOIgQhO'#DsOIlQhO'#FwOOQO'#Fw'#FwOItQ!bO'#DwOOQO'#Fy'#FyOOQO'#Fv'#FvOIyQ`O1G/qOOQS-E9Q-E9QOOQ[1G.}1G.}OOQ[1G/T1G/TOOQ[1G/W1G/WOOQ[1G/[1G/[OJOQdO,5;OOOQS7+&S7+&SOJTQ`O7+&SOJYQhO'#D]OJbQ`O,59vO)}QhO,59vOOQ[1G0P1G0POJjQ`O1G0POJoQhO,5;wOOQO-E9Z-E9ZOOQS7+&^7+&^OJ}QbO'#DSOOQO'#Et'#EtOK]Q`O'#EsOOQO'#Es'#EsOKhQ`O'#F^OKpQdO,5;^OOQS,5;^,5;^OOQ[1G/p1G/pOOQS7+&i7+&iO7fQ`O7+&iOK{Q!fO'#FYO)YQdO'#FYOMSQdO7+&POOQO7+&P7+&POOQO,5:{,5:{OOQO1G1a1G1aOMgQ!bO<vQhO'#DrOOQO,5:],5:]O! hQhO,5:_OGUQhO,5:cOOQW7+%]7+%]OOQO'#Ef'#EfO! pQ`O1G0jOOQS<xAN>xO!#zQ`OAN>xO!$PQaO,5;rOOQO-E9U-E9UO!$ZQdO,5;qOOQO-E9T-E9TOOQW<vQhO'#DuOOQO1G/y1G/yO!%vQ!bO1G/}OJOQdO'#F[O!&OQ`O7+&UOOQW7+&U7+&UO!&WQ!bO1G/cOOQ[7+$|7+$|O!&cQhO7+$|P!&jQ`O'#FTOOQO,5;y,5;yOOQO-E9]-E9]OOQS1G1d1G1dOOQPG24dG24dO!&oQ`OAN>ZO)YQdO1G1[O!&tQ`O7+'jOOQO1G/x1G/xO!&|Q`O,5:aO!$eQhO7+%iOOQO,5;v,5;vOOQO-E9Y-E9YOOQW<Q!]!^>|!^!_?_!_!`@Z!`!a@n!a!b%Z!b!cAo!c!k%Z!k!lC|!l!u%Z!u!vC|!v!}%Z!}#OD_#O#P%Z#P#QDp#Q#R2X#R#]%Z#]#^ER#^#g%Z#g#hC|#h#o%Z#o#pIf#p#qIw#q#rJ`#r#sJq#s#y%Z#y#z&R#z$f%Z$f$g&R$g#BY%Z#BY#BZ&R#BZ$IS%Z$IS$I_&R$I_$I|%Z$I|$JO&R$JO$JT%Z$JT$JU&R$JU$KV%Z$KV$KW&R$KW&FU%Z&FU&FV&R&FV;'S%Z;'S;=`KY<%lO%Z`%^SOy%jz;'S%j;'S;=`%{<%lO%j`%oS!o`Oy%jz;'S%j;'S;=`%{<%lO%j`&OP;=`<%l%j~&Wh$[~OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%j~'yh$[~!o`OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%jj)jS$qYOy%jz;'S%j;'S;=`%{<%lO%j~)yWOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d<%lO)v~*hOw~~*kRO;'S)v;'S;=`*t;=`O)v~*wXOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d;=`<%l)v<%lO)v~+gP;=`<%l)vj+oYmYOy%jz!Q%j!Q![,_![!c%j!c!i,_!i#T%j#T#Z,_#Z;'S%j;'S;=`%{<%lO%jj,dY!o`Oy%jz!Q%j!Q![-S![!c%j!c!i-S!i#T%j#T#Z-S#Z;'S%j;'S;=`%{<%lO%jj-XY!o`Oy%jz!Q%j!Q![-w![!c%j!c!i-w!i#T%j#T#Z-w#Z;'S%j;'S;=`%{<%lO%jj.OYuY!o`Oy%jz!Q%j!Q![.n![!c%j!c!i.n!i#T%j#T#Z.n#Z;'S%j;'S;=`%{<%lO%jj.uYuY!o`Oy%jz!Q%j!Q![/e![!c%j!c!i/e!i#T%j#T#Z/e#Z;'S%j;'S;=`%{<%lO%jj/jY!o`Oy%jz!Q%j!Q![0Y![!c%j!c!i0Y!i#T%j#T#Z0Y#Z;'S%j;'S;=`%{<%lO%jj0aYuY!o`Oy%jz!Q%j!Q![1P![!c%j!c!i1P!i#T%j#T#Z1P#Z;'S%j;'S;=`%{<%lO%jj1UY!o`Oy%jz!Q%j!Q![1t![!c%j!c!i1t!i#T%j#T#Z1t#Z;'S%j;'S;=`%{<%lO%jj1{SuY!o`Oy%jz;'S%j;'S;=`%{<%lO%jd2[UOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jd2uS!yS!o`Oy%jz;'S%j;'S;=`%{<%lO%jb3WS^QOy%jz;'S%j;'S;=`%{<%lO%j~3gWOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{<%lO3d~4SRO;'S3d;'S;=`4];=`O3d~4`XOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{;=`<%l3d<%lO3d~5OP;=`<%l3dj5WShYOy%jz;'S%j;'S;=`%{<%lO%j~5iOg~n5pUWQyWOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jj6ZWyW#PQOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj6xU!o`Oy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%jj7cY!o`$gYOy%jz!Q%j!Q![7[![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj8WY!o`Oy%jz{%j{|8v|}%j}!O8v!O!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj8{U!o`Oy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj9fU!o`$gYOy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj:P[!o`$gYOy%jz!O%j!O!P7[!P!Q%j!Q![9x![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj:zS!dYOy%jz;'S%j;'S;=`%{<%lO%jj;]WyWOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj;zU`YOy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%j~VUcYOy%jz![%j![!]>i!];'S%j;'S;=`%{<%lO%jj>pSdY!o`Oy%jz;'S%j;'S;=`%{<%lO%jj?RSnYOy%jz;'S%j;'S;=`%{<%lO%jh?dU!WWOy%jz!_%j!_!`?v!`;'S%j;'S;=`%{<%lO%jh?}S!WW!o`Oy%jz;'S%j;'S;=`%{<%lO%jl@bS!WW!ySOy%jz;'S%j;'S;=`%{<%lO%jj@uV!|Q!WWOy%jz!_%j!_!`?v!`!aA[!a;'S%j;'S;=`%{<%lO%jbAcS!|Q!o`Oy%jz;'S%j;'S;=`%{<%lO%jjArYOy%jz}%j}!OBb!O!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjBgW!o`Oy%jz!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjCW[lY!o`Oy%jz}%j}!OCP!O!Q%j!Q![CP![!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jhDRS!zWOy%jz;'S%j;'S;=`%{<%lO%jjDdSpYOy%jz;'S%j;'S;=`%{<%lO%jnDuSo^Oy%jz;'S%j;'S;=`%{<%lO%jjEWU!zWOy%jz#a%j#a#bEj#b;'S%j;'S;=`%{<%lO%jbEoU!o`Oy%jz#d%j#d#eFR#e;'S%j;'S;=`%{<%lO%jbFWU!o`Oy%jz#c%j#c#dFj#d;'S%j;'S;=`%{<%lO%jbFoU!o`Oy%jz#f%j#f#gGR#g;'S%j;'S;=`%{<%lO%jbGWU!o`Oy%jz#h%j#h#iGj#i;'S%j;'S;=`%{<%lO%jbGoU!o`Oy%jz#T%j#T#UHR#U;'S%j;'S;=`%{<%lO%jbHWU!o`Oy%jz#b%j#b#cHj#c;'S%j;'S;=`%{<%lO%jbHoU!o`Oy%jz#h%j#h#iIR#i;'S%j;'S;=`%{<%lO%jbIYS$pQ!o`Oy%jz;'S%j;'S;=`%{<%lO%jjIkSsYOy%jz;'S%j;'S;=`%{<%lO%jfI|U$cUOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jjJeSrYOy%jz;'S%j;'S;=`%{<%lO%jfJvU#PQOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%j`K]P;=`<%l%Z",tokenizers:[P,F,M,N,1,2,3,4,new d("m~RRYZ[z{a~~g~aO$_~~dP!P!Qg~lO$`~~",28,152)],topRules:{StyleSheet:[0,6],Styles:[1,126]},dynamicPrecedences:{94:1},specialized:[{term:147,get:e=>L[e]||-1},{term:148,get:e=>R[e]||-1},{term:4,get:e=>z[e]||-1},{term:28,get:e=>ce[e]||-1},{term:146,get:e=>B[e]||-1}],tokenPrec:2405}),H=e({css:()=>$,cssCompletionSource:()=>Z,cssLanguage:()=>Q,defineCSSCompletionSource:()=>X}),U=null;function W(){if(!U&&typeof document==`object`&&document.body){let{style:e}=document.body,t=[],n=new Set;for(let r in e)r!=`cssText`&&r!=`cssFloat`&&typeof e[r]==`string`&&(/[A-Z]/.test(r)&&(r=r.replace(/[A-Z]/g,e=>`-`+e.toLowerCase())),n.has(r)||(t.push(r),n.add(r)));U=t.sort().map(e=>({type:`property`,label:e,apply:e+`: `}))}return U||[]}var G=`active.after.any-link.autofill.backdrop.before.checked.cue.default.defined.disabled.empty.enabled.file-selector-button.first.first-child.first-letter.first-line.first-of-type.focus.focus-visible.focus-within.fullscreen.has.host.host-context.hover.in-range.indeterminate.invalid.is.lang.last-child.last-of-type.left.link.marker.modal.not.nth-child.nth-last-child.nth-last-of-type.nth-of-type.only-child.only-of-type.optional.out-of-range.part.placeholder.placeholder-shown.read-only.read-write.required.right.root.scope.selection.slotted.target.target-text.valid.visited.where`.split(`.`).map(e=>({type:`class`,label:e})),K=`above.absolute.activeborder.additive.activecaption.after-white-space.ahead.alias.all.all-scroll.alphabetic.alternate.always.antialiased.appworkspace.asterisks.attr.auto.auto-flow.avoid.avoid-column.avoid-page.avoid-region.axis-pan.background.backwards.baseline.below.bidi-override.blink.block.block-axis.bold.bolder.border.border-box.both.bottom.break.break-all.break-word.bullets.button.button-bevel.buttonface.buttonhighlight.buttonshadow.buttontext.calc.capitalize.caps-lock-indicator.caption.captiontext.caret.cell.center.checkbox.circle.cjk-decimal.clear.clip.close-quote.col-resize.collapse.color.color-burn.color-dodge.column.column-reverse.compact.condensed.contain.content.contents.content-box.context-menu.continuous.copy.counter.counters.cover.crop.cross.crosshair.currentcolor.cursive.cyclic.darken.dashed.decimal.decimal-leading-zero.default.default-button.dense.destination-atop.destination-in.destination-out.destination-over.difference.disc.discard.disclosure-closed.disclosure-open.document.dot-dash.dot-dot-dash.dotted.double.down.e-resize.ease.ease-in.ease-in-out.ease-out.element.ellipse.ellipsis.embed.end.ethiopic-abegede-gez.ethiopic-halehame-aa-er.ethiopic-halehame-gez.ew-resize.exclusion.expanded.extends.extra-condensed.extra-expanded.fantasy.fast.fill.fill-box.fixed.flat.flex.flex-end.flex-start.footnotes.forwards.from.geometricPrecision.graytext.grid.groove.hand.hard-light.help.hidden.hide.higher.highlight.highlighttext.horizontal.hsl.hsla.hue.icon.ignore.inactiveborder.inactivecaption.inactivecaptiontext.infinite.infobackground.infotext.inherit.initial.inline.inline-axis.inline-block.inline-flex.inline-grid.inline-table.inset.inside.intrinsic.invert.italic.justify.keep-all.landscape.large.larger.left.level.lighter.lighten.line-through.linear.linear-gradient.lines.list-item.listbox.listitem.local.logical.loud.lower.lower-hexadecimal.lower-latin.lower-norwegian.lowercase.ltr.luminosity.manipulation.match.matrix.matrix3d.medium.menu.menutext.message-box.middle.min-intrinsic.mix.monospace.move.multiple.multiple_mask_images.multiply.n-resize.narrower.ne-resize.nesw-resize.no-close-quote.no-drop.no-open-quote.no-repeat.none.normal.not-allowed.nowrap.ns-resize.numbers.numeric.nw-resize.nwse-resize.oblique.opacity.open-quote.optimizeLegibility.optimizeSpeed.outset.outside.outside-shape.overlay.overline.padding.padding-box.painted.page.paused.perspective.pinch-zoom.plus-darker.plus-lighter.pointer.polygon.portrait.pre.pre-line.pre-wrap.preserve-3d.progress.push-button.radial-gradient.radio.read-only.read-write.read-write-plaintext-only.rectangle.region.relative.repeat.repeating-linear-gradient.repeating-radial-gradient.repeat-x.repeat-y.reset.reverse.rgb.rgba.ridge.right.rotate.rotate3d.rotateX.rotateY.rotateZ.round.row.row-resize.row-reverse.rtl.run-in.running.s-resize.sans-serif.saturation.scale.scale3d.scaleX.scaleY.scaleZ.screen.scroll.scrollbar.scroll-position.se-resize.self-start.self-end.semi-condensed.semi-expanded.separate.serif.show.single.skew.skewX.skewY.skip-white-space.slide.slider-horizontal.slider-vertical.sliderthumb-horizontal.sliderthumb-vertical.slow.small.small-caps.small-caption.smaller.soft-light.solid.source-atop.source-in.source-out.source-over.space.space-around.space-between.space-evenly.spell-out.square.start.static.status-bar.stretch.stroke.stroke-box.sub.subpixel-antialiased.svg_masks.super.sw-resize.symbolic.symbols.system-ui.table.table-caption.table-cell.table-column.table-column-group.table-footer-group.table-header-group.table-row.table-row-group.text.text-bottom.text-top.textarea.textfield.thick.thin.threeddarkshadow.threedface.threedhighlight.threedlightshadow.threedshadow.to.top.transform.translate.translate3d.translateX.translateY.translateZ.transparent.ultra-condensed.ultra-expanded.underline.unidirectional-pan.unset.up.upper-latin.uppercase.url.var.vertical.vertical-text.view-box.visible.visibleFill.visiblePainted.visibleStroke.visual.w-resize.wait.wave.wider.window.windowframe.windowtext.words.wrap.wrap-reverse.x-large.x-small.xor.xx-large.xx-small`.split(`.`).map(e=>({type:`keyword`,label:e})).concat(`aliceblue.antiquewhite.aqua.aquamarine.azure.beige.bisque.black.blanchedalmond.blue.blueviolet.brown.burlywood.cadetblue.chartreuse.chocolate.coral.cornflowerblue.cornsilk.crimson.cyan.darkblue.darkcyan.darkgoldenrod.darkgray.darkgreen.darkkhaki.darkmagenta.darkolivegreen.darkorange.darkorchid.darkred.darksalmon.darkseagreen.darkslateblue.darkslategray.darkturquoise.darkviolet.deeppink.deepskyblue.dimgray.dodgerblue.firebrick.floralwhite.forestgreen.fuchsia.gainsboro.ghostwhite.gold.goldenrod.gray.grey.green.greenyellow.honeydew.hotpink.indianred.indigo.ivory.khaki.lavender.lavenderblush.lawngreen.lemonchiffon.lightblue.lightcoral.lightcyan.lightgoldenrodyellow.lightgray.lightgreen.lightpink.lightsalmon.lightseagreen.lightskyblue.lightslategray.lightsteelblue.lightyellow.lime.limegreen.linen.magenta.maroon.mediumaquamarine.mediumblue.mediumorchid.mediumpurple.mediumseagreen.mediumslateblue.mediumspringgreen.mediumturquoise.mediumvioletred.midnightblue.mintcream.mistyrose.moccasin.navajowhite.navy.oldlace.olive.olivedrab.orange.orangered.orchid.palegoldenrod.palegreen.paleturquoise.palevioletred.papayawhip.peachpuff.peru.pink.plum.powderblue.purple.rebeccapurple.red.rosybrown.royalblue.saddlebrown.salmon.sandybrown.seagreen.seashell.sienna.silver.skyblue.slateblue.slategray.snow.springgreen.steelblue.tan.teal.thistle.tomato.turquoise.violet.wheat.white.whitesmoke.yellow.yellowgreen`.split(`.`).map(e=>({type:`constant`,label:e}))),le=`a.abbr.address.article.aside.b.bdi.bdo.blockquote.body.br.button.canvas.caption.cite.code.col.colgroup.dd.del.details.dfn.dialog.div.dl.dt.em.figcaption.figure.footer.form.header.hgroup.h1.h2.h3.h4.h5.h6.hr.html.i.iframe.img.input.ins.kbd.label.legend.li.main.meter.nav.ol.output.p.pre.ruby.section.select.small.source.span.strong.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.tr.u.ul`.split(`.`).map(e=>({type:`type`,label:e})),ue=[`@charset`,`@color-profile`,`@container`,`@counter-style`,`@font-face`,`@font-feature-values`,`@font-palette-values`,`@import`,`@keyframes`,`@layer`,`@media`,`@namespace`,`@page`,`@position-try`,`@property`,`@scope`,`@starting-style`,`@supports`,`@view-transition`].map(e=>({type:`keyword`,label:e})),q=/^(\w[\w-]*|-\w[\w-]*|)$/,de=/^-(-[\w-]*)?$/;function fe(e,t){if((e.name==`(`||e.type.isError)&&(e=e.parent||e),e.name!=`ArgList`)return!1;let n=e.parent?.firstChild;return n?.name==`Callee`?t.sliceString(n.from,n.to)==`var`:!1}var J=new n,pe=[`Declaration`];function me(e){for(let t=e;;){if(t.type.isTop)return t;if(!(t=t.parent))return e}}function Y(e,n,r){if(n.to-n.from>4096){let i=J.get(n);if(i)return i;let a=[],o=new Set,s=n.cursor(t.IncludeAnonymous);if(s.firstChild())do for(let t of Y(e,s.node,r))o.has(t.label)||(o.add(t.label),a.push(t));while(s.nextSibling());return J.set(n,a),a}else{let t=[],i=new Set;return n.cursor().iterate(n=>{if(r(n)&&n.matchContext(pe)&&n.node.nextSibling?.name==`:`){let r=e.sliceString(n.from,n.to);i.has(r)||(i.add(r),t.push({label:r,type:`variable`}))}}),t}}var X=e=>t=>{let{state:n,pos:r}=t,i=l(n).resolveInner(r,-1),a=i.type.isError&&i.from==i.to-1&&n.doc.sliceString(i.from,i.to)==`-`;if(i.name==`PropertyName`||(a||i.name==`TagName`)&&/^(Block|Styles)$/.test(i.resolve(i.to).name))return{from:i.from,options:W(),validFor:q};if(i.name==`ValueName`)return{from:i.from,options:K,validFor:q};if(i.name==`PseudoClassName`)return{from:i.from,options:G,validFor:q};if(e(i)||(t.explicit||a)&&fe(i,n.doc))return{from:e(i)||a?i.from:r,options:Y(n.doc,me(i),e),validFor:de};if(i.name==`TagName`){for(let{parent:e}=i;e;e=e.parent)if(e.name==`Block`)return{from:i.from,options:W(),validFor:q};return{from:i.from,options:le,validFor:q}}if(i.name==`AtKeyword`)return{from:i.from,options:ue,validFor:q};if(!t.explicit)return null;let o=i.resolve(r),s=o.childBefore(r);return s&&s.name==`:`&&o.name==`PseudoClassSelector`?{from:r,options:G,validFor:q}:s&&s.name==`:`&&o.name==`Declaration`||o.name==`ArgList`?{from:r,options:K,validFor:q}:o.name==`Block`||o.name==`Styles`?{from:r,options:W(),validFor:q}:null},Z=X(e=>e.name==`VariableName`),Q=ee.define({name:`css`,parser:V.configure({props:[s.add({Declaration:c()}),a.add({"Block KeyframeList":i})]}),languageData:{commentTokens:{block:{open:`/*`,close:`*/`}},indentOnInput:/^\s*\}$/,wordChars:`-`}});function $(){return new o(Q,Q.data.of({autocomplete:Z}))}export{Q as n,H as r,$ as t}; \ No newline at end of file +import{$ as e,C as t,D as n,b as r,d as i,f as a,i as o,m as s,s as c,t as ee,v as l,x as u}from"./index-DFlPXY2S.js";import{i as d,n as f,r as p}from"./dist-BObfczsO.js";var m=145,h=1,te=146,ne=147,g=2,_=148,v=3,re=4,y=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],b=58,x=40,S=95,ie=91,C=45,ae=46,oe=35,se=37,w=38,T=92,E=10,D=42;function O(e){return e>=65&&e<=90||e>=97&&e<=122||e>=161}function k(e){return e>=48&&e<=57}function A(e){return k(e)||e>=97&&e<=102||e>=65&&e<=70}var j=(e,t,n)=>(r,i)=>{for(let a=!1,o=0,s=0;;s++){let{next:c}=r;if(O(c)||c==C||c==S||a&&k(c))!a&&(c!=C||s>0)&&(a=!0),o===s&&c==C&&o++,r.advance();else if(c==T&&r.peek(1)!=E){if(r.advance(),A(r.next)){do r.advance();while(A(r.next));r.next==32&&r.advance()}else r.next>-1&&r.advance();a=!0}else{a&&r.acceptToken(o==2&&i.canShift(g)?t:c==x?n:e);break}}},M=new f(j(te,g,ne),{contextual:!0}),N=new f(j(_,v,re),{contextual:!0}),P=new f(e=>{if(y.includes(e.peek(-1))){let{next:t}=e;(O(t)||t==S||t==oe||t==ae||t==D||t==ie||t==b&&O(e.peek(1))||t==C||t==w)&&e.acceptToken(m)}}),F=new f(e=>{if(!y.includes(e.peek(-1))){let{next:t}=e;if(t==se&&(e.advance(),e.acceptToken(h)),O(t)){do e.advance();while(O(e.next)||k(e.next));e.acceptToken(h)}}}),I=r({"AtKeyword import charset namespace keyframes media supports font-feature-values":u.definitionKeyword,"from to selector scope MatchFlag":u.keyword,NamespaceName:u.namespace,KeyframeName:u.labelName,KeyframeRangeName:u.operatorKeyword,TagName:u.tagName,ClassName:u.className,PseudoClassName:u.constant(u.className),IdName:u.labelName,"FeatureName PropertyName":u.propertyName,AttributeName:u.attributeName,NumberLiteral:u.number,KeywordQuery:u.keyword,UnaryQueryOp:u.operatorKeyword,"CallTag ValueName FontName":u.atom,VariableName:u.variableName,Callee:u.operatorKeyword,Unit:u.unit,"UniversalSelector NestingSelector":u.definitionOperator,"MatchOp CompareOp":u.compareOperator,"ChildOp SiblingOp, LogicOp":u.logicOperator,BinOp:u.arithmeticOperator,Important:u.modifier,Comment:u.blockComment,ColorLiteral:u.color,"ParenthesizedContent StringLiteral":u.string,":":u.punctuation,"PseudoOp #":u.derefOperator,"; , |":u.separator,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace}),L={__proto__:null,lang:44,"nth-child":44,"nth-last-child":44,"nth-of-type":44,"nth-last-of-type":44,dir:44,"host-context":44,if:90,url:152,"url-prefix":152,domain:152,regexp:152},R={__proto__:null,or:104,and:104,not:112,only:112,layer:206},z={__proto__:null,selector:118,style:124,layer:202},ce={__proto__:null,"@import":198,"@media":210,"@charset":214,"@namespace":218,"@keyframes":224,"@supports":236,"@scope":240,"@font-feature-values":246},B={__proto__:null,to:243},V=p.deserialize({version:14,states:"MlQYQdOOO#}QdOOP$UO`OOO%OQaO'#CfOOQP'#Ce'#CeO%VQdO'#CgO%[Q`O'#CgO%aQaO'#FnO&XQdO'#CkO&xQaO'#CcO'SQdO'#CnO'_QdO'#EOO'dQdO'#EQO'oQdO'#EXO'oQdO'#E[OOQP'#Fn'#FnO)RQhO'#E}OOQS'#Fm'#FmOOQS'#FQ'#FQQYQdOOO)YQdO'#EbO*iQhO'#EhO)YQdO'#EjO*pQdO'#ElO*{QdO'#EoO)}QhO'#EuO+TQdO'#EwO+`QdO'#EzO+eQaO'#CfO+lQ`O'#E_O+qQ`O'#F{O+|QdO'#F{QOQ`OOP,WO&jO'#CaPOOO)CA])CA]OOQP'#Ci'#CiOOQP,59R,59RO%VQdO,59ROOQP'#Cm'#CmOOQP,59V,59VO&XQdO,59VO,cQdO,59YO'_QdO,5:jO'dQdO,5:lO'oQdO,5:sO'oQdO,5:uO'oQdO,5:vO'oQdO'#FXO,nQ`O,58}O,vQdO'#E^OOQS,58},58}OOQP'#Cq'#CqOOQO'#D|'#D|OOQP,59Y,59YO,}Q`O,59YO-SQ`O,59YOOQP'#EP'#EPOOQP,5:j,5:jO-XQpO'#ERO-dQdO'#ESO-iQ`O'#ESO-nQpO,5:lO.XQaO,5:sO.oQaO,5:vOOQW'#D^'#D^O/nQhO'#DgO0RQhO,5;iO)}QhO'#DeO0`Q`O'#DnO0eQhO'#DxOOQW'#Ft'#FtOOQS,5;i,5;iO0jQ`O'#DhO0oQ`O'#DkOOQS-E9O-E9OOOQ['#Cv'#CvO0tQdO'#CwO1[QdO'#C}O1rQdO'#DQO2YQ!pO'#DSO4fQ!jO,5:|OOQO'#DX'#DXO-SQ`O'#DWO4vQ!nO'#FqO6|Q`O'#DYO7RQ`O'#DyOOQ['#Fq'#FqO7WQhO'#GOO7fQ`O,5;SO7kQ!bO,5;UOOQS'#En'#EnO7sQ`O,5;WO7xQdO,5;WOOQO'#Eq'#EqO8QQ`O,5;ZO8VQhO,5;aO'oQdO'#DjOOQS,5;c,5;cO0jQ`O,5;cO8_QdO,5;cOOQS'#F`'#F`O8gQdO'#E|O7fQ`O,5;fO8oQdO,5:yO9PQdO'#FZO9^Q`O,5lQhO'#DoOOQW,5:Y,5:YOOQW,5:d,5:dOOQW,5:S,5:SO>vQhO,5:VO?bQ!fO'#FrOOQS'#Fr'#FrOOQS'#FS'#FSO@rQdO,59cOOQ[,59c,59cOAYQdO,59iOOQ[,59i,59iOApQdO,59lOOQ[,59l,59lOOQ[,59n,59nO)YQdO,59pOBWQhO'#EdOOQW'#Ed'#EdOBuQ`O1G0hO4oQhO1G0hOOQ[,59r,59rO)}QhO'#D[OOQ[,59t,59tOBzQ#tO,5:eOCVQhO'#F]OCdQ`O,5vQhO'#DmOI_QhO'#DqOIgQhO'#DsOIlQhO'#FwOOQO'#Fw'#FwOItQ!bO'#DwOOQO'#Fy'#FyOOQO'#Fv'#FvOIyQ`O1G/qOOQS-E9Q-E9QOOQ[1G.}1G.}OOQ[1G/T1G/TOOQ[1G/W1G/WOOQ[1G/[1G/[OJOQdO,5;OOOQS7+&S7+&SOJTQ`O7+&SOJYQhO'#D]OJbQ`O,59vO)}QhO,59vOOQ[1G0P1G0POJjQ`O1G0POJoQhO,5;wOOQO-E9Z-E9ZOOQS7+&^7+&^OJ}QbO'#DSOOQO'#Et'#EtOK]Q`O'#EsOOQO'#Es'#EsOKhQ`O'#F^OKpQdO,5;^OOQS,5;^,5;^OOQ[1G/p1G/pOOQS7+&i7+&iO7fQ`O7+&iOK{Q!fO'#FYO)YQdO'#FYOMSQdO7+&POOQO7+&P7+&POOQO,5:{,5:{OOQO1G1a1G1aOMgQ!bO<vQhO'#DrOOQO,5:],5:]O! hQhO,5:_OGUQhO,5:cOOQW7+%]7+%]OOQO'#Ef'#EfO! pQ`O1G0jOOQS<xAN>xO!#zQ`OAN>xO!$PQaO,5;rOOQO-E9U-E9UO!$ZQdO,5;qOOQO-E9T-E9TOOQW<vQhO'#DuOOQO1G/y1G/yO!%vQ!bO1G/}OJOQdO'#F[O!&OQ`O7+&UOOQW7+&U7+&UO!&WQ!bO1G/cOOQ[7+$|7+$|O!&cQhO7+$|P!&jQ`O'#FTOOQO,5;y,5;yOOQO-E9]-E9]OOQS1G1d1G1dOOQPG24dG24dO!&oQ`OAN>ZO)YQdO1G1[O!&tQ`O7+'jOOQO1G/x1G/xO!&|Q`O,5:aO!$eQhO7+%iOOQO,5;v,5;vOOQO-E9Y-E9YOOQW<Q!]!^>|!^!_?_!_!`@Z!`!a@n!a!b%Z!b!cAo!c!k%Z!k!lC|!l!u%Z!u!vC|!v!}%Z!}#OD_#O#P%Z#P#QDp#Q#R2X#R#]%Z#]#^ER#^#g%Z#g#hC|#h#o%Z#o#pIf#p#qIw#q#rJ`#r#sJq#s#y%Z#y#z&R#z$f%Z$f$g&R$g#BY%Z#BY#BZ&R#BZ$IS%Z$IS$I_&R$I_$I|%Z$I|$JO&R$JO$JT%Z$JT$JU&R$JU$KV%Z$KV$KW&R$KW&FU%Z&FU&FV&R&FV;'S%Z;'S;=`KY<%lO%Z`%^SOy%jz;'S%j;'S;=`%{<%lO%j`%oS!o`Oy%jz;'S%j;'S;=`%{<%lO%j`&OP;=`<%l%j~&Wh$[~OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%j~'yh$[~!o`OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%jj)jS$qYOy%jz;'S%j;'S;=`%{<%lO%j~)yWOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d<%lO)v~*hOw~~*kRO;'S)v;'S;=`*t;=`O)v~*wXOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d;=`<%l)v<%lO)v~+gP;=`<%l)vj+oYmYOy%jz!Q%j!Q![,_![!c%j!c!i,_!i#T%j#T#Z,_#Z;'S%j;'S;=`%{<%lO%jj,dY!o`Oy%jz!Q%j!Q![-S![!c%j!c!i-S!i#T%j#T#Z-S#Z;'S%j;'S;=`%{<%lO%jj-XY!o`Oy%jz!Q%j!Q![-w![!c%j!c!i-w!i#T%j#T#Z-w#Z;'S%j;'S;=`%{<%lO%jj.OYuY!o`Oy%jz!Q%j!Q![.n![!c%j!c!i.n!i#T%j#T#Z.n#Z;'S%j;'S;=`%{<%lO%jj.uYuY!o`Oy%jz!Q%j!Q![/e![!c%j!c!i/e!i#T%j#T#Z/e#Z;'S%j;'S;=`%{<%lO%jj/jY!o`Oy%jz!Q%j!Q![0Y![!c%j!c!i0Y!i#T%j#T#Z0Y#Z;'S%j;'S;=`%{<%lO%jj0aYuY!o`Oy%jz!Q%j!Q![1P![!c%j!c!i1P!i#T%j#T#Z1P#Z;'S%j;'S;=`%{<%lO%jj1UY!o`Oy%jz!Q%j!Q![1t![!c%j!c!i1t!i#T%j#T#Z1t#Z;'S%j;'S;=`%{<%lO%jj1{SuY!o`Oy%jz;'S%j;'S;=`%{<%lO%jd2[UOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jd2uS!yS!o`Oy%jz;'S%j;'S;=`%{<%lO%jb3WS^QOy%jz;'S%j;'S;=`%{<%lO%j~3gWOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{<%lO3d~4SRO;'S3d;'S;=`4];=`O3d~4`XOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{;=`<%l3d<%lO3d~5OP;=`<%l3dj5WShYOy%jz;'S%j;'S;=`%{<%lO%j~5iOg~n5pUWQyWOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jj6ZWyW#PQOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj6xU!o`Oy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%jj7cY!o`$gYOy%jz!Q%j!Q![7[![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj8WY!o`Oy%jz{%j{|8v|}%j}!O8v!O!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj8{U!o`Oy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj9fU!o`$gYOy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj:P[!o`$gYOy%jz!O%j!O!P7[!P!Q%j!Q![9x![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj:zS!dYOy%jz;'S%j;'S;=`%{<%lO%jj;]WyWOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj;zU`YOy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%j~VUcYOy%jz![%j![!]>i!];'S%j;'S;=`%{<%lO%jj>pSdY!o`Oy%jz;'S%j;'S;=`%{<%lO%jj?RSnYOy%jz;'S%j;'S;=`%{<%lO%jh?dU!WWOy%jz!_%j!_!`?v!`;'S%j;'S;=`%{<%lO%jh?}S!WW!o`Oy%jz;'S%j;'S;=`%{<%lO%jl@bS!WW!ySOy%jz;'S%j;'S;=`%{<%lO%jj@uV!|Q!WWOy%jz!_%j!_!`?v!`!aA[!a;'S%j;'S;=`%{<%lO%jbAcS!|Q!o`Oy%jz;'S%j;'S;=`%{<%lO%jjArYOy%jz}%j}!OBb!O!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjBgW!o`Oy%jz!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjCW[lY!o`Oy%jz}%j}!OCP!O!Q%j!Q![CP![!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jhDRS!zWOy%jz;'S%j;'S;=`%{<%lO%jjDdSpYOy%jz;'S%j;'S;=`%{<%lO%jnDuSo^Oy%jz;'S%j;'S;=`%{<%lO%jjEWU!zWOy%jz#a%j#a#bEj#b;'S%j;'S;=`%{<%lO%jbEoU!o`Oy%jz#d%j#d#eFR#e;'S%j;'S;=`%{<%lO%jbFWU!o`Oy%jz#c%j#c#dFj#d;'S%j;'S;=`%{<%lO%jbFoU!o`Oy%jz#f%j#f#gGR#g;'S%j;'S;=`%{<%lO%jbGWU!o`Oy%jz#h%j#h#iGj#i;'S%j;'S;=`%{<%lO%jbGoU!o`Oy%jz#T%j#T#UHR#U;'S%j;'S;=`%{<%lO%jbHWU!o`Oy%jz#b%j#b#cHj#c;'S%j;'S;=`%{<%lO%jbHoU!o`Oy%jz#h%j#h#iIR#i;'S%j;'S;=`%{<%lO%jbIYS$pQ!o`Oy%jz;'S%j;'S;=`%{<%lO%jjIkSsYOy%jz;'S%j;'S;=`%{<%lO%jfI|U$cUOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jjJeSrYOy%jz;'S%j;'S;=`%{<%lO%jfJvU#PQOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%j`K]P;=`<%l%Z",tokenizers:[P,F,M,N,1,2,3,4,new d("m~RRYZ[z{a~~g~aO$_~~dP!P!Qg~lO$`~~",28,152)],topRules:{StyleSheet:[0,6],Styles:[1,126]},dynamicPrecedences:{94:1},specialized:[{term:147,get:e=>L[e]||-1},{term:148,get:e=>R[e]||-1},{term:4,get:e=>z[e]||-1},{term:28,get:e=>ce[e]||-1},{term:146,get:e=>B[e]||-1}],tokenPrec:2405}),H=e({css:()=>$,cssCompletionSource:()=>Z,cssLanguage:()=>Q,defineCSSCompletionSource:()=>X}),U=null;function W(){if(!U&&typeof document==`object`&&document.body){let{style:e}=document.body,t=[],n=new Set;for(let r in e)r!=`cssText`&&r!=`cssFloat`&&typeof e[r]==`string`&&(/[A-Z]/.test(r)&&(r=r.replace(/[A-Z]/g,e=>`-`+e.toLowerCase())),n.has(r)||(t.push(r),n.add(r)));U=t.sort().map(e=>({type:`property`,label:e,apply:e+`: `}))}return U||[]}var G=`active.after.any-link.autofill.backdrop.before.checked.cue.default.defined.disabled.empty.enabled.file-selector-button.first.first-child.first-letter.first-line.first-of-type.focus.focus-visible.focus-within.fullscreen.has.host.host-context.hover.in-range.indeterminate.invalid.is.lang.last-child.last-of-type.left.link.marker.modal.not.nth-child.nth-last-child.nth-last-of-type.nth-of-type.only-child.only-of-type.optional.out-of-range.part.placeholder.placeholder-shown.read-only.read-write.required.right.root.scope.selection.slotted.target.target-text.valid.visited.where`.split(`.`).map(e=>({type:`class`,label:e})),K=`above.absolute.activeborder.additive.activecaption.after-white-space.ahead.alias.all.all-scroll.alphabetic.alternate.always.antialiased.appworkspace.asterisks.attr.auto.auto-flow.avoid.avoid-column.avoid-page.avoid-region.axis-pan.background.backwards.baseline.below.bidi-override.blink.block.block-axis.bold.bolder.border.border-box.both.bottom.break.break-all.break-word.bullets.button.button-bevel.buttonface.buttonhighlight.buttonshadow.buttontext.calc.capitalize.caps-lock-indicator.caption.captiontext.caret.cell.center.checkbox.circle.cjk-decimal.clear.clip.close-quote.col-resize.collapse.color.color-burn.color-dodge.column.column-reverse.compact.condensed.contain.content.contents.content-box.context-menu.continuous.copy.counter.counters.cover.crop.cross.crosshair.currentcolor.cursive.cyclic.darken.dashed.decimal.decimal-leading-zero.default.default-button.dense.destination-atop.destination-in.destination-out.destination-over.difference.disc.discard.disclosure-closed.disclosure-open.document.dot-dash.dot-dot-dash.dotted.double.down.e-resize.ease.ease-in.ease-in-out.ease-out.element.ellipse.ellipsis.embed.end.ethiopic-abegede-gez.ethiopic-halehame-aa-er.ethiopic-halehame-gez.ew-resize.exclusion.expanded.extends.extra-condensed.extra-expanded.fantasy.fast.fill.fill-box.fixed.flat.flex.flex-end.flex-start.footnotes.forwards.from.geometricPrecision.graytext.grid.groove.hand.hard-light.help.hidden.hide.higher.highlight.highlighttext.horizontal.hsl.hsla.hue.icon.ignore.inactiveborder.inactivecaption.inactivecaptiontext.infinite.infobackground.infotext.inherit.initial.inline.inline-axis.inline-block.inline-flex.inline-grid.inline-table.inset.inside.intrinsic.invert.italic.justify.keep-all.landscape.large.larger.left.level.lighter.lighten.line-through.linear.linear-gradient.lines.list-item.listbox.listitem.local.logical.loud.lower.lower-hexadecimal.lower-latin.lower-norwegian.lowercase.ltr.luminosity.manipulation.match.matrix.matrix3d.medium.menu.menutext.message-box.middle.min-intrinsic.mix.monospace.move.multiple.multiple_mask_images.multiply.n-resize.narrower.ne-resize.nesw-resize.no-close-quote.no-drop.no-open-quote.no-repeat.none.normal.not-allowed.nowrap.ns-resize.numbers.numeric.nw-resize.nwse-resize.oblique.opacity.open-quote.optimizeLegibility.optimizeSpeed.outset.outside.outside-shape.overlay.overline.padding.padding-box.painted.page.paused.perspective.pinch-zoom.plus-darker.plus-lighter.pointer.polygon.portrait.pre.pre-line.pre-wrap.preserve-3d.progress.push-button.radial-gradient.radio.read-only.read-write.read-write-plaintext-only.rectangle.region.relative.repeat.repeating-linear-gradient.repeating-radial-gradient.repeat-x.repeat-y.reset.reverse.rgb.rgba.ridge.right.rotate.rotate3d.rotateX.rotateY.rotateZ.round.row.row-resize.row-reverse.rtl.run-in.running.s-resize.sans-serif.saturation.scale.scale3d.scaleX.scaleY.scaleZ.screen.scroll.scrollbar.scroll-position.se-resize.self-start.self-end.semi-condensed.semi-expanded.separate.serif.show.single.skew.skewX.skewY.skip-white-space.slide.slider-horizontal.slider-vertical.sliderthumb-horizontal.sliderthumb-vertical.slow.small.small-caps.small-caption.smaller.soft-light.solid.source-atop.source-in.source-out.source-over.space.space-around.space-between.space-evenly.spell-out.square.start.static.status-bar.stretch.stroke.stroke-box.sub.subpixel-antialiased.svg_masks.super.sw-resize.symbolic.symbols.system-ui.table.table-caption.table-cell.table-column.table-column-group.table-footer-group.table-header-group.table-row.table-row-group.text.text-bottom.text-top.textarea.textfield.thick.thin.threeddarkshadow.threedface.threedhighlight.threedlightshadow.threedshadow.to.top.transform.translate.translate3d.translateX.translateY.translateZ.transparent.ultra-condensed.ultra-expanded.underline.unidirectional-pan.unset.up.upper-latin.uppercase.url.var.vertical.vertical-text.view-box.visible.visibleFill.visiblePainted.visibleStroke.visual.w-resize.wait.wave.wider.window.windowframe.windowtext.words.wrap.wrap-reverse.x-large.x-small.xor.xx-large.xx-small`.split(`.`).map(e=>({type:`keyword`,label:e})).concat(`aliceblue.antiquewhite.aqua.aquamarine.azure.beige.bisque.black.blanchedalmond.blue.blueviolet.brown.burlywood.cadetblue.chartreuse.chocolate.coral.cornflowerblue.cornsilk.crimson.cyan.darkblue.darkcyan.darkgoldenrod.darkgray.darkgreen.darkkhaki.darkmagenta.darkolivegreen.darkorange.darkorchid.darkred.darksalmon.darkseagreen.darkslateblue.darkslategray.darkturquoise.darkviolet.deeppink.deepskyblue.dimgray.dodgerblue.firebrick.floralwhite.forestgreen.fuchsia.gainsboro.ghostwhite.gold.goldenrod.gray.grey.green.greenyellow.honeydew.hotpink.indianred.indigo.ivory.khaki.lavender.lavenderblush.lawngreen.lemonchiffon.lightblue.lightcoral.lightcyan.lightgoldenrodyellow.lightgray.lightgreen.lightpink.lightsalmon.lightseagreen.lightskyblue.lightslategray.lightsteelblue.lightyellow.lime.limegreen.linen.magenta.maroon.mediumaquamarine.mediumblue.mediumorchid.mediumpurple.mediumseagreen.mediumslateblue.mediumspringgreen.mediumturquoise.mediumvioletred.midnightblue.mintcream.mistyrose.moccasin.navajowhite.navy.oldlace.olive.olivedrab.orange.orangered.orchid.palegoldenrod.palegreen.paleturquoise.palevioletred.papayawhip.peachpuff.peru.pink.plum.powderblue.purple.rebeccapurple.red.rosybrown.royalblue.saddlebrown.salmon.sandybrown.seagreen.seashell.sienna.silver.skyblue.slateblue.slategray.snow.springgreen.steelblue.tan.teal.thistle.tomato.turquoise.violet.wheat.white.whitesmoke.yellow.yellowgreen`.split(`.`).map(e=>({type:`constant`,label:e}))),le=`a.abbr.address.article.aside.b.bdi.bdo.blockquote.body.br.button.canvas.caption.cite.code.col.colgroup.dd.del.details.dfn.dialog.div.dl.dt.em.figcaption.figure.footer.form.header.hgroup.h1.h2.h3.h4.h5.h6.hr.html.i.iframe.img.input.ins.kbd.label.legend.li.main.meter.nav.ol.output.p.pre.ruby.section.select.small.source.span.strong.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.tr.u.ul`.split(`.`).map(e=>({type:`type`,label:e})),ue=[`@charset`,`@color-profile`,`@container`,`@counter-style`,`@font-face`,`@font-feature-values`,`@font-palette-values`,`@import`,`@keyframes`,`@layer`,`@media`,`@namespace`,`@page`,`@position-try`,`@property`,`@scope`,`@starting-style`,`@supports`,`@view-transition`].map(e=>({type:`keyword`,label:e})),q=/^(\w[\w-]*|-\w[\w-]*|)$/,de=/^-(-[\w-]*)?$/;function fe(e,t){if((e.name==`(`||e.type.isError)&&(e=e.parent||e),e.name!=`ArgList`)return!1;let n=e.parent?.firstChild;return n?.name==`Callee`?t.sliceString(n.from,n.to)==`var`:!1}var J=new n,pe=[`Declaration`];function me(e){for(let t=e;;){if(t.type.isTop)return t;if(!(t=t.parent))return e}}function Y(e,n,r){if(n.to-n.from>4096){let i=J.get(n);if(i)return i;let a=[],o=new Set,s=n.cursor(t.IncludeAnonymous);if(s.firstChild())do for(let t of Y(e,s.node,r))o.has(t.label)||(o.add(t.label),a.push(t));while(s.nextSibling());return J.set(n,a),a}else{let t=[],i=new Set;return n.cursor().iterate(n=>{if(r(n)&&n.matchContext(pe)&&n.node.nextSibling?.name==`:`){let r=e.sliceString(n.from,n.to);i.has(r)||(i.add(r),t.push({label:r,type:`variable`}))}}),t}}var X=e=>t=>{let{state:n,pos:r}=t,i=l(n).resolveInner(r,-1),a=i.type.isError&&i.from==i.to-1&&n.doc.sliceString(i.from,i.to)==`-`;if(i.name==`PropertyName`||(a||i.name==`TagName`)&&/^(Block|Styles)$/.test(i.resolve(i.to).name))return{from:i.from,options:W(),validFor:q};if(i.name==`ValueName`)return{from:i.from,options:K,validFor:q};if(i.name==`PseudoClassName`)return{from:i.from,options:G,validFor:q};if(e(i)||(t.explicit||a)&&fe(i,n.doc))return{from:e(i)||a?i.from:r,options:Y(n.doc,me(i),e),validFor:de};if(i.name==`TagName`){for(let{parent:e}=i;e;e=e.parent)if(e.name==`Block`)return{from:i.from,options:W(),validFor:q};return{from:i.from,options:le,validFor:q}}if(i.name==`AtKeyword`)return{from:i.from,options:ue,validFor:q};if(!t.explicit)return null;let o=i.resolve(r),s=o.childBefore(r);return s&&s.name==`:`&&o.name==`PseudoClassSelector`?{from:r,options:G,validFor:q}:s&&s.name==`:`&&o.name==`Declaration`||o.name==`ArgList`?{from:r,options:K,validFor:q}:o.name==`Block`||o.name==`Styles`?{from:r,options:W(),validFor:q}:null},Z=X(e=>e.name==`VariableName`),Q=ee.define({name:`css`,parser:V.configure({props:[s.add({Declaration:c()}),a.add({"Block KeyframeList":i})]}),languageData:{commentTokens:{block:{open:`/*`,close:`*/`}},indentOnInput:/^\s*\}$/,wordChars:`-`}});function $(){return new o(Q,Q.data.of({autocomplete:Z}))}export{Q as n,H as r,$ as t}; \ No newline at end of file diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/index-DelA-YA9.css b/mcp/src/agents_remember/package_data/dashboard/assets/index-Be9Jp4Yj.css similarity index 74% rename from mcp/src/agents_remember/package_data/dashboard/assets/index-DelA-YA9.css rename to mcp/src/agents_remember/package_data/dashboard/assets/index-Be9Jp4Yj.css index b84b7716..16191917 100644 --- a/mcp/src/agents_remember/package_data/dashboard/assets/index-DelA-YA9.css +++ b/mcp/src/agents_remember/package_data/dashboard/assets/index-Be9Jp4Yj.css @@ -1 +1 @@ -@layer reset{*{box-sizing:border-box}html,body,#root{height:100%;margin:0}}@layer base{body{background:var(--bg);color:var(--ink);font-family:var(--font-mono);-webkit-font-smoothing:antialiased;font-size:14px}h2{letter-spacing:.12em;text-transform:uppercase;color:var(--cyan);margin:0 0 .4rem;font-size:.8rem}.muted{color:oklch(70% .02 250);margin:.2rem 0;font-size:.8rem}.raw-list{gap:.25rem;margin:0;padding:0;list-style:none;display:grid}.raw-list li{background:var(--bg-panel);border-left:2px solid var(--amber);padding:.3rem .5rem}:root{--made-with-panda:"🐼"}*,:before,:after,::backdrop{--blur: ;--brightness: ;--contrast: ;--grayscale: ;--hue-rotate: ;--invert: ;--saturate: ;--sepia: ;--drop-shadow: ;--backdrop-blur: ;--backdrop-brightness: ;--backdrop-contrast: ;--backdrop-grayscale: ;--backdrop-hue-rotate: ;--backdrop-invert: ;--backdrop-opacity: ;--backdrop-saturate: ;--backdrop-sepia: ;--gradient-from-position: ;--gradient-to-position: ;--gradient-via-position: ;--scroll-snap-strictness:proximity;--border-spacing-x:0;--border-spacing-y:0;--translate-x:0;--translate-y:0;--rotate:0;--rotate-x:0;--rotate-y:0;--skew-x:0;--skew-y:0;--scale-x:1;--scale-y:1}}@layer effects{.crt-overlay{z-index:9999;pointer-events:none;mix-blend-mode:multiply;background:repeating-linear-gradient(0deg,oklch(0% 0 0/.18) 0 1px,#0000 1px 3px),radial-gradient(120% 120%,#0000 70%,oklch(0% 0 0/.22) 100%);animation:4s infinite flicker;position:fixed;inset:0}}@layer tokens{:where(:root,:host){--aspect-ratios-square:1 / 1;--aspect-ratios-landscape:4 / 3;--aspect-ratios-portrait:3 / 4;--aspect-ratios-wide:16 / 9;--aspect-ratios-ultrawide:18 / 5;--aspect-ratios-golden:1.618 / 1;--borders-none:none;--easings-default:cubic-bezier(.4, 0, .2, 1);--easings-linear:linear;--easings-in:cubic-bezier(.4, 0, 1, 1);--easings-out:cubic-bezier(0, 0, .2, 1);--easings-in-out:cubic-bezier(.4, 0, .2, 1);--durations-fastest:50ms;--durations-faster:.1s;--durations-fast:.15s;--durations-normal:.2s;--durations-slow:.3s;--durations-slower:.4s;--durations-slowest:.5s;--radii-xs:.125rem;--radii-sm:.25rem;--radii-md:.375rem;--radii-lg:.5rem;--radii-xl:.75rem;--radii-2xl:1rem;--radii-3xl:1.5rem;--radii-4xl:2rem;--radii-full:9999px;--font-weights-thin:100;--font-weights-extralight:200;--font-weights-light:300;--font-weights-normal:400;--font-weights-medium:500;--font-weights-semibold:600;--font-weights-bold:700;--font-weights-extrabold:800;--font-weights-black:900;--line-heights-none:1;--line-heights-tight:1.25;--line-heights-snug:1.375;--line-heights-normal:1.5;--line-heights-relaxed:1.625;--line-heights-loose:2;--letter-spacings-tighter:-.05em;--letter-spacings-tight:-.025em;--letter-spacings-normal:0em;--letter-spacings-wide:.025em;--letter-spacings-wider:.05em;--letter-spacings-widest:.1em;--font-sizes-2xs:.5rem;--font-sizes-xs:.75rem;--font-sizes-sm:.875rem;--font-sizes-md:1rem;--font-sizes-lg:1.125rem;--font-sizes-xl:1.25rem;--font-sizes-2xl:1.5rem;--font-sizes-3xl:1.875rem;--font-sizes-4xl:2.25rem;--font-sizes-5xl:3rem;--font-sizes-6xl:3.75rem;--font-sizes-7xl:4.5rem;--font-sizes-8xl:6rem;--font-sizes-9xl:8rem;--shadows-2xs:0 1px #0000000d;--shadows-xs:0 1px 2px 0 #0000000d;--shadows-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--shadows-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadows-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--shadows-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--shadows-2xl:0 25px 50px -12px #00000040;--shadows-inset-2xs:inset 0 1px #0000000d;--shadows-inset-xs:inset 0 1px 1px #0000000d;--shadows-inset-sm:inset 0 2px 4px #0000000d;--blurs-xs:4px;--blurs-sm:8px;--blurs-md:12px;--blurs-lg:16px;--blurs-xl:24px;--blurs-2xl:40px;--blurs-3xl:64px;--spacing-0:0rem;--spacing-1:.25rem;--spacing-2:.5rem;--spacing-3:.75rem;--spacing-4:1rem;--spacing-5:1.25rem;--spacing-6:1.5rem;--spacing-7:1.75rem;--spacing-8:2rem;--spacing-9:2.25rem;--spacing-10:2.5rem;--spacing-11:2.75rem;--spacing-12:3rem;--spacing-14:3.5rem;--spacing-16:4rem;--spacing-20:5rem;--spacing-24:6rem;--spacing-28:7rem;--spacing-32:8rem;--spacing-36:9rem;--spacing-40:10rem;--spacing-44:11rem;--spacing-48:12rem;--spacing-52:13rem;--spacing-56:14rem;--spacing-60:15rem;--spacing-64:16rem;--spacing-72:18rem;--spacing-80:20rem;--spacing-96:24rem;--spacing-0\.5:.125rem;--spacing-1\.5:.375rem;--spacing-2\.5:.625rem;--spacing-3\.5:.875rem;--spacing-4\.5:1.125rem;--spacing-5\.5:1.375rem;--sizes-0:0rem;--sizes-1:.25rem;--sizes-2:.5rem;--sizes-3:.75rem;--sizes-4:1rem;--sizes-5:1.25rem;--sizes-6:1.5rem;--sizes-7:1.75rem;--sizes-8:2rem;--sizes-9:2.25rem;--sizes-10:2.5rem;--sizes-11:2.75rem;--sizes-12:3rem;--sizes-14:3.5rem;--sizes-16:4rem;--sizes-20:5rem;--sizes-24:6rem;--sizes-28:7rem;--sizes-32:8rem;--sizes-36:9rem;--sizes-40:10rem;--sizes-44:11rem;--sizes-48:12rem;--sizes-52:13rem;--sizes-56:14rem;--sizes-60:15rem;--sizes-64:16rem;--sizes-72:18rem;--sizes-80:20rem;--sizes-96:24rem;--sizes-0\.5:.125rem;--sizes-1\.5:.375rem;--sizes-2\.5:.625rem;--sizes-3\.5:.875rem;--sizes-4\.5:1.125rem;--sizes-5\.5:1.375rem;--sizes-xs:20rem;--sizes-sm:24rem;--sizes-md:28rem;--sizes-lg:32rem;--sizes-xl:36rem;--sizes-2xl:42rem;--sizes-3xl:48rem;--sizes-4xl:56rem;--sizes-5xl:64rem;--sizes-6xl:72rem;--sizes-7xl:80rem;--sizes-8xl:90rem;--sizes-prose:65ch;--sizes-full:100%;--sizes-min:min-content;--sizes-max:max-content;--sizes-fit:fit-content;--sizes-breakpoint-sm:640px;--sizes-breakpoint-md:768px;--sizes-breakpoint-lg:1024px;--sizes-breakpoint-xl:1280px;--sizes-breakpoint-2xl:1536px;--animations-spin:spin 1s linear infinite;--animations-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animations-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--animations-bounce:bounce 1s infinite;--colors-current:currentColor;--colors-black:#000;--colors-white:#fff;--colors-transparent:#0000;--colors-rose-50:#fff1f2;--colors-rose-100:#ffe4e6;--colors-rose-200:#fecdd3;--colors-rose-300:#fda4af;--colors-rose-400:#fb7185;--colors-rose-500:#f43f5e;--colors-rose-600:#e11d48;--colors-rose-700:#be123c;--colors-rose-800:#9f1239;--colors-rose-900:#881337;--colors-rose-950:#4c0519;--colors-pink-50:#fdf2f8;--colors-pink-100:#fce7f3;--colors-pink-200:#fbcfe8;--colors-pink-300:#f9a8d4;--colors-pink-400:#f472b6;--colors-pink-500:#ec4899;--colors-pink-600:#db2777;--colors-pink-700:#be185d;--colors-pink-800:#9d174d;--colors-pink-900:#831843;--colors-pink-950:#500724;--colors-fuchsia-50:#fdf4ff;--colors-fuchsia-100:#fae8ff;--colors-fuchsia-200:#f5d0fe;--colors-fuchsia-300:#f0abfc;--colors-fuchsia-400:#e879f9;--colors-fuchsia-500:#d946ef;--colors-fuchsia-600:#c026d3;--colors-fuchsia-700:#a21caf;--colors-fuchsia-800:#86198f;--colors-fuchsia-900:#701a75;--colors-fuchsia-950:#4a044e;--colors-violet-50:#f5f3ff;--colors-violet-100:#ede9fe;--colors-violet-200:#ddd6fe;--colors-violet-300:#c4b5fd;--colors-violet-400:#a78bfa;--colors-violet-500:#8b5cf6;--colors-violet-600:#7c3aed;--colors-violet-700:#6d28d9;--colors-violet-800:#5b21b6;--colors-violet-900:#4c1d95;--colors-violet-950:#2e1065;--colors-indigo-50:#eef2ff;--colors-indigo-100:#e0e7ff;--colors-indigo-200:#c7d2fe;--colors-indigo-300:#a5b4fc;--colors-indigo-400:#818cf8;--colors-indigo-500:#6366f1;--colors-indigo-600:#4f46e5;--colors-indigo-700:#4338ca;--colors-indigo-800:#3730a3;--colors-indigo-900:#312e81;--colors-indigo-950:#1e1b4b;--colors-blue-50:#eff6ff;--colors-blue-100:#dbeafe;--colors-blue-200:#bfdbfe;--colors-blue-300:#93c5fd;--colors-blue-400:#60a5fa;--colors-blue-500:#3b82f6;--colors-blue-600:#2563eb;--colors-blue-700:#1d4ed8;--colors-blue-800:#1e40af;--colors-blue-900:#1e3a8a;--colors-blue-950:#172554;--colors-sky-50:#f0f9ff;--colors-sky-100:#e0f2fe;--colors-sky-200:#bae6fd;--colors-sky-300:#7dd3fc;--colors-sky-400:#38bdf8;--colors-sky-500:#0ea5e9;--colors-sky-600:#0284c7;--colors-sky-700:#0369a1;--colors-sky-800:#075985;--colors-sky-900:#0c4a6e;--colors-sky-950:#082f49;--colors-teal-50:#f0fdfa;--colors-teal-100:#ccfbf1;--colors-teal-200:#99f6e4;--colors-teal-300:#5eead4;--colors-teal-400:#2dd4bf;--colors-teal-500:#14b8a6;--colors-teal-600:#0d9488;--colors-teal-700:#0f766e;--colors-teal-800:#115e59;--colors-teal-900:#134e4a;--colors-teal-950:#042f2e;--colors-emerald-50:#ecfdf5;--colors-emerald-100:#d1fae5;--colors-emerald-200:#a7f3d0;--colors-emerald-300:#6ee7b7;--colors-emerald-400:#34d399;--colors-emerald-500:#10b981;--colors-emerald-600:#059669;--colors-emerald-700:#047857;--colors-emerald-800:#065f46;--colors-emerald-900:#064e3b;--colors-emerald-950:#022c22;--colors-green-50:#f0fdf4;--colors-green-100:#dcfce7;--colors-green-200:#bbf7d0;--colors-green-300:#86efac;--colors-green-400:#4ade80;--colors-green-500:#22c55e;--colors-green-600:#16a34a;--colors-green-700:#15803d;--colors-green-800:#166534;--colors-green-900:#14532d;--colors-green-950:#052e16;--colors-lime-50:#f7fee7;--colors-lime-100:#ecfccb;--colors-lime-200:#d9f99d;--colors-lime-300:#bef264;--colors-lime-400:#a3e635;--colors-lime-500:#84cc16;--colors-lime-600:#65a30d;--colors-lime-700:#4d7c0f;--colors-lime-800:#3f6212;--colors-lime-900:#365314;--colors-lime-950:#1a2e05;--colors-yellow-50:#fefce8;--colors-yellow-100:#fef9c3;--colors-yellow-200:#fef08a;--colors-yellow-300:#fde047;--colors-yellow-400:#facc15;--colors-yellow-500:#eab308;--colors-yellow-600:#ca8a04;--colors-yellow-700:#a16207;--colors-yellow-800:#854d0e;--colors-yellow-900:#713f12;--colors-yellow-950:#422006;--colors-orange-50:#fff7ed;--colors-orange-100:#ffedd5;--colors-orange-200:#fed7aa;--colors-orange-300:#fdba74;--colors-orange-400:#fb923c;--colors-orange-500:#f97316;--colors-orange-600:#ea580c;--colors-orange-700:#c2410c;--colors-orange-800:#9a3412;--colors-orange-900:#7c2d12;--colors-orange-950:#431407;--colors-red-50:#fef2f2;--colors-red-100:#fee2e2;--colors-red-200:#fecaca;--colors-red-300:#fca5a5;--colors-red-400:#f87171;--colors-red-500:#ef4444;--colors-red-600:#dc2626;--colors-red-700:#b91c1c;--colors-red-800:#991b1b;--colors-red-900:#7f1d1d;--colors-red-950:#450a0a;--colors-neutral-50:#fafafa;--colors-neutral-100:#f5f5f5;--colors-neutral-200:#e5e5e5;--colors-neutral-300:#d4d4d4;--colors-neutral-400:#a3a3a3;--colors-neutral-500:#737373;--colors-neutral-600:#525252;--colors-neutral-700:#404040;--colors-neutral-800:#262626;--colors-neutral-900:#171717;--colors-neutral-950:#0a0a0a;--colors-stone-50:#fafaf9;--colors-stone-100:#f5f5f4;--colors-stone-200:#e7e5e4;--colors-stone-300:#d6d3d1;--colors-stone-400:#a8a29e;--colors-stone-500:#78716c;--colors-stone-600:#57534e;--colors-stone-700:#44403c;--colors-stone-800:#292524;--colors-stone-900:#1c1917;--colors-stone-950:#0c0a09;--colors-zinc-50:#fafafa;--colors-zinc-100:#f4f4f5;--colors-zinc-200:#e4e4e7;--colors-zinc-300:#d4d4d8;--colors-zinc-400:#a1a1aa;--colors-zinc-500:#71717a;--colors-zinc-600:#52525b;--colors-zinc-700:#3f3f46;--colors-zinc-800:#27272a;--colors-zinc-900:#18181b;--colors-zinc-950:#09090b;--colors-gray-50:#f9fafb;--colors-gray-100:#f3f4f6;--colors-gray-200:#e5e7eb;--colors-gray-300:#d1d5db;--colors-gray-400:#9ca3af;--colors-gray-500:#6b7280;--colors-gray-600:#4b5563;--colors-gray-700:#374151;--colors-gray-800:#1f2937;--colors-gray-900:#111827;--colors-gray-950:#030712;--colors-slate-50:#f8fafc;--colors-slate-100:#f1f5f9;--colors-slate-200:#e2e8f0;--colors-slate-300:#cbd5e1;--colors-slate-400:#94a3b8;--colors-slate-500:#64748b;--colors-slate-600:#475569;--colors-slate-700:#334155;--colors-slate-800:#1e293b;--colors-slate-900:#0f172a;--colors-slate-950:#020617;--colors-bg:oklch(16% .02 250);--colors-bg-panel:oklch(20% .02 250);--colors-ink:oklch(92% .03 90);--colors-grid:oklch(30% .02 250);--colors-muted:oklch(70% .02 250);--colors-amber-50:#fffbeb;--colors-amber-100:#fef3c7;--colors-amber-200:#fde68a;--colors-amber-300:#fcd34d;--colors-amber-400:#fbbf24;--colors-amber-500:#f59e0b;--colors-amber-600:#d97706;--colors-amber-700:#b45309;--colors-amber-800:#92400e;--colors-amber-900:#78350f;--colors-amber-950:#451a03;--colors-amber:oklch(82% .16 75);--colors-cyan-50:#ecfeff;--colors-cyan-100:#cffafe;--colors-cyan-200:#a5f3fc;--colors-cyan-300:#67e8f9;--colors-cyan-400:#22d3ee;--colors-cyan-500:#06b6d4;--colors-cyan-600:#0891b2;--colors-cyan-700:#0e7490;--colors-cyan-800:#155e75;--colors-cyan-900:#164e63;--colors-cyan-950:#083344;--colors-cyan:oklch(85% .13 200);--colors-alarm:oklch(63% .24 25);--colors-mint:oklch(88% .16 165);--colors-dormant:oklch(45% .06 25);--colors-gold:oklch(87% .15 95);--colors-gold-dim:oklch(55% .09 95);--colors-gold-ghost:oklch(32% .05 95);--colors-purple-50:#faf5ff;--colors-purple-100:#f3e8ff;--colors-purple-200:#e9d5ff;--colors-purple-300:#d8b4fe;--colors-purple-400:#c084fc;--colors-purple-500:#a855f7;--colors-purple-600:#9333ea;--colors-purple-700:#7e22ce;--colors-purple-800:#6b21a8;--colors-purple-900:#581c87;--colors-purple-950:#3b0764;--colors-purple:oklch(76% .14 305);--colors-purple-dim:oklch(50% .09 305);--colors-purple-ghost:oklch(30% .05 305);--fonts-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--fonts-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--fonts-mono:ui-monospace, "JetBrains Mono", "SFMono-Regular", Menlo, monospace;--breakpoints-sm:640px;--breakpoints-md:768px;--breakpoints-lg:1024px;--breakpoints-xl:1280px;--breakpoints-2xl:1536px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}}@layer recipes;@layer utilities{.p_0\.6rem_0\.8rem{padding:.6rem .8rem}.m_0{margin:var(--spacing-0)}.font_inherit{font:inherit}.bg_transparent{background:var(--colors-transparent)}.anim_pulse_0\.6s_steps\(1\)_infinite{animation:.6s step-end infinite pulse}.anim_pulse_0\.5s_steps\(1\)_infinite{animation:.5s step-end infinite pulse}.bg_amber{background:var(--colors-amber)}.bg_cyan{background:var(--colors-cyan)}.bg_alarm{background:var(--colors-alarm)}.bg_dormant{background:var(--colors-dormant)}.bg_mint{background:var(--colors-mint)}.m_0\.3rem_0{margin:.3rem 0}.bg_bg{background:var(--colors-bg)}.bg_bgPanel{background:var(--colors-bg-panel)}.bg_oklch\(0\.85_0\.13_200_\/_0\.35\){background:oklch(85% .13 200/.35)}.p_0{padding:var(--spacing-0)}.m_0\.4rem_0{margin:.4rem 0}.m_0\.5rem_0{margin:.5rem 0}.m_0\.3rem_0_0{margin:.3rem 0 0}.bd_0{border:0}.m_0\.6rem_0{margin:.6rem 0}.m_0\.45rem_0_0{margin:.45rem 0 0}.m_0\.15rem_0_0{margin:.15rem 0 0}.p_0\.45rem_0\.55rem{padding:.45rem .55rem}.m_0\.2rem_0_0{margin:.2rem 0 0}.p_0\.5rem_0\.6rem{padding:.5rem .6rem}.p_0\.4rem_0\.5rem{padding:.4rem .5rem}.inset_0{inset:var(--spacing-0)}.bd_1px_solid_token\(colors\.grid\){border:1px solid var(--colors-grid)}.p_0\.4rem_0\.2rem_2rem{padding:.4rem .2rem 2rem}.bd_none{border:var(--borders-none)}.bg_rgba\(232\,_193\,_112\,_0\.12\){background:#e8c1701f}.bg_oklch\(0\.82_0\.16_75_\/_0\.08\){background:oklch(82% .16 75/.08)}.p_0\.5rem{padding:.5rem}.bg_linear-gradient\(to_bottom\,_transparent_0\,_transparent_2px\,_token\(colors\.grid\)_2px\,_token\(colors\.grid\)_3px\,_transparent_3px\){background:linear-gradient(to bottom, transparent 0, transparent 2px, var(--colors-grid) 2px, var(--colors-grid) 3px, transparent 3px)}.p_0\.35rem{padding:.35rem}.p_0\.55rem{padding:.55rem}.p_0\.2rem{padding:.2rem}.m_0\.7rem_0_0\.3rem{margin:.7rem 0 .3rem}.p_0\.3rem{padding:.3rem}.p_0\.35rem_0\.5rem{padding:.35rem .5rem}.bg_\#070b0f{background:#070b0f}.bg_radial-gradient\(120\%_100\%_at_50\%_40\%\,_oklch\(0\.2_0\.02_250\)_0\%\,_var\(--bg\)_80\%\){background:radial-gradient(120% 100% at 50% 40%, oklch(20% .02 250) 0%, var(--bg) 80%)}.p_0\.6rem_0\.85rem{padding:.6rem .85rem}.bg_grid{background:var(--colors-grid)}.p_1rem{padding:1rem}.p_0\.6rem{padding:.6rem}.p_0\.4rem_0\.6rem{padding:.4rem .6rem}.grid-area_coupler{grid-area:coupler}.bd_1px_solid_token\(colors\.amber\){border:1px solid var(--colors-amber)}.p_0\.4rem_0\.2rem{padding:.4rem .2rem}.p_0\.4rem_0\.55rem{padding:.4rem .55rem}.bd_1px_dashed_token\(colors\.alarm\){border:1px dashed var(--colors-alarm)}.bd_1px_solid_token\(colors\.cyan\){border:1px solid var(--colors-cyan)}.p_0\.55rem_0\.65rem{padding:.55rem .65rem}.bd_1px_dashed_token\(colors\.dormant\){border:1px dashed var(--colors-dormant)}.p_0\.3rem_0\.6rem{padding:.3rem .6rem}.bd_1px_solid_token\(colors\.mint\){border:1px solid var(--colors-mint)}.bg_muted{background:var(--colors-muted)}.bg_repeating-linear-gradient\(0deg\,_token\(colors\.bg\)_0_4px\,_transparent_4px_8px\){background:repeating-linear-gradient(0deg, var(--colors-bg) 0 4px, transparent 4px 8px)}.bg_repeating-linear-gradient\(0deg\,_token\(colors\.mint\)_0_4px\,_transparent_4px_8px\){background:repeating-linear-gradient(0deg, var(--colors-mint) 0 4px, transparent 4px 8px)}.bg_repeating-linear-gradient\(0deg\,_token\(colors\.cyan\)_0_4px\,_transparent_4px_8px\){background:repeating-linear-gradient(0deg, var(--colors-cyan) 0 4px, transparent 4px 8px)}.anim_pulse_0\.9s_steps\(1\)_infinite{animation:.9s step-end infinite pulse}.bg_oklch\(0\.24_0\.03_250\){background:oklch(24% .03 250)}.bg_color-mix\(in_oklab\,_var\(--amber\)_20\%\,_transparent\){background:color-mix(in oklab, var(--amber) 20%, transparent)}.ov_hidden{overflow:hidden}.gap_0\.6rem{gap:.6rem}.gap_1rem{gap:1rem}.gap_0\.9rem{gap:.9rem}.gap_0\.25rem{gap:.25rem}.gap_0\.7rem{gap:.7rem}.flex_1{flex:1}.px_0\.45rem{padding-inline:.45rem}.py_0\.08rem{padding-block:.08rem}.bdr_2px{border-radius:2px}.bd-w_1px{border-width:1px}.border-style_solid{border-style:solid}.trs_color_0\.15s_ease\,_border-color_0\.15s_ease{transition:color .15s,border-color .15s}.bd-c_amber{border-color:var(--colors-amber)}.bd-c_grid{border-color:var(--colors-grid)}.py_0\.12rem{padding-block:.12rem}.trs_background_0\.15s_ease{transition:background .15s}.bd-c_cyan{border-color:var(--colors-cyan)}.bdr_full{border-radius:var(--radii-full)}.gap_0\.3rem{gap:.3rem}.px_0\.75rem{padding-inline:.75rem}.py_0\.3rem{padding-block:.3rem}.bdr_3px{border-radius:3px}.px_0\.8rem{padding-inline:.8rem}.ov_auto{overflow:auto}.mx_-0\.8rem{margin-inline:-.8rem}.place-items_center{place-items:center}.trs_height_0\.4s_ease{transition:height .4s}.flex_none{flex:none}.gap_0\.4rem{gap:.4rem}.flex_0_0_auto{flex:none}.bdr_999px{border-radius:999px}.border-style_none{border-style:none}.flex_0_1_auto{flex:0 auto}.li-s_none{list-style:none}.gap_0\.35rem{gap:.35rem}.gap_0\.5rem{gap:.5rem}.py_0\.16rem{padding-block:.16rem}.px_0\.4rem{padding-inline:.4rem}.px_0\.5rem{padding-inline:.5rem}.py_0\.4rem{padding-block:.4rem}.gap_0\.32rem{gap:.32rem}.px_0\.55rem{padding-inline:.55rem}.py_0\.15rem{padding-block:.15rem}.px_0\.2rem{padding-inline:.2rem}.px_0\.35rem{padding-inline:.35rem}.py_0\.05rem{padding-block:.05rem}.gap_0\.15rem{gap:.15rem}.py_0\.2rem{padding-block:.2rem}.gap_0\.45rem{gap:.45rem}.bd-c_mint{border-color:var(--colors-mint)}.bd-c_alarm{border-color:var(--colors-alarm)}.grid-c_2{grid-column:2}.gap_0\.1rem{gap:.1rem}.gap_0\.75rem{gap:.75rem}.gap_0\.2rem{gap:.2rem}.px_1rem{padding-inline:1rem}.flex_1_1_0{flex:1 1 0}.gap_0\.05rem{gap:.05rem}.py_0\.25rem{padding-block:.25rem}.gap_0\.55rem{gap:.55rem}.gap_1\.1rem{gap:1.1rem}.gap_0{gap:var(--spacing-0)}.mx_auto{margin-inline:auto}.border-style_dotted{border-style:dotted}.px_0\.7rem{padding-inline:.7rem}.py_0\.45rem{padding-block:.45rem}.border-style_dashed{border-style:dashed}.py_0\.55rem{padding-block:.55rem}.my_0\.2rem{margin-block:.2rem}.py_0\.24rem{padding-block:.24rem}.bd-c_transparent{border-color:var(--colors-transparent)}.ring_none{outline:var(--borders-none)}.py_0\.35rem{padding-block:.35rem}.bdr_4px{border-radius:4px}.py_0\.32rem{padding-block:.32rem}.px_0\.9rem{padding-inline:.9rem}.offset_8{offset:8px}.py_0\.18rem{padding-block:.18rem}.py_0\.28rem{padding-block:.28rem}.py_0\.22rem{padding-block:.22rem}.gap_0\.12rem{gap:.12rem}.py_0\.1rem{padding-block:.1rem}.flex_0_1_2\.6rem{flex:0 2.6rem}.flex_0_1_4rem{flex:0 4rem}.px_0\.28rem{padding-inline:.28rem}.py_0\.04rem{padding-block:.04rem}.px_0\.6rem{padding-inline:.6rem}.px_0\.25rem{padding-inline:.25rem}.px_0\.3rem{padding-inline:.3rem}.trs_transform_0\.12s_ease{transition:transform .12s}.bd-c_color-mix\(in_oklch\,_token\(colors\.gold\)_45\%\,_transparent\){border-color:color-mix(in oklch, var(--colors-gold) 45%, transparent)}.bd-c_color-mix\(in_oklch\,_token\(colors\.purple\)_45\%\,_transparent\){border-color:color-mix(in oklch, var(--colors-purple) 45%, transparent)}.td_underline{text-decoration:underline}.trs_opacity_0\.1s_ease{transition:opacity .1s}.gap_0\.8rem{gap:.8rem}.grid-template-areas_\"official_coupler_worktree\"{grid-template-areas:"official coupler worktree"}.ov_visible{overflow:visible}.bd-t_1px_solid_token\(colors\.grid\){border-top:1px solid var(--colors-grid)}.px_0\.15rem{padding-inline:.15rem}.trs_border-color_0\.15s_ease\,_background_0\.15s_ease{transition:border-color .15s,background .15s}.bd-c_muted{border-color:var(--colors-muted)}.bd-c_dormant{border-color:var(--colors-dormant)}.pos_relative{position:relative}.d_flex{display:flex}.flex-d_column{flex-direction:column}.flex-sh_0{flex-shrink:0}.ai_center{align-items:center}.jc_space-between{justify-content:space-between}.fs_0\.9rem{font-size:.9rem}.ls_0\.18em{letter-spacing:.18em}.c_amber{color:var(--colors-amber)}.tsh_0_0_calc\(6px_\*_var\(--glow-strength\)\)_oklch\(0\.82_0\.16_75_\/_0\.5\){text-shadow:0 0 calc(6px * var(--glow-strength)) oklch(82% .16 75/.5)}.fs_0\.78rem{font-size:.78rem}.c_muted{color:var(--colors-muted)}.fs_0\.74rem{font-size:.74rem}.ls_0\.06em{letter-spacing:.06em}.cursor_pointer{cursor:pointer}.fs_0\.7rem{font-size:.7rem}.c_mint{color:var(--colors-mint)}.c_cyan{color:var(--colors-cyan)}.c_alarm{color:var(--colors-alarm)}.fw_600{font-weight:600}.ls_0\.1em{letter-spacing:.1em}.d_grid{display:grid}.grid-tr_minmax\(0\,_1fr\){grid-template-rows:minmax(0,1fr)}.grid-tc_minmax\(300px\,_1fr\)_minmax\(420px\,_2\.2fr\)_minmax\(260px\,_0\.95fr\){grid-template-columns:minmax(300px,1fr) minmax(420px,2.2fr) minmax(260px,.95fr)}.grid-tc_1fr{grid-template-columns:1fr}.pos_absolute{position:absolute}.z_3{z-index:3}.cursor_col-resize{cursor:col-resize}.fs_0\.72rem{font-size:.72rem}.cursor_default{cursor:default}.c_oklch\(0\.55_0\.02_250\){color:oklch(55% .02 250)}.d_inline-block{display:inline-block}.fs_0\.86rem{font-size:.86rem}.lh_1\.55{line-height:1.55}.c_ink{color:var(--colors-ink)}.ls_0\.08em{letter-spacing:.08em}.tt_uppercase{text-transform:uppercase}.d_block{display:block}.pos_sticky{position:sticky}.z_2{z-index:2}.fs_0\.66rem{font-size:.66rem}.as_center{align-self:center}.c_gold{color:var(--colors-gold)}.filter_drop-shadow\(0_0_3px_color-mix\(in_oklch\,_token\(colors\.gold\)_60\%\,_transparent\)\){filter:drop-shadow(0 0 3px color-mix(in oklch, var(--colors-gold) 60%, transparent))}.c_purple{color:var(--colors-purple)}.filter_drop-shadow\(0_0_3px_color-mix\(in_oklch\,_token\(colors\.purple\)_55\%\,_transparent\)\){filter:drop-shadow(0 0 3px color-mix(in oklch, var(--colors-purple) 55%, transparent))}.stk_cyan{stroke:var(--colors-cyan)}.stk-w_1\.5{stroke-width:1.5px}.fill_none{fill:none}.d_inline-flex{display:inline-flex}.tov_ellipsis{text-overflow:ellipsis}.white-space_nowrap{white-space:nowrap}.c_inherit{color:inherit}.op_0\.85{opacity:.85}.fs_0\.82rem{font-size:.82rem}.fs_0\.75rem{font-size:.75rem}.ls_0\.04em{letter-spacing:.04em}.ta_left{text-align:left}.ai_flex-start{align-items:flex-start}.flex-wrap_wrap{flex-wrap:wrap}.jc_center{justify-content:center}.ta_center{text-align:center}.fs_0\.76rem{font-size:.76rem}.fs_0\.68rem{font-size:.68rem}.grid-tc_1fr_1fr{grid-template-columns:1fr 1fr}.ff_mono{font-family:var(--fonts-mono)}.grid-tc_auto_1fr{grid-template-columns:auto 1fr}.ai_baseline{align-items:baseline}.c_oklch\(0\.6_0\.02_250\){color:oklch(60% .02 250)}.fs_0\.8rem{font-size:.8rem}.fs_0\.84rem{font-size:.84rem}.lh_1\.45{line-height:1.45}.tsh_0_0_calc\(5px_\*_var\(--glow-strength\)\)_oklch\(0\.82_0\.16_75_\/_0\.5\){text-shadow:0 0 calc(5px * var(--glow-strength)) oklch(82% .16 75/.5)}.fill_true{fill:true}.op_0\.18{opacity:.18}.z_0{z-index:0}.pointer-events_none{pointer-events:none}.obj-f_cover{object-fit:cover}.op_0\.14{opacity:.14}.filter_grayscale\(1\)_sepia\(1\)_saturate\(2\.6\)_hue-rotate\(6deg\)_brightness\(0\.85\)_contrast\(1\.05\){filter:grayscale()sepia()saturate(2.6)hue-rotate(6deg)brightness(.85)contrast(1.05)}.mix-bm_screen{mix-blend-mode:screen}.msk-i_radial-gradient\(ellipse_at_center\,_\#000_42\%\,_transparent_100\%\){-webkit-mask-image:radial-gradient(#000 42%,#0000 100%);mask-image:radial-gradient(#000 42%,#0000 100%)}.-webkit-mask-image_radial-gradient\(ellipse_at_center\,_\#000_42\%\,_transparent_100\%\){-webkit-mask-image:radial-gradient(#000 42%,#0000 100%)}.z_1{z-index:1}.ls_0{letter-spacing:0}.fs_0\.95rem{font-size:.95rem}.ls_0\.14em{letter-spacing:.14em}.op_0\.9{opacity:.9}.as_flex-start{align-self:flex-start}.ai_stretch{align-items:stretch}.fs_0\.63rem{font-size:.63rem}.ff_monospace{font-family:monospace}.fs_0\.69rem{font-size:.69rem}.font-style_italic{font-style:italic}.va_middle{vertical-align:middle}.ls_0\.05em{letter-spacing:.05em}.white-space_pre-wrap{white-space:pre-wrap}.ov-wrap_anywhere{overflow-wrap:anywhere}.cursor_row-resize{cursor:row-resize}.mbs_0\.35rem{margin-block-start:.35rem}.lh_1\.4{line-height:1.4}.resize_vertical{resize:vertical}.bx-sh_0_6px_24px_rgba\(0\,0\,0\,0\.5\){box-shadow:0 6px 24px #00000080}.ls_0\.02em{letter-spacing:.02em}.c_text{color:text}.as_flex-end{align-self:flex-end}.pos_fixed{position:fixed}.z_1000{z-index:1000}.bx-sh_0_8px_24px_rgba\(0\,_0\,_0\,_0\.5\){box-shadow:0 8px 24px #00000080}.grid-tc_minmax\(0\,_1fr\){grid-template-columns:minmax(0,1fr)}.bg-i_linear-gradient\(90deg\,_token\(colors\.goldGhost\)\,_token\(colors\.bg\)_34\%\){background-image:linear-gradient(90deg, var(--colors-gold-ghost), var(--colors-bg) 34%)}.bg-i_linear-gradient\(90deg\,_token\(colors\.purpleGhost\)\,_token\(colors\.bg\)_30\%\){background-image:linear-gradient(90deg, var(--colors-purple-ghost), var(--colors-bg) 30%)}.fs_0\.62rem{font-size:.62rem}.ai_flex-end{align-items:flex-end}.resize_none{resize:none}.ac_start{align-content:start}.fs_0\.64rem{font-size:.64rem}.us_none{-webkit-user-select:none;user-select:none}.fs_0\.6rem{font-size:.6rem}.fv-num_tabular-nums{font-variant-numeric:tabular-nums}.trf_translate\(-50\%\,_calc\(-100\%_-_10px\)\){transform:translate(-50%,calc(-100% - 10px))}.op_0{opacity:0}.direction_horizontal{direction:horizontal}.wb_break-all{word-break:break-all}.cx_928\.5{cx:928.5px}.cy_65{cy:65px}.cx_1084{cx:1084px}.cy_88{cy:88px}.cy_562{cy:562px}.d_M595_250_L_595_100{d:M595 250 L 595 100}.d_M365_100_L_365_250{d:M365 100 L 365 250}.d_M527_403_L_36590_403{d:M527 403 L 36590 403}.d_M365_434_L_365_524{d:M365 434 L 365 524}.translate-x_275{--translate-x:275}.translate-y_250{--translate-y:250}.translate-y_372{--translate-y:372}.translate-x_527{--translate-x:527}.translate-x_735{--translate-x:735}.translate-x_365{--translate-x:365}.translate-x_835{--translate-x:835}.translate-x_730{--translate-x:730}.translate-y_476{--translate-y:476}.translate-x_300{--translate-x:300}.translate-y_560{--translate-y:560}.translate-y_188{--translate-y:188}.translate-x_260{--translate-x:260}.translate-y_600{--translate-y:600}.cx_365{cx:365px}.cx_835{cx:835px}.cy_336{cy:336px}.grid-tc_minmax\(230px\,_20rem\)_minmax\(0\,_1fr\)_minmax\(280px\,_22rem\){grid-template-columns:minmax(230px,20rem) minmax(0,1fr) minmax(280px,22rem)}.fs_0\.85rem{font-size:.85rem}.ai_start{align-items:start}.grid-tc_1fr_auto_1fr{grid-template-columns:1fr auto 1fr}.ac_center{align-content:center}.justify-items_center{justify-items:center}.writing-mode_vertical-rl{writing-mode:vertical-rl}.text-orientation_mixed{text-orientation:mixed}.op_0\.92{opacity:.92}.wb_break-word{word-break:break-word}.fill_token\(colors\.cyan\){fill:var(--colors-cyan)}.grid-tc_minmax\(7rem\,_auto\)_1fr{grid-template-columns:minmax(7rem,auto) 1fr}.fill_token\(colors\.muted\){fill:var(--colors-muted)}.fs_14px{font-size:14px}.ls_0\.16em{letter-spacing:.16em}.stk_token\(colors\.amber\){stroke:var(--colors-amber)}.stk-w_1\.8{stroke-width:1.8px}.stk-dsh_9_7{stroke-dasharray:9 7}.stk-lc_round{stroke-linecap:round}.fs_11px{font-size:11px}.fill_token\(colors\.ink\){fill:var(--colors-ink)}.stk_token\(colors\.dormant\){stroke:var(--colors-dormant)}.fill_oklch\(0\.18_0\.02_25\){fill:oklch(18% .02 25)}.stk-dsh_3_3{stroke-dasharray:3 3}.op_0\.8{opacity:.8}.fill_token\(colors\.amber\){fill:var(--colors-amber)}.trf-b_fill-box{transform-box:fill-box}.trf-o_center{transform-origin:50%}.fill_token\(colors\.bg\){fill:var(--colors-bg)}.op_0\.95{opacity:.95}.stk_token\(colors\.bg\){stroke:var(--colors-bg)}.stk-w_2{stroke-width:2px}.fs_12px{font-size:12px}.stk-w_0\.8{stroke-width:.8px}.op_0\.28{opacity:.28}.stk-w_9{stroke-width:9px}.filter_drop-shadow\(0_0_2px_token\(colors\.amber\)\){filter:drop-shadow(0 0 2px var(--colors-amber))}.stk-w_1\.2{stroke-width:1.2px}.stk-w_1\.6{stroke-width:1.6px}.stk_oklch\(0\.95_0\.1_90\){stroke:oklch(95% .1 90)}.stk-w_7{stroke-width:7px}.filter_drop-shadow\(0_0_5px_token\(colors\.amber\)\){filter:drop-shadow(0 0 5px var(--colors-amber))}.fill_oklch\(0\.22_0\.02_250_\/_0\.55\){fill:oklch(22% .02 250/.55)}.stk-w_1{stroke-width:1px}.ls_0\.03em{letter-spacing:.03em}.bx-sh_0_6px_20px_oklch\(0_0_0_\/_0\.5\){box-shadow:0 6px 20px oklch(0% 0 0/.5)}.bd-cl_collapse{border-collapse:collapse}.ff_inherit{font-family:inherit}.ta_right{text-align:right}.filter_drop-shadow\(0_0_5px_token\(colors\.cyan\)\){filter:drop-shadow(0 0 5px var(--colors-cyan))}.stk_token\(colors\.cyan\){stroke:var(--colors-cyan)}.filter_drop-shadow\(0_0_4px_token\(colors\.cyan\)\){filter:drop-shadow(0 0 4px var(--colors-cyan))}.op_0\.32{opacity:.32}.filter_grayscale\(0\.45\){filter:grayscale(.45)}.stk_token\(colors\.alarm\){stroke:var(--colors-alarm)}.stk-w_1\.4{stroke-width:1.4px}.stk-dsh_5_5{stroke-dasharray:5 5}.op_0\.5{opacity:.5}.filter_drop-shadow\(0_0_4px_token\(colors\.alarm\)\){filter:drop-shadow(0 0 4px var(--colors-alarm))}.fill_oklch\(0\.18_0\.04_230\){fill:oklch(18% .04 230)}.stk-w_1\.1{stroke-width:1.1px}.filter_drop-shadow\(0_0_3px_token\(colors\.cyan\)\){filter:drop-shadow(0 0 3px var(--colors-cyan))}.fill_oklch\(0\.22_0\.06_25\){fill:oklch(22% .06 25)}.stk-dsh_8_7{stroke-dasharray:8 7}.op_0\.82{opacity:.82}.filter_drop-shadow\(0_0_6px_token\(colors\.alarm\)\){filter:drop-shadow(0 0 6px var(--colors-alarm))}.fill_oklch\(0\.82_0\.16_25\){fill:oklch(82% .16 25)}.fs_15px{font-size:15px}.fw_700{font-weight:700}.fill_token\(colors\.alarm\){fill:var(--colors-alarm)}.filter_drop-shadow\(0_0_7px_token\(colors\.alarm\)\){filter:drop-shadow(0 0 7px var(--colors-alarm))}.fill_oklch\(0\.26_0\.09_25\){fill:oklch(26% .09 25)}.stk-w_1\.3{stroke-width:1.3px}.fill_oklch\(0\.93_0\.08_25\){fill:oklch(93% .08 25)}.ls_0\.12em{letter-spacing:.12em}.fill_oklch\(0\.2_0\.05_25\){fill:oklch(20% .05 25)}.fill_oklch\(0\.96_0\.05_25\){fill:oklch(96% .05 25)}.fill_token\(colors\.bgPanel\){fill:var(--colors-bg-panel)}.fs_10\.5px{font-size:10.5px}.stk_oklch\(0\.96_0\.05_25\){stroke:oklch(96% .05 25)}.c_token\(colors\.mint\){color:var(--colors-mint)}.bg-c_token\(colors\.bgPanel\){background-color:var(--colors-bg-panel)}.fs_10px{font-size:10px}.stk_token\(colors\.mint\){stroke:var(--colors-mint)}.op_0\.35{opacity:.35}.stk-dsh_2_4{stroke-dasharray:2 4}.fill_oklch\(0\.24_0\.04_160\){fill:oklch(24% .04 160)}.fill_token\(colors\.mint\){fill:var(--colors-mint)}.fs_9\.5px{font-size:9.5px}.fs_12\.5px{font-size:12.5px}.stk_token\(colors\.muted\){stroke:var(--colors-muted)}.op_0\.6{opacity:.6}.op_0\.55{opacity:.55}.c_dormant{color:var(--colors-dormant)}.op_0\.7{opacity:.7}.stk_token\(colors\.grid\){stroke:var(--colors-grid)}.stk-dsh_6_6{stroke-dasharray:6 6}.stk-dsh_3_5{stroke-dasharray:3 5}.op_0\.65{opacity:.65}.stk-dsh_5_4{stroke-dasharray:5 4}.filter_drop-shadow\(0_0_5px_token\(colors\.alarm\)\){filter:drop-shadow(0 0 5px var(--colors-alarm))}.stk-dsh_4_3{stroke-dasharray:4 3}.filter_drop-shadow\(0_0_4px_token\(colors\.mint\)\){filter:drop-shadow(0 0 4px var(--colors-mint))}.fill_token\(colors\.dormant\){fill:var(--colors-dormant)}.fill_oklch\(0\.24_0\.03_250\){fill:oklch(24% .03 250)}.stk-w_2\.4{stroke-width:2.4px}.op_0\.4{opacity:.4}.stk-w_2\.6{stroke-width:2.6px}.filter_drop-shadow\(0_0_4px_token\(colors\.amber\)\){filter:drop-shadow(0 0 4px var(--colors-amber))}.stk-dsh_4_5{stroke-dasharray:4 5}.ff_var\(--font-mono\){font-family:var(--font-mono)}.h_100vh{height:100vh}.min-h_0{min-height:var(--sizes-0)}.bd-b-w_1px{border-bottom-width:1px}.border-bottom-style_solid{border-bottom-style:solid}.bd-b-c_grid{border-bottom-color:var(--colors-grid)}.pb_0\.5rem{padding-bottom:.5rem}.pb_0\.1rem{padding-bottom:.1rem}.min-w_0{min-width:var(--sizes-0)}.top_0{top:var(--spacing-0)}.bottom_0{bottom:var(--spacing-0)}.w_7px{width:7px}.right_0{right:var(--spacing-0)}.left_0{left:var(--spacing-0)}.w_0\.6em{width:.6em}.h_0\.6em{height:.6em}.mr_0\.4em{margin-right:.4em}.ov-x_auto{overflow-x:auto}.max-w_100\%{max-width:100%}.bd-t-w_1px{border-top-width:1px}.border-top-style_solid{border-top-style:solid}.bd-t-c_grid{border-top-color:var(--colors-grid)}.pt_0\.5rem{padding-top:.5rem}.pb_0\.7rem{padding-bottom:.7rem}.mb_0\.4rem{margin-bottom:.4rem}.pt_0\.7rem{padding-top:.7rem}.pb_0\.3rem{padding-bottom:.3rem}.w_2\.2rem{width:2.2rem}.h_2\.2rem{height:2.2rem}.w_100\%{width:100%}.max-w_7\.5rem{max-width:7.5rem}.w_0\.65rem{width:.65rem}.h_0\.65rem{height:.65rem}.bd-t-c_amber{border-top-color:var(--colors-amber)}.max-h_42\%{max-height:42%}.bd-l-w_3px{border-left-width:3px}.border-left-style_solid{border-left-style:solid}.bd-l-c_grid{border-left-color:var(--colors-grid)}.bd-l-c_alarm{border-left-color:var(--colors-alarm)}.bd-l-c_amber{border-left-color:var(--colors-amber)}.bd-l-c_cyan{border-left-color:var(--colors-cyan)}.w_16rem{width:16rem}.bd-r-w_1px{border-right-width:1px}.border-right-style_solid{border-right-style:solid}.bd-r-c_grid{border-right-color:var(--colors-grid)}.pr_0\.4rem{padding-right:.4rem}.bd-l-w_2px{border-left-width:2px}.mb_0\.5rem{margin-bottom:.5rem}.mb_0\.3rem{margin-bottom:.3rem}.mt_0\.5rem{margin-top:.5rem}.w_0\.62em{width:.62em}.h_0\.62em{height:.62em}.pl_1\.1rem{padding-left:1.1rem}.max-w_78ch{max-width:78ch}.h_100\%{height:100%}.max-w_34rem{max-width:34rem}.ov-y_auto{overflow-y:auto}.bd-l-c_mint{border-left-color:var(--colors-mint)}.pl_0\.6rem{padding-left:.6rem}.max-w_82ch{max-width:82ch}.max-w_640px{max-width:640px}.mt_0\.3rem{margin-top:.3rem}.mt_0\.16rem{margin-top:.16rem}.w_1\.6rem{width:1.6rem}.h_0{height:var(--sizes-0)}.mr_0\.35rem{margin-right:.35rem}.bd-t-w_2px{border-top-width:2px}.bd-t-c_mint{border-top-color:var(--colors-mint)}.border-top-style_dashed{border-top-style:dashed}.w_0{width:var(--sizes-0)}.h_0\.95rem{height:.95rem}.border-left-style_dashed{border-left-style:dashed}.h_var\(--gate-request-height\){height:var(--gate-request-height)}.max-h_var\(--gate-request-max-height\){max-height:var(--gate-request-max-height)}.h_0\.55rem{height:.55rem}.max-h_12rem{max-height:12rem}.min-h_4\.2rem{min-height:4.2rem}.max-h_16rem{max-height:16rem}.bd-l-c_dormant{border-left-color:var(--colors-dormant)}.max-w_min\(32rem\,_94vw\){max-width:min(32rem,94vw)}.w_min\(27rem\,_92vw\){width:min(27rem,92vw)}.max-h_6\.5rem{max-height:6.5rem}.min-h_5rem{min-height:5rem}.max-h_20rem{max-height:20rem}.max-h_3rem{max-height:3rem}.max-w_5rem{max-width:5rem}.min-w_15rem{min-width:15rem}.max-w_min\(24rem\,_82vw\){max-width:min(24rem,82vw)}.max-h_min\(50vh\,_22rem\){max-height:min(50vh,22rem)}.mb_0\.15rem{margin-bottom:.15rem}.ov-x_hidden{overflow-x:hidden}.max-w_2\.6rem{max-width:2.6rem}.max-w_4rem{max-width:4rem}.min-w_2\.5rem{min-width:2.5rem}.pl_1rem{padding-left:1rem}.bd-t-c_goldDim{border-top-color:var(--colors-gold-dim)}.mb_0\.7rem{margin-bottom:.7rem}.h_0\.75rem{height:.75rem}.mt_0\.25rem{margin-top:.25rem}.min-h_2\.25rem{min-height:2.25rem}.max-h_8rem{max-height:8rem}.pl_0\.5rem{padding-left:.5rem}.bd-l-w_1px{border-left-width:1px}.min-w_1\.6rem{min-width:1.6rem}.ml_22px{margin-left:22px}.min-h_340px{min-height:340px}.mt_0\.4rem{margin-top:.4rem}.w_0\.5em{width:.5em}.h_0\.5em{height:.5em}.mr_0\.3em{margin-right:.3em}.ml_auto{margin-left:auto}.w_1\.1em{width:1.1em}.w_3px{width:3px}.w_180{width:180px}.w_136{width:136px}.w_200{width:200px}.w_140{width:140px}.h_24{height:var(--sizes-24)}.h_26{height:26px}.w_196{width:196px}.h_20{height:var(--sizes-20)}.top_372{top:372px}.top_250{top:250px}.mb_0\.6rem{margin-bottom:.6rem}.max-h_100\%{max-height:100%}.h_2px{height:2px}.max-w_min\(92vw\,_46rem\){max-width:min(92vw,46rem)}.mt_0\.1rem{margin-top:.1rem}.max-w_12rem{max-width:12rem}.bd-l-c_muted{border-left-color:var(--colors-muted)}.w_1\.4rem{width:1.4rem}.h_2\.4rem{height:2.4rem}.w_0\.55em{width:.55em}.h_0\.55em{height:.55em}.max-h_min\(72vh\,_46rem\){max-height:min(72vh,46rem)}.max-h_13rem{max-height:13rem}.w_1ch{width:1ch}.w_4px{width:4px}.max-h_50vh{max-height:50vh}.max-w_50\%{max-width:50%}.\[\&_p\]\:m_0_0_0\.5rem p{margin:0 0 .5rem}.\[\&_code\]\:bg_bg code,.\[\&_pre\]\:bg_bg pre{background:var(--colors-bg)}.\[\&_pre\]\:p_0\.5rem_0\.6rem pre{padding:.5rem .6rem}.\[\&_pre\]\:m_0\.3rem_0 pre{margin:.3rem 0}.\[\&_pre_code\]\:bg_transparent pre code{background:var(--colors-transparent)}.\[\&_blockquote\]\:m_0\.4rem_0 blockquote{margin:.4rem 0}.\[\&_ul\,_\&_ol\]\:m_0_0_0\.5rem ul,.\[\&_ul\,_\&_ol\]\:m_0_0_0\.5rem ol{margin:0 0 .5rem}.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:m_0\.6rem_0_0\.3rem h1,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:m_0\.6rem_0_0\.3rem h2,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:m_0\.6rem_0_0\.3rem h3,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:m_0\.6rem_0_0\.3rem h4{margin:.6rem 0 .3rem}.\[\&_th\,_\&_td\]\:p_0\.2rem_0\.45rem th,.\[\&_th\,_\&_td\]\:p_0\.2rem_0\.45rem td{padding:.2rem .45rem}.\[\&\[data-selected\=true\]\]\:bg_amber[data-selected=true]{background:var(--colors-amber)}.\[\&\[data-active\=true\]\]\:bg_color-mix\(in_oklab\,_var\(--amber\)_20\%\,_transparent\)[data-active=true]{background:color-mix(in oklab, var(--amber) 20%, transparent)}.\[\&_\.cm-changedText\]\:bg_linear-gradient\(\#255a25aa\,_\#255a25aa\)_bottom_\/_100\%_16px_no-repeat\! .cm-changedText{background:linear-gradient(#255a25aa,#255a25aa) bottom/100% 16px no-repeat!important}.\[\&_\.cm-merge-a_\.cm-changedText\]\:bg_linear-gradient\(\#5a2525aa\,_\#5a2525aa\)_bottom_\/_100\%_16px_no-repeat\! .cm-merge-a .cm-changedText{background:linear-gradient(#5a2525aa,#5a2525aa) bottom/100% 16px no-repeat!important}.selected\:bg_bgPanel:is([aria-selected=true],[data-selected]){background:var(--colors-bg-panel)}.\[\&\[data-focused\]\]\:bg_color-mix\(in_oklab\,_var\(--amber\)_16\%\,_transparent\)[data-focused]{background:color-mix(in oklab, var(--amber) 16%, transparent)}.\[\&_a\]\:td_underline a{text-decoration:underline}.\[\&_del\]\:td_line-through del{text-decoration:line-through}.\[\&_code\]\:px_0\.25rem code{padding-inline:.25rem}.\[\&_code\]\:py_0\.05rem code{padding-block:.05rem}.\[\&_code\]\:bdr_2px code{border-radius:2px}.\[\&_pre\]\:bdr_3px pre{border-radius:3px}.\[\&_pre\]\:ov_auto pre{overflow:auto}.\[\&_pre_code\]\:px_0 pre code{padding-inline:var(--spacing-0)}.\[\&_ul\,_\&_ol\]\:gap_0\.15rem ul,.\[\&_ul\,_\&_ol\]\:gap_0\.15rem ol{gap:.15rem}.\[\&_th\,_\&_td\]\:bd-w_1px th,.\[\&_th\,_\&_td\]\:bd-w_1px td{border-width:1px}.\[\&_th\,_\&_td\]\:border-style_solid th,.\[\&_th\,_\&_td\]\:border-style_solid td{border-style:solid}.\[\&_th\,_\&_td\]\:bd-c_grid th,.\[\&_th\,_\&_td\]\:bd-c_grid td{border-color:var(--colors-grid)}.\[\&_code\]\:px_0\.2rem code{padding-inline:.2rem}.selected\:bd-c_amber:is([aria-selected=true],[data-selected]){border-color:var(--colors-amber)}.selected\:ring_1px_solid_token\(colors\.amber\):is([aria-selected=true],[data-selected]){outline:1px solid var(--colors-amber)}.before\:border-style_solid:before{border-style:solid}.before\:bd-w_13px_13px_0_0:before{border-width:13px 13px 0 0}.before\:bd-c_token\(colors\.gold\)_transparent_transparent_transparent:before{border-color:var(--colors-gold) transparent transparent transparent}.before\:bd-c_token\(colors\.purpleDim\)_transparent_transparent_transparent:before{border-color:var(--colors-purple-dim) transparent transparent transparent}.\[\&\[data-selected\=true\]\]\:bd-c_amber[data-selected=true]{border-color:var(--colors-amber)}.\[\&_td\]\:px_0\.35rem td{padding-inline:.35rem}.\[\&_td\]\:py_0\.12rem td{padding-block:.12rem}.\[\&\[data-focused\]\]\:ring_none[data-focused]{outline:var(--borders-none)}.\[\&_strong\]\:fw_600 strong{font-weight:600}.\[\&_strong\]\:c_ink strong{color:var(--colors-ink)}.\[\&_em\]\:font-style_italic em{font-style:italic}.\[\&_a\]\:c_cyan a{color:var(--colors-cyan)}.\[\&_del\]\:c_muted del{color:var(--colors-muted)}.\[\&_code\]\:fs_0\.86em code{font-size:.86em}.\[\&_pre_code\]\:fs_0\.78rem pre code{font-size:.78rem}.\[\&_blockquote\]\:c_muted blockquote{color:var(--colors-muted)}.\[\&_ul\,_\&_ol\]\:d_grid ul,.\[\&_ul\,_\&_ol\]\:d_grid ol{display:grid}.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:fs_0\.78rem h1,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:fs_0\.78rem h2,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:fs_0\.78rem h3,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:fs_0\.78rem h4{font-size:.78rem}.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:ls_0\.04em h1,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:ls_0\.04em h2,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:ls_0\.04em h3,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:ls_0\.04em h4{letter-spacing:.04em}.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:tt_uppercase h1,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:tt_uppercase h2,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:tt_uppercase h3,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:tt_uppercase h4{text-transform:uppercase}.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:c_amber h1,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:c_amber h2,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:c_amber h3,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:c_amber h4{color:var(--colors-amber)}.\[\&_table\]\:bd-cl_collapse table{border-collapse:collapse}.\[\&_table\]\:fs_0\.8rem table{font-size:.8rem}.\[\&_th\,_\&_td\]\:ta_left th,.\[\&_th\,_\&_td\]\:ta_left td{text-align:left}.\[\&_th\,_\&_td\]\:va_top th,.\[\&_th\,_\&_td\]\:va_top td{vertical-align:top}.\[\&_th\]\:c_amber th{color:var(--colors-amber)}.\[\&_th\]\:fw_600 th{font-weight:600}.\[\&_th\]\:white-space_nowrap th{white-space:nowrap}.selected\:c_amber:is([aria-selected=true],[data-selected]){color:var(--colors-amber)}.selected\:tsh_0_0_calc\(5px_\*_var\(--glow-strength\)\)_oklch\(0\.82_0\.16_75_\/_0\.4\):is([aria-selected=true],[data-selected]){text-shadow:0 0 calc(5px * var(--glow-strength)) oklch(82% .16 75/.4)}.\[\&_path\]\:fill_none path{fill:none}.\[\&_path\]\:stk-w_1\.9 path{stroke-width:1.9px}.\[\&_path\]\:stk-lc_round path{stroke-linecap:round}.\[\&_path\]\:stk-lj_round path{stroke-linejoin:round}.disabled\:op_0\.5:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){opacity:.5}.disabled\:cursor_default:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){cursor:default}.disabled\:op_0\.6:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){opacity:.6}.before\:content_\"\":before{content:""}.before\:pos_absolute:before{position:absolute}.disabled\:op_0\.4:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){opacity:.4}.\[\&\[data-expanded\=true\]\]\:trf_rotate\(90deg\)[data-expanded=true]{transform:rotate(90deg)}.\[\&\[data-selected\=true\]\]\:c_bg[data-selected=true]{color:var(--colors-bg)}.\[\&_td\]\:white-space_nowrap td{white-space:nowrap}.\[\&\[data-active\=true\]\]\:c_cyan[data-active=true]{color:var(--colors-cyan)}.\[\&_\>_\:first-child\]\:mt_0>:first-child{margin-top:var(--spacing-0)}.\[\&_\>_\:last-child\]\:mb_0>:last-child{margin-bottom:var(--spacing-0)}.\[\&_p\]\:max-w_78ch p{max-width:78ch}.\[\&_blockquote\]\:pl_0\.6rem blockquote{padding-left:.6rem}.\[\&_blockquote\]\:bd-l-w_2px blockquote{border-left-width:2px}.\[\&_blockquote\]\:border-left-style_solid blockquote{border-left-style:solid}.\[\&_blockquote\]\:bd-l-c_grid blockquote{border-left-color:var(--colors-grid)}.\[\&_ul\,_\&_ol\]\:pl_1\.2rem ul,.\[\&_ul\,_\&_ol\]\:pl_1\.2rem ol{padding-left:1.2rem}.\[\&_li\]\:max-w_78ch li{max-width:78ch}.before\:top_0:before{top:var(--spacing-0)}.before\:left_0:before{left:var(--spacing-0)}.\[\&_\.xterm\]\:h_100\% .xterm{height:100%}.\[\&_\.xterm-viewport\]\:ov-y_auto\! .xterm-viewport{overflow-y:auto!important}.\[\&_\>_\.cm-editor\]\:h_100\%>.cm-editor,.\[\&_\.cm-mergeView\]\:h_100\% .cm-mergeView,.\[\&_\.cm-editor\]\:h_100\% .cm-editor{height:100%}.focusVisible\:ring_1px_solid_token\(colors\.amber\):is(:focus-visible,[data-focus-visible]){outline:1px solid var(--colors-amber)}.focusVisible\:ring_1px_solid_token\(colors\.cyan\):is(:focus-visible,[data-focus-visible]){outline:1px solid var(--colors-cyan)}.focusVisible\:ring_none:is(:focus-visible,[data-focus-visible]){outline:var(--borders-none)}.focusVisible\:ring-o_1px:is(:focus-visible,[data-focus-visible]){outline-offset:1px}.focusVisible\:ring-o_-1px:is(:focus-visible,[data-focus-visible]){outline-offset:-1px}.focusVisible\:ring-w_1px:is(:focus-visible,[data-focus-visible]){outline-width:1px}.focusVisible\:outline-style_solid:is(:focus-visible,[data-focus-visible]){outline-style:solid}.focusVisible\:ring-c_amber:is(:focus-visible,[data-focus-visible]){outline-color:var(--colors-amber)}.focusVisible\:stk_token\(colors\.cyan\):is(:focus-visible,[data-focus-visible]){stroke:var(--colors-cyan)}.focusVisible\:stk-w_1\.6:is(:focus-visible,[data-focus-visible]){stroke-width:1.6px}.hover\:bg_amber:is(:hover,[data-hovered]){background:var(--colors-amber)}.hover\:bg_rgba\(232\,_193\,_112\,_0\.1\):is(:hover,[data-hovered]){background:#e8c1701a}.hover\:bg_oklch\(0\.7_0\.1_200_\/_0\.12\):is(:hover,[data-hovered]){background:oklch(70% .1 200/.12)}.hover\:bg_oklch\(0\.82_0\.16_75_\/_0\.12\):is(:hover,[data-hovered]){background:oklch(82% .16 75/.12)}.hover\:bg_color-mix\(in_oklab\,_var\(--colors-amber\)_16\%\,_transparent\):is(:hover,[data-hovered]){background:color-mix(in oklab, var(--colors-amber) 16%, transparent)}.hover\:bg_color-mix\(in_oklab\,_var\(--amber\)_12\%\,_transparent\):is(:hover,[data-hovered]){background:color-mix(in oklab, var(--amber) 12%, transparent)}.hover\:bd-c_muted:is(:hover,[data-hovered]){border-color:var(--colors-muted)}.hover\:td_underline:is(:hover,[data-hovered]){text-decoration:underline}.hover\:bd-c_cyan:is(:hover,[data-hovered]){border-color:var(--colors-cyan)}.hover\:bd-c_alarm:is(:hover,[data-hovered]){border-color:var(--colors-alarm)}.hover\:bd-c_amber:is(:hover,[data-hovered]){border-color:var(--colors-amber)}.hover\:c_ink:is(:hover,[data-hovered]){color:var(--colors-ink)}.hover\:c_amber:is(:hover,[data-hovered]){color:var(--colors-amber)}.hover\:c_alarm:is(:hover,[data-hovered]){color:var(--colors-alarm)}.hover\:fill_oklch\(0\.3_0\.04_250_\/_0\.85\):is(:hover,[data-hovered]){fill:oklch(30% .04 250/.85)}.hover\:bd-l-c_amber:is(:hover,[data-hovered]){border-left-color:var(--colors-amber)}.disabled\:hover\:bg_transparent:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]):is(:hover,[data-hovered]){background:var(--colors-transparent)}@media screen and (width>=48rem){.md\:grid-tc_1fr_auto_1fr{grid-template-columns:1fr auto 1fr}}@media (prefers-reduced-motion:reduce){.motionReduce\:trs_none{transition:none}}}@keyframes flicker{0%,97%,to{opacity:1}98%{opacity:.85}}@keyframes pulse{50%{opacity:.35}}html[data-effects=off] *,html[data-effects=off] :before,html[data-effects=off] :after{transition:none!important;animation:none!important}html[data-effects=off] [data-testid=conduit-packet],html[data-effects=off] [data-testid=warp-surge]{display:none}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:oklch(16% .02 250);--bg-panel:oklch(20% .02 250);--ink:oklch(92% .03 90);--grid:oklch(30% .02 250);--amber:oklch(82% .16 75);--cyan:oklch(85% .13 200);--alarm:oklch(63% .24 25);--mint:oklch(88% .16 165);--dormant:oklch(45% .06 25);--gold:oklch(87% .15 95);--gold-dim:oklch(55% .09 95);--gold-ghost:oklch(32% .05 95);--purple:oklch(76% .14 305);--purple-dim:oklch(50% .09 305);--purple-ghost:oklch(30% .05 305);--font-mono:ui-monospace, "JetBrains Mono", "SFMono-Regular", Menlo, monospace;--glow-strength:1} +@layer reset{*{box-sizing:border-box}html,body,#root{height:100%;margin:0}}@layer base{body{background:var(--bg);color:var(--ink);font-family:var(--font-mono);-webkit-font-smoothing:antialiased;font-size:14px}h2{letter-spacing:.12em;text-transform:uppercase;color:var(--cyan);margin:0 0 .4rem;font-size:.8rem}.muted{color:oklch(70% .02 250);margin:.2rem 0;font-size:.8rem}.raw-list{gap:.25rem;margin:0;padding:0;list-style:none;display:grid}.raw-list li{background:var(--bg-panel);border-left:2px solid var(--amber);padding:.3rem .5rem}:root{--made-with-panda:"🐼"}*,:before,:after,::backdrop{--blur: ;--brightness: ;--contrast: ;--grayscale: ;--hue-rotate: ;--invert: ;--saturate: ;--sepia: ;--drop-shadow: ;--backdrop-blur: ;--backdrop-brightness: ;--backdrop-contrast: ;--backdrop-grayscale: ;--backdrop-hue-rotate: ;--backdrop-invert: ;--backdrop-opacity: ;--backdrop-saturate: ;--backdrop-sepia: ;--gradient-from-position: ;--gradient-to-position: ;--gradient-via-position: ;--scroll-snap-strictness:proximity;--border-spacing-x:0;--border-spacing-y:0;--translate-x:0;--translate-y:0;--rotate:0;--rotate-x:0;--rotate-y:0;--skew-x:0;--skew-y:0;--scale-x:1;--scale-y:1}}@layer effects{.crt-overlay{z-index:9999;pointer-events:none;mix-blend-mode:multiply;background:repeating-linear-gradient(0deg,oklch(0% 0 0/.18) 0 1px,#0000 1px 3px),radial-gradient(120% 120%,#0000 70%,oklch(0% 0 0/.22) 100%);animation:4s infinite flicker;position:fixed;inset:0}}@layer tokens{:where(:root,:host){--aspect-ratios-square:1 / 1;--aspect-ratios-landscape:4 / 3;--aspect-ratios-portrait:3 / 4;--aspect-ratios-wide:16 / 9;--aspect-ratios-ultrawide:18 / 5;--aspect-ratios-golden:1.618 / 1;--borders-none:none;--easings-default:cubic-bezier(.4, 0, .2, 1);--easings-linear:linear;--easings-in:cubic-bezier(.4, 0, 1, 1);--easings-out:cubic-bezier(0, 0, .2, 1);--easings-in-out:cubic-bezier(.4, 0, .2, 1);--durations-fastest:50ms;--durations-faster:.1s;--durations-fast:.15s;--durations-normal:.2s;--durations-slow:.3s;--durations-slower:.4s;--durations-slowest:.5s;--radii-xs:.125rem;--radii-sm:.25rem;--radii-md:.375rem;--radii-lg:.5rem;--radii-xl:.75rem;--radii-2xl:1rem;--radii-3xl:1.5rem;--radii-4xl:2rem;--radii-full:9999px;--font-weights-thin:100;--font-weights-extralight:200;--font-weights-light:300;--font-weights-normal:400;--font-weights-medium:500;--font-weights-semibold:600;--font-weights-bold:700;--font-weights-extrabold:800;--font-weights-black:900;--line-heights-none:1;--line-heights-tight:1.25;--line-heights-snug:1.375;--line-heights-normal:1.5;--line-heights-relaxed:1.625;--line-heights-loose:2;--letter-spacings-tighter:-.05em;--letter-spacings-tight:-.025em;--letter-spacings-normal:0em;--letter-spacings-wide:.025em;--letter-spacings-wider:.05em;--letter-spacings-widest:.1em;--font-sizes-2xs:.5rem;--font-sizes-xs:.75rem;--font-sizes-sm:.875rem;--font-sizes-md:1rem;--font-sizes-lg:1.125rem;--font-sizes-xl:1.25rem;--font-sizes-2xl:1.5rem;--font-sizes-3xl:1.875rem;--font-sizes-4xl:2.25rem;--font-sizes-5xl:3rem;--font-sizes-6xl:3.75rem;--font-sizes-7xl:4.5rem;--font-sizes-8xl:6rem;--font-sizes-9xl:8rem;--shadows-2xs:0 1px #0000000d;--shadows-xs:0 1px 2px 0 #0000000d;--shadows-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--shadows-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadows-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--shadows-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--shadows-2xl:0 25px 50px -12px #00000040;--shadows-inset-2xs:inset 0 1px #0000000d;--shadows-inset-xs:inset 0 1px 1px #0000000d;--shadows-inset-sm:inset 0 2px 4px #0000000d;--blurs-xs:4px;--blurs-sm:8px;--blurs-md:12px;--blurs-lg:16px;--blurs-xl:24px;--blurs-2xl:40px;--blurs-3xl:64px;--spacing-0:0rem;--spacing-1:.25rem;--spacing-2:.5rem;--spacing-3:.75rem;--spacing-4:1rem;--spacing-5:1.25rem;--spacing-6:1.5rem;--spacing-7:1.75rem;--spacing-8:2rem;--spacing-9:2.25rem;--spacing-10:2.5rem;--spacing-11:2.75rem;--spacing-12:3rem;--spacing-14:3.5rem;--spacing-16:4rem;--spacing-20:5rem;--spacing-24:6rem;--spacing-28:7rem;--spacing-32:8rem;--spacing-36:9rem;--spacing-40:10rem;--spacing-44:11rem;--spacing-48:12rem;--spacing-52:13rem;--spacing-56:14rem;--spacing-60:15rem;--spacing-64:16rem;--spacing-72:18rem;--spacing-80:20rem;--spacing-96:24rem;--spacing-0\.5:.125rem;--spacing-1\.5:.375rem;--spacing-2\.5:.625rem;--spacing-3\.5:.875rem;--spacing-4\.5:1.125rem;--spacing-5\.5:1.375rem;--sizes-0:0rem;--sizes-1:.25rem;--sizes-2:.5rem;--sizes-3:.75rem;--sizes-4:1rem;--sizes-5:1.25rem;--sizes-6:1.5rem;--sizes-7:1.75rem;--sizes-8:2rem;--sizes-9:2.25rem;--sizes-10:2.5rem;--sizes-11:2.75rem;--sizes-12:3rem;--sizes-14:3.5rem;--sizes-16:4rem;--sizes-20:5rem;--sizes-24:6rem;--sizes-28:7rem;--sizes-32:8rem;--sizes-36:9rem;--sizes-40:10rem;--sizes-44:11rem;--sizes-48:12rem;--sizes-52:13rem;--sizes-56:14rem;--sizes-60:15rem;--sizes-64:16rem;--sizes-72:18rem;--sizes-80:20rem;--sizes-96:24rem;--sizes-0\.5:.125rem;--sizes-1\.5:.375rem;--sizes-2\.5:.625rem;--sizes-3\.5:.875rem;--sizes-4\.5:1.125rem;--sizes-5\.5:1.375rem;--sizes-xs:20rem;--sizes-sm:24rem;--sizes-md:28rem;--sizes-lg:32rem;--sizes-xl:36rem;--sizes-2xl:42rem;--sizes-3xl:48rem;--sizes-4xl:56rem;--sizes-5xl:64rem;--sizes-6xl:72rem;--sizes-7xl:80rem;--sizes-8xl:90rem;--sizes-prose:65ch;--sizes-full:100%;--sizes-min:min-content;--sizes-max:max-content;--sizes-fit:fit-content;--sizes-breakpoint-sm:640px;--sizes-breakpoint-md:768px;--sizes-breakpoint-lg:1024px;--sizes-breakpoint-xl:1280px;--sizes-breakpoint-2xl:1536px;--animations-spin:spin 1s linear infinite;--animations-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animations-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--animations-bounce:bounce 1s infinite;--colors-current:currentColor;--colors-black:#000;--colors-white:#fff;--colors-transparent:#0000;--colors-rose-50:#fff1f2;--colors-rose-100:#ffe4e6;--colors-rose-200:#fecdd3;--colors-rose-300:#fda4af;--colors-rose-400:#fb7185;--colors-rose-500:#f43f5e;--colors-rose-600:#e11d48;--colors-rose-700:#be123c;--colors-rose-800:#9f1239;--colors-rose-900:#881337;--colors-rose-950:#4c0519;--colors-pink-50:#fdf2f8;--colors-pink-100:#fce7f3;--colors-pink-200:#fbcfe8;--colors-pink-300:#f9a8d4;--colors-pink-400:#f472b6;--colors-pink-500:#ec4899;--colors-pink-600:#db2777;--colors-pink-700:#be185d;--colors-pink-800:#9d174d;--colors-pink-900:#831843;--colors-pink-950:#500724;--colors-fuchsia-50:#fdf4ff;--colors-fuchsia-100:#fae8ff;--colors-fuchsia-200:#f5d0fe;--colors-fuchsia-300:#f0abfc;--colors-fuchsia-400:#e879f9;--colors-fuchsia-500:#d946ef;--colors-fuchsia-600:#c026d3;--colors-fuchsia-700:#a21caf;--colors-fuchsia-800:#86198f;--colors-fuchsia-900:#701a75;--colors-fuchsia-950:#4a044e;--colors-violet-50:#f5f3ff;--colors-violet-100:#ede9fe;--colors-violet-200:#ddd6fe;--colors-violet-300:#c4b5fd;--colors-violet-400:#a78bfa;--colors-violet-500:#8b5cf6;--colors-violet-600:#7c3aed;--colors-violet-700:#6d28d9;--colors-violet-800:#5b21b6;--colors-violet-900:#4c1d95;--colors-violet-950:#2e1065;--colors-indigo-50:#eef2ff;--colors-indigo-100:#e0e7ff;--colors-indigo-200:#c7d2fe;--colors-indigo-300:#a5b4fc;--colors-indigo-400:#818cf8;--colors-indigo-500:#6366f1;--colors-indigo-600:#4f46e5;--colors-indigo-700:#4338ca;--colors-indigo-800:#3730a3;--colors-indigo-900:#312e81;--colors-indigo-950:#1e1b4b;--colors-blue-50:#eff6ff;--colors-blue-100:#dbeafe;--colors-blue-200:#bfdbfe;--colors-blue-300:#93c5fd;--colors-blue-400:#60a5fa;--colors-blue-500:#3b82f6;--colors-blue-600:#2563eb;--colors-blue-700:#1d4ed8;--colors-blue-800:#1e40af;--colors-blue-900:#1e3a8a;--colors-blue-950:#172554;--colors-sky-50:#f0f9ff;--colors-sky-100:#e0f2fe;--colors-sky-200:#bae6fd;--colors-sky-300:#7dd3fc;--colors-sky-400:#38bdf8;--colors-sky-500:#0ea5e9;--colors-sky-600:#0284c7;--colors-sky-700:#0369a1;--colors-sky-800:#075985;--colors-sky-900:#0c4a6e;--colors-sky-950:#082f49;--colors-teal-50:#f0fdfa;--colors-teal-100:#ccfbf1;--colors-teal-200:#99f6e4;--colors-teal-300:#5eead4;--colors-teal-400:#2dd4bf;--colors-teal-500:#14b8a6;--colors-teal-600:#0d9488;--colors-teal-700:#0f766e;--colors-teal-800:#115e59;--colors-teal-900:#134e4a;--colors-teal-950:#042f2e;--colors-emerald-50:#ecfdf5;--colors-emerald-100:#d1fae5;--colors-emerald-200:#a7f3d0;--colors-emerald-300:#6ee7b7;--colors-emerald-400:#34d399;--colors-emerald-500:#10b981;--colors-emerald-600:#059669;--colors-emerald-700:#047857;--colors-emerald-800:#065f46;--colors-emerald-900:#064e3b;--colors-emerald-950:#022c22;--colors-green-50:#f0fdf4;--colors-green-100:#dcfce7;--colors-green-200:#bbf7d0;--colors-green-300:#86efac;--colors-green-400:#4ade80;--colors-green-500:#22c55e;--colors-green-600:#16a34a;--colors-green-700:#15803d;--colors-green-800:#166534;--colors-green-900:#14532d;--colors-green-950:#052e16;--colors-lime-50:#f7fee7;--colors-lime-100:#ecfccb;--colors-lime-200:#d9f99d;--colors-lime-300:#bef264;--colors-lime-400:#a3e635;--colors-lime-500:#84cc16;--colors-lime-600:#65a30d;--colors-lime-700:#4d7c0f;--colors-lime-800:#3f6212;--colors-lime-900:#365314;--colors-lime-950:#1a2e05;--colors-yellow-50:#fefce8;--colors-yellow-100:#fef9c3;--colors-yellow-200:#fef08a;--colors-yellow-300:#fde047;--colors-yellow-400:#facc15;--colors-yellow-500:#eab308;--colors-yellow-600:#ca8a04;--colors-yellow-700:#a16207;--colors-yellow-800:#854d0e;--colors-yellow-900:#713f12;--colors-yellow-950:#422006;--colors-orange-50:#fff7ed;--colors-orange-100:#ffedd5;--colors-orange-200:#fed7aa;--colors-orange-300:#fdba74;--colors-orange-400:#fb923c;--colors-orange-500:#f97316;--colors-orange-600:#ea580c;--colors-orange-700:#c2410c;--colors-orange-800:#9a3412;--colors-orange-900:#7c2d12;--colors-orange-950:#431407;--colors-red-50:#fef2f2;--colors-red-100:#fee2e2;--colors-red-200:#fecaca;--colors-red-300:#fca5a5;--colors-red-400:#f87171;--colors-red-500:#ef4444;--colors-red-600:#dc2626;--colors-red-700:#b91c1c;--colors-red-800:#991b1b;--colors-red-900:#7f1d1d;--colors-red-950:#450a0a;--colors-neutral-50:#fafafa;--colors-neutral-100:#f5f5f5;--colors-neutral-200:#e5e5e5;--colors-neutral-300:#d4d4d4;--colors-neutral-400:#a3a3a3;--colors-neutral-500:#737373;--colors-neutral-600:#525252;--colors-neutral-700:#404040;--colors-neutral-800:#262626;--colors-neutral-900:#171717;--colors-neutral-950:#0a0a0a;--colors-stone-50:#fafaf9;--colors-stone-100:#f5f5f4;--colors-stone-200:#e7e5e4;--colors-stone-300:#d6d3d1;--colors-stone-400:#a8a29e;--colors-stone-500:#78716c;--colors-stone-600:#57534e;--colors-stone-700:#44403c;--colors-stone-800:#292524;--colors-stone-900:#1c1917;--colors-stone-950:#0c0a09;--colors-zinc-50:#fafafa;--colors-zinc-100:#f4f4f5;--colors-zinc-200:#e4e4e7;--colors-zinc-300:#d4d4d8;--colors-zinc-400:#a1a1aa;--colors-zinc-500:#71717a;--colors-zinc-600:#52525b;--colors-zinc-700:#3f3f46;--colors-zinc-800:#27272a;--colors-zinc-900:#18181b;--colors-zinc-950:#09090b;--colors-gray-50:#f9fafb;--colors-gray-100:#f3f4f6;--colors-gray-200:#e5e7eb;--colors-gray-300:#d1d5db;--colors-gray-400:#9ca3af;--colors-gray-500:#6b7280;--colors-gray-600:#4b5563;--colors-gray-700:#374151;--colors-gray-800:#1f2937;--colors-gray-900:#111827;--colors-gray-950:#030712;--colors-slate-50:#f8fafc;--colors-slate-100:#f1f5f9;--colors-slate-200:#e2e8f0;--colors-slate-300:#cbd5e1;--colors-slate-400:#94a3b8;--colors-slate-500:#64748b;--colors-slate-600:#475569;--colors-slate-700:#334155;--colors-slate-800:#1e293b;--colors-slate-900:#0f172a;--colors-slate-950:#020617;--colors-bg:oklch(16% .02 250);--colors-bg-panel:oklch(20% .02 250);--colors-ink:oklch(92% .03 90);--colors-grid:oklch(30% .02 250);--colors-muted:oklch(70% .02 250);--colors-amber-50:#fffbeb;--colors-amber-100:#fef3c7;--colors-amber-200:#fde68a;--colors-amber-300:#fcd34d;--colors-amber-400:#fbbf24;--colors-amber-500:#f59e0b;--colors-amber-600:#d97706;--colors-amber-700:#b45309;--colors-amber-800:#92400e;--colors-amber-900:#78350f;--colors-amber-950:#451a03;--colors-amber:oklch(82% .16 75);--colors-cyan-50:#ecfeff;--colors-cyan-100:#cffafe;--colors-cyan-200:#a5f3fc;--colors-cyan-300:#67e8f9;--colors-cyan-400:#22d3ee;--colors-cyan-500:#06b6d4;--colors-cyan-600:#0891b2;--colors-cyan-700:#0e7490;--colors-cyan-800:#155e75;--colors-cyan-900:#164e63;--colors-cyan-950:#083344;--colors-cyan:oklch(85% .13 200);--colors-alarm:oklch(63% .24 25);--colors-mint:oklch(88% .16 165);--colors-dormant:oklch(45% .06 25);--colors-gold:oklch(87% .15 95);--colors-gold-dim:oklch(55% .09 95);--colors-gold-ghost:oklch(32% .05 95);--colors-purple-50:#faf5ff;--colors-purple-100:#f3e8ff;--colors-purple-200:#e9d5ff;--colors-purple-300:#d8b4fe;--colors-purple-400:#c084fc;--colors-purple-500:#a855f7;--colors-purple-600:#9333ea;--colors-purple-700:#7e22ce;--colors-purple-800:#6b21a8;--colors-purple-900:#581c87;--colors-purple-950:#3b0764;--colors-purple:oklch(76% .14 305);--colors-purple-dim:oklch(50% .09 305);--colors-purple-ghost:oklch(30% .05 305);--fonts-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--fonts-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--fonts-mono:ui-monospace, "JetBrains Mono", "SFMono-Regular", Menlo, monospace;--breakpoints-sm:640px;--breakpoints-md:768px;--breakpoints-lg:1024px;--breakpoints-xl:1280px;--breakpoints-2xl:1536px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}}@layer recipes;@layer utilities{.p_0\.6rem_0\.8rem{padding:.6rem .8rem}.m_0{margin:var(--spacing-0)}.font_inherit{font:inherit}.bg_transparent{background:var(--colors-transparent)}.anim_pulse_0\.6s_steps\(1\)_infinite{animation:.6s step-end infinite pulse}.anim_pulse_0\.5s_steps\(1\)_infinite{animation:.5s step-end infinite pulse}.bg_amber{background:var(--colors-amber)}.bg_cyan{background:var(--colors-cyan)}.bg_alarm{background:var(--colors-alarm)}.bg_dormant{background:var(--colors-dormant)}.bg_mint{background:var(--colors-mint)}.m_0\.3rem_0{margin:.3rem 0}.bg_bg{background:var(--colors-bg)}.bg_bgPanel{background:var(--colors-bg-panel)}.bg_oklch\(0\.85_0\.13_200_\/_0\.35\){background:oklch(85% .13 200/.35)}.p_0{padding:var(--spacing-0)}.m_0\.4rem_0{margin:.4rem 0}.m_0\.5rem_0{margin:.5rem 0}.m_0\.3rem_0_0{margin:.3rem 0 0}.bd_0{border:0}.m_0\.6rem_0{margin:.6rem 0}.m_0\.45rem_0_0{margin:.45rem 0 0}.m_0\.15rem_0_0{margin:.15rem 0 0}.p_0\.45rem_0\.55rem{padding:.45rem .55rem}.m_0\.2rem_0_0{margin:.2rem 0 0}.p_0\.5rem_0\.6rem{padding:.5rem .6rem}.p_0\.4rem_0\.5rem{padding:.4rem .5rem}.inset_0{inset:var(--spacing-0)}.bd_1px_solid_token\(colors\.grid\){border:1px solid var(--colors-grid)}.p_0\.4rem_0\.2rem_2rem{padding:.4rem .2rem 2rem}.bd_none{border:var(--borders-none)}.bg_rgba\(232\,_193\,_112\,_0\.12\){background:#e8c1701f}.bg_oklch\(0\.82_0\.16_75_\/_0\.08\){background:oklch(82% .16 75/.08)}.p_0\.5rem{padding:.5rem}.bg_linear-gradient\(to_bottom\,_transparent_0\,_transparent_2px\,_token\(colors\.grid\)_2px\,_token\(colors\.grid\)_3px\,_transparent_3px\){background:linear-gradient(to bottom, transparent 0, transparent 2px, var(--colors-grid) 2px, var(--colors-grid) 3px, transparent 3px)}.p_0\.35rem{padding:.35rem}.p_0\.55rem{padding:.55rem}.p_0\.2rem{padding:.2rem}.m_0\.7rem_0_0\.3rem{margin:.7rem 0 .3rem}.p_0\.3rem{padding:.3rem}.p_0\.35rem_0\.5rem{padding:.35rem .5rem}.bg_\#070b0f{background:#070b0f}.bg_radial-gradient\(120\%_100\%_at_50\%_40\%\,_oklch\(0\.2_0\.02_250\)_0\%\,_var\(--bg\)_80\%\){background:radial-gradient(120% 100% at 50% 40%, oklch(20% .02 250) 0%, var(--bg) 80%)}.p_0\.6rem_0\.85rem{padding:.6rem .85rem}.bg_grid{background:var(--colors-grid)}.p_1rem{padding:1rem}.p_0\.6rem{padding:.6rem}.p_0\.4rem_0\.6rem{padding:.4rem .6rem}.grid-area_coupler{grid-area:coupler}.bd_1px_solid_token\(colors\.amber\){border:1px solid var(--colors-amber)}.p_0\.4rem_0\.2rem{padding:.4rem .2rem}.p_0\.4rem_0\.55rem{padding:.4rem .55rem}.bd_1px_dashed_token\(colors\.alarm\){border:1px dashed var(--colors-alarm)}.bd_1px_solid_token\(colors\.cyan\){border:1px solid var(--colors-cyan)}.p_0\.55rem_0\.65rem{padding:.55rem .65rem}.bd_1px_dashed_token\(colors\.dormant\){border:1px dashed var(--colors-dormant)}.p_0\.3rem_0\.6rem{padding:.3rem .6rem}.bd_1px_solid_token\(colors\.mint\){border:1px solid var(--colors-mint)}.bg_muted{background:var(--colors-muted)}.bg_repeating-linear-gradient\(0deg\,_token\(colors\.bg\)_0_4px\,_transparent_4px_8px\){background:repeating-linear-gradient(0deg, var(--colors-bg) 0 4px, transparent 4px 8px)}.bg_repeating-linear-gradient\(0deg\,_token\(colors\.mint\)_0_4px\,_transparent_4px_8px\){background:repeating-linear-gradient(0deg, var(--colors-mint) 0 4px, transparent 4px 8px)}.bg_repeating-linear-gradient\(0deg\,_token\(colors\.cyan\)_0_4px\,_transparent_4px_8px\){background:repeating-linear-gradient(0deg, var(--colors-cyan) 0 4px, transparent 4px 8px)}.anim_pulse_0\.9s_steps\(1\)_infinite{animation:.9s step-end infinite pulse}.bg_oklch\(0\.24_0\.03_250\){background:oklch(24% .03 250)}.bg_color-mix\(in_oklab\,_var\(--amber\)_20\%\,_transparent\){background:color-mix(in oklab, var(--amber) 20%, transparent)}.ov_hidden{overflow:hidden}.gap_0\.6rem{gap:.6rem}.gap_1rem{gap:1rem}.gap_0\.9rem{gap:.9rem}.gap_0\.25rem{gap:.25rem}.gap_0\.7rem{gap:.7rem}.flex_1{flex:1}.px_0\.45rem{padding-inline:.45rem}.py_0\.08rem{padding-block:.08rem}.bdr_2px{border-radius:2px}.bd-w_1px{border-width:1px}.border-style_solid{border-style:solid}.trs_color_0\.15s_ease\,_border-color_0\.15s_ease{transition:color .15s,border-color .15s}.bd-c_amber{border-color:var(--colors-amber)}.bd-c_grid{border-color:var(--colors-grid)}.py_0\.12rem{padding-block:.12rem}.trs_background_0\.15s_ease{transition:background .15s}.bd-c_cyan{border-color:var(--colors-cyan)}.bdr_full{border-radius:var(--radii-full)}.gap_0\.3rem{gap:.3rem}.px_0\.75rem{padding-inline:.75rem}.py_0\.3rem{padding-block:.3rem}.bdr_3px{border-radius:3px}.px_0\.8rem{padding-inline:.8rem}.ov_auto{overflow:auto}.mx_-0\.8rem{margin-inline:-.8rem}.place-items_center{place-items:center}.trs_height_0\.4s_ease{transition:height .4s}.flex_none{flex:none}.gap_0\.4rem{gap:.4rem}.flex_0_0_auto{flex:none}.bdr_999px{border-radius:999px}.border-style_none{border-style:none}.flex_0_1_auto{flex:0 auto}.li-s_none{list-style:none}.gap_0\.35rem{gap:.35rem}.gap_0\.5rem{gap:.5rem}.py_0\.16rem{padding-block:.16rem}.px_0\.4rem{padding-inline:.4rem}.px_0\.5rem{padding-inline:.5rem}.py_0\.4rem{padding-block:.4rem}.gap_0\.32rem{gap:.32rem}.px_0\.55rem{padding-inline:.55rem}.py_0\.15rem{padding-block:.15rem}.px_0\.2rem{padding-inline:.2rem}.px_0\.35rem{padding-inline:.35rem}.py_0\.05rem{padding-block:.05rem}.gap_0\.15rem{gap:.15rem}.py_0\.2rem{padding-block:.2rem}.gap_0\.45rem{gap:.45rem}.bd-c_mint{border-color:var(--colors-mint)}.bd-c_alarm{border-color:var(--colors-alarm)}.grid-c_2{grid-column:2}.gap_0\.1rem{gap:.1rem}.gap_0\.75rem{gap:.75rem}.gap_0\.2rem{gap:.2rem}.px_1rem{padding-inline:1rem}.flex_1_1_0{flex:1 1 0}.gap_0\.05rem{gap:.05rem}.py_0\.25rem{padding-block:.25rem}.gap_0\.55rem{gap:.55rem}.gap_1\.1rem{gap:1.1rem}.gap_0{gap:var(--spacing-0)}.mx_auto{margin-inline:auto}.border-style_dotted{border-style:dotted}.px_0\.7rem{padding-inline:.7rem}.py_0\.45rem{padding-block:.45rem}.border-style_dashed{border-style:dashed}.py_0\.55rem{padding-block:.55rem}.my_0\.2rem{margin-block:.2rem}.py_0\.24rem{padding-block:.24rem}.bd-c_transparent{border-color:var(--colors-transparent)}.ring_none{outline:var(--borders-none)}.py_0\.35rem{padding-block:.35rem}.bdr_4px{border-radius:4px}.py_0\.32rem{padding-block:.32rem}.px_0\.9rem{padding-inline:.9rem}.offset_8{offset:8px}.py_0\.18rem{padding-block:.18rem}.py_0\.28rem{padding-block:.28rem}.py_0\.22rem{padding-block:.22rem}.gap_0\.12rem{gap:.12rem}.py_0\.1rem{padding-block:.1rem}.flex_0_1_2\.6rem{flex:0 2.6rem}.flex_0_1_4rem{flex:0 4rem}.px_0\.28rem{padding-inline:.28rem}.py_0\.04rem{padding-block:.04rem}.px_0\.6rem{padding-inline:.6rem}.px_0\.25rem{padding-inline:.25rem}.px_0\.3rem{padding-inline:.3rem}.trs_transform_0\.12s_ease{transition:transform .12s}.bd-c_color-mix\(in_oklch\,_token\(colors\.gold\)_45\%\,_transparent\){border-color:color-mix(in oklch, var(--colors-gold) 45%, transparent)}.bd-c_color-mix\(in_oklch\,_token\(colors\.purple\)_45\%\,_transparent\){border-color:color-mix(in oklch, var(--colors-purple) 45%, transparent)}.td_underline{text-decoration:underline}.trs_opacity_0\.1s_ease{transition:opacity .1s}.gap_0\.8rem{gap:.8rem}.grid-template-areas_\"official_coupler_worktree\"{grid-template-areas:"official coupler worktree"}.ov_visible{overflow:visible}.bd-t_1px_solid_token\(colors\.grid\){border-top:1px solid var(--colors-grid)}.px_0\.15rem{padding-inline:.15rem}.trs_border-color_0\.15s_ease\,_background_0\.15s_ease{transition:border-color .15s,background .15s}.bd-c_muted{border-color:var(--colors-muted)}.bd-c_dormant{border-color:var(--colors-dormant)}.pos_relative{position:relative}.d_flex{display:flex}.flex-d_column{flex-direction:column}.flex-sh_0{flex-shrink:0}.ai_center{align-items:center}.jc_space-between{justify-content:space-between}.fs_0\.9rem{font-size:.9rem}.ls_0\.18em{letter-spacing:.18em}.c_amber{color:var(--colors-amber)}.tsh_0_0_calc\(6px_\*_var\(--glow-strength\)\)_oklch\(0\.82_0\.16_75_\/_0\.5\){text-shadow:0 0 calc(6px * var(--glow-strength)) oklch(82% .16 75/.5)}.fs_0\.78rem{font-size:.78rem}.c_muted{color:var(--colors-muted)}.fs_0\.74rem{font-size:.74rem}.ls_0\.06em{letter-spacing:.06em}.cursor_pointer{cursor:pointer}.fs_0\.7rem{font-size:.7rem}.c_mint{color:var(--colors-mint)}.c_cyan{color:var(--colors-cyan)}.c_alarm{color:var(--colors-alarm)}.fw_600{font-weight:600}.ls_0\.1em{letter-spacing:.1em}.d_grid{display:grid}.grid-tr_minmax\(0\,_1fr\){grid-template-rows:minmax(0,1fr)}.grid-tc_minmax\(300px\,_1fr\)_minmax\(420px\,_2\.2fr\)_minmax\(260px\,_0\.95fr\){grid-template-columns:minmax(300px,1fr) minmax(420px,2.2fr) minmax(260px,.95fr)}.grid-tc_1fr{grid-template-columns:1fr}.pos_absolute{position:absolute}.z_3{z-index:3}.cursor_col-resize{cursor:col-resize}.fs_0\.72rem{font-size:.72rem}.cursor_default{cursor:default}.c_oklch\(0\.55_0\.02_250\){color:oklch(55% .02 250)}.d_inline-block{display:inline-block}.fs_0\.86rem{font-size:.86rem}.lh_1\.55{line-height:1.55}.c_ink{color:var(--colors-ink)}.ls_0\.08em{letter-spacing:.08em}.tt_uppercase{text-transform:uppercase}.d_block{display:block}.pos_sticky{position:sticky}.z_2{z-index:2}.fs_0\.66rem{font-size:.66rem}.as_center{align-self:center}.c_gold{color:var(--colors-gold)}.filter_drop-shadow\(0_0_3px_color-mix\(in_oklch\,_token\(colors\.gold\)_60\%\,_transparent\)\){filter:drop-shadow(0 0 3px color-mix(in oklch, var(--colors-gold) 60%, transparent))}.c_purple{color:var(--colors-purple)}.filter_drop-shadow\(0_0_3px_color-mix\(in_oklch\,_token\(colors\.purple\)_55\%\,_transparent\)\){filter:drop-shadow(0 0 3px color-mix(in oklch, var(--colors-purple) 55%, transparent))}.stk_cyan{stroke:var(--colors-cyan)}.stk-w_1\.5{stroke-width:1.5px}.fill_none{fill:none}.d_inline-flex{display:inline-flex}.tov_ellipsis{text-overflow:ellipsis}.white-space_nowrap{white-space:nowrap}.c_inherit{color:inherit}.op_0\.85{opacity:.85}.fs_0\.82rem{font-size:.82rem}.fs_0\.75rem{font-size:.75rem}.ls_0\.04em{letter-spacing:.04em}.ta_left{text-align:left}.ai_flex-start{align-items:flex-start}.flex-wrap_wrap{flex-wrap:wrap}.jc_center{justify-content:center}.ta_center{text-align:center}.fs_0\.76rem{font-size:.76rem}.fs_0\.68rem{font-size:.68rem}.grid-tc_1fr_1fr{grid-template-columns:1fr 1fr}.ff_mono{font-family:var(--fonts-mono)}.grid-tc_auto_1fr{grid-template-columns:auto 1fr}.ai_baseline{align-items:baseline}.c_oklch\(0\.6_0\.02_250\){color:oklch(60% .02 250)}.fs_0\.8rem{font-size:.8rem}.fs_0\.84rem{font-size:.84rem}.lh_1\.45{line-height:1.45}.tsh_0_0_calc\(5px_\*_var\(--glow-strength\)\)_oklch\(0\.82_0\.16_75_\/_0\.5\){text-shadow:0 0 calc(5px * var(--glow-strength)) oklch(82% .16 75/.5)}.fill_true{fill:true}.op_0\.18{opacity:.18}.z_0{z-index:0}.pointer-events_none{pointer-events:none}.obj-f_cover{object-fit:cover}.op_0\.14{opacity:.14}.filter_grayscale\(1\)_sepia\(1\)_saturate\(2\.6\)_hue-rotate\(6deg\)_brightness\(0\.85\)_contrast\(1\.05\){filter:grayscale()sepia()saturate(2.6)hue-rotate(6deg)brightness(.85)contrast(1.05)}.mix-bm_screen{mix-blend-mode:screen}.msk-i_radial-gradient\(ellipse_at_center\,_\#000_42\%\,_transparent_100\%\){-webkit-mask-image:radial-gradient(#000 42%,#0000 100%);mask-image:radial-gradient(#000 42%,#0000 100%)}.-webkit-mask-image_radial-gradient\(ellipse_at_center\,_\#000_42\%\,_transparent_100\%\){-webkit-mask-image:radial-gradient(#000 42%,#0000 100%)}.z_1{z-index:1}.ls_0{letter-spacing:0}.fs_0\.95rem{font-size:.95rem}.ls_0\.14em{letter-spacing:.14em}.op_0\.9{opacity:.9}.as_flex-start{align-self:flex-start}.ai_stretch{align-items:stretch}.fs_0\.63rem{font-size:.63rem}.ff_monospace{font-family:monospace}.fs_0\.69rem{font-size:.69rem}.font-style_italic{font-style:italic}.va_middle{vertical-align:middle}.ls_0\.05em{letter-spacing:.05em}.white-space_pre-wrap{white-space:pre-wrap}.ov-wrap_anywhere{overflow-wrap:anywhere}.cursor_row-resize{cursor:row-resize}.mbs_0\.35rem{margin-block-start:.35rem}.lh_1\.4{line-height:1.4}.resize_vertical{resize:vertical}.bx-sh_0_6px_24px_rgba\(0\,0\,0\,0\.5\){box-shadow:0 6px 24px #00000080}.ls_0\.02em{letter-spacing:.02em}.c_text{color:text}.as_flex-end{align-self:flex-end}.pos_fixed{position:fixed}.z_1000{z-index:1000}.bx-sh_0_8px_24px_rgba\(0\,_0\,_0\,_0\.5\){box-shadow:0 8px 24px #00000080}.grid-tc_minmax\(0\,_1fr\){grid-template-columns:minmax(0,1fr)}.bg-i_linear-gradient\(90deg\,_token\(colors\.goldGhost\)\,_token\(colors\.bg\)_34\%\){background-image:linear-gradient(90deg, var(--colors-gold-ghost), var(--colors-bg) 34%)}.bg-i_linear-gradient\(90deg\,_token\(colors\.purpleGhost\)\,_token\(colors\.bg\)_30\%\){background-image:linear-gradient(90deg, var(--colors-purple-ghost), var(--colors-bg) 30%)}.fs_0\.62rem{font-size:.62rem}.ai_flex-end{align-items:flex-end}.resize_none{resize:none}.ac_start{align-content:start}.fs_0\.64rem{font-size:.64rem}.us_none{-webkit-user-select:none;user-select:none}.fs_0\.6rem{font-size:.6rem}.fv-num_tabular-nums{font-variant-numeric:tabular-nums}.trf_translate\(-50\%\,_calc\(-100\%_-_10px\)\){transform:translate(-50%,calc(-100% - 10px))}.op_0{opacity:0}.direction_horizontal{direction:horizontal}.wb_break-all{word-break:break-all}.cx_928\.5{cx:928.5px}.cy_65{cy:65px}.cx_1084{cx:1084px}.cy_88{cy:88px}.cy_562{cy:562px}.d_M595_250_L_595_100{d:M595 250 L 595 100}.d_M365_100_L_365_250{d:M365 100 L 365 250}.d_M527_403_L_36590_403{d:M527 403 L 36590 403}.d_M365_434_L_365_524{d:M365 434 L 365 524}.translate-x_275{--translate-x:275}.translate-y_250{--translate-y:250}.translate-y_372{--translate-y:372}.translate-x_527{--translate-x:527}.translate-x_735{--translate-x:735}.translate-x_365{--translate-x:365}.translate-x_835{--translate-x:835}.translate-x_730{--translate-x:730}.translate-y_476{--translate-y:476}.translate-x_300{--translate-x:300}.translate-y_560{--translate-y:560}.translate-y_188{--translate-y:188}.translate-x_260{--translate-x:260}.translate-y_600{--translate-y:600}.cx_365{cx:365px}.cx_835{cx:835px}.cy_336{cy:336px}.grid-tc_minmax\(230px\,_20rem\)_minmax\(0\,_1fr\)_minmax\(280px\,_22rem\){grid-template-columns:minmax(230px,20rem) minmax(0,1fr) minmax(280px,22rem)}.fs_0\.85rem{font-size:.85rem}.ai_start{align-items:start}.grid-tc_1fr_auto_1fr{grid-template-columns:1fr auto 1fr}.ac_center{align-content:center}.justify-items_center{justify-items:center}.writing-mode_vertical-rl{writing-mode:vertical-rl}.text-orientation_mixed{text-orientation:mixed}.op_0\.92{opacity:.92}.wb_break-word{word-break:break-word}.fill_token\(colors\.cyan\){fill:var(--colors-cyan)}.grid-tc_minmax\(7rem\,_auto\)_1fr{grid-template-columns:minmax(7rem,auto) 1fr}.fill_token\(colors\.muted\){fill:var(--colors-muted)}.fs_14px{font-size:14px}.ls_0\.16em{letter-spacing:.16em}.stk_token\(colors\.amber\){stroke:var(--colors-amber)}.stk-w_1\.8{stroke-width:1.8px}.stk-dsh_9_7{stroke-dasharray:9 7}.stk-lc_round{stroke-linecap:round}.fs_11px{font-size:11px}.fill_token\(colors\.ink\){fill:var(--colors-ink)}.stk_token\(colors\.dormant\){stroke:var(--colors-dormant)}.fill_oklch\(0\.18_0\.02_25\){fill:oklch(18% .02 25)}.stk-dsh_3_3{stroke-dasharray:3 3}.op_0\.8{opacity:.8}.fill_token\(colors\.amber\){fill:var(--colors-amber)}.trf-b_fill-box{transform-box:fill-box}.trf-o_center{transform-origin:50%}.fill_token\(colors\.bg\){fill:var(--colors-bg)}.op_0\.95{opacity:.95}.stk_token\(colors\.bg\){stroke:var(--colors-bg)}.stk-w_2{stroke-width:2px}.fs_12px{font-size:12px}.stk-w_0\.8{stroke-width:.8px}.op_0\.28{opacity:.28}.stk-w_9{stroke-width:9px}.filter_drop-shadow\(0_0_2px_token\(colors\.amber\)\){filter:drop-shadow(0 0 2px var(--colors-amber))}.stk-w_1\.2{stroke-width:1.2px}.stk-w_1\.6{stroke-width:1.6px}.stk_oklch\(0\.95_0\.1_90\){stroke:oklch(95% .1 90)}.stk-w_7{stroke-width:7px}.filter_drop-shadow\(0_0_5px_token\(colors\.amber\)\){filter:drop-shadow(0 0 5px var(--colors-amber))}.fill_oklch\(0\.22_0\.02_250_\/_0\.55\){fill:oklch(22% .02 250/.55)}.stk-w_1{stroke-width:1px}.ls_0\.03em{letter-spacing:.03em}.bx-sh_0_6px_20px_oklch\(0_0_0_\/_0\.5\){box-shadow:0 6px 20px oklch(0% 0 0/.5)}.bd-cl_collapse{border-collapse:collapse}.ff_inherit{font-family:inherit}.ta_right{text-align:right}.filter_drop-shadow\(0_0_5px_token\(colors\.cyan\)\){filter:drop-shadow(0 0 5px var(--colors-cyan))}.stk_token\(colors\.cyan\){stroke:var(--colors-cyan)}.filter_drop-shadow\(0_0_4px_token\(colors\.cyan\)\){filter:drop-shadow(0 0 4px var(--colors-cyan))}.op_0\.32{opacity:.32}.filter_grayscale\(0\.45\){filter:grayscale(.45)}.stk_token\(colors\.alarm\){stroke:var(--colors-alarm)}.stk-w_1\.4{stroke-width:1.4px}.stk-dsh_5_5{stroke-dasharray:5 5}.op_0\.5{opacity:.5}.filter_drop-shadow\(0_0_4px_token\(colors\.alarm\)\){filter:drop-shadow(0 0 4px var(--colors-alarm))}.fill_oklch\(0\.18_0\.04_230\){fill:oklch(18% .04 230)}.stk-w_1\.1{stroke-width:1.1px}.filter_drop-shadow\(0_0_3px_token\(colors\.cyan\)\){filter:drop-shadow(0 0 3px var(--colors-cyan))}.fill_oklch\(0\.22_0\.06_25\){fill:oklch(22% .06 25)}.stk-dsh_8_7{stroke-dasharray:8 7}.op_0\.82{opacity:.82}.filter_drop-shadow\(0_0_6px_token\(colors\.alarm\)\){filter:drop-shadow(0 0 6px var(--colors-alarm))}.fill_oklch\(0\.82_0\.16_25\){fill:oklch(82% .16 25)}.fs_15px{font-size:15px}.fw_700{font-weight:700}.fill_token\(colors\.alarm\){fill:var(--colors-alarm)}.filter_drop-shadow\(0_0_7px_token\(colors\.alarm\)\){filter:drop-shadow(0 0 7px var(--colors-alarm))}.fill_oklch\(0\.26_0\.09_25\){fill:oklch(26% .09 25)}.stk-w_1\.3{stroke-width:1.3px}.fill_oklch\(0\.93_0\.08_25\){fill:oklch(93% .08 25)}.ls_0\.12em{letter-spacing:.12em}.fill_oklch\(0\.2_0\.05_25\){fill:oklch(20% .05 25)}.fill_oklch\(0\.96_0\.05_25\){fill:oklch(96% .05 25)}.fill_token\(colors\.bgPanel\){fill:var(--colors-bg-panel)}.fs_10\.5px{font-size:10.5px}.stk_oklch\(0\.96_0\.05_25\){stroke:oklch(96% .05 25)}.c_token\(colors\.mint\){color:var(--colors-mint)}.bg-c_token\(colors\.bgPanel\){background-color:var(--colors-bg-panel)}.fs_10px{font-size:10px}.stk_token\(colors\.mint\){stroke:var(--colors-mint)}.op_0\.35{opacity:.35}.stk-dsh_2_4{stroke-dasharray:2 4}.fill_oklch\(0\.24_0\.04_160\){fill:oklch(24% .04 160)}.fill_token\(colors\.mint\){fill:var(--colors-mint)}.fs_9\.5px{font-size:9.5px}.fs_12\.5px{font-size:12.5px}.stk_token\(colors\.muted\){stroke:var(--colors-muted)}.op_0\.6{opacity:.6}.op_0\.55{opacity:.55}.c_dormant{color:var(--colors-dormant)}.op_0\.7{opacity:.7}.stk_token\(colors\.grid\){stroke:var(--colors-grid)}.stk-dsh_6_6{stroke-dasharray:6 6}.stk-dsh_3_5{stroke-dasharray:3 5}.op_0\.65{opacity:.65}.stk-dsh_5_4{stroke-dasharray:5 4}.filter_drop-shadow\(0_0_5px_token\(colors\.alarm\)\){filter:drop-shadow(0 0 5px var(--colors-alarm))}.stk-dsh_4_3{stroke-dasharray:4 3}.filter_drop-shadow\(0_0_4px_token\(colors\.mint\)\){filter:drop-shadow(0 0 4px var(--colors-mint))}.fill_token\(colors\.dormant\){fill:var(--colors-dormant)}.fill_oklch\(0\.24_0\.03_250\){fill:oklch(24% .03 250)}.stk-w_2\.4{stroke-width:2.4px}.op_0\.4{opacity:.4}.stk-w_2\.6{stroke-width:2.6px}.filter_drop-shadow\(0_0_4px_token\(colors\.amber\)\){filter:drop-shadow(0 0 4px var(--colors-amber))}.stk-dsh_4_5{stroke-dasharray:4 5}.ff_var\(--font-mono\){font-family:var(--font-mono)}.h_100vh{height:100vh}.min-h_0{min-height:var(--sizes-0)}.bd-b-w_1px{border-bottom-width:1px}.border-bottom-style_solid{border-bottom-style:solid}.bd-b-c_grid{border-bottom-color:var(--colors-grid)}.pb_0\.5rem{padding-bottom:.5rem}.pb_0\.1rem{padding-bottom:.1rem}.min-w_0{min-width:var(--sizes-0)}.top_0{top:var(--spacing-0)}.bottom_0{bottom:var(--spacing-0)}.w_7px{width:7px}.right_0{right:var(--spacing-0)}.left_0{left:var(--spacing-0)}.w_0\.6em{width:.6em}.h_0\.6em{height:.6em}.mr_0\.4em{margin-right:.4em}.ov-x_auto{overflow-x:auto}.max-w_100\%{max-width:100%}.bd-t-w_1px{border-top-width:1px}.border-top-style_solid{border-top-style:solid}.bd-t-c_grid{border-top-color:var(--colors-grid)}.pt_0\.5rem{padding-top:.5rem}.pb_0\.7rem{padding-bottom:.7rem}.mb_0\.4rem{margin-bottom:.4rem}.pt_0\.7rem{padding-top:.7rem}.pb_0\.3rem{padding-bottom:.3rem}.w_2\.2rem{width:2.2rem}.h_2\.2rem{height:2.2rem}.w_100\%{width:100%}.max-w_7\.5rem{max-width:7.5rem}.w_0\.65rem{width:.65rem}.h_0\.65rem{height:.65rem}.bd-t-c_amber{border-top-color:var(--colors-amber)}.max-h_42\%{max-height:42%}.bd-l-w_3px{border-left-width:3px}.border-left-style_solid{border-left-style:solid}.bd-l-c_grid{border-left-color:var(--colors-grid)}.bd-l-c_alarm{border-left-color:var(--colors-alarm)}.bd-l-c_amber{border-left-color:var(--colors-amber)}.bd-l-c_cyan{border-left-color:var(--colors-cyan)}.w_16rem{width:16rem}.bd-r-w_1px{border-right-width:1px}.border-right-style_solid{border-right-style:solid}.bd-r-c_grid{border-right-color:var(--colors-grid)}.pr_0\.4rem{padding-right:.4rem}.bd-l-w_2px{border-left-width:2px}.mb_0\.5rem{margin-bottom:.5rem}.mb_0\.3rem{margin-bottom:.3rem}.mt_0\.5rem{margin-top:.5rem}.w_0\.62em{width:.62em}.h_0\.62em{height:.62em}.pl_1\.1rem{padding-left:1.1rem}.max-w_78ch{max-width:78ch}.h_100\%{height:100%}.max-w_34rem{max-width:34rem}.ov-y_auto{overflow-y:auto}.bd-l-c_mint{border-left-color:var(--colors-mint)}.pl_0\.6rem{padding-left:.6rem}.max-w_82ch{max-width:82ch}.max-w_640px{max-width:640px}.mt_0\.3rem{margin-top:.3rem}.mt_0\.16rem{margin-top:.16rem}.w_1\.6rem{width:1.6rem}.h_0{height:var(--sizes-0)}.mr_0\.35rem{margin-right:.35rem}.bd-t-w_2px{border-top-width:2px}.bd-t-c_mint{border-top-color:var(--colors-mint)}.border-top-style_dashed{border-top-style:dashed}.w_0{width:var(--sizes-0)}.h_0\.95rem{height:.95rem}.border-left-style_dashed{border-left-style:dashed}.h_var\(--gate-request-height\){height:var(--gate-request-height)}.max-h_var\(--gate-request-max-height\){max-height:var(--gate-request-max-height)}.h_0\.55rem{height:.55rem}.max-h_12rem{max-height:12rem}.min-h_4\.2rem{min-height:4.2rem}.max-h_16rem{max-height:16rem}.bd-l-c_dormant{border-left-color:var(--colors-dormant)}.max-w_min\(32rem\,_94vw\){max-width:min(32rem,94vw)}.w_min\(27rem\,_92vw\){width:min(27rem,92vw)}.max-h_6\.5rem{max-height:6.5rem}.min-h_5rem{min-height:5rem}.max-h_20rem{max-height:20rem}.max-h_3rem{max-height:3rem}.max-w_5rem{max-width:5rem}.min-w_15rem{min-width:15rem}.max-w_min\(24rem\,_82vw\){max-width:min(24rem,82vw)}.max-h_min\(50vh\,_22rem\){max-height:min(50vh,22rem)}.mb_0\.15rem{margin-bottom:.15rem}.ov-x_hidden{overflow-x:hidden}.max-w_2\.6rem{max-width:2.6rem}.max-w_4rem{max-width:4rem}.min-w_2\.5rem{min-width:2.5rem}.pl_1rem{padding-left:1rem}.bd-t-c_goldDim{border-top-color:var(--colors-gold-dim)}.mb_0\.7rem{margin-bottom:.7rem}.h_0\.75rem{height:.75rem}.mt_0\.25rem{margin-top:.25rem}.min-h_2\.25rem{min-height:2.25rem}.max-h_8rem{max-height:8rem}.pl_0\.5rem{padding-left:.5rem}.bd-l-w_1px{border-left-width:1px}.min-w_1\.6rem{min-width:1.6rem}.ml_22px{margin-left:22px}.bd-b-w_0{border-bottom-width:0}.min-h_340px{min-height:340px}.mt_0\.4rem{margin-top:.4rem}.w_0\.5em{width:.5em}.h_0\.5em{height:.5em}.mr_0\.3em{margin-right:.3em}.ml_auto{margin-left:auto}.w_1\.1em{width:1.1em}.w_3px{width:3px}.w_180{width:180px}.w_136{width:136px}.w_200{width:200px}.w_140{width:140px}.h_24{height:var(--sizes-24)}.h_26{height:26px}.w_196{width:196px}.h_20{height:var(--sizes-20)}.top_372{top:372px}.top_250{top:250px}.mb_0\.6rem{margin-bottom:.6rem}.max-h_100\%{max-height:100%}.h_2px{height:2px}.max-w_min\(92vw\,_46rem\){max-width:min(92vw,46rem)}.mt_0\.1rem{margin-top:.1rem}.max-w_12rem{max-width:12rem}.bd-l-c_muted{border-left-color:var(--colors-muted)}.w_1\.4rem{width:1.4rem}.h_2\.4rem{height:2.4rem}.w_0\.55em{width:.55em}.h_0\.55em{height:.55em}.max-h_min\(72vh\,_46rem\){max-height:min(72vh,46rem)}.max-h_13rem{max-height:13rem}.w_1ch{width:1ch}.w_4px{width:4px}.max-h_50vh{max-height:50vh}.max-w_50\%{max-width:50%}.\[\&_p\]\:m_0_0_0\.5rem p{margin:0 0 .5rem}.\[\&_code\]\:bg_bg code,.\[\&_pre\]\:bg_bg pre{background:var(--colors-bg)}.\[\&_pre\]\:p_0\.5rem_0\.6rem pre{padding:.5rem .6rem}.\[\&_pre\]\:m_0\.3rem_0 pre{margin:.3rem 0}.\[\&_pre_code\]\:bg_transparent pre code{background:var(--colors-transparent)}.\[\&_blockquote\]\:m_0\.4rem_0 blockquote{margin:.4rem 0}.\[\&_ul\,_\&_ol\]\:m_0_0_0\.5rem ul,.\[\&_ul\,_\&_ol\]\:m_0_0_0\.5rem ol{margin:0 0 .5rem}.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:m_0\.6rem_0_0\.3rem h1,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:m_0\.6rem_0_0\.3rem h2,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:m_0\.6rem_0_0\.3rem h3,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:m_0\.6rem_0_0\.3rem h4{margin:.6rem 0 .3rem}.\[\&_th\,_\&_td\]\:p_0\.2rem_0\.45rem th,.\[\&_th\,_\&_td\]\:p_0\.2rem_0\.45rem td{padding:.2rem .45rem}.\[\&\[data-selected\=true\]\]\:bg_amber[data-selected=true]{background:var(--colors-amber)}.\[\&\[data-active\=true\]\]\:bg_color-mix\(in_oklab\,_var\(--amber\)_20\%\,_transparent\)[data-active=true]{background:color-mix(in oklab, var(--amber) 20%, transparent)}.\[\&_\.cm-changedText\]\:bg_linear-gradient\(\#255a25aa\,_\#255a25aa\)_bottom_\/_100\%_16px_no-repeat\! .cm-changedText{background:linear-gradient(#255a25aa,#255a25aa) bottom/100% 16px no-repeat!important}.\[\&_\.cm-merge-a_\.cm-changedText\]\:bg_linear-gradient\(\#5a2525aa\,_\#5a2525aa\)_bottom_\/_100\%_16px_no-repeat\! .cm-merge-a .cm-changedText{background:linear-gradient(#5a2525aa,#5a2525aa) bottom/100% 16px no-repeat!important}.selected\:bg_bgPanel:is([aria-selected=true],[data-selected]){background:var(--colors-bg-panel)}.\[\&\[data-focused\]\]\:bg_color-mix\(in_oklab\,_var\(--amber\)_16\%\,_transparent\)[data-focused]{background:color-mix(in oklab, var(--amber) 16%, transparent)}.\[\&_a\]\:td_underline a{text-decoration:underline}.\[\&_del\]\:td_line-through del{text-decoration:line-through}.\[\&_code\]\:px_0\.25rem code{padding-inline:.25rem}.\[\&_code\]\:py_0\.05rem code{padding-block:.05rem}.\[\&_code\]\:bdr_2px code{border-radius:2px}.\[\&_pre\]\:bdr_3px pre{border-radius:3px}.\[\&_pre\]\:ov_auto pre{overflow:auto}.\[\&_pre_code\]\:px_0 pre code{padding-inline:var(--spacing-0)}.\[\&_ul\,_\&_ol\]\:gap_0\.15rem ul,.\[\&_ul\,_\&_ol\]\:gap_0\.15rem ol{gap:.15rem}.\[\&_th\,_\&_td\]\:bd-w_1px th,.\[\&_th\,_\&_td\]\:bd-w_1px td{border-width:1px}.\[\&_th\,_\&_td\]\:border-style_solid th,.\[\&_th\,_\&_td\]\:border-style_solid td{border-style:solid}.\[\&_th\,_\&_td\]\:bd-c_grid th,.\[\&_th\,_\&_td\]\:bd-c_grid td{border-color:var(--colors-grid)}.\[\&_code\]\:px_0\.2rem code{padding-inline:.2rem}.selected\:bd-c_amber:is([aria-selected=true],[data-selected]){border-color:var(--colors-amber)}.selected\:ring_1px_solid_token\(colors\.amber\):is([aria-selected=true],[data-selected]){outline:1px solid var(--colors-amber)}.before\:border-style_solid:before{border-style:solid}.before\:bd-w_13px_13px_0_0:before{border-width:13px 13px 0 0}.before\:bd-c_token\(colors\.gold\)_transparent_transparent_transparent:before{border-color:var(--colors-gold) transparent transparent transparent}.before\:bd-c_token\(colors\.purpleDim\)_transparent_transparent_transparent:before{border-color:var(--colors-purple-dim) transparent transparent transparent}.\[\&\[data-selected\=true\]\]\:bd-c_amber[data-selected=true]{border-color:var(--colors-amber)}.\[\&_td\]\:px_0\.35rem td{padding-inline:.35rem}.\[\&_td\]\:py_0\.12rem td{padding-block:.12rem}.\[\&\[data-focused\]\]\:ring_none[data-focused]{outline:var(--borders-none)}.\[\&_strong\]\:fw_600 strong{font-weight:600}.\[\&_strong\]\:c_ink strong{color:var(--colors-ink)}.\[\&_em\]\:font-style_italic em{font-style:italic}.\[\&_a\]\:c_cyan a{color:var(--colors-cyan)}.\[\&_del\]\:c_muted del{color:var(--colors-muted)}.\[\&_code\]\:fs_0\.86em code{font-size:.86em}.\[\&_pre_code\]\:fs_0\.78rem pre code{font-size:.78rem}.\[\&_blockquote\]\:c_muted blockquote{color:var(--colors-muted)}.\[\&_ul\,_\&_ol\]\:d_grid ul,.\[\&_ul\,_\&_ol\]\:d_grid ol{display:grid}.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:fs_0\.78rem h1,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:fs_0\.78rem h2,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:fs_0\.78rem h3,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:fs_0\.78rem h4{font-size:.78rem}.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:ls_0\.04em h1,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:ls_0\.04em h2,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:ls_0\.04em h3,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:ls_0\.04em h4{letter-spacing:.04em}.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:tt_uppercase h1,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:tt_uppercase h2,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:tt_uppercase h3,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:tt_uppercase h4{text-transform:uppercase}.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:c_amber h1,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:c_amber h2,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:c_amber h3,.\[\&_h1\,_\&_h2\,_\&_h3\,_\&_h4\]\:c_amber h4{color:var(--colors-amber)}.\[\&_table\]\:bd-cl_collapse table{border-collapse:collapse}.\[\&_table\]\:fs_0\.8rem table{font-size:.8rem}.\[\&_th\,_\&_td\]\:ta_left th,.\[\&_th\,_\&_td\]\:ta_left td{text-align:left}.\[\&_th\,_\&_td\]\:va_top th,.\[\&_th\,_\&_td\]\:va_top td{vertical-align:top}.\[\&_th\]\:c_amber th{color:var(--colors-amber)}.\[\&_th\]\:fw_600 th{font-weight:600}.\[\&_th\]\:white-space_nowrap th{white-space:nowrap}.selected\:c_amber:is([aria-selected=true],[data-selected]){color:var(--colors-amber)}.selected\:tsh_0_0_calc\(5px_\*_var\(--glow-strength\)\)_oklch\(0\.82_0\.16_75_\/_0\.4\):is([aria-selected=true],[data-selected]){text-shadow:0 0 calc(5px * var(--glow-strength)) oklch(82% .16 75/.4)}.\[\&_path\]\:fill_none path{fill:none}.\[\&_path\]\:stk-w_1\.9 path{stroke-width:1.9px}.\[\&_path\]\:stk-lc_round path{stroke-linecap:round}.\[\&_path\]\:stk-lj_round path{stroke-linejoin:round}.disabled\:op_0\.5:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){opacity:.5}.disabled\:cursor_default:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){cursor:default}.disabled\:op_0\.6:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){opacity:.6}.before\:content_\"\":before{content:""}.before\:pos_absolute:before{position:absolute}.disabled\:op_0\.4:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){opacity:.4}.\[\&\[data-expanded\=true\]\]\:trf_rotate\(90deg\)[data-expanded=true]{transform:rotate(90deg)}.\[\&\[data-selected\=true\]\]\:c_bg[data-selected=true]{color:var(--colors-bg)}.\[\&_td\]\:white-space_nowrap td{white-space:nowrap}.\[\&\[data-active\=true\]\]\:c_cyan[data-active=true]{color:var(--colors-cyan)}.\[\&_\>_\:first-child\]\:mt_0>:first-child{margin-top:var(--spacing-0)}.\[\&_\>_\:last-child\]\:mb_0>:last-child{margin-bottom:var(--spacing-0)}.\[\&_p\]\:max-w_78ch p{max-width:78ch}.\[\&_blockquote\]\:pl_0\.6rem blockquote{padding-left:.6rem}.\[\&_blockquote\]\:bd-l-w_2px blockquote{border-left-width:2px}.\[\&_blockquote\]\:border-left-style_solid blockquote{border-left-style:solid}.\[\&_blockquote\]\:bd-l-c_grid blockquote{border-left-color:var(--colors-grid)}.\[\&_ul\,_\&_ol\]\:pl_1\.2rem ul,.\[\&_ul\,_\&_ol\]\:pl_1\.2rem ol{padding-left:1.2rem}.\[\&_li\]\:max-w_78ch li{max-width:78ch}.before\:top_0:before{top:var(--spacing-0)}.before\:left_0:before{left:var(--spacing-0)}.\[\&\[data-open\=true\]\]\:bd-b-w_1px[data-open=true]{border-bottom-width:1px}.\[\&_\.xterm\]\:h_100\% .xterm{height:100%}.\[\&_\.xterm-viewport\]\:ov-y_auto\! .xterm-viewport{overflow-y:auto!important}.\[\&_\>_\.cm-editor\]\:h_100\%>.cm-editor,.\[\&_\.cm-mergeView\]\:h_100\% .cm-mergeView,.\[\&_\.cm-editor\]\:h_100\% .cm-editor{height:100%}.focusVisible\:ring_1px_solid_token\(colors\.amber\):is(:focus-visible,[data-focus-visible]){outline:1px solid var(--colors-amber)}.focusVisible\:ring_1px_solid_token\(colors\.cyan\):is(:focus-visible,[data-focus-visible]){outline:1px solid var(--colors-cyan)}.focusVisible\:ring_none:is(:focus-visible,[data-focus-visible]){outline:var(--borders-none)}.focusVisible\:ring-o_1px:is(:focus-visible,[data-focus-visible]){outline-offset:1px}.focusVisible\:ring-o_-1px:is(:focus-visible,[data-focus-visible]){outline-offset:-1px}.focusVisible\:ring-w_1px:is(:focus-visible,[data-focus-visible]){outline-width:1px}.focusVisible\:outline-style_solid:is(:focus-visible,[data-focus-visible]){outline-style:solid}.focusVisible\:ring-c_amber:is(:focus-visible,[data-focus-visible]){outline-color:var(--colors-amber)}.focusVisible\:stk_token\(colors\.cyan\):is(:focus-visible,[data-focus-visible]){stroke:var(--colors-cyan)}.focusVisible\:stk-w_1\.6:is(:focus-visible,[data-focus-visible]){stroke-width:1.6px}.hover\:bg_amber:is(:hover,[data-hovered]){background:var(--colors-amber)}.hover\:bg_rgba\(232\,_193\,_112\,_0\.1\):is(:hover,[data-hovered]){background:#e8c1701a}.hover\:bg_oklch\(0\.7_0\.1_200_\/_0\.12\):is(:hover,[data-hovered]){background:oklch(70% .1 200/.12)}.hover\:bg_oklch\(0\.82_0\.16_75_\/_0\.12\):is(:hover,[data-hovered]){background:oklch(82% .16 75/.12)}.hover\:bg_color-mix\(in_oklab\,_var\(--colors-amber\)_16\%\,_transparent\):is(:hover,[data-hovered]){background:color-mix(in oklab, var(--colors-amber) 16%, transparent)}.hover\:bg_color-mix\(in_oklab\,_var\(--amber\)_12\%\,_transparent\):is(:hover,[data-hovered]){background:color-mix(in oklab, var(--amber) 12%, transparent)}.hover\:bd-c_muted:is(:hover,[data-hovered]){border-color:var(--colors-muted)}.hover\:td_underline:is(:hover,[data-hovered]){text-decoration:underline}.hover\:bd-c_cyan:is(:hover,[data-hovered]){border-color:var(--colors-cyan)}.hover\:bd-c_alarm:is(:hover,[data-hovered]){border-color:var(--colors-alarm)}.hover\:bd-c_amber:is(:hover,[data-hovered]){border-color:var(--colors-amber)}.hover\:c_ink:is(:hover,[data-hovered]){color:var(--colors-ink)}.hover\:c_amber:is(:hover,[data-hovered]){color:var(--colors-amber)}.hover\:c_alarm:is(:hover,[data-hovered]){color:var(--colors-alarm)}.hover\:fill_oklch\(0\.3_0\.04_250_\/_0\.85\):is(:hover,[data-hovered]){fill:oklch(30% .04 250/.85)}.hover\:bd-l-c_amber:is(:hover,[data-hovered]){border-left-color:var(--colors-amber)}.disabled\:hover\:bg_transparent:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]):is(:hover,[data-hovered]){background:var(--colors-transparent)}@media screen and (width>=48rem){.md\:grid-tc_1fr_auto_1fr{grid-template-columns:1fr auto 1fr}}@media (prefers-reduced-motion:reduce){.motionReduce\:trs_none{transition:none}}}@keyframes flicker{0%,97%,to{opacity:1}98%{opacity:.85}}@keyframes pulse{50%{opacity:.35}}html[data-effects=off] *,html[data-effects=off] :before,html[data-effects=off] :after{transition:none!important;animation:none!important}html[data-effects=off] [data-testid=conduit-packet],html[data-effects=off] [data-testid=warp-surge]{display:none}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:oklch(16% .02 250);--bg-panel:oklch(20% .02 250);--ink:oklch(92% .03 90);--grid:oklch(30% .02 250);--amber:oklch(82% .16 75);--cyan:oklch(85% .13 200);--alarm:oklch(63% .24 25);--mint:oklch(88% .16 165);--dormant:oklch(45% .06 25);--gold:oklch(87% .15 95);--gold-dim:oklch(55% .09 95);--gold-ghost:oklch(32% .05 95);--purple:oklch(76% .14 305);--purple-dim:oklch(50% .09 305);--purple-ghost:oklch(30% .05 305);--font-mono:ui-monospace, "JetBrains Mono", "SFMono-Regular", Menlo, monospace;--glow-strength:1} diff --git a/mcp/src/agents_remember/package_data/dashboard/assets/index-DFlPXY2S.js b/mcp/src/agents_remember/package_data/dashboard/assets/index-DFlPXY2S.js new file mode 100644 index 00000000..8fe9357b --- /dev/null +++ b/mcp/src/agents_remember/package_data/dashboard/assets/index-DFlPXY2S.js @@ -0,0 +1,80 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Terminal-BbgEwj_G.js","./Terminal-kHJ-D0s7.css","./dist-Dffou3cZ.js","./dist-B4wkeQMq.js","./dist-BObfczsO.js","./dist-BOD3F4my.js","./dist-CiaxKt8Y.js","./dist-DutnYvKJ.js","./dist-DDu5qYtv.js","./dist-D0jig3Or.js"])))=>i.map(i=>d[i]); +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(e&&(t=e(e=0)),t),s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),c=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},l=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},u=(n,r,a)=>(a=n==null?{}:e(i(n)),l(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),d=e=>a.call(e,`module.exports`)?e[`module.exports`]:l(t({},`__esModule`,{value:!0}),e);(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var f=s((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),p=s(((e,t)=>{t.exports=f()})),m=s((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=m()})),g=u(h(),1),_=(0,g.createContext)({});function v(e){let t=(0,g.useRef)(null);return t.current===null&&(t.current=e()),t.current}var y=typeof window<`u`?g.useLayoutEffect:g.useEffect,b=(0,g.createContext)(null);function x(e,t){e.indexOf(t)===-1&&e.push(t)}function S(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}var C=(e,t,n)=>n>t?t:n/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(e),E=e=>typeof e==`object`&&!!e,D=e=>/^0[^.\s]+$/u.test(e);function O(e){let t;return()=>(t===void 0&&(t=e()),t)}var k=e=>e,A=(...e)=>e.reduce((e,t)=>n=>t(e(n))),j=(e,t,n)=>{let r=t-e;return r?(n-e)/r:1},M=class{constructor(){this.subscriptions=[]}add(e){return x(this.subscriptions,e),()=>S(this.subscriptions,e)}notify(e,t,n){let r=this.subscriptions.length;if(r)if(r===1)this.subscriptions[0](e,t,n);else for(let i=0;ie*1e3,P=e=>e/1e3,F=(e,t)=>t?1e3/t*e:0,ee=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,te=1e-7,ne=12;function re(e,t,n,r,i){let a,o,s=0;do o=t+(n-t)/2,a=ee(o,r,i)-e,a>0?n=o:t=o;while(Math.abs(a)>te&&++sre(t,0,1,e,n);return e=>e===0||e===1?e:ee(i(e),t,r)}var ae=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,oe=e=>t=>1-e(1-t),se=ie(.33,1.53,.69,.99),ce=oe(se),le=ae(ce),ue=e=>e>=1?1:(e*=2)<1?.5*ce(e):.5*(2-2**(-10*(e-1))),de=e=>1-Math.sin(Math.acos(e)),fe=oe(de),pe=ae(de),me=ie(.42,0,1,1),he=ie(0,0,.58,1),ge=ie(.42,0,.58,1),_e=e=>Array.isArray(e)&&typeof e[0]!=`number`,ve=e=>Array.isArray(e)&&typeof e[0]==`number`,ye={linear:k,easeIn:me,easeInOut:ge,easeOut:he,circIn:de,circInOut:pe,circOut:fe,backIn:ce,backInOut:le,backOut:se,anticipate:ue},be=e=>typeof e==`string`,xe=e=>{if(ve(e)){e.length;let[t,n,r,i]=e;return ie(t,n,r,i)}else if(be(e))return ye[e],`${e}`,ye[e];return e},Se=[`setup`,`read`,`resolveKeyframes`,`preUpdate`,`update`,`preRender`,`render`,`postRender`],Ce={value:null,addProjectionMetrics:null};function we(e,t){let n=new Set,r=new Set,i=!1,a=!1,o=new WeakSet,s={delta:0,timestamp:0,isProcessing:!1},c=0;function l(t){o.has(t)&&(u.schedule(t),e()),c++,t(s)}let u={schedule:(e,t=!1,a=!1)=>{let s=a&&i?n:r;return t&&o.add(e),s.add(e),e},cancel:e=>{r.delete(e),o.delete(e)},process:e=>{if(s=e,i){a=!0;return}i=!0;let o=n;n=r,r=o,n.forEach(l),t&&Ce.value&&Ce.value.frameloop[t].push(c),c=0,n.clear(),i=!1,a&&(a=!1,u.process(e))}};return u}var Te=40;function Ee(e,t){let n=!1,r=!0,i={delta:0,timestamp:0,isProcessing:!1},a=()=>n=!0,o=Se.reduce((e,n)=>(e[n]=we(a,t?n:void 0),e),{}),{setup:s,read:c,resolveKeyframes:l,preUpdate:u,update:d,preRender:f,render:p,postRender:m}=o,h=()=>{let a=w.useManualTiming,o=a?i.timestamp:performance.now();n=!1,a||(i.delta=r?1e3/60:Math.max(Math.min(o-i.timestamp,Te),1)),i.timestamp=o,i.isProcessing=!0,s.process(i),c.process(i),l.process(i),u.process(i),d.process(i),f.process(i),p.process(i),m.process(i),i.isProcessing=!1,n&&t&&(r=!1,e(h))},g=()=>{n=!0,r=!0,i.isProcessing||e(h)};return{schedule:Se.reduce((e,t)=>{let r=o[t];return e[t]=(e,t=!1,i=!1)=>(n||g(),r.schedule(e,t,i)),e},{}),cancel:e=>{for(let t=0;t(je===void 0&&Ne.set(ke.isProcessing||w.useManualTiming?ke.timestamp:performance.now()),je),set:e=>{je=e,queueMicrotask(Me)}},Pe={layout:0,mainThread:0,waapi:0},Fe=e=>t=>typeof t==`string`&&t.startsWith(e),Ie=Fe(`--`),Le=Fe(`var(--`),Re=e=>Le(e)?ze.test(e.split(`/*`)[0].trim()):!1,ze=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function Be(e){return typeof e==`string`?e.split(`/*`)[0].includes(`var(--`):!1}var Ve={test:e=>typeof e==`number`,parse:parseFloat,transform:e=>e},He={...Ve,transform:e=>C(0,1,e)},Ue={...Ve,default:1},We=e=>Math.round(e*1e5)/1e5,Ge=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function Ke(e){return e==null}var qe=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,Je=(e,t)=>n=>!!(typeof n==`string`&&qe.test(n)&&n.startsWith(e)||t&&!Ke(n)&&Object.prototype.hasOwnProperty.call(n,t)),Ye=(e,t,n)=>r=>{if(typeof r!=`string`)return r;let[i,a,o,s]=r.match(Ge);return{[e]:parseFloat(i),[t]:parseFloat(a),[n]:parseFloat(o),alpha:s===void 0?1:parseFloat(s)}},Xe=e=>C(0,255,e),Ze={...Ve,transform:e=>Math.round(Xe(e))},Qe={test:Je(`rgb`,`red`),parse:Ye(`red`,`green`,`blue`),transform:({red:e,green:t,blue:n,alpha:r=1})=>`rgba(`+Ze.transform(e)+`, `+Ze.transform(t)+`, `+Ze.transform(n)+`, `+We(He.transform(r))+`)`};function $e(e){let t=``,n=``,r=``,i=``;return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),r=e.substring(5,7),i=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),r=e.substring(3,4),i=e.substring(4,5),t+=t,n+=n,r+=r,i+=i),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:i?parseInt(i,16)/255:1}}var et={test:Je(`#`),parse:$e,transform:Qe.transform},tt=e=>({test:t=>typeof t==`string`&&t.endsWith(e)&&t.split(` `).length===1,parse:parseFloat,transform:t=>`${t}${e}`}),nt=tt(`deg`),rt=tt(`%`),I=tt(`px`),it=tt(`vh`),at=tt(`vw`),ot={...rt,parse:e=>rt.parse(e)/100,transform:e=>rt.transform(e*100)},st={test:Je(`hsl`,`hue`),parse:Ye(`hue`,`saturation`,`lightness`),transform:({hue:e,saturation:t,lightness:n,alpha:r=1})=>`hsla(`+Math.round(e)+`, `+rt.transform(We(t))+`, `+rt.transform(We(n))+`, `+We(He.transform(r))+`)`},ct={test:e=>Qe.test(e)||et.test(e)||st.test(e),parse:e=>Qe.test(e)?Qe.parse(e):st.test(e)?st.parse(e):et.parse(e),transform:e=>typeof e==`string`?e:e.hasOwnProperty(`red`)?Qe.transform(e):st.transform(e),getAnimatableNone:e=>{let t=ct.parse(e);return t.alpha=0,ct.transform(t)}},lt=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function ut(e){return isNaN(e)&&typeof e==`string`&&(e.match(Ge)?.length||0)+(e.match(lt)?.length||0)>0}var dt=`number`,ft=`color`,pt=`var`,mt=`var(`,ht="${}",gt=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function _t(e){let t=e.toString(),n=[],r={color:[],number:[],var:[]},i=[],a=0;return{values:n,split:t.replace(gt,e=>(ct.test(e)?(r.color.push(a),i.push(ft),n.push(ct.parse(e))):e.startsWith(mt)?(r.var.push(a),i.push(pt),n.push(e)):(r.number.push(a),i.push(dt),n.push(parseFloat(e))),++a,ht)).split(ht),indexes:r,types:i}}function vt(e){return _t(e).values}function yt({split:e,types:t}){let n=e.length;return r=>{let i=``;for(let a=0;atypeof e==`number`?0:ct.test(e)?ct.getAnimatableNone(e):e,St=(e,t)=>typeof e==`number`?t?.trim().endsWith(`/`)?e:0:xt(e);function Ct(e){let t=_t(e);return yt(t)(t.values.map((e,n)=>St(e,t.split[n])))}var wt={test:ut,parse:vt,createTransformer:bt,getAnimatableNone:Ct};function Tt(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function Et({hue:e,saturation:t,lightness:n,alpha:r}){e/=360,t/=100,n/=100;let i=0,a=0,o=0;if(!t)i=a=o=n;else{let r=n<.5?n*(1+t):n+t-n*t,s=2*n-r;i=Tt(s,r,e+1/3),a=Tt(s,r,e),o=Tt(s,r,e-1/3)}return{red:Math.round(i*255),green:Math.round(a*255),blue:Math.round(o*255),alpha:r}}function Dt(e,t){return n=>n>0?t:e}var Ot=(e,t,n)=>e+(t-e)*n,kt=(e,t,n)=>{let r=e*e,i=n*(t*t-r)+r;return i<0?0:Math.sqrt(i)},At=[et,Qe,st],jt=e=>At.find(t=>t.test(e));function Mt(e){let t=jt(e);if(`${e}`,!t)return!1;let n=t.parse(e);return t===st&&(n=Et(n)),n}var Nt=(e,t)=>{let n=Mt(e),r=Mt(t);if(!n||!r)return Dt(e,t);let i={...n};return e=>(i.red=kt(n.red,r.red,e),i.green=kt(n.green,r.green,e),i.blue=kt(n.blue,r.blue,e),i.alpha=Ot(n.alpha,r.alpha,e),Qe.transform(i))},Pt=new Set([`none`,`hidden`]);function Ft(e,t){return Pt.has(e)?n=>n<=0?e:t:n=>n>=1?t:e}function It(e,t){return n=>Ot(e,t,n)}function Lt(e){return typeof e==`number`?It:typeof e==`string`?Re(e)?Dt:ct.test(e)?Nt:Vt:Array.isArray(e)?Rt:typeof e==`object`?ct.test(e)?Nt:zt:Dt}function Rt(e,t){let n=[...e],r=n.length,i=e.map((e,n)=>Lt(e)(e,t[n]));return e=>{for(let t=0;t{for(let t in r)n[t]=r[t](e);return n}}function Bt(e,t){let n=[],r={color:0,var:0,number:0};for(let i=0;i{let n=wt.createTransformer(t),r=_t(e),i=_t(t);return r.indexes.var.length===i.indexes.var.length&&r.indexes.color.length===i.indexes.color.length&&r.indexes.number.length>=i.indexes.number.length?Pt.has(e)&&!i.values.length||Pt.has(t)&&!r.values.length?Ft(e,t):A(Rt(Bt(r,i),i.values),n):(`${e}${t}`,Dt(e,t))};function Ht(e,t,n){return typeof e==`number`&&typeof t==`number`&&typeof n==`number`?Ot(e,t,n):Lt(e)(e,t)}var Ut=e=>{let t=({timestamp:t})=>e(t);return{start:(e=!0)=>De.update(t,e),stop:()=>Oe(t),now:()=>ke.isProcessing?ke.timestamp:Ne.now()}},Wt=(e,t,n=10)=>{let r=``,i=Math.max(Math.round(t/n),2);for(let t=0;t=2e4?1/0:t}function qt(e,t=100,n){let r=n({...e,keyframes:[0,t]}),i=Math.min(Kt(r),Gt);return{type:`keyframes`,ease:e=>r.next(i*e).value/t,duration:P(i)}}var Jt={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1};function Yt(e,t){return e*Math.sqrt(1-t*t)}var Xt=12;function Zt(e,t,n){let r=n;for(let n=1;n{let r=t*o,i=r*e,a=r-n,s=Yt(t,o),c=Math.exp(-i);return Qt-a/s*c},a=t=>{let r=t*o*e,a=r*n+n,s=o**2*t**2*e,c=Math.exp(-r),l=Yt(t**2,o);return(-i(t)+Qt>0?-1:1)*((a-s)*c)/l}):(i=t=>-.001+Math.exp(-t*e)*((t-n)*e+1),a=t=>Math.exp(-t*e)*((n-t)*(e*e)));let s=5/e,c=Zt(i,a,s);if(e=N(e),isNaN(c))return{stiffness:Jt.stiffness,damping:Jt.damping,duration:e};{let t=c**2*r;return{stiffness:t,damping:o*2*Math.sqrt(r*t),duration:e}}}var en=[`duration`,`bounce`],tn=[`stiffness`,`damping`,`mass`];function nn(e,t){return t.some(t=>e[t]!==void 0)}function rn(e){let t={velocity:Jt.velocity,stiffness:Jt.stiffness,damping:Jt.damping,mass:Jt.mass,isResolvedFromDuration:!1,...e};if(!nn(e,tn)&&nn(e,en))if(t.velocity=0,e.visualDuration){let n=e.visualDuration,r=2*Math.PI/(n*1.2),i=r*r,a=2*C(.05,1,1-(e.bounce||0))*Math.sqrt(i);t={...t,mass:Jt.mass,stiffness:i,damping:a}}else{let n=$t({...e,velocity:0});t={...t,...n,mass:Jt.mass},t.isResolvedFromDuration=!0}return t}function an(e=Jt.visualDuration,t=Jt.bounce){let n=typeof e==`object`?e:{visualDuration:e,keyframes:[0,1],bounce:t},{restSpeed:r,restDelta:i}=n,a=n.keyframes[0],o=n.keyframes[n.keyframes.length-1],s={done:!1,value:a},{stiffness:c,damping:l,mass:u,duration:d,velocity:f,isResolvedFromDuration:p}=rn({...n,velocity:-P(n.velocity||0)}),m=f||0,h=l/(2*Math.sqrt(c*u)),g=o-a,_=P(Math.sqrt(c/u)),v=Math.abs(g)<5;r||=v?Jt.restSpeed.granular:Jt.restSpeed.default,i||=v?Jt.restDelta.granular:Jt.restDelta.default;let y,b,x,S,C,w;if(h<1)x=Yt(_,h),S=(m+h*_*g)/x,y=e=>o-Math.exp(-h*_*e)*(S*Math.sin(x*e)+g*Math.cos(x*e)),C=h*_*S+g*x,w=h*_*g-S*x,b=e=>Math.exp(-h*_*e)*(C*Math.sin(x*e)+w*Math.cos(x*e));else if(h===1){y=e=>o-Math.exp(-_*e)*(g+(m+_*g)*e);let e=m+_*g;b=t=>Math.exp(-_*t)*(_*e*t-m)}else{let e=_*Math.sqrt(h*h-1);y=t=>{let n=Math.exp(-h*_*t),r=Math.min(e*t,300);return o-n*((m+h*_*g)*Math.sinh(r)+e*g*Math.cosh(r))/e};let t=(m+h*_*g)/e,n=h*_*t-g*e,r=h*_*g-t*e;b=t=>{let i=Math.exp(-h*_*t),a=Math.min(e*t,300);return i*(n*Math.sinh(a)+r*Math.cosh(a))}}let T={calculatedDuration:p&&d||null,velocity:e=>N(b(e)),next:e=>{if(!p&&h<1){let t=Math.exp(-h*_*e),n=Math.sin(x*e),a=Math.cos(x*e),c=o-t*(S*n+g*a),l=N(t*(C*n+w*a));return s.done=Math.abs(l)<=r&&Math.abs(o-c)<=i,s.value=s.done?o:c,s}let t=y(e);if(p)s.done=e>=d;else{let n=N(b(e));s.done=Math.abs(n)<=r&&Math.abs(o-t)<=i}return s.value=s.done?o:t,s},toString:()=>{let e=Math.min(Kt(T),Gt),t=Wt(t=>T.next(e*t).value,e,30);return e+`ms `+t},toTransition:()=>{}};return T}an.applyToOptions=e=>{let t=qt(e,100,an);return e.ease=t.ease,e.duration=N(t.duration),e.type=`keyframes`,e};var on=5;function sn(e,t,n){let r=Math.max(t-on,0);return F(n-e(r),t-r)}function cn({keyframes:e,velocity:t=0,power:n=.8,timeConstant:r=325,bounceDamping:i=10,bounceStiffness:a=500,modifyTarget:o,min:s,max:c,restDelta:l=.5,restSpeed:u}){let d=e[0],f={done:!1,value:d},p=e=>s!==void 0&&ec,m=e=>s===void 0?c:c===void 0||Math.abs(s-e)-h*Math.exp(-e/r),y=e=>_+v(e),b=e=>{let t=v(e),n=y(e);f.done=Math.abs(t)<=l,f.value=f.done?_:n},x,S,C=e=>{p(f.value)&&(x=e,S=an({keyframes:[f.value,m(f.value)],velocity:sn(y,e,f.value),damping:i,stiffness:a,restDelta:l,restSpeed:u}))};return C(0),{calculatedDuration:null,next:e=>{let t=!1;return!S&&x===void 0&&(t=!0,b(e),C(e)),x!==void 0&&e>=x?S.next(e-x):(!t&&b(e),f)}}}function ln(e,t,n){let r=[],i=n||w.mix||Ht,a=e.length-1;for(let n=0;nt[0];if(a===2&&t[0]===t[1])return()=>t[1];let o=e[0]===e[1];e[0]>e[a-1]&&(e=[...e].reverse(),t=[...t].reverse());let s=ln(t,r,i),c=s.length,l=n=>{if(o&&n1)for(;rl(C(e[0],e[a-1],t)):l}function dn(e,t){let n=e[e.length-1];for(let r=1;r<=t;r++){let i=j(0,t,r);e.push(Ot(n,1,i))}}function fn(e){let t=[0];return dn(t,e.length-1),t}function pn(e,t){return e.map(e=>e*t)}function mn(e,t){return e.map(()=>t||ge).splice(0,e.length-1)}function hn({duration:e=300,keyframes:t,times:n,ease:r=`easeInOut`}){let i=_e(r)?r.map(xe):xe(r),a={done:!1,value:t[0]},o=un(pn(n&&n.length===t.length?n:fn(t),e),t,{ease:Array.isArray(i)?i:mn(t,i)});return{calculatedDuration:e,next:t=>(a.value=o(t),a.done=t>=e,a)}}var gn=e=>e!==null;function _n(e,{repeat:t,repeatType:n=`loop`},r,i=1){let a=e.filter(gn),o=i<0||t&&n!==`loop`&&t%2==1?0:a.length-1;return!o||r===void 0?a[o]:r}var vn={decay:cn,inertia:cn,tween:hn,keyframes:hn,spring:an};function yn(e){typeof e.type==`string`&&(e.type=vn[e.type])}var bn=class{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(e=>{this.resolve=e})}notifyFinished(){this.resolve()}then(e,t){return this.finished.then(e,t)}},xn=e=>e/100,Sn=class extends bn{constructor(e){super(),this.state=`idle`,this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.delayState={done:!1,value:void 0},this.stop=()=>{let{motionValue:e}=this.options;e&&e.updatedAt!==Ne.now()&&this.tick(Ne.now()),this.isStopped=!0,this.state!==`idle`&&(this.teardown(),this.options.onStop?.())},Pe.mainThread++,this.options=e,this.initAnimation(),this.play(),e.autoplay===!1&&this.pause()}initAnimation(){let{options:e}=this;yn(e);let{type:t=hn,repeat:n=0,repeatDelay:r=0,repeatType:i,velocity:a=0}=e,{keyframes:o}=e,s=t||hn;s!==hn&&typeof o[0]!=`number`&&(this.mixKeyframes=A(xn,Ht(o[0],o[1])),o=[0,100]);let c=s({...e,keyframes:o});i===`mirror`&&(this.mirroredGenerator=s({...e,keyframes:[...o].reverse(),velocity:-a})),c.calculatedDuration===null&&(c.calculatedDuration=Kt(c));let{calculatedDuration:l}=c;this.calculatedDuration=l,this.resolvedDuration=l+r,this.totalDuration=this.resolvedDuration*(n+1)-r,this.generator=c}updateTime(e){let t=Math.round(e-this.startTime)*this.playbackSpeed;this.holdTime===null?this.currentTime=t:this.currentTime=this.holdTime}tick(e,t=!1){let{generator:n,totalDuration:r,mixKeyframes:i,mirroredGenerator:a,resolvedDuration:o,calculatedDuration:s}=this;if(this.startTime===null)return n.next(0);let{delay:c=0,keyframes:l,repeat:u,repeatType:d,repeatDelay:f,type:p,onUpdate:m,finalKeyframe:h}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,e):this.speed<0&&(this.startTime=Math.min(e-r/this.speed,this.startTime)),t?this.currentTime=e:this.updateTime(e);let g=this.currentTime-c*(this.playbackSpeed>=0?1:-1),_=this.playbackSpeed>=0?g<0:g>r;this.currentTime=Math.max(g,0),this.state===`finished`&&this.holdTime===null&&(this.currentTime=r);let v=this.currentTime,y=n;if(u){let e=Math.min(this.currentTime,r)/o,t=Math.floor(e),n=e%1;!n&&e>=1&&(n=1),n===1&&t--,t=Math.min(t,u+1),t%2&&(d===`reverse`?(n=1-n,f&&(n-=f/o)):d===`mirror`&&(y=a)),v=C(0,1,n)*o}let b;_?(this.delayState.value=l[0],b=this.delayState):b=y.next(v),i&&!_&&(b.value=i(b.value));let{done:x}=b;!_&&s!==null&&(x=this.playbackSpeed>=0?this.currentTime>=r:this.currentTime<=0);let S=this.holdTime===null&&(this.state===`finished`||this.state===`running`&&x);return S&&p!==cn&&(b.value=_n(l,this.options,h,this.speed)),m&&m(b.value),S&&this.finish(),b}then(e,t){return this.finished.then(e,t)}get duration(){return P(this.calculatedDuration)}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+P(e)}get time(){return P(this.currentTime)}set time(e){e=N(e),this.currentTime=e,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=e:this.driver&&(this.startTime=this.driver.now()-e/this.playbackSpeed),this.driver?this.driver.start(!1):(this.startTime=0,this.state=`paused`,this.holdTime=e,this.tick(e))}getGeneratorVelocity(){let e=this.currentTime;if(e<=0)return this.options.velocity||0;if(this.generator.velocity)return this.generator.velocity(e);let t=this.generator.next(e).value;return sn(e=>this.generator.next(e).value,e,t)}get speed(){return this.playbackSpeed}set speed(e){let t=this.playbackSpeed!==e;t&&this.driver&&this.updateTime(Ne.now()),this.playbackSpeed=e,t&&this.driver&&(this.time=P(this.currentTime))}play(){if(this.isStopped)return;let{driver:e=Ut,startTime:t}=this.options;this.driver||=e(e=>this.tick(e)),this.options.onPlay?.();let n=this.driver.now();this.state===`finished`?(this.updateFinished(),this.startTime=n):this.holdTime===null?this.startTime||=t??n:this.startTime=n-this.holdTime,this.state===`finished`&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state=`running`,this.driver.start()}pause(){this.state=`paused`,this.updateTime(Ne.now()),this.holdTime=this.currentTime}complete(){this.state!==`running`&&this.play(),this.state=`finished`,this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state=`finished`,this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state=`idle`,this.stopDriver(),this.startTime=this.holdTime=null,Pe.mainThread--}stopDriver(){this.driver&&=(this.driver.stop(),void 0)}sample(e){return this.startTime=0,this.tick(e,!0)}attachTimeline(e){return this.options.allowFlatten&&(this.options.type=`keyframes`,this.options.ease=`linear`,this.initAnimation()),this.driver?.stop(),e.observe(this)}};function Cn(e){for(let t=1;te*180/Math.PI,Tn=e=>Dn(wn(Math.atan2(e[1],e[0]))),En={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:e=>(Math.abs(e[0])+Math.abs(e[3]))/2,rotate:Tn,rotateZ:Tn,skewX:e=>wn(Math.atan(e[1])),skewY:e=>wn(Math.atan(e[2])),skew:e=>(Math.abs(e[1])+Math.abs(e[2]))/2},Dn=e=>(e%=360,e<0&&(e+=360),e),On=Tn,kn=e=>Math.sqrt(e[0]*e[0]+e[1]*e[1]),An=e=>Math.sqrt(e[4]*e[4]+e[5]*e[5]),jn={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:kn,scaleY:An,scale:e=>(kn(e)+An(e))/2,rotateX:e=>Dn(wn(Math.atan2(e[6],e[5]))),rotateY:e=>Dn(wn(Math.atan2(-e[2],e[0]))),rotateZ:On,rotate:On,skewX:e=>wn(Math.atan(e[4])),skewY:e=>wn(Math.atan(e[1])),skew:e=>(Math.abs(e[1])+Math.abs(e[4]))/2};function Mn(e){return+!!e.includes(`scale`)}function Nn(e,t){if(!e||e===`none`)return Mn(t);let n=e.match(/^matrix3d\(([-\d.e\s,]+)\)$/u),r,i;if(n)r=jn,i=n;else{let t=e.match(/^matrix\(([-\d.e\s,]+)\)$/u);r=En,i=t}if(!i)return Mn(t);let a=r[t],o=i[1].split(`,`).map(Fn);return typeof a==`function`?a(o):o[a]}var Pn=(e,t)=>{let{transform:n=`none`}=getComputedStyle(e);return Nn(n,t)};function Fn(e){return parseFloat(e.trim())}var In=[`transformPerspective`,`x`,`y`,`z`,`translateX`,`translateY`,`translateZ`,`scale`,`scaleX`,`scaleY`,`rotate`,`rotateX`,`rotateY`,`rotateZ`,`skew`,`skewX`,`skewY`],Ln=new Set([...In,`pathRotation`]),Rn=e=>e===Ve||e===I,zn=new Set([`x`,`y`,`z`]),Bn=In.filter(e=>!zn.has(e));function Vn(e){let t=[];return Bn.forEach(n=>{let r=e.getValue(n);r!==void 0&&(t.push([n,r.get()]),r.set(+!!n.startsWith(`scale`)))}),t}var Hn={width:({x:e},{paddingLeft:t=`0`,paddingRight:n=`0`,boxSizing:r})=>{let i=e.max-e.min;return r===`border-box`?i:i-parseFloat(t)-parseFloat(n)},height:({y:e},{paddingTop:t=`0`,paddingBottom:n=`0`,boxSizing:r})=>{let i=e.max-e.min;return r===`border-box`?i:i-parseFloat(t)-parseFloat(n)},top:(e,{top:t})=>parseFloat(t),left:(e,{left:t})=>parseFloat(t),bottom:({y:e},{top:t})=>parseFloat(t)+(e.max-e.min),right:({x:e},{left:t})=>parseFloat(t)+(e.max-e.min),x:(e,{transform:t})=>Nn(t,`x`),y:(e,{transform:t})=>Nn(t,`y`)};Hn.translateX=Hn.x,Hn.translateY=Hn.y;var Un=new Set,Wn=!1,Gn=!1,Kn=!1;function qn(){if(Gn){let e=Array.from(Un).filter(e=>e.needsMeasurement),t=new Set(e.map(e=>e.element)),n=new Map;t.forEach(e=>{let t=Vn(e);t.length&&(n.set(e,t),e.render())}),e.forEach(e=>e.measureInitialState()),t.forEach(e=>{e.render();let t=n.get(e);t&&t.forEach(([t,n])=>{e.getValue(t)?.set(n)})}),e.forEach(e=>e.measureEndState()),e.forEach(e=>{e.suspendedScrollY!==void 0&&window.scrollTo(0,e.suspendedScrollY)})}Gn=!1,Wn=!1,Un.forEach(e=>e.complete(Kn)),Un.clear()}function Jn(){Un.forEach(e=>{e.readKeyframes(),e.needsMeasurement&&(Gn=!0)})}function Yn(){Kn=!0,Jn(),qn(),Kn=!1}var Xn=class{constructor(e,t,n,r,i,a=!1){this.state=`pending`,this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...e],this.onComplete=t,this.name=n,this.motionValue=r,this.element=i,this.isAsync=a}scheduleResolve(){this.state=`scheduled`,this.isAsync?(Un.add(this),Wn||(Wn=!0,De.read(Jn),De.resolveKeyframes(qn))):(this.readKeyframes(),this.complete())}readKeyframes(){let{unresolvedKeyframes:e,name:t,element:n,motionValue:r}=this;if(e[0]===null){let i=r?.get(),a=e[e.length-1];if(i!==void 0)e[0]=i;else if(n&&t){let r=n.readValue(t,a);r!=null&&(e[0]=r)}e[0]===void 0&&(e[0]=a),r&&i===void 0&&r.set(e[0])}Cn(e)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(e=!1){this.state=`complete`,this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,e),Un.delete(this)}cancel(){this.state===`scheduled`&&(Un.delete(this),this.state=`pending`)}resume(){this.state===`pending`&&this.scheduleResolve()}},Zn=e=>e.startsWith(`--`);function Qn(e,t,n){Zn(t)?e.style.setProperty(t,n):e.style[t]=n}var $n={};function er(e,t){let n=O(e);return()=>$n[t]??n()}var tr=er(()=>window.ScrollTimeline!==void 0,`scrollTimeline`),nr=er(()=>{try{document.createElement(`div`).animate({opacity:0},{easing:`linear(0, 1)`})}catch{return!1}return!0},`linearEasing`),rr=([e,t,n,r])=>`cubic-bezier(${e}, ${t}, ${n}, ${r})`,ir={linear:`linear`,ease:`ease`,easeIn:`ease-in`,easeOut:`ease-out`,easeInOut:`ease-in-out`,circIn:rr([0,.65,.55,1]),circOut:rr([.55,0,1,.45]),backIn:rr([.31,.01,.66,-.59]),backOut:rr([.33,1.53,.69,.99])};function ar(e,t){if(e)return typeof e==`function`?nr()?Wt(e,t):`ease-out`:ve(e)?rr(e):Array.isArray(e)?e.map(e=>ar(e,t)||ir.easeOut):ir[e]}function or(e,t,n,{delay:r=0,duration:i=300,repeat:a=0,repeatType:o=`loop`,ease:s=`easeOut`,times:c}={},l=void 0){let u={[t]:n};c&&(u.offset=c);let d=ar(s,i);Array.isArray(d)&&(u.easing=d),Ce.value&&Pe.waapi++;let f={delay:r,duration:i,easing:Array.isArray(d)?`linear`:d,fill:`both`,iterations:a+1,direction:o===`reverse`?`alternate`:`normal`};l&&(f.pseudoElement=l);let p=e.animate(u,f);return Ce.value&&p.finished.finally(()=>{Pe.waapi--}),p}function sr(e){return typeof e==`function`&&`applyToOptions`in e}function cr({type:e,...t}){return sr(e)&&nr()?e.applyToOptions(t):(t.duration??=300,t.ease??=`easeOut`,t)}var lr=class extends bn{constructor(e){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!e)return;let{element:t,name:n,keyframes:r,pseudoElement:i,allowFlatten:a=!1,finalKeyframe:o,onComplete:s}=e;this.isPseudoElement=!!i,this.allowFlatten=a,this.options=e,e.type;let c=cr(e);this.animation=or(t,n,r,c,i),c.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!i){let e=_n(r,this.options,o,this.speed);this.updateMotionValue&&this.updateMotionValue(e),Qn(t,n,e),this.animation.cancel()}s?.(),this.notifyFinished()}}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),this.state===`finished`&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;let{state:e}=this;e===`idle`||e===`finished`||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){let e=this.options?.element;!this.isPseudoElement&&e?.isConnected&&this.animation.commitStyles?.()}get duration(){let e=this.animation.effect?.getComputedTiming?.().duration||0;return P(Number(e))}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+P(e)}get time(){return P(Number(this.animation.currentTime)||0)}set time(e){let t=this.finishedTime!==null;this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=N(e),t&&this.animation.pause()}get speed(){return this.animation.playbackRate}set speed(e){e<0&&(this.finishedTime=null),this.animation.playbackRate=e}get state(){return this.finishedTime===null?this.animation.playState:`finished`}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(e){this.manualStartTime=this.animation.startTime=e}attachTimeline({timeline:e,rangeStart:t,rangeEnd:n,observe:r}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:`linear`}),this.animation.onfinish=null,e&&tr()?(this.animation.timeline=e,t&&(this.animation.rangeStart=t),n&&(this.animation.rangeEnd=n),k):r(this)}},ur={anticipate:ue,backInOut:le,circInOut:pe};function dr(e){return e in ur}function fr(e){typeof e.ease==`string`&&dr(e.ease)&&(e.ease=ur[e.ease])}var pr=10,mr=class extends lr{constructor(e){fr(e),yn(e),super(e),e.startTime!==void 0&&e.autoplay!==!1&&(this.startTime=e.startTime),this.options=e}updateMotionValue(e){let{motionValue:t,onUpdate:n,onComplete:r,element:i,...a}=this.options;if(!t)return;if(e!==void 0){t.set(e);return}let o=new Sn({...a,autoplay:!1}),s=Math.max(pr,Ne.now()-this.startTime),c=C(0,pr,s-pr),l=o.sample(s).value,{name:u}=this.options;i&&u&&Qn(i,u,l),t.setWithVelocity(o.sample(Math.max(0,s-c)).value,l,c),o.stop()}},hr=(e,t)=>t===`zIndex`?!1:!!(typeof e==`number`||Array.isArray(e)||typeof e==`string`&&(wt.test(e)||e===`0`)&&!e.startsWith(`url(`));function gr(e){let t=e[0];if(e.length===1)return!0;for(let n=0;nObject.hasOwnProperty.call(Element.prototype,`animate`));function wr(e){let{motionValue:t,name:n,repeatDelay:r,repeatType:i,damping:a,type:o,keyframes:s}=e;if(!(t?.owner?.current instanceof HTMLElement))return!1;let{onUpdate:c,transformTemplate:l}=t.owner.getProps();return Cr()&&n&&(yr.has(n)||Sr.has(n)&&xr(s))&&(n!==`transform`||!l)&&!c&&!r&&i!==`mirror`&&a!==0&&o!==`inertia`}var Tr=40,Er=class extends bn{constructor({autoplay:e=!0,delay:t=0,type:n=`keyframes`,repeat:r=0,repeatDelay:i=0,repeatType:a=`loop`,keyframes:o,name:s,motionValue:c,element:l,...u}){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=Ne.now();let d={autoplay:e,delay:t,type:n,repeat:r,repeatDelay:i,repeatType:a,name:s,motionValue:c,element:l,...u},f=l?.KeyframeResolver||Xn;this.keyframeResolver=new f(o,(e,t,n)=>this.onKeyframesResolved(e,t,d,!n),s,c,l),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(e,t,n,r){this.keyframeResolver=void 0;let{name:i,type:a,velocity:o,delay:s,isHandoff:c,onUpdate:l}=n;this.resolvedAt=Ne.now();let u=!0;_r(e,i,a,o)||(u=!1,(w.instantAnimations||!s)&&l?.(_n(e,n,t)),e[0]=e[e.length-1],vr(n),n.repeat=0);let d={startTime:r?this.resolvedAt&&this.resolvedAt-this.createdAt>Tr?this.resolvedAt:this.createdAt:void 0,finalKeyframe:t,...n,keyframes:e},f=u&&!c&&wr(d),p=d.motionValue?.owner?.current,m;if(f)try{m=new mr({...d,element:p})}catch{m=new Sn(d)}else m=new Sn(d);m.finished.then(()=>{this.notifyFinished()}).catch(k),this.pendingTimeline&&=(this.stopTimeline=m.attachTimeline(this.pendingTimeline),void 0),this._animation=m}get finished(){return this._animation?this.animation.finished:this._finished}then(e,t){return this.finished.finally(e).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),Yn()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(e){this.animation.time=e}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(e){this.animation.speed=e}get startTime(){return this.animation.startTime}attachTimeline(e){return this._animation?this.stopTimeline=this.animation.attachTimeline(e):this.pendingTimeline=e,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}};function Dr(e,t,n,r=0,i=1){let a=Array.from(e).sort((e,t)=>e.sortNodePosition(t)).indexOf(t),o=e.size,s=(o-1)*r;return typeof n==`function`?n(a,o):i===1?a*r:s-a*r}var Or=30,kr=e=>!isNaN(parseFloat(e)),Ar={current:void 0},jr=class{constructor(e,t={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=e=>{let t=Ne.now();if(this.updatedAt!==t&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(e),this.current!==this.prev&&(this.events.change?.notify(this.current),this.dependents))for(let e of this.dependents)e.dirty()},this.hasAnimated=!1,this.setCurrent(e),this.owner=t.owner}setCurrent(e){this.current=e,this.updatedAt=Ne.now(),this.canTrackVelocity===null&&e!==void 0&&(this.canTrackVelocity=kr(this.current))}setPrevFrameValue(e=this.current){this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt}onChange(e){return this.on(`change`,e)}on(e,t){this.events[e]||(this.events[e]=new M);let n=this.events[e].add(t);return e===`change`?()=>{n(),De.read(()=>{this.events.change.getSize()||this.stop()})}:n}clearListeners(){for(let e in this.events)this.events[e].clear()}attach(e,t){this.passiveEffect=e,this.stopPassiveEffect=t}set(e){this.passiveEffect?this.passiveEffect(e,this.updateAndNotify):this.updateAndNotify(e)}setWithVelocity(e,t,n){this.set(t),this.prev=void 0,this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt-n}jump(e,t=!0){this.updateAndNotify(e),this.prev=e,this.prevUpdatedAt=this.prevFrameValue=void 0,t&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.events.change?.notify(this.current)}addDependent(e){this.dependents||=new Set,this.dependents.add(e)}removeDependent(e){this.dependents&&this.dependents.delete(e)}get(){return Ar.current&&Ar.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){let e=Ne.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||e-this.updatedAt>Or)return 0;let t=Math.min(this.updatedAt-this.prevUpdatedAt,Or);return F(parseFloat(this.current)-parseFloat(this.prevFrameValue),t)}start(e){return this.stop(),new Promise(t=>{this.hasAnimated=!0,this.animation=e(t),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}};function Mr(e,t){return new jr(e,t)}function Nr(e,t){if(e?.inherit&&t){let{inherit:n,...r}=e;return{...t,...r}}return e}function Pr(e,t){let n=e?.[t]??e?.default??e;return n===e?n:Nr(n,e)}var Fr={type:`spring`,stiffness:500,damping:25,restSpeed:10},Ir=e=>({type:`spring`,stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),Lr={type:`keyframes`,duration:.8},Rr={type:`keyframes`,ease:[.25,.1,.35,1],duration:.3},zr=(e,{keyframes:t})=>t.length>2?Lr:Ln.has(e)?e.startsWith(`scale`)?Ir(t[1]):Fr:Rr,Br=new Set([`when`,`delay`,`delayChildren`,`staggerChildren`,`staggerDirection`,`repeat`,`repeatType`,`repeatDelay`,`from`,`elapsed`]);function Vr(e){for(let t in e)if(!Br.has(t))return!0;return!1}var Hr=(e,t,n,r={},i,a)=>o=>{let s=Pr(r,e)||{},c=s.delay||r.delay||0,{elapsed:l=0}=r;l-=N(c);let u={keyframes:Array.isArray(n)?n:[null,n],ease:`easeOut`,velocity:t.getVelocity(),...s,delay:-l,onUpdate:e=>{t.set(e),s.onUpdate&&s.onUpdate(e)},onComplete:()=>{o(),s.onComplete&&s.onComplete()},name:e,motionValue:t,element:a?void 0:i};Vr(s)||Object.assign(u,zr(e,u)),u.duration&&=N(u.duration),u.repeatDelay&&=N(u.repeatDelay),u.from!==void 0&&(u.keyframes[0]=u.from);let d=!1;if((u.type===!1||u.duration===0&&!u.repeatDelay)&&(vr(u),u.delay===0&&(d=!0)),(w.instantAnimations||w.skipAnimations||i?.shouldSkipAnimations||s.skipAnimations)&&(d=!0,vr(u),u.delay=0),u.allowFlatten=!s.type&&!s.ease,d&&!a&&t.get()!==void 0){let e=_n(u.keyframes,s);if(e!==void 0){De.update(()=>{u.onUpdate(e),u.onComplete()});return}}return s.isSync?new Sn(u):new Er(u)},Ur=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function Wr(e){let t=Ur.exec(e);if(!t)return[,];let[,n,r,i]=t;return[`--${n??r}`,i]}function Gr(e,t,n=1){`${e}`;let[r,i]=Wr(e);if(!r)return;let a=window.getComputedStyle(t).getPropertyValue(r);if(a){let e=a.trim();return T(e)?parseFloat(e):e}return Re(i)?Gr(i,t,n+1):i}function Kr(e){let t=[{},{}];return e?.values.forEach((e,n)=>{t[0][n]=e.get(),t[1][n]=e.getVelocity()}),t}function qr(e,t,n,r){if(typeof t==`function`){let[i,a]=Kr(r);t=t(n===void 0?e.custom:n,i,a)}if(typeof t==`string`&&(t=e.variants&&e.variants[t]),typeof t==`function`){let[i,a]=Kr(r);t=t(n===void 0?e.custom:n,i,a)}return t}function Jr(e,t,n){let r=e.getProps();return qr(r,t,n===void 0?r.custom:n,e)}var Yr=new Set([`width`,`height`,`top`,`left`,`right`,`bottom`,...In]),Xr=e=>Array.isArray(e);function Zr(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,Mr(n))}function Qr(e){return Xr(e)?e[e.length-1]||0:e}function $r(e,t){let{transitionEnd:n={},transition:r={},...i}=Jr(e,t)||{};i={...i,...n};for(let t in i)Zr(e,t,Qr(i[t]))}var ei=e=>!!(e&&e.getVelocity);function ti(e){return!!(ei(e)&&e.add)}function ni(e,t){let n=e.getValue(`willChange`);if(ti(n))return n.add(t);if(!n&&w.WillChange){let n=new w.WillChange(`auto`);e.addValue(`willChange`,n),n.add(t)}}function ri(e){return e.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`)}var ii=`data-`+ri(`framerAppearId`);function ai(e){return e.props[ii]}function oi({protectedKeys:e,needsAnimating:t},n){let r=e.hasOwnProperty(n)&&t[n]!==!0;return t[n]=!1,r}function si(e,t,{delay:n=0,transitionOverride:r,type:i}={}){let{transition:a,transitionEnd:o,...s}=t,c=e.getDefaultTransition();a=a?Nr(a,c):c;let l=a?.reduceMotion,u=a?.skipAnimations;r&&(a=r);let d=[],f=i&&e.animationState&&e.animationState.getState()[i],p=a?.path;p&&p.animateVisualElement(e,s,a,n,d);for(let t in s){let r=e.getValue(t,e.latestValues[t]??null),i=s[t];if(i===void 0||f&&oi(f,t))continue;let o={delay:n,...Pr(a||{},t)};u&&(o.skipAnimations=!0);let c=r.get();if(c!==void 0&&!r.isAnimating()&&!Array.isArray(i)&&i===c&&!o.velocity){De.update(()=>r.set(i));continue}let p=!1;if(window.MotionHandoffAnimation){let n=ai(e);if(n){let e=window.MotionHandoffAnimation(n,t,De);e!==null&&(o.startTime=e,p=!0)}}ni(e,t);let m=l??e.shouldReduceMotion;r.start(Hr(t,r,i,m&&Yr.has(t)?{type:!1}:o,e,p));let h=r.animation;h&&d.push(h)}if(o){let t=()=>De.update(()=>{o&&$r(e,o)});d.length?Promise.all(d).then(t):t()}return d}function ci(e,t,n={}){let r=Jr(e,t,n.type===`exit`?e.presenceContext?.custom:void 0),{transition:i=e.getDefaultTransition()||{}}=r||{};n.transitionOverride&&(i=n.transitionOverride);let a=r?()=>Promise.all(si(e,r,n)):()=>Promise.resolve(),o=e.variantChildren&&e.variantChildren.size?(r=0)=>{let{delayChildren:a=0,staggerChildren:o,staggerDirection:s}=i;return li(e,t,r,a,o,s,n)}:()=>Promise.resolve(),{when:s}=i;if(s){let[e,t]=s===`beforeChildren`?[a,o]:[o,a];return e().then(()=>t())}else return Promise.all([a(),o(n.delay)])}function li(e,t,n=0,r=0,i=0,a=1,o){let s=[];for(let c of e.variantChildren)c.notify(`AnimationStart`,t),s.push(ci(c,t,{...o,delay:n+(typeof r==`function`?0:r)+Dr(e.variantChildren,c,r,i,a)}).then(()=>c.notify(`AnimationComplete`,t)));return Promise.all(s)}function ui(e,t,n={}){e.notify(`AnimationStart`,t);let r;if(Array.isArray(t)){let i=t.map(t=>ci(e,t,n));r=Promise.all(i)}else if(typeof t==`string`)r=ci(e,t,n);else{let i=typeof t==`function`?Jr(e,t,n.custom):t;r=Promise.all(si(e,i,n))}return r.then(()=>{e.notify(`AnimationComplete`,t)})}var di={test:e=>e===`auto`,parse:e=>e},fi=e=>t=>t.test(e),pi=[Ve,I,rt,nt,at,it,di],mi=e=>pi.find(fi(e));function hi(e){return typeof e==`number`?e===0:e===null?!0:e===`none`||e===`0`||D(e)}var gi=new Set([`brightness`,`contrast`,`saturate`,`opacity`]);function _i(e){let[t,n]=e.slice(0,-1).split(`(`);if(t===`drop-shadow`)return e;let[r]=n.match(Ge)||[];if(!r)return e;let i=n.replace(r,``),a=+!!gi.has(t);return r!==n&&(a*=100),t+`(`+a+i+`)`}var vi=/\b([a-z-]*)\(.*?\)/gu,yi={...wt,getAnimatableNone:e=>{let t=e.match(vi);return t?t.map(_i).join(` `):e}},bi={...wt,getAnimatableNone:e=>{let t=wt.parse(e);return wt.createTransformer(e)(t.map(e=>typeof e==`number`?0:typeof e==`object`?{...e,alpha:1}:e))}},xi={...Ve,transform:Math.round},Si={borderWidth:I,borderTopWidth:I,borderRightWidth:I,borderBottomWidth:I,borderLeftWidth:I,borderRadius:I,borderTopLeftRadius:I,borderTopRightRadius:I,borderBottomRightRadius:I,borderBottomLeftRadius:I,width:I,maxWidth:I,height:I,maxHeight:I,top:I,right:I,bottom:I,left:I,inset:I,insetBlock:I,insetBlockStart:I,insetBlockEnd:I,insetInline:I,insetInlineStart:I,insetInlineEnd:I,padding:I,paddingTop:I,paddingRight:I,paddingBottom:I,paddingLeft:I,paddingBlock:I,paddingBlockStart:I,paddingBlockEnd:I,paddingInline:I,paddingInlineStart:I,paddingInlineEnd:I,margin:I,marginTop:I,marginRight:I,marginBottom:I,marginLeft:I,marginBlock:I,marginBlockStart:I,marginBlockEnd:I,marginInline:I,marginInlineStart:I,marginInlineEnd:I,fontSize:I,backgroundPositionX:I,backgroundPositionY:I,rotate:nt,pathRotation:nt,rotateX:nt,rotateY:nt,rotateZ:nt,scale:Ue,scaleX:Ue,scaleY:Ue,scaleZ:Ue,skew:nt,skewX:nt,skewY:nt,distance:I,translateX:I,translateY:I,translateZ:I,x:I,y:I,z:I,perspective:I,transformPerspective:I,opacity:He,originX:ot,originY:ot,originZ:I,zIndex:xi,fillOpacity:He,strokeOpacity:He,numOctaves:xi},Ci={...Si,color:ct,backgroundColor:ct,outlineColor:ct,fill:ct,stroke:ct,borderColor:ct,borderTopColor:ct,borderRightColor:ct,borderBottomColor:ct,borderLeftColor:ct,filter:yi,WebkitFilter:yi,mask:bi,WebkitMask:bi},wi=e=>Ci[e],Ti=new Set([yi,bi]);function Ei(e,t){let n=wi(e);return Ti.has(n)||(n=wt),n.getAnimatableNone?n.getAnimatableNone(t):void 0}var Di=new Set([`auto`,`none`,`0`]);function Oi(e,t,n){let r=0,i;for(;r{e.getValue(t).set(n)}),this.resolveNoneKeyframes()}};function Ai(e,t,n){if(e==null)return[];if(e instanceof EventTarget)return[e];if(typeof e==`string`){let r=document;t&&(r=t.current);let i=n?.[e]??r.querySelectorAll(e);return i?Array.from(i):[]}return Array.from(e).filter(e=>e!=null)}var ji=(e,t)=>t&&typeof e==`number`?t.transform(e):e;function Mi(e){return E(e)&&`offsetHeight`in e&&!(`ownerSVGElement`in e)}var{schedule:Ni,cancel:Pi}=Ee(queueMicrotask,!1),L={x:!1,y:!1};function Fi(){return L.x||L.y}function Ii(e){return e===`x`||e===`y`?L[e]?null:(L[e]=!0,()=>{L[e]=!1}):L.x||L.y?null:(L.x=L.y=!0,()=>{L.x=L.y=!1})}function Li(e,t){let n=Ai(e),r=new AbortController;return[n,{passive:!0,...t,signal:r.signal},()=>r.abort()]}function Ri(e){return!(e.pointerType===`touch`||Fi())}function zi(e,t,n={}){let[r,i,a]=Li(e,n);return r.forEach(e=>{let n=!1,r=!1,a,o=()=>{e.removeEventListener(`pointerleave`,u)},s=e=>{a&&=(a(e),void 0),o()},c=e=>{n=!1,window.removeEventListener(`pointerup`,c),window.removeEventListener(`pointercancel`,c),r&&(r=!1,s(e))},l=()=>{n=!0,window.addEventListener(`pointerup`,c,i),window.addEventListener(`pointercancel`,c,i)},u=e=>{if(e.pointerType!==`touch`){if(n){r=!0;return}s(e)}};e.addEventListener(`pointerenter`,n=>{if(!Ri(n))return;r=!1;let o=t(e,n);typeof o==`function`&&(a=o,e.addEventListener(`pointerleave`,u,i))},i),e.addEventListener(`pointerdown`,l,i)}),a}var Bi=(e,t)=>t?e===t?!0:Bi(e,t.parentElement):!1,Vi=e=>e.pointerType===`mouse`?typeof e.button!=`number`||e.button<=0:e.isPrimary!==!1,Hi=new Set([`BUTTON`,`INPUT`,`SELECT`,`TEXTAREA`,`A`]);function Ui(e){return Hi.has(e.tagName)||e.isContentEditable===!0}var Wi=new Set([`INPUT`,`SELECT`,`TEXTAREA`]);function Gi(e){return Wi.has(e.tagName)||e.isContentEditable===!0}var Ki=new WeakSet;function qi(e){return t=>{t.key===`Enter`&&e(t)}}function Ji(e,t){e.dispatchEvent(new PointerEvent(`pointer`+t,{isPrimary:!0,bubbles:!0}))}var Yi=(e,t)=>{let n=e.currentTarget;if(!n)return;let r=qi(()=>{if(Ki.has(n))return;Ji(n,`down`);let e=qi(()=>{Ji(n,`up`)});n.addEventListener(`keyup`,e,t),n.addEventListener(`blur`,()=>Ji(n,`cancel`),t)});n.addEventListener(`keydown`,r,t),n.addEventListener(`blur`,()=>n.removeEventListener(`keydown`,r),t)};function Xi(e){return Vi(e)&&!Fi()}var Zi=new WeakSet;function Qi(e,t,n={}){let[r,i,a]=Li(e,n),o=e=>{let r=e.currentTarget;if(!Xi(e)||Zi.has(e))return;Ki.add(r),n.stopPropagation&&Zi.add(e);let a=t(r,e),o=(e,t)=>{window.removeEventListener(`pointerup`,s),window.removeEventListener(`pointercancel`,c),Ki.has(r)&&Ki.delete(r),Xi(e)&&typeof a==`function`&&a(e,{success:t})},s=e=>{o(e,r===window||r===document||n.useGlobalTarget||Bi(r,e.target))},c=e=>{o(e,!1)};window.addEventListener(`pointerup`,s,i),window.addEventListener(`pointercancel`,c,i)};return r.forEach(e=>{(n.useGlobalTarget?window:e).addEventListener(`pointerdown`,o,i),Mi(e)&&(e.addEventListener(`focus`,e=>Yi(e,i)),!Ui(e)&&!e.hasAttribute(`tabindex`)&&(e.tabIndex=0))}),a}function $i(e){return E(e)&&`ownerSVGElement`in e}var ea=new WeakMap,ta,na=(e,t,n)=>(r,i)=>i&&i[0]?i[0][e+`Size`]:$i(r)&&`getBBox`in r?r.getBBox()[t]:r[n],ra=na(`inline`,`width`,`offsetWidth`),ia=na(`block`,`height`,`offsetHeight`);function aa({target:e,borderBoxSize:t}){ea.get(e)?.forEach(n=>{n(e,{get width(){return ra(e,t)},get height(){return ia(e,t)}})})}function oa(e){e.forEach(aa)}function sa(){typeof ResizeObserver>`u`||(ta=new ResizeObserver(oa))}function ca(e,t){ta||sa();let n=Ai(e);return n.forEach(e=>{let n=ea.get(e);n||(n=new Set,ea.set(e,n)),n.add(t),ta?.observe(e)}),()=>{n.forEach(e=>{let n=ea.get(e);n?.delete(t),n?.size||ta?.unobserve(e)})}}var la=new Set,ua;function da(){ua=()=>{let e={get width(){return window.innerWidth},get height(){return window.innerHeight}};la.forEach(t=>t(e))},window.addEventListener(`resize`,ua)}function fa(e){return la.add(e),ua||da(),()=>{la.delete(e),!la.size&&typeof ua==`function`&&(window.removeEventListener(`resize`,ua),ua=void 0)}}function pa(e,t){return typeof e==`function`?fa(e):ca(e,t)}function ma(e){return $i(e)&&e.tagName===`svg`}var ha=[...pi,ct,wt],ga=e=>ha.find(fi(e)),_a=()=>({translate:0,scale:1,origin:0,originPoint:0}),va=()=>({x:_a(),y:_a()}),ya=()=>({min:0,max:0}),ba=()=>({x:ya(),y:ya()}),xa=new WeakMap;function Sa(e){return typeof e==`object`&&!!e&&typeof e.start==`function`}function Ca(e){return typeof e==`string`||Array.isArray(e)}var wa=[`animate`,`whileInView`,`whileFocus`,`whileHover`,`whileTap`,`whileDrag`,`exit`],Ta=[`initial`,...wa];function Ea(e){return Sa(e.animate)||Ta.some(t=>Ca(e[t]))}function Da(e){return!!(Ea(e)||e.variants)}function Oa(e,t,n){for(let r in t){let i=t[r],a=n[r];if(ei(i))e.addValue(r,i);else if(ei(a))e.addValue(r,Mr(i,{owner:e}));else if(a!==i)if(e.hasValue(r)){let t=e.getValue(r);t.liveStyle===!0?t.jump(i):t.hasAnimated||t.set(i)}else{let t=e.getStaticValue(r);e.addValue(r,Mr(t===void 0?i:t,{owner:e}))}}for(let r in n)t[r]===void 0&&e.removeValue(r);return t}var ka={current:null},Aa={current:!1},ja=typeof window<`u`;function Ma(){if(Aa.current=!0,ja)if(window.matchMedia){let e=window.matchMedia(`(prefers-reduced-motion)`),t=()=>ka.current=e.matches;e.addEventListener(`change`,t),t()}else ka.current=!1}var Na=[`AnimationStart`,`AnimationComplete`,`Update`,`BeforeLayoutMeasure`,`LayoutMeasure`,`LayoutAnimationStart`,`LayoutAnimationComplete`],Pa={};function Fa(e){Pa=e}function Ia(){return Pa}var La=class{scrapeMotionValuesFromProps(e,t,n){return{}}constructor({parent:e,props:t,presenceContext:n,reducedMotionConfig:r,skipAnimations:i,blockInitialAnimation:a,visualState:o},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=Xn,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify(`Update`,this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{let e=Ne.now();this.renderScheduledAtthis.bindToMotionValue(t,e)),this.reducedMotionConfig===`never`?this.shouldReduceMotion=!1:this.reducedMotionConfig===`always`?this.shouldReduceMotion=!0:(Aa.current||Ma(),this.shouldReduceMotion=ka.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,this.parent?.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){this.projection&&this.projection.unmount(),Oe(this.notifyUpdate),Oe(this.render),this.valueSubscriptions.forEach(e=>e()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(let e in this.events)this.events[e].clear();for(let e in this.features){let t=this.features[e];t&&(t.unmount(),t.isMounted=!1)}this.current=null}addChild(e){this.children.add(e),this.enteringChildren??=new Set,this.enteringChildren.add(e)}removeChild(e){this.children.delete(e),this.enteringChildren&&this.enteringChildren.delete(e)}bindToMotionValue(e,t){if(this.valueSubscriptions.has(e)&&this.valueSubscriptions.get(e)(),t.accelerate&&yr.has(e)&&this.current instanceof HTMLElement){let{factory:n,keyframes:r,times:i,ease:a,duration:o}=t.accelerate,s=new lr({element:this.current,name:e,keyframes:r,times:i,ease:a,duration:N(o)}),c=n(s);this.valueSubscriptions.set(e,()=>{c(),s.cancel()});return}let n=Ln.has(e);n&&this.onBindTransform&&this.onBindTransform();let r=t.on(`change`,t=>{this.latestValues[e]=t,this.props.onUpdate&&De.preRender(this.notifyUpdate),n&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()}),i;typeof window<`u`&&window.MotionCheckAppearSync&&(i=window.MotionCheckAppearSync(this,e,t)),this.valueSubscriptions.set(e,()=>{r(),i&&i()})}sortNodePosition(e){return!this.current||!this.sortInstanceNodePosition||this.type!==e.type?0:this.sortInstanceNodePosition(this.current,e.current)}updateFeatures(){let e=`animation`;for(e in Pa){let t=Pa[e];if(!t)continue;let{isEnabled:n,Feature:r}=t;if(!this.features[e]&&r&&n(this.props)&&(this.features[e]=new r(this)),this.features[e]){let t=this.features[e];t.isMounted?t.update():(t.mount(),t.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):ba()}getStaticValue(e){return this.latestValues[e]}setStaticValue(e,t){this.latestValues[e]=t}update(e,t){(e.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=e,this.prevPresenceContext=this.presenceContext,this.presenceContext=t;for(let t=0;tt.variantChildren.delete(e)}addValue(e,t){let n=this.values.get(e);t!==n&&(n&&this.removeValue(e),this.bindToMotionValue(e,t),this.values.set(e,t),this.latestValues[e]=t.get())}removeValue(e){this.values.delete(e);let t=this.valueSubscriptions.get(e);t&&(t(),this.valueSubscriptions.delete(e)),delete this.latestValues[e],this.removeValueFromRenderState(e,this.renderState)}hasValue(e){return this.values.has(e)}getValue(e,t){if(this.props.values&&this.props.values[e])return this.props.values[e];let n=this.values.get(e);return n===void 0&&t!==void 0&&(n=Mr(t===null?void 0:t,{owner:this}),this.addValue(e,n)),n}readValue(e,t){let n=this.latestValues[e]!==void 0||!this.current?this.latestValues[e]:this.getBaseTargetFromProps(this.props,e)??this.readValueFromInstance(this.current,e,this.options);return n!=null&&(typeof n==`string`&&(T(n)||D(n))?n=parseFloat(n):!ga(n)&&wt.test(t)&&(n=Ei(e,t)),this.setBaseTarget(e,ei(n)?n.get():n)),ei(n)?n.get():n}setBaseTarget(e,t){this.baseTarget[e]=t}getBaseTarget(e){let{initial:t}=this.props,n;if(typeof t==`string`||typeof t==`object`){let r=qr(this.props,t,this.presenceContext?.custom);r&&(n=r[e])}if(t&&n!==void 0)return n;let r=this.getBaseTargetFromProps(this.props,e);return r!==void 0&&!ei(r)?r:this.initialValues[e]!==void 0&&n===void 0?void 0:this.baseTarget[e]}on(e,t){return this.events[e]||(this.events[e]=new M),this.events[e].add(t)}notify(e,...t){this.events[e]&&this.events[e].notify(...t)}scheduleRenderMicrotask(){Ni.render(this.render)}},Ra=class extends La{constructor(){super(...arguments),this.KeyframeResolver=ki}sortInstanceNodePosition(e,t){return e.compareDocumentPosition(t)&2?1:-1}getBaseTargetFromProps(e,t){let n=e.style;return n?n[t]:void 0}removeValueFromRenderState(e,{vars:t,style:n}){delete t[e],delete n[e]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);let{children:e}=this.props;ei(e)&&(this.childSubscription=e.on(`change`,e=>{this.current&&(this.current.textContent=`${e}`)}))}},za=class{constructor(e){this.isMounted=!1,this.node=e}update(){}};function Ba({top:e,left:t,right:n,bottom:r}){return{x:{min:t,max:n},y:{min:e,max:r}}}function Va({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function Ha(e,t){if(!t)return e;let n=t({x:e.left,y:e.top}),r=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}function Ua(e){return e===void 0||e===1}function Wa({scale:e,scaleX:t,scaleY:n}){return!Ua(e)||!Ua(t)||!Ua(n)}function Ga(e){return Wa(e)||Ka(e)||e.z||e.rotate||e.rotateX||e.rotateY||e.skewX||e.skewY}function Ka(e){return qa(e.x)||qa(e.y)}function qa(e){return e&&e!==`0%`}function Ja(e,t,n){return n+t*(e-n)}function Ya(e,t,n,r,i){return i!==void 0&&(e=Ja(e,i,r)),Ja(e,n,r)+t}function Xa(e,t=0,n=1,r,i){e.min=Ya(e.min,t,n,r,i),e.max=Ya(e.max,t,n,r,i)}function Za(e,{x:t,y:n}){Xa(e.x,t.translate,t.scale,t.originPoint),Xa(e.y,n.translate,n.scale,n.originPoint)}var Qa=.999999999999,$a=1.0000000000001;function eo(e,t,n,r=!1){let i=n.length;if(!i)return;t.x=t.y=1;let a,o;for(let s=0;sQa&&(t.x=1),t.y<$a&&t.y>Qa&&(t.y=1)}function to(e,t){e.min+=t,e.max+=t}function no(e,t,n,r,i=.5){Xa(e,t,n,Ot(e.min,e.max,i),r)}function ro(e,t){return typeof e==`string`?parseFloat(e)/100*(t.max-t.min):e}function io(e,t,n){let r=n??e;no(e.x,ro(t.x,r.x),t.scaleX,t.scale,t.originX),no(e.y,ro(t.y,r.y),t.scaleY,t.scale,t.originY)}function ao(e,t){return Ba(Ha(e.getBoundingClientRect(),t))}function oo(e,t,n){let r=ao(e,n),{scroll:i}=t;return i&&(to(r.x,i.offset.x),to(r.y,i.offset.y)),r}var so={x:`translateX`,y:`translateY`,z:`translateZ`,transformPerspective:`perspective`},co=In.length;function lo(e,t,n){let r=``,i=!0;for(let a=0;a{if(!t.target)return e;if(typeof e==`string`)if(I.test(e))e=parseFloat(e);else return e;return`${po(e,t.target.x)}% ${po(e,t.target.y)}%`}},mo={correct:(e,{treeScale:t,projectionDelta:n})=>{let r=e,i=wt.parse(e);if(i.length>5)return r;let a=wt.createTransformer(e),o=typeof i[0]==`number`?0:1,s=n.x.scale*t.x,c=n.y.scale*t.y;i[0+o]/=s,i[1+o]/=c;let l=Ot(s,c,.5);return typeof i[2+o]==`number`&&(i[2+o]/=l),typeof i[3+o]==`number`&&(i[3+o]/=l),a(i)}},ho={borderRadius:{...R,applyTo:[`borderTopLeftRadius`,`borderTopRightRadius`,`borderBottomLeftRadius`,`borderBottomRightRadius`]},borderTopLeftRadius:R,borderTopRightRadius:R,borderBottomLeftRadius:R,borderBottomRightRadius:R,boxShadow:mo};function go(e,{layout:t,layoutId:n}){return Ln.has(e)||e.startsWith(`origin`)||(t||n!==void 0)&&(!!ho[e]||e===`opacity`)}function _o(e,t,n){let r=e.style,i=t?.style,a={};if(!r)return a;for(let t in r)(ei(r[t])||i&&ei(i[t])||go(t,e)||n?.getValue(t)?.liveStyle!==void 0)&&(a[t]=r[t]);return a}function vo(e){return window.getComputedStyle(e)}var yo=class extends Ra{constructor(){super(...arguments),this.type=`html`,this.renderInstance=fo}readValueFromInstance(e,t){if(Ln.has(t))return this.projection?.isProjecting?Mn(t):Pn(e,t);{let n=vo(e),r=(Ie(t)?n.getPropertyValue(t):n[t])||0;return typeof r==`string`?r.trim():r}}measureInstanceViewportBox(e,{transformPagePoint:t}){return ao(e,t)}build(e,t,n){uo(e,t,n.transformTemplate)}scrapeMotionValuesFromProps(e,t,n){return _o(e,t,n)}},bo={offset:`stroke-dashoffset`,array:`stroke-dasharray`},xo={offset:`strokeDashoffset`,array:`strokeDasharray`};function So(e,t,n=1,r=0,i=!0){e.pathLength=1;let a=i?bo:xo;e[a.offset]=`${-r}`,e[a.array]=`${t} ${n}`}var Co=[`offsetDistance`,`offsetPath`,`offsetRotate`,`offsetAnchor`];function wo(e,{attrX:t,attrY:n,attrScale:r,pathLength:i,pathSpacing:a=1,pathOffset:o=0,...s},c,l,u){if(uo(e,s,l),c){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};let{attrs:d,style:f}=e;d.transform&&(f.transform=d.transform,delete d.transform),(f.transform||d.transformOrigin)&&(f.transformOrigin=d.transformOrigin??`50% 50%`,delete d.transformOrigin),f.transform&&(f.transformBox=u?.transformBox??`fill-box`,delete d.transformBox);for(let e of Co)d[e]!==void 0&&(f[e]=d[e],delete d[e]);t!==void 0&&(d.x=t),n!==void 0&&(d.y=n),r!==void 0&&(d.scale=r),i!==void 0&&So(d,i,a,o,!1)}var To=new Set([`baseFrequency`,`diffuseConstant`,`kernelMatrix`,`kernelUnitLength`,`keySplines`,`keyTimes`,`limitingConeAngle`,`markerHeight`,`markerWidth`,`numOctaves`,`targetX`,`targetY`,`surfaceScale`,`specularConstant`,`specularExponent`,`stdDeviation`,`tableValues`,`viewBox`,`gradientTransform`,`pathLength`,`startOffset`,`textLength`,`lengthAdjust`]),Eo=e=>typeof e==`string`&&e.toLowerCase()===`svg`;function Do(e,t,n,r){fo(e,t,void 0,r);for(let n in t.attrs)e.setAttribute(To.has(n)?n:ri(n),t.attrs[n])}function Oo(e,t,n){let r=_o(e,t,n);for(let n in e)if(ei(e[n])||ei(t[n])){let t=In.indexOf(n)===-1?n:`attr`+n.charAt(0).toUpperCase()+n.substring(1);r[t]=e[n]}return r}var ko=class extends Ra{constructor(){super(...arguments),this.type=`svg`,this.isSVGTag=!1,this.measureInstanceViewportBox=ba}getBaseTargetFromProps(e,t){return e[t]}readValueFromInstance(e,t){if(Ln.has(t)){let e=wi(t);return e&&e.default||0}return t=To.has(t)?t:ri(t),e.getAttribute(t)}scrapeMotionValuesFromProps(e,t,n){return Oo(e,t,n)}build(e,t,n){wo(e,t,this.isSVGTag,n.transformTemplate,n.style)}renderInstance(e,t,n,r){Do(e,t,n,r)}mount(e){this.isSVGTag=Eo(e.tagName),super.mount(e)}},Ao=Ta.length;function jo(e){if(!e)return;if(!e.isControllingVariants){let t=e.parent&&jo(e.parent)||{};return e.props.initial!==void 0&&(t.initial=e.props.initial),t}let t={};for(let n=0;nPromise.all(t.map(({animation:t,options:n})=>ui(e,t,n)))}function Io(e){let t=Fo(e),n=zo(),r=!0,i=!1,a=t=>(n,r)=>{let i=Jr(e,r,t===`exit`?e.presenceContext?.custom:void 0);if(i){let{transition:e,transitionEnd:t,...r}=i;n={...n,...r,...t}}return n};function o(n){t=n(e)}function s(o){let{props:s}=e,c=jo(e.parent)||{},l=[],u=new Set,d={},f=1/0;for(let t=0;tf&&g,x=!1,S=Array.isArray(h)?h:[h],C=S.reduce(a(p),{});_===!1&&(C={});let{prevResolvedValues:w={}}=m,T={...w,...C},E=t=>{b=!0,u.has(t)&&(x=!0,u.delete(t)),m.needsAnimating[t]=!0;let n=e.getValue(t);n&&(n.liveStyle=!1)};for(let e in T){let t=C[e],n=w[e];if(d.hasOwnProperty(e))continue;let r=!1;r=Xr(t)&&Xr(n)?!Mo(t,n)||y:t!==n,r?t==null?u.add(e):E(e):t!==void 0&&u.has(e)?E(e):m.protectedKeys[e]=!0}m.prevProp=h,m.prevResolvedValues=C,m.isActive&&(d={...d,...C}),(r||i)&&e.blockInitialAnimation&&(b=!1);let D=v&&y;b&&(!D||x)&&l.push(...S.map(t=>{let n={type:p};if(typeof t==`string`&&(r||i)&&!D&&e.manuallyAnimateOnMount&&e.parent){let{parent:r}=e,i=Jr(r,t);if(r.enteringChildren&&i){let{delayChildren:t}=i.transition||{};n.delay=Dr(r.enteringChildren,e,t)}}return{animation:t,options:n}}))}if(u.size){let t={};if(typeof s.initial!=`boolean`){let n=Jr(e,Array.isArray(s.initial)?s.initial[0]:s.initial);n&&n.transition&&(t.transition=n.transition)}u.forEach(n=>{let r=e.getBaseTarget(n),i=e.getValue(n);i&&(i.liveStyle=!0),t[n]=r??null}),l.push({animation:t})}let p=!!l.length;return r&&(s.initial===!1||s.initial===s.animate)&&!e.manuallyAnimateOnMount&&(p=!1),r=!1,i=!1,p?t(l):Promise.resolve()}function c(t,r){if(n[t].isActive===r)return Promise.resolve();e.variantChildren?.forEach(e=>e.animationState?.setActive(t,r)),n[t].isActive=r;let i=s(t);for(let e in n)n[e].protectedKeys={};return i}return{animateChanges:s,setActive:c,setAnimateFunction:o,getState:()=>n,reset:()=>{n=zo(),i=!0}}}function Lo(e,t){return typeof t==`string`?t!==e:Array.isArray(t)?!Mo(t,e):!1}function Ro(e=!1){return{isActive:e,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function zo(){return{animate:Ro(!0),whileInView:Ro(),whileHover:Ro(),whileTap:Ro(),whileDrag:Ro(),whileFocus:Ro(),exit:Ro()}}function Bo(e,t){e.min=t.min,e.max=t.max}function Vo(e,t){Bo(e.x,t.x),Bo(e.y,t.y)}function Ho(e,t){e.translate=t.translate,e.scale=t.scale,e.originPoint=t.originPoint,e.origin=t.origin}var Uo=.9999,Wo=1.0001,Go=-.01,Ko=.01;function qo(e){return e.max-e.min}function Jo(e,t,n){return Math.abs(e-t)<=n}function Yo(e,t,n,r=.5){e.origin=r,e.originPoint=Ot(t.min,t.max,e.origin),e.scale=qo(n)/qo(t),e.translate=Ot(n.min,n.max,e.origin)-e.originPoint,(e.scale>=Uo&&e.scale<=Wo||isNaN(e.scale))&&(e.scale=1),(e.translate>=Go&&e.translate<=Ko||isNaN(e.translate))&&(e.translate=0)}function Xo(e,t,n,r){Yo(e.x,t.x,n.x,r?r.originX:void 0),Yo(e.y,t.y,n.y,r?r.originY:void 0)}function Zo(e,t,n,r=0){e.min=(r?Ot(n.min,n.max,r):n.min)+t.min,e.max=e.min+qo(t)}function Qo(e,t,n,r){Zo(e.x,t.x,n.x,r?.x),Zo(e.y,t.y,n.y,r?.y)}function $o(e,t,n,r=0){let i=r?Ot(n.min,n.max,r):n.min;e.min=t.min-i,e.max=e.min+qo(t)}function es(e,t,n,r){$o(e.x,t.x,n.x,r?.x),$o(e.y,t.y,n.y,r?.y)}function ts(e,t,n,r,i){return e-=t,e=Ja(e,1/n,r),i!==void 0&&(e=Ja(e,1/i,r)),e}function ns(e,t=0,n=1,r=.5,i,a=e,o=e){if(rt.test(t)&&(t=parseFloat(t),t=Ot(o.min,o.max,t/100)-o.min),typeof t!=`number`)return;let s=Ot(a.min,a.max,r);e===a&&(s-=t),e.min=ts(e.min,t,n,s,i),e.max=ts(e.max,t,n,s,i)}function rs(e,t,[n,r,i],a,o){ns(e,t[n],t[r],t[i],t.scale,a,o)}var is=[`x`,`scaleX`,`originX`],as=[`y`,`scaleY`,`originY`];function os(e,t,n,r){rs(e.x,t,is,n?n.x:void 0,r?r.x:void 0),rs(e.y,t,as,n?n.y:void 0,r?r.y:void 0)}function ss(e){return e.translate===0&&e.scale===1}function cs(e){return ss(e.x)&&ss(e.y)}function ls(e,t){return e.min===t.min&&e.max===t.max}function us(e,t){return ls(e.x,t.x)&&ls(e.y,t.y)}function ds(e,t){return Math.round(e.min)===Math.round(t.min)&&Math.round(e.max)===Math.round(t.max)}function fs(e,t){return ds(e.x,t.x)&&ds(e.y,t.y)}function ps(e){return qo(e.x)/qo(e.y)}function ms(e,t){return e.translate===t.translate&&e.scale===t.scale&&e.originPoint===t.originPoint}function hs(e){return[e(`x`),e(`y`)]}function gs(e,t,n){let r=``,i=e.x.translate/t.x,a=e.y.translate/t.y,o=n?.z||0;if((i||a||o)&&(r=`translate3d(${i}px, ${a}px, ${o}px) `),(t.x!==1||t.y!==1)&&(r+=`scale(${1/t.x}, ${1/t.y}) `),n){let{transformPerspective:e,rotate:t,pathRotation:i,rotateX:a,rotateY:o,skewX:s,skewY:c}=n;e&&(r=`perspective(${e}px) ${r}`),t&&(r+=`rotate(${t}deg) `),i&&(r+=`rotate(${i}deg) `),a&&(r+=`rotateX(${a}deg) `),o&&(r+=`rotateY(${o}deg) `),s&&(r+=`skewX(${s}deg) `),c&&(r+=`skewY(${c}deg) `)}let s=e.x.scale*t.x,c=e.y.scale*t.y;return(s!==1||c!==1)&&(r+=`scale(${s}, ${c})`),r||`none`}var _s=[`borderTopLeftRadius`,`borderTopRightRadius`,`borderBottomLeftRadius`,`borderBottomRightRadius`],vs=_s.length,ys=e=>typeof e==`string`?parseFloat(e):e,bs=e=>typeof e==`number`||I.test(e);function xs(e,t,n,r,i,a){i?(e.opacity=Ot(0,n.opacity??1,Cs(r)),e.opacityExit=Ot(t.opacity??1,0,ws(r))):a&&(e.opacity=Ot(t.opacity??1,n.opacity??1,r));for(let i=0;irt?1:n(j(e,t,r))}function Es(e,t,n){let r=ei(e)?e:Mr(e);return r.start(Hr(``,r,t,n)),r.animation}function Ds(e,t,n,r={passive:!0}){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n)}var Os=(e,t)=>e.depth-t.depth,ks=class{constructor(){this.children=[],this.isDirty=!1}add(e){x(this.children,e),this.isDirty=!0}remove(e){S(this.children,e),this.isDirty=!0}forEach(e){this.isDirty&&this.children.sort(Os),this.isDirty=!1,this.children.forEach(e)}};function As(e,t){let n=Ne.now(),r=({timestamp:i})=>{let a=i-n;a>=t&&(Oe(r),e(a-t))};return De.setup(r,!0),()=>Oe(r)}function js(e){return ei(e)?e.get():e}var Ms=class{constructor(){this.members=[]}add(e){x(this.members,e);for(let t=this.members.length-1;t>=0;t--){let n=this.members[t];if(n===e||n===this.lead||n===this.prevLead)continue;let r=n.instance;(!r||r.isConnected===!1)&&!n.snapshot&&(S(this.members,n),n.unmount())}e.scheduleRender()}remove(e){if(S(this.members,e),e===this.prevLead&&(this.prevLead=void 0),e===this.lead){let e=this.members[this.members.length-1];e&&this.promote(e)}}relegate(e){for(let t=this.members.indexOf(e)-1;t>=0;t--){let e=this.members[t];if(e.isPresent!==!1&&e.instance?.isConnected!==!1)return this.promote(e),!0}return!1}promote(e,t){let n=this.lead;if(e!==n&&(this.prevLead=n,this.lead=e,e.show(),n)){n.updateSnapshot(),e.scheduleRender();let{layoutDependency:r}=n.options,{layoutDependency:i}=e.options;(r===void 0||r!==i)&&(e.resumeFrom=n,t&&(n.preserveOpacity=!0),n.snapshot&&(e.snapshot=n.snapshot,e.snapshot.latestValues=n.animationValues||n.latestValues),e.root?.isUpdating&&(e.isLayoutDirty=!0)),e.options.crossfade===!1&&n.hide()}}exitAnimationComplete(){this.members.forEach(e=>{e.options.onExitComplete?.(),e.resumingFrom?.options.onExitComplete?.()})}scheduleRender(){this.members.forEach(e=>e.instance&&e.scheduleRender(!1))}removeLeadSnapshot(){this.lead?.snapshot&&(this.lead.snapshot=void 0)}},Ns={hasAnimatedSinceResize:!0,hasEverUpdated:!1},Ps={nodes:0,calculatedTargetDeltas:0,calculatedProjections:0},Fs=[``,`X`,`Y`,`Z`],Is=1e3,Ls=0;function Rs(e,t,n,r){let{latestValues:i}=t;i[e]&&(n[e]=i[e],t.setStaticValue(e,0),r&&(r[e]=0))}function zs(e){if(e.hasCheckedOptimisedAppear=!0,e.root===e)return;let{visualElement:t}=e.options;if(!t)return;let n=ai(t);if(window.MotionHasOptimisedAnimation(n,`transform`)){let{layout:t,layoutId:r}=e.options;window.MotionCancelOptimisedAnimation(n,`transform`,De,!(t||r))}let{parent:r}=e;r&&!r.hasCheckedOptimisedAppear&&zs(r)}function Bs({attachResizeListener:e,defaultParent:t,measureScroll:n,checkIsScrollRoot:r,resetTransform:i}){return class{constructor(e={},n=t?.()){this.id=Ls++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,Ce.value&&(Ps.nodes=Ps.calculatedTargetDeltas=Ps.calculatedProjections=0),this.nodes.forEach(Us),this.nodes.forEach(Qs),this.nodes.forEach($s),this.nodes.forEach(Ws),Ce.addProjectionMetrics&&Ce.addProjectionMetrics(Ps)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=e,this.root=n?n.root||n:this,this.path=n?[...n.path,n]:[],this.parent=n,this.depth=n?n.depth+1:0;for(let e=0;ethis.root.updateBlockedByResize=!1;De.read(()=>{r=window.innerWidth}),e(t,()=>{let e=window.innerWidth;e!==r&&(r=e,this.root.updateBlockedByResize=!0,n&&n(),n=As(i,250),Ns.hasAnimatedSinceResize&&(Ns.hasAnimatedSinceResize=!1,this.nodes.forEach(Zs)))})}n&&this.root.registerSharedNode(n,this),this.options.animate!==!1&&i&&(n||r)&&this.addEventListener(`didUpdate`,({delta:e,hasLayoutChanged:t,hasRelativeLayoutChanged:n,layout:r})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}let a=this.options.transition||i.getDefaultTransition()||oc,{onLayoutAnimationStart:o,onLayoutAnimationComplete:s}=i.getProps(),c=!this.targetLayout||!fs(this.targetLayout,r),l=!t&&n;if(this.options.layoutRoot||this.resumeFrom||l||t&&(c||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);let t={...Pr(a,`layout`),onPlay:o,onComplete:s};(i.shouldReduceMotion||this.options.layoutRoot)&&(t.delay=0,t.type=!1),this.startAnimation(t),this.setAnimationOrigin(e,l,t.path)}else t||Zs(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=r})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);let e=this.getStack();e&&e.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),Oe(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(ec),this.animationId++)}getTransformTemplate(){let{visualElement:e}=this.options;return e&&e.getProps().transformTemplate}willUpdate(e=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&zs(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let e=0;e{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure(),this.snapshot&&!qo(this.snapshot.measuredBox.x)&&!qo(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let e=0;e{let n=t/1e3,r=p?.(n);r?(o.x.translate=r.x,o.x.scale=Ot(e.x.scale,1,n),o.x.origin=e.x.origin,o.x.originPoint=e.x.originPoint,o.y.translate=r.y,o.y.scale=Ot(e.y.scale,1,n),o.y.origin=e.y.origin,o.y.originPoint=e.y.originPoint):(nc(o.x,e.x,n),nc(o.y,e.y,n)),this.setTargetDelta(o),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(es(s,this.layout.layoutBox,this.relativeParent.layout.layoutBox,this.options.layoutAnchor||void 0),ic(this.relativeTarget,this.relativeTargetOrigin,s,n),f&&us(this.relativeTarget,f)&&(this.isProjectionDirty=!1),f||=ba(),Vo(f,this.relativeTarget)),c&&(this.animationValues=a,xs(a,i,this.latestValues,n,d,u)),r&&r.rotate!==void 0&&(this.animationValues||=a,this.animationValues.pathRotation=r.rotate),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=n},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(e){this.notifyListeners(`animationStart`),this.currentAnimation?.stop(),this.resumingFrom?.currentAnimation?.stop(),this.pendingAnimation&&=(Oe(this.pendingAnimation),void 0),this.pendingAnimation=De.update(()=>{Ns.hasAnimatedSinceResize=!0,Pe.layout++,this.motionValue||=Mr(0),this.motionValue.jump(0,!1),this.currentAnimation=Es(this.motionValue,[0,1e3],{...e,velocity:0,isSync:!0,onUpdate:t=>{this.mixTargetDelta(t),e.onUpdate&&e.onUpdate(t)},onStop:()=>{Pe.layout--},onComplete:()=>{Pe.layout--,e.onComplete&&e.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);let e=this.getStack();e&&e.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners(`animationComplete`)}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(Is),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){let e=this.getLead(),{targetWithTransforms:t,target:n,layout:r,latestValues:i}=e;if(!(!t||!n||!r)){if(this!==e&&this.layout&&r&&dc(this.options.animationType,this.layout.layoutBox,r.layoutBox)){n=this.target||ba();let t=qo(this.layout.layoutBox.x);n.x.min=e.target.x.min,n.x.max=n.x.min+t;let r=qo(this.layout.layoutBox.y);n.y.min=e.target.y.min,n.y.max=n.y.min+r}Vo(t,n),io(t,i),Xo(this.projectionDeltaWithTransform,this.layoutCorrected,t,i)}}registerSharedNode(e,t){this.sharedNodes.has(e)||this.sharedNodes.set(e,new Ms),this.sharedNodes.get(e).add(t);let n=t.options.initialPromotionConfig;t.promote({transition:n?n.transition:void 0,preserveFollowOpacity:n&&n.shouldPreserveFollowOpacity?n.shouldPreserveFollowOpacity(t):void 0})}isLead(){let e=this.getStack();return e?e.lead===this:!0}getLead(){let{layoutId:e}=this.options;return e&&this.getStack()?.lead||this}getPrevLead(){let{layoutId:e}=this.options;return e?this.getStack()?.prevLead:void 0}getStack(){let{layoutId:e}=this.options;if(e)return this.root.sharedNodes.get(e)}promote({needsReset:e,transition:t,preserveFollowOpacity:n}={}){let r=this.getStack();r&&r.promote(this,n),e&&(this.projectionDelta=void 0,this.needsReset=!0),t&&this.setOptions({transition:t})}relegate(){let e=this.getStack();return e?e.relegate(this):!1}resetSkewAndRotation(){let{visualElement:e}=this.options;if(!e)return;let t=!1,{latestValues:n}=e;if((n.z||n.rotate||n.rotateX||n.rotateY||n.rotateZ||n.skewX||n.skewY)&&(t=!0),!t)return;let r={};n.z&&Rs(`z`,e,r,this.animationValues);for(let t=0;te.currentAnimation?.stop()),this.root.nodes.forEach(Ks),this.root.sharedNodes.clear()}}}function Vs(e){e.updateLayout()}function Hs(e){let t=e.resumeFrom?.snapshot||e.snapshot;if(e.isLead()&&e.layout&&t&&e.hasListeners(`didUpdate`)){let{layoutBox:n,measuredBox:r}=e.layout,{animationType:i}=e.options,a=t.source!==e.layout.source;if(i===`size`)hs(e=>{let r=a?t.measuredBox[e]:t.layoutBox[e],i=qo(r);r.min=n[e].min,r.max=r.min+i});else if(i===`x`||i===`y`){let e=i===`x`?`y`:`x`;Bo(a?t.measuredBox[e]:t.layoutBox[e],n[e])}else dc(i,t.layoutBox,n)&&hs(r=>{let i=a?t.measuredBox[r]:t.layoutBox[r],o=qo(n[r]);i.max=i.min+o,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[r].max=e.relativeTarget[r].min+o)});let o=va();Xo(o,n,t.layoutBox);let s=va();a?Xo(s,e.applyTransform(r,!0),t.measuredBox):Xo(s,n,t.layoutBox);let c=!cs(o),l=!1;if(!e.resumeFrom){let r=e.getClosestProjectingParent();if(r&&!r.resumeFrom){let{snapshot:i,layout:a}=r;if(i&&a){let o=e.options.layoutAnchor||void 0,s=ba();es(s,t.layoutBox,i.layoutBox,o);let c=ba();es(c,n,a.layoutBox,o),fs(s,c)||(l=!0),r.options.layoutRoot&&(e.relativeTarget=c,e.relativeTargetOrigin=s,e.relativeParent=r)}}}e.notifyListeners(`didUpdate`,{layout:n,snapshot:t,delta:s,layoutDelta:o,hasLayoutChanged:c,hasRelativeLayoutChanged:l})}else if(e.isLead()){let{onExitComplete:t}=e.options;t&&t()}e.options.transition=void 0}function Us(e){Ce.value&&Ps.nodes++,e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty),e.isTransformDirty||=e.parent.isTransformDirty)}function Ws(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function Gs(e){e.clearSnapshot()}function Ks(e){e.clearMeasurements()}function qs(e){e.isLayoutDirty=!0,e.updateLayout()}function Js(e){e.isLayoutDirty=!1}function Ys(e){e.isAnimationBlocked&&e.layout&&!e.isLayoutDirty&&(e.snapshot=e.layout,e.isLayoutDirty=!0)}function Xs(e){let{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify(`BeforeLayoutMeasure`),e.resetTransform()}function Zs(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function Qs(e){e.resolveTargetDelta()}function $s(e){e.calcProjection()}function ec(e){e.resetSkewAndRotation()}function tc(e){e.removeLeadSnapshot()}function nc(e,t,n){e.translate=Ot(t.translate,0,n),e.scale=Ot(t.scale,1,n),e.origin=t.origin,e.originPoint=t.originPoint}function rc(e,t,n,r){e.min=Ot(t.min,n.min,r),e.max=Ot(t.max,n.max,r)}function ic(e,t,n,r){rc(e.x,t.x,n.x,r),rc(e.y,t.y,n.y,r)}function ac(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}var oc={duration:.45,ease:[.4,0,.1,1]},sc=e=>typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(e),cc=sc(`applewebkit/`)&&!sc(`chrome/`)?Math.round:k;function lc(e){e.min=cc(e.min),e.max=cc(e.max)}function uc(e){lc(e.x),lc(e.y)}function dc(e,t,n){return e===`position`||e===`preserve-aspect`&&!Jo(ps(t),ps(n),.2)}function fc(e){return e!==e.root&&e.scroll?.wasRoot}var pc=Bs({attachResizeListener:(e,t)=>Ds(e,`resize`,t),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body?.scrollLeft||0,y:document.documentElement.scrollTop||document.body?.scrollTop||0}),checkIsScrollRoot:()=>!0}),mc={current:void 0},hc=Bs({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!mc.current){let e=new pc({});e.mount(window),e.setOptions({layoutScroll:!0}),mc.current=e}return mc.current},resetTransform:(e,t)=>{e.style.transform=t===void 0?`none`:t},checkIsScrollRoot:e=>window.getComputedStyle(e).position===`fixed`}),gc=(0,g.createContext)({transformPagePoint:e=>e,isStatic:!1,reducedMotion:`never`});function _c(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function vc(...e){return t=>{let n=!1,r=e.map(e=>{let r=_c(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t{let{width:e,height:u,top:d,left:f,right:p,bottom:m,direction:h}=c.current;if(t||a===!1||!s.current||!e||!u)return;let g=h===`rtl`,_=n===`left`?g?`right: ${p}`:`left: ${f}`:g?`left: ${f}`:`right: ${p}`,v=r===`bottom`?`bottom: ${m}`:`top: ${d}`;s.current.dataset.motionPopId=o;let y=document.createElement(`style`);l&&(y.nonce=l);let b=i??document.head;return b.appendChild(y),y.sheet&&y.sheet.insertRule(` + [data-motion-pop-id="${o}"] { + position: absolute !important; + width: ${e}px !important; + height: ${u}px !important; + ${_}px !important; + ${v}px !important; + } + `),()=>{s.current?.removeAttribute(`data-motion-pop-id`),b.contains(y)&&b.removeChild(y)}},[t]),(0,z.jsx)(bc,{isPresent:t,childRef:s,sizeRef:c,pop:a,children:a===!1?e:g.cloneElement(e,{ref:u})})}var Sc=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:a,mode:o,anchorX:s,anchorY:c,root:l})=>{let u=v(Cc),d=(0,g.useId)(),f=!0,p=(0,g.useMemo)(()=>(f=!1,{id:d,initial:t,isPresent:n,custom:i,onExitComplete:e=>{u.set(e,!0);for(let e of u.values())if(!e)return;r&&r()},register:e=>(u.set(e,!1),()=>u.delete(e))}),[n,u,r]);return a&&f&&(p={...p}),(0,g.useMemo)(()=>{u.forEach((e,t)=>u.set(t,!1))},[n]),g.useEffect(()=>{!n&&!u.size&&r&&r()},[n]),e=(0,z.jsx)(xc,{pop:o===`popLayout`,isPresent:n,anchorX:s,anchorY:c,root:l,children:e}),(0,z.jsx)(b.Provider,{value:p,children:e})};function Cc(){return new Map}function wc(e=!0){let t=(0,g.useContext)(b);if(t===null)return[!0,null];let{isPresent:n,onExitComplete:r,register:i}=t,a=(0,g.useId)();(0,g.useEffect)(()=>{if(e)return i(a)},[e]);let o=(0,g.useCallback)(()=>e&&r&&r(a),[a,r,e]);return!n&&r?[!1,o]:[!0]}var Tc=e=>e.key||``;function Ec(e){let t=[];return g.Children.forEach(e,e=>{(0,g.isValidElement)(e)&&t.push(e)}),t}var Dc=({children:e,custom:t,initial:n=!0,onExitComplete:r,presenceAffectsLayout:i=!0,mode:a=`sync`,propagate:o=!1,anchorX:s=`left`,anchorY:c=`top`,root:l})=>{let[u,d]=wc(o),f=(0,g.useMemo)(()=>Ec(e),[e]),p=o&&!u?[]:f.map(Tc),m=(0,g.useRef)(!0),h=(0,g.useRef)(f),b=v(()=>new Map),x=(0,g.useRef)(new Set),[S,C]=(0,g.useState)(f),[w,T]=(0,g.useState)(f);y(()=>{m.current=!1,h.current=f;for(let e=0;e{let g=Tc(e),_=o&&!u?!1:f===w||p.includes(g);return(0,z.jsx)(Sc,{isPresent:_,initial:!m.current||n?void 0:!1,custom:t,presenceAffectsLayout:i,mode:a,root:l,onExitComplete:_?void 0:()=>{if(x.current.has(g))return;if(b.has(g))x.current.add(g),b.set(g,!0);else return;let e=!0;b.forEach(t=>{t||(e=!1)}),e&&(D?.(),T(h.current),o&&d?.(),r&&r())},anchorX:s,anchorY:c,children:e},g)})})},Oc=(0,g.createContext)({strict:!1}),kc={animation:[`animate`,`variants`,`whileHover`,`whileTap`,`exit`,`whileInView`,`whileFocus`,`whileDrag`],exit:[`exit`],drag:[`drag`,`dragControls`],focus:[`whileFocus`],hover:[`whileHover`,`onHoverStart`,`onHoverEnd`],tap:[`whileTap`,`onTap`,`onTapStart`,`onTapCancel`],pan:[`onPan`,`onPanStart`,`onPanSessionStart`,`onPanEnd`],inView:[`whileInView`,`onViewportEnter`,`onViewportLeave`],layout:[`layout`,`layoutId`]},Ac=!1;function jc(){if(Ac)return;let e={};for(let t in kc)e[t]={isEnabled:e=>kc[t].some(t=>!!e[t])};Fa(e),Ac=!0}function Mc(){return jc(),Ia()}function Nc(e){let t=Mc();for(let n in e)t[n]={...t[n],...e[n]};Fa(t)}var Pc=new Set(`animate.exit.variants.initial.style.values.variants.transition.transformTemplate.custom.inherit.onBeforeLayoutMeasure.onAnimationStart.onAnimationComplete.onUpdate.onDragStart.onDrag.onDragEnd.onMeasureDragConstraints.onDirectionLock.onDragTransitionEnd._dragX._dragY.onHoverStart.onHoverEnd.onViewportEnter.onViewportLeave.globalTapTarget.propagate.ignoreStrict.viewport`.split(`.`));function Fc(e){return e.startsWith(`while`)||e.startsWith(`drag`)&&e!==`draggable`||e.startsWith(`layout`)||e.startsWith(`onTap`)||e.startsWith(`onPan`)||e.startsWith(`onLayout`)||Pc.has(e)}var Ic=c({default:()=>Lc}),Lc,Rc=o((()=>{throw Lc={},Error(`Could not resolve "@emotion/is-prop-valid" imported by "framer-motion". Is it installed?`)})),zc=e=>!Fc(e);function Bc(e){typeof e==`function`&&(zc=t=>t.startsWith(`on`)?!Fc(t):e(t))}try{Bc((Rc(),d(Ic)).default)}catch{}function Vc(e,t,n){let r={};for(let i in e)i===`values`&&typeof e.values==`object`||ei(e[i])||(zc(i)||n===!0&&Fc(i)||!t&&!Fc(i)||e.draggable&&i.startsWith(`onDrag`))&&(r[i]=e[i]);return r}function Hc({children:e,isValidProp:t,...n}){t&&Bc(t);let r=(0,g.useContext)(gc);n={...r,...n},n.transition=Nr(n.transition,r.transition),n.isStatic=v(()=>n.isStatic);let i=(0,g.useMemo)(()=>n,[JSON.stringify(n.transition),n.transformPagePoint,n.reducedMotion,n.skipAnimations]);return(0,z.jsx)(gc.Provider,{value:i,children:e})}var Uc=(0,g.createContext)({});function Wc(e,t){if(Ea(e)){let{initial:t,animate:n}=e;return{initial:t===!1||Ca(t)?t:void 0,animate:Ca(n)?n:void 0}}return e.inherit===!1?{}:t}function Gc(e){let{initial:t,animate:n}=Wc(e,(0,g.useContext)(Uc));return(0,g.useMemo)(()=>({initial:t,animate:n}),[Kc(t),Kc(n)])}function Kc(e){return Array.isArray(e)?e.join(` `):e}var qc=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function Jc(e,t,n){for(let r in t)!ei(t[r])&&!go(r,n)&&(e[r]=t[r])}function Yc({transformTemplate:e},t){return(0,g.useMemo)(()=>{let n=qc();return uo(n,t,e),Object.assign({},n.vars,n.style)},[t])}function Xc(e,t){let n=e.style||{},r={};return Jc(r,n,e),Object.assign(r,Yc(e,t)),r}function Zc(e,t){let n={},r=Xc(e,t);return e.drag&&e.dragListener!==!1&&(n.draggable=!1,r.userSelect=r.WebkitUserSelect=r.WebkitTouchCallout=`none`,r.touchAction=e.drag===!0?`none`:`pan-${e.drag===`x`?`y`:`x`}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(n.tabIndex=0),n.style=r,n}var Qc=()=>({...qc(),attrs:{}});function $c(e,t,n,r){let i=(0,g.useMemo)(()=>{let n=Qc();return wo(n,t,Eo(r),e.transformTemplate,e.style),{...n.attrs,style:{...n.style}}},[t]);if(e.style){let t={};Jc(t,e.style,e),i.style={...t,...i.style}}return i}var el=[`animate`,`circle`,`defs`,`desc`,`ellipse`,`g`,`image`,`line`,`filter`,`marker`,`mask`,`metadata`,`path`,`pattern`,`polygon`,`polyline`,`rect`,`stop`,`switch`,`symbol`,`svg`,`text`,`tspan`,`use`,`view`];function tl(e){return typeof e!=`string`||e.includes(`-`)?!1:!!(el.indexOf(e)>-1||/[A-Z]/u.test(e))}function nl(e,t,n,{latestValues:r},i,a=!1,o){let s=(o??tl(e)?$c:Zc)(t,r,i,e),c=Vc(t,typeof e==`string`,a),l=e===g.Fragment?{}:{...c,...s,ref:n},{children:u}=t,d=(0,g.useMemo)(()=>ei(u)?u.get():u,[u]);return(0,g.createElement)(e,{...l,children:d})}function rl({scrapeMotionValuesFromProps:e,createRenderState:t},n,r,i){return{latestValues:il(n,r,i,e),renderState:t()}}function il(e,t,n,r){let i={},a=r(e,{});for(let e in a)i[e]=js(a[e]);let{initial:o,animate:s}=e,c=Ea(e),l=Da(e);t&&l&&!c&&e.inherit!==!1&&(o===void 0&&(o=t.initial),s===void 0&&(s=t.animate));let u=n?n.initial===!1:!1;u||=o===!1;let d=u?s:o;if(d&&typeof d!=`boolean`&&!Sa(d)){let t=Array.isArray(d)?d:[d];for(let n=0;n(t,n)=>{let r=(0,g.useContext)(Uc),i=(0,g.useContext)(b),a=()=>rl(e,t,r,i);return n?a():v(a)},ol=al({scrapeMotionValuesFromProps:_o,createRenderState:qc}),sl=al({scrapeMotionValuesFromProps:Oo,createRenderState:Qc}),cl=Symbol.for(`motionComponentSymbol`);function ll(e,t,n){let r=(0,g.useRef)(n);(0,g.useInsertionEffect)(()=>{r.current=n});let i=(0,g.useRef)(null);return(0,g.useCallback)(n=>{n&&e.onMount?.(n),t&&(n?t.mount(n):t.unmount());let a=r.current;if(typeof a==`function`)if(n){let e=a(n);typeof e==`function`&&(i.current=e)}else i.current?(i.current(),i.current=null):a(n);else a&&(a.current=n)},[t])}var ul=(0,g.createContext)({});function dl(e){return e&&typeof e==`object`&&Object.prototype.hasOwnProperty.call(e,`current`)}function fl(e,t,n,r,i,a){let{visualElement:o}=(0,g.useContext)(Uc),s=(0,g.useContext)(Oc),c=(0,g.useContext)(b),l=(0,g.useContext)(gc),u=l.reducedMotion,d=l.skipAnimations,f=(0,g.useRef)(null),p=(0,g.useRef)(!1);r||=s.renderer,!f.current&&r&&(f.current=r(e,{visualState:t,parent:o,props:n,presenceContext:c,blockInitialAnimation:c?c.initial===!1:!1,reducedMotionConfig:u,skipAnimations:d,isSVG:a}),p.current&&f.current&&(f.current.manuallyAnimateOnMount=!0));let m=f.current,h=(0,g.useContext)(ul);m&&!m.projection&&i&&(m.type===`html`||m.type===`svg`)&&pl(f.current,n,i,h);let _=(0,g.useRef)(!1);(0,g.useInsertionEffect)(()=>{m&&_.current&&m.update(n,c)});let v=n[ii],x=(0,g.useRef)(!!v&&typeof window<`u`&&!window.MotionHandoffIsComplete?.(v)&&window.MotionHasOptimisedAnimation?.(v));return y(()=>{p.current=!0,m&&(_.current=!0,window.MotionIsMounted=!0,m.updateFeatures(),m.scheduleRenderMicrotask(),x.current&&m.animationState&&m.animationState.animateChanges())}),(0,g.useEffect)(()=>{m&&(!x.current&&m.animationState&&m.animationState.animateChanges(),x.current&&=(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(v)}),!1),m.enteringChildren=void 0)}),m}function pl(e,t,n,r){let{layoutId:i,layout:a,drag:o,dragConstraints:s,layoutScroll:c,layoutRoot:l,layoutAnchor:u,layoutCrossfade:d}=t;e.projection=new n(e.latestValues,t[`data-framer-portal-id`]?void 0:ml(e.parent)),e.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:!!o||s&&dl(s),visualElement:e,animationType:typeof a==`string`?a:`both`,initialPromotionConfig:r,crossfade:d,layoutScroll:c,layoutRoot:l,layoutAnchor:u})}function ml(e){if(e)return e.options.allowProjection===!1?ml(e.parent):e.projection}function hl(e,{forwardMotionProps:t=!1,type:n}={},r,i){r&&Nc(r);let a=n?n===`svg`:tl(e),o=a?sl:ol;function s(n,s){let c,l={...(0,g.useContext)(gc),...n,layoutId:gl(n)},{isStatic:u}=l,d=Gc(n),f=o(n,u);if(!u&&typeof window<`u`){_l(l,r);let t=vl(l);c=t.MeasureLayout,d.visualElement=fl(e,f,l,i,t.ProjectionNode,a)}return(0,z.jsxs)(Uc.Provider,{value:d,children:[c&&d.visualElement?(0,z.jsx)(c,{visualElement:d.visualElement,...l}):null,nl(e,n,ll(f,d.visualElement,s),f,u,t,a)]})}s.displayName=`motion.${typeof e==`string`?e:`create(${e.displayName??e.name??``})`}`;let c=(0,g.forwardRef)(s);return c[cl]=e,c}function gl({layoutId:e}){let t=(0,g.useContext)(_).id;return t&&e!==void 0?t+`-`+e:e}function _l(e,t){(0,g.useContext)(Oc).strict}function vl(e){let{drag:t,layout:n}=Mc();if(!t&&!n)return{};let r={...t,...n};return{MeasureLayout:t?.isEnabled(e)||n?.isEnabled(e)?r.MeasureLayout:void 0,ProjectionNode:r.ProjectionNode}}function yl(e,t){if(typeof Proxy>`u`)return hl;let n=new Map,r=(n,r)=>hl(n,r,e,t);return new Proxy((e,t)=>r(e,t),{get:(i,a)=>a===`create`?r:(n.has(a)||n.set(a,hl(a,void 0,e,t)),n.get(a))})}var bl=(e,t)=>t.isSVG??tl(e)?new ko(t):new yo(t,{allowProjection:e!==g.Fragment}),xl=class extends za{constructor(e){super(e),e.animationState||=Io(e)}updateAnimationControlsSubscription(){let{animate:e}=this.node.getProps();Sa(e)&&(this.unmountControls=e.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){let{animate:e}=this.node.getProps(),{animate:t}=this.node.prevProps||{};e!==t&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}},Sl=0,Cl={animation:{Feature:xl},exit:{Feature:class extends za{constructor(){super(...arguments),this.id=Sl++,this.isExitComplete=!1}update(){if(!this.node.presenceContext)return;let{isPresent:e,onExitComplete:t}=this.node.presenceContext,{isPresent:n}=this.node.prevPresenceContext||{};if(!this.node.animationState||e===n)return;if(e&&n===!1){if(this.isExitComplete){let{initial:e,custom:t}=this.node.getProps();if(typeof e==`string`||typeof e==`object`&&e&&!Array.isArray(e)){let n=Jr(this.node,e,t);if(n){let{transition:e,transitionEnd:t,...r}=n;for(let e in r)this.node.getValue(e)?.jump(r[e])}}this.node.animationState.reset(),this.node.animationState.animateChanges()}else this.node.animationState.setActive(`exit`,!1);this.isExitComplete=!1;return}let r=this.node.animationState.setActive(`exit`,!e);t&&!e&&r.then(()=>{this.isExitComplete=!0,t(this.id)})}mount(){let{register:e,onExitComplete:t}=this.node.presenceContext||{};t&&t(this.id),e&&(this.unmount=e(this.id))}unmount(){}}}};function wl(e){return{point:{x:e.pageX,y:e.pageY}}}var Tl=e=>t=>Vi(t)&&e(t,wl(t));function El(e,t,n,r){return Ds(e,t,Tl(n),r)}var Dl=({current:e})=>e?e.ownerDocument.defaultView:null,Ol=(e,t)=>Math.abs(e-t);function kl(e,t){let n=Ol(e.x,t.x),r=Ol(e.y,t.y);return Math.sqrt(n**2+r**2)}var Al=new Set([`auto`,`scroll`]),jl=class{constructor(e,t,{transformPagePoint:n,contextWindow:r=window,dragSnapToOrigin:i=!1,distanceThreshold:a=3,element:o}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.lastRawMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.scrollPositions=new Map,this.removeScrollListeners=null,this.onElementScroll=e=>{this.handleScroll(e.target)},this.onWindowScroll=()=>{this.handleScroll(window)},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;this.lastRawMoveEventInfo&&(this.lastMoveEventInfo=Ml(this.lastRawMoveEventInfo,this.transformPagePoint));let e=Pl(this.lastMoveEventInfo,this.history),t=this.startEvent!==null,n=kl(e.offset,{x:0,y:0})>=this.distanceThreshold;if(!t&&!n)return;let{point:r}=e,{timestamp:i}=ke;this.history.push({...r,timestamp:i});let{onStart:a,onMove:o}=this.handlers;t||(a&&a(this.lastMoveEvent,e),this.startEvent=this.lastMoveEvent),o&&o(this.lastMoveEvent,e)},this.handlePointerMove=(e,t)=>{this.lastMoveEvent=e,this.lastRawMoveEventInfo=t,this.lastMoveEventInfo=Ml(t,this.transformPagePoint),De.update(this.updatePoint,!0)},this.handlePointerUp=(e,t)=>{this.end();let{onEnd:n,onSessionEnd:r,resumeAnimation:i}=this.handlers;if((this.dragSnapToOrigin||!this.startEvent)&&i&&i(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;let a=Pl(e.type===`pointercancel`?this.lastMoveEventInfo:Ml(t,this.transformPagePoint),this.history);this.startEvent&&n&&n(e,a),r&&r(e,a)},!Vi(e))return;this.dragSnapToOrigin=i,this.handlers=t,this.transformPagePoint=n,this.distanceThreshold=a,this.contextWindow=r||window;let s=Ml(wl(e),this.transformPagePoint),{point:c}=s,{timestamp:l}=ke;this.history=[{...c,timestamp:l}];let{onSessionStart:u}=t;u&&u(e,Pl(s,this.history)),this.removeListeners=A(El(this.contextWindow,`pointermove`,this.handlePointerMove),El(this.contextWindow,`pointerup`,this.handlePointerUp),El(this.contextWindow,`pointercancel`,this.handlePointerUp)),o&&this.startScrollTracking(o)}startScrollTracking(e){let t=e.parentElement;for(;t;){let e=getComputedStyle(t);(Al.has(e.overflowX)||Al.has(e.overflowY))&&this.scrollPositions.set(t,{x:t.scrollLeft,y:t.scrollTop}),t=t.parentElement}this.scrollPositions.set(window,{x:window.scrollX,y:window.scrollY}),window.addEventListener(`scroll`,this.onElementScroll,{capture:!0}),window.addEventListener(`scroll`,this.onWindowScroll),this.removeScrollListeners=()=>{window.removeEventListener(`scroll`,this.onElementScroll,{capture:!0}),window.removeEventListener(`scroll`,this.onWindowScroll)}}handleScroll(e){let t=this.scrollPositions.get(e);if(!t)return;let n=e===window,r=n?{x:window.scrollX,y:window.scrollY}:{x:e.scrollLeft,y:e.scrollTop},i={x:r.x-t.x,y:r.y-t.y};i.x===0&&i.y===0||(n?this.lastMoveEventInfo&&(this.lastMoveEventInfo.point.x+=i.x,this.lastMoveEventInfo.point.y+=i.y):this.history.length>0&&(this.history[0].x-=i.x,this.history[0].y-=i.y),this.scrollPositions.set(e,r),De.update(this.updatePoint,!0))}updateHandlers(e){this.handlers=e}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners&&this.removeScrollListeners(),this.scrollPositions.clear(),Oe(this.updatePoint)}};function Ml(e,t){return t?{point:t(e.point)}:e}function Nl(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Pl({point:e},t){return{point:e,delta:Nl(e,Il(t)),offset:Nl(e,Fl(t)),velocity:Ll(t,.1)}}function Fl(e){return e[0]}function Il(e){return e[e.length-1]}function Ll(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null,i=Il(e);for(;n>=0&&(r=e[n],!(i.timestamp-r.timestamp>N(t)));)n--;if(!r)return{x:0,y:0};r===e[0]&&e.length>2&&i.timestamp-r.timestamp>N(t)*2&&(r=e[1]);let a=P(i.timestamp-r.timestamp);if(a===0)return{x:0,y:0};let o={x:(i.x-r.x)/a,y:(i.y-r.y)/a};return o.x===1/0&&(o.x=0),o.y===1/0&&(o.y=0),o}function Rl(e,{min:t,max:n},r){return t!==void 0&&en&&(e=r?Ot(n,e,r.max):Math.min(e,n)),e}function zl(e,t,n){return{min:t===void 0?void 0:e.min+t,max:n===void 0?void 0:e.max+n-(e.max-e.min)}}function Bl(e,{top:t,left:n,bottom:r,right:i}){return{x:zl(e.x,n,i),y:zl(e.y,t,r)}}function Vl(e,t){let n=t.min-e.min,r=t.max-e.max;return t.max-t.minr?n=j(t.min,t.max-r,e.min):r>i&&(n=j(e.min,e.max-i,t.min)),C(0,1,n)}function Wl(e,t){let n={};return t.min!==void 0&&(n.min=t.min-e.min),t.max!==void 0&&(n.max=t.max-e.min),n}var Gl=.35;function Kl(e=Gl){return e===!1?e=0:e===!0&&(e=Gl),{x:ql(e,`left`,`right`),y:ql(e,`top`,`bottom`)}}function ql(e,t,n){return{min:Jl(e,t),max:Jl(e,n)}}function Jl(e,t){return typeof e==`number`?e:e[t]||0}var Yl=new WeakMap,Xl=class{constructor(e){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=ba(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=e}start(e,{snapToCursor:t=!1,distanceThreshold:n}={}){let{presenceContext:r}=this.visualElement;if(r&&r.isPresent===!1)return;let i=e=>{t&&this.snapToCursor(wl(e).point),this.stopAnimation()},a=(e,t)=>{let{drag:n,dragPropagation:r,onDragStart:i}=this.getProps();if(n&&!r&&(this.openDragLock&&this.openDragLock(),this.openDragLock=Ii(n),!this.openDragLock))return;this.latestPointerEvent=e,this.latestPanInfo=t,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),hs(e=>{let t=this.getAxisMotionValue(e).get()||0;if(rt.test(t)){let{projection:n}=this.visualElement;if(n&&n.layout){let r=n.layout.layoutBox[e];r&&(t=qo(r)*(parseFloat(t)/100))}}this.originPoint[e]=t}),i&&De.update(()=>i(e,t),!1,!0),ni(this.visualElement,`transform`);let{animationState:a}=this.visualElement;a&&a.setActive(`whileDrag`,!0)},o=(e,t)=>{this.latestPointerEvent=e,this.latestPanInfo=t;let{dragPropagation:n,dragDirectionLock:r,onDirectionLock:i,onDrag:a}=this.getProps();if(!n&&!this.openDragLock)return;let{offset:o}=t;if(r&&this.currentDirection===null){this.currentDirection=eu(o),this.currentDirection!==null&&i&&i(this.currentDirection);return}this.updateAxis(`x`,t.point,o),this.updateAxis(`y`,t.point,o),this.visualElement.render(),a&&De.update(()=>a(e,t),!1,!0)},s=(e,t)=>{this.latestPointerEvent=e,this.latestPanInfo=t,this.stop(e,t),this.latestPointerEvent=null,this.latestPanInfo=null},c=()=>{let{dragSnapToOrigin:e}=this.getProps();(e||this.constraints)&&this.startAnimation({x:0,y:0})},{dragSnapToOrigin:l}=this.getProps();this.panSession=new jl(e,{onSessionStart:i,onStart:a,onMove:o,onSessionEnd:s,resumeAnimation:c},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:l,distanceThreshold:n,contextWindow:Dl(this.visualElement),element:this.visualElement.current})}stop(e,t){let n=e||this.latestPointerEvent,r=t||this.latestPanInfo,i=this.isDragging;if(this.cancel(),!i||!r||!n)return;let{velocity:a}=r;this.startAnimation(a);let{onDragEnd:o}=this.getProps();o&&De.postRender(()=>o(n,r))}cancel(){this.isDragging=!1;let{projection:e,animationState:t}=this.visualElement;e&&(e.isAnimationBlocked=!1),this.endPanSession();let{dragPropagation:n}=this.getProps();!n&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),t&&t.setActive(`whileDrag`,!1)}endPanSession(){this.panSession&&this.panSession.end(),this.panSession=void 0}updateAxis(e,t,n){let{drag:r}=this.getProps();if(!n||!$l(e,r,this.currentDirection))return;let i=this.getAxisMotionValue(e),a=this.originPoint[e]+n[e];this.constraints&&this.constraints[e]&&(a=Rl(a,this.constraints[e],this.elastic[e])),i.set(a)}resolveConstraints(){let{dragConstraints:e,dragElastic:t}=this.getProps(),n=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):this.visualElement.projection?.layout,r=this.constraints;e&&dl(e)?this.constraints||=this.resolveRefConstraints():e&&n?this.constraints=Bl(n.layoutBox,e):this.constraints=!1,this.elastic=Kl(t),r!==this.constraints&&!dl(e)&&n&&this.constraints&&!this.hasMutatedConstraints&&hs(e=>{this.constraints!==!1&&this.getAxisMotionValue(e)&&(this.constraints[e]=Wl(n.layoutBox[e],this.constraints[e]))})}resolveRefConstraints(){let{dragConstraints:e,onMeasureDragConstraints:t}=this.getProps();if(!e||!dl(e))return!1;let n=e.current,{projection:r}=this.visualElement;if(!r||!r.layout)return!1;r.root&&(r.root.scroll=void 0,r.root.updateScroll());let i=oo(n,r.root,this.visualElement.getTransformPagePoint()),a=Hl(r.layout.layoutBox,i);if(t){let e=t(Va(a));this.hasMutatedConstraints=!!e,e&&(a=Ba(e))}return a}startAnimation(e){let{drag:t,dragMomentum:n,dragElastic:r,dragTransition:i,dragSnapToOrigin:a,onDragTransitionEnd:o}=this.getProps(),s=this.constraints||{},c=hs(o=>{if(!$l(o,t,this.currentDirection))return;let c=s&&s[o]||{};(a===!0||a===o)&&(c={min:0,max:0});let l=r?200:1e6,u=r?40:1e7,d={type:`inertia`,velocity:n?e[o]:0,bounceStiffness:l,bounceDamping:u,timeConstant:750,restDelta:1,restSpeed:10,...i,...c};return this.startAxisValueAnimation(o,d)});return Promise.all(c).then(o)}startAxisValueAnimation(e,t){let n=this.getAxisMotionValue(e);return ni(this.visualElement,e),n.start(Hr(e,n,0,t,this.visualElement,!1))}stopAnimation(){hs(e=>this.getAxisMotionValue(e).stop())}getAxisMotionValue(e){let t=`_drag${e.toUpperCase()}`;return this.visualElement.getProps()[t]||this.visualElement.getValue(e,this.visualElement.latestValues[e]??0)}snapToCursor(e){hs(t=>{let{drag:n}=this.getProps();if(!$l(t,n,this.currentDirection))return;let{projection:r}=this.visualElement,i=this.getAxisMotionValue(t);if(r&&r.layout){let{min:n,max:a}=r.layout.layoutBox[t],o=i.get()||0;i.set(e[t]-Ot(n,a,.5)+o)}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;let{drag:e,dragConstraints:t}=this.getProps(),{projection:n}=this.visualElement;if(!dl(t)||!n||!this.constraints)return;this.stopAnimation();let r={x:0,y:0};hs(e=>{let t=this.getAxisMotionValue(e);if(t&&this.constraints!==!1){let n=t.get();r[e]=Ul({min:n,max:n},this.constraints[e])}});let{transformTemplate:i}=this.visualElement.getProps();this.visualElement.current.style.transform=i?i({},``):`none`,n.root&&n.root.updateScroll(),n.updateLayout(),this.constraints=!1,this.resolveConstraints(),hs(t=>{if(!$l(t,e,null))return;let n=this.getAxisMotionValue(t),{min:i,max:a}=this.constraints[t];n.set(Ot(i,a,r[t]))}),this.visualElement.render()}addListeners(){if(!this.visualElement.current)return;Yl.set(this.visualElement,this);let e=this.visualElement.current,t=El(e,`pointerdown`,t=>{let{drag:n,dragListener:r=!0}=this.getProps(),i=t.target,a=i!==e&&Gi(i);n&&r&&!a&&this.start(t)}),n,r=()=>{let{dragConstraints:t}=this.getProps();dl(t)&&t.current&&(this.constraints=this.resolveRefConstraints(),n||=Ql(e,t.current,()=>this.scalePositionWithinConstraints()))},{projection:i}=this.visualElement,a=i.addEventListener(`measure`,r);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),De.read(r);let o=Ds(window,`resize`,()=>this.scalePositionWithinConstraints()),s=i.addEventListener(`didUpdate`,(({delta:e,hasLayoutChanged:t})=>{this.isDragging&&t&&(hs(t=>{let n=this.getAxisMotionValue(t);n&&(this.originPoint[t]+=e[t].translate,n.set(n.get()+e[t].translate))}),this.visualElement.render())}));return()=>{o(),t(),a(),s&&s(),n&&n()}}getProps(){let e=this.visualElement.getProps(),{drag:t=!1,dragDirectionLock:n=!1,dragPropagation:r=!1,dragConstraints:i=!1,dragElastic:a=Gl,dragMomentum:o=!0}=e;return{...e,drag:t,dragDirectionLock:n,dragPropagation:r,dragConstraints:i,dragElastic:a,dragMomentum:o}}};function Zl(e){let t=!0;return()=>{if(t){t=!1;return}e()}}function Ql(e,t,n){let r=pa(e,Zl(n)),i=pa(t,Zl(n));return()=>{r(),i()}}function $l(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function eu(e,t=10){let n=null;return Math.abs(e.y)>t?n=`y`:Math.abs(e.x)>t&&(n=`x`),n}var tu=class extends za{constructor(e){super(e),this.removeGroupControls=k,this.removeListeners=k,this.controls=new Xl(e)}mount(){let{dragControls:e}=this.node.getProps();e&&(this.removeGroupControls=e.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||k}update(){let{dragControls:e}=this.node.getProps(),{dragControls:t}=this.node.prevProps||{};e!==t&&(this.removeGroupControls(),e&&(this.removeGroupControls=e.subscribe(this.controls)))}unmount(){this.removeGroupControls(),this.removeListeners(),this.controls.isDragging||this.controls.endPanSession()}},nu=e=>(t,n)=>{e&&De.update(()=>e(t,n),!1,!0)},ru=class extends za{constructor(){super(...arguments),this.removePointerDownListener=k}onPointerDown(e){this.session=new jl(e,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:Dl(this.node)})}createPanHandlers(){let{onPanSessionStart:e,onPanStart:t,onPan:n,onPanEnd:r}=this.node.getProps();return{onSessionStart:nu(e),onStart:nu(t),onMove:nu(n),onEnd:(e,t)=>{delete this.session,r&&De.postRender(()=>r(e,t))}}}mount(){this.removePointerDownListener=El(this.node.current,`pointerdown`,e=>this.onPointerDown(e))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}},iu=!1,au=class extends g.Component{componentDidMount(){let{visualElement:e,layoutGroup:t,switchLayoutGroup:n,layoutId:r}=this.props,{projection:i}=e;i&&(t.group&&t.group.add(i),n&&n.register&&r&&n.register(i),iu&&i.root.didUpdate(),i.addEventListener(`animationComplete`,()=>{this.safeToRemove()}),i.setOptions({...i.options,layoutDependency:this.props.layoutDependency,onExitComplete:()=>this.safeToRemove()})),Ns.hasEverUpdated=!0}getSnapshotBeforeUpdate(e){let{layoutDependency:t,visualElement:n,drag:r,isPresent:i}=this.props,{projection:a}=n;return a?(a.isPresent=i,e.layoutDependency!==t&&a.setOptions({...a.options,layoutDependency:t}),iu=!0,r||e.layoutDependency!==t||t===void 0||e.isPresent!==i?a.willUpdate():this.safeToRemove(),e.isPresent!==i&&(i?a.promote():a.relegate()||De.postRender(()=>{let e=a.getStack();(!e||!e.members.length)&&this.safeToRemove()})),null):null}componentDidUpdate(){let{visualElement:e,layoutAnchor:t}=this.props,{projection:n}=e;n&&(n.options.layoutAnchor=t,n.root.didUpdate(),Ni.postRender(()=>{!n.currentAnimation&&n.isLead()&&this.safeToRemove()}))}componentWillUnmount(){let{visualElement:e,layoutGroup:t,switchLayoutGroup:n}=this.props,{projection:r}=e;iu=!0,r&&(r.scheduleCheckAfterUnmount(),t&&t.group&&t.group.remove(r),n&&n.deregister&&n.deregister(r))}safeToRemove(){let{safeToRemove:e}=this.props;e&&e()}render(){return null}};function ou(e){let[t,n]=wc(),r=(0,g.useContext)(_);return(0,z.jsx)(au,{...e,layoutGroup:r,switchLayoutGroup:(0,g.useContext)(ul),isPresent:t,safeToRemove:n})}var su={pan:{Feature:ru},drag:{Feature:tu,ProjectionNode:hc,MeasureLayout:ou}};function cu(e,t,n){let{props:r}=e;e.animationState&&r.whileHover&&e.animationState.setActive(`whileHover`,n===`Start`);let i=r[`onHover`+n];i&&De.postRender(()=>i(t,wl(t)))}var lu=class extends za{mount(){let{current:e}=this.node;e&&(this.unmount=zi(e,(e,t)=>(cu(this.node,t,`Start`),e=>cu(this.node,e,`End`))))}unmount(){}},uu=class extends za{constructor(){super(...arguments),this.isActive=!1}onFocus(){let e=!1;try{e=this.node.current.matches(`:focus-visible`)}catch{e=!0}!e||!this.node.animationState||(this.node.animationState.setActive(`whileFocus`,!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive(`whileFocus`,!1),this.isActive=!1)}mount(){this.unmount=A(Ds(this.node.current,`focus`,()=>this.onFocus()),Ds(this.node.current,`blur`,()=>this.onBlur()))}unmount(){}};function du(e,t,n){let{props:r}=e;if(e.current instanceof HTMLButtonElement&&e.current.disabled)return;e.animationState&&r.whileTap&&e.animationState.setActive(`whileTap`,n===`Start`);let i=r[`onTap`+(n===`End`?``:n)];i&&De.postRender(()=>i(t,wl(t)))}var fu=class extends za{mount(){let{current:e}=this.node;if(!e)return;let{globalTapTarget:t,propagate:n}=this.node.props;this.unmount=Qi(e,(e,t)=>(du(this.node,t,`Start`),(e,{success:t})=>du(this.node,e,t?`End`:`Cancel`)),{useGlobalTarget:t,stopPropagation:n?.tap===!1})}unmount(){}},pu=new WeakMap,mu=new WeakMap,hu=e=>{let t=pu.get(e.target);t&&t(e)},gu=e=>{e.forEach(hu)};function _u({root:e,...t}){let n=e||document;mu.has(n)||mu.set(n,{});let r=mu.get(n),i=JSON.stringify(t);return r[i]||(r[i]=new IntersectionObserver(gu,{root:e,...t})),r[i]}function vu(e,t,n){let r=_u(t);return pu.set(e,n),r.observe(e),()=>{pu.delete(e),r.unobserve(e)}}var yu={some:0,all:1},bu=class extends za{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.stopObserver?.();let{viewport:e={}}=this.node.getProps(),{root:t,margin:n,amount:r=`some`,once:i}=e,a={root:t?t.current:void 0,rootMargin:n,threshold:typeof r==`number`?r:yu[r]},o=e=>{let{isIntersecting:t}=e;if(this.isInView===t||(this.isInView=t,i&&!t&&this.hasEnteredView))return;t&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive(`whileInView`,t);let{onViewportEnter:n,onViewportLeave:r}=this.node.getProps(),a=t?n:r;a&&a(e)};this.stopObserver=vu(this.node.current,a,o)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>`u`)return;let{props:e,prevProps:t}=this.node;[`amount`,`margin`,`root`].some(xu(e,t))&&this.startObserver()}unmount(){this.stopObserver?.(),this.hasEnteredView=!1,this.isInView=!1}};function xu({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}var Su={inView:{Feature:bu},tap:{Feature:fu},focus:{Feature:uu},hover:{Feature:lu}},Cu={layout:{ProjectionNode:hc,MeasureLayout:ou}},B=yl({...Cl,...Su,...su,...Cu},bl),wu=s((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&j(x,t.startTime-e)}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&j(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var k=new MessageChannel,A=k.port2;k.port1.onmessage=D,O=function(){A.postMessage(null)}}else O=function(){_(D,0)};function j(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,j(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),Tu=s(((e,t)=>{t.exports=wu()})),Eu=s((e=>{var t=h();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=Eu()})),Ou=s((e=>{var t=Tu(),n=h(),r=Du();function i(e){var t=`https://react.dev/errors/`+e;if(1ne||(e.current=te[ne],te[ne]=null,ne--)}function ae(e,t){ne++,te[ne]=e.current,e.current=t}var oe=re(null),se=re(null),ce=re(null),le=re(null);function ue(e,t){switch(ae(ce,t),ae(se,e),ae(oe,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Qd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Qd(t),e=$d(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}ie(oe),ae(oe,e)}function de(){ie(oe),ie(se),ie(ce)}function fe(e){e.memoizedState!==null&&ae(le,e);var t=oe.current,n=$d(t,e.type);t!==n&&(ae(se,e),ae(oe,n))}function pe(e){se.current===e&&(ie(oe),ie(se)),le.current===e&&(ie(le),lp._currentValue=ee)}var me,he;function ge(e){if(me===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);me=t&&t[1]||``,he=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{_e=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?ge(n):``}function ye(e,t){switch(e.tag){case 26:case 27:case 5:return ge(e.type);case 16:return ge(`Lazy`);case 13:return e.child!==t&&t!==null?ge(`Suspense Fallback`):ge(`Suspense`);case 19:return ge(`SuspenseList`);case 0:case 15:return ve(e.type,!1);case 11:return ve(e.type.render,!1);case 1:return ve(e.type,!0);case 31:return ge(`Activity`);default:return``}}function be(e){try{var t=``,n=null;do t+=ye(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var xe=Object.prototype.hasOwnProperty,Se=t.unstable_scheduleCallback,Ce=t.unstable_cancelCallback,we=t.unstable_shouldYield,Te=t.unstable_requestPaint,Ee=t.unstable_now,De=t.unstable_getCurrentPriorityLevel,Oe=t.unstable_ImmediatePriority,ke=t.unstable_UserBlockingPriority,Ae=t.unstable_NormalPriority,je=t.unstable_LowPriority,Me=t.unstable_IdlePriority,Ne=t.log,Pe=t.unstable_setDisableYieldValue,Fe=null,Ie=null;function Le(e){if(typeof Ne==`function`&&Pe(e),Ie&&typeof Ie.setStrictMode==`function`)try{Ie.setStrictMode(Fe,e)}catch{}}var Re=Math.clz32?Math.clz32:Ve,ze=Math.log,Be=Math.LN2;function Ve(e){return e>>>=0,e===0?32:31-(ze(e)/Be|0)|0}var He=256,Ue=262144,We=4194304;function Ge(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Ke(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=Ge(n))):i=Ge(o):i=Ge(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=Ge(n))):i=Ge(o)):i=Ge(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function qe(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Je(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ye(){var e=We;return We<<=1,!(We&62914560)&&(We=4194304),e}function Xe(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ze(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Qe(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),un=!1;if(ln)try{var dn={};Object.defineProperty(dn,"passive",{get:function(){un=!0}}),window.addEventListener(`test`,dn,dn),window.removeEventListener(`test`,dn,dn)}catch{un=!1}var fn=null,pn=null,mn=null;function hn(){if(mn)return mn;var e,t=pn,n=t.length,r,i=`value`in fn?fn.value:fn.textContent,a=i.length;for(e=0;e=qn),Xn=` `,Zn=!1;function Qn(e,t){switch(e){case`keyup`:return Gn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function $n(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var er=!1;function tr(e,t){switch(e){case`compositionend`:return $n(t);case`keypress`:return t.which===32?(Zn=!0,Xn):null;case`textInput`:return e=t.data,e===Xn&&Zn?null:e;default:return null}}function nr(e,t){if(er)return e===`compositionend`||!Kn&&Qn(e,t)?(e=hn(),mn=pn=fn=null,er=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=wr(n)}}function Er(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Er(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Dr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=It(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=It(e.document)}return t}function Or(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var kr=ln&&`documentMode`in document&&11>=document.documentMode,Ar=null,jr=null,Mr=null,Nr=!1;function Pr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Nr||Ar==null||Ar!==It(r)||(r=Ar,`selectionStart`in r&&Or(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Mr&&Cr(Mr,r)||(Mr=r,r=Id(jr,`onSelect`),0>=o,i-=o,Ei=1<<32-Re(t)+i|n<m?(g=d,d=null):g=d.sibling;var _=p(i,d,s[m],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,m),u===null?l=_:u.sibling=_,u=_,d=g}if(m===s.length)return n(i,d),L&&Oi(i,m),l;if(d===null){for(;mg?(_=m,m=null):_=m.sibling;var y=p(a,m,v.value,l);if(y===null){m===null&&(m=_);break}e&&m&&y.alternate===null&&t(a,m),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,m=_}if(v.done)return n(a,m),L&&Oi(a,g),u;if(m===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return L&&Oi(a,g),u}for(m=r(m);!v.done;g++,v=c.next())v=h(m,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&m.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&m.forEach(function(e){return t(a,e)}),L&&Oi(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===_&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case m:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===_){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===E&&Oa(l)===r.type){n(e,r.sibling),c=a(r,o.props),Fa(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===_?(c=pi(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=fi(o.type,o.key,o.props,null,e.mode,c),Fa(c,o),c.return=e,e=c)}return s(e);case g:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=gi(o,e.mode,c),c.return=e,e=c}return s(e);case E:return o=Oa(o),b(e,r,o,c)}if(N(o))return v(e,r,o,c);if(A(o)){if(l=A(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),y(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Pa(o),c);if(o.$$typeof===x)return b(e,r,na(e,o),c);Ia(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=mi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Na=0;var i=b(e,t,n,r);return Ma=null,i}catch(t){if(t===Sa||t===wa)throw t;var a=ci(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Ra=La(!0),za=La(!1),Ba=!1;function Va(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ha(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ua(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Wa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Ul&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=ai(e),ii(e,null,n),t}return ti(e,r,t,n),ai(e)}function Ga(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,et(e,n)}}function Ka(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var qa=!1;function Ja(){if(qa){var e=pa;if(e!==null)throw e}}function Ya(e,t,n,r){qa=!1;var i=e.updateQueue;Ba=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var p=s.lane&-536870913,m=p!==s.lane;if(m?(Kl&p)===p:(r&p)===p){p!==0&&p===fa&&(qa=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;p=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,p);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,p=typeof h==`function`?h.call(_,d,p):h,p==null)break a;d=f({},d,p);break a;case 2:Ba=!0}}p=s.callback,p!==null&&(e.flags|=64,m&&(e.flags|=8192),m=i.callbacks,m===null?i.callbacks=[p]:m.push(p))}else m={lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=m,c=d):u=u.next=m,o|=p;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;m=s,s=m.next,m.next=null,i.lastBaseUpdate=m,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),eu|=o,e.lanes=o,e.memoizedState=d}}function Xa(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Za(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=P.T,s={};P.T=s,Ls(e,!1,t,n);try{var c=i(),l=P.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Is(e,t,ga(c,r),Su(e)):Is(e,t,r,Su(e))}catch(n){Is(e,t,{then:function(){},status:`rejected`,reason:n},Su())}finally{F.p=a,o!==null&&s.types!==null&&(o.types=s.types),P.T=o}}function Es(){}function Ds(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Os(e).queue;Ts(e,a,t,ee,n===null?Es:function(){return ks(e),n(r)})}function Os(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ee,baseState:ee,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ro,lastRenderedState:ee},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ro,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function ks(e){var t=Os(e);t.next===null&&(t=e.alternate.memoizedState),Is(e,t.next.queue,{},Su())}function As(){return ta(lp)}function js(){return No().memoizedState}function Ms(){return No().memoizedState}function Ns(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=Su();e=Ua(n);var r=Wa(t,e,n);r!==null&&(B(r,t,n),Ga(r,t,n)),t={cache:ca()},e.payload=t;return}t=t.return}}function Ps(e,t,n){var r=Su();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Rs(e)?zs(t,n):(n=ni(e,t,n,r),n!==null&&(B(n,e,r),Bs(n,t,r)))}function Fs(e,t,n){Is(e,t,n,Su())}function Is(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Rs(e))zs(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Sr(s,o))return ti(e,t,i,0),Wl===null&&ei(),!1}catch{}if(n=ni(e,t,i,r),n!==null)return B(n,e,r),Bs(n,t,r),!0}return!1}function Ls(e,t,n,r){if(r={lane:2,revertLane:Sd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Rs(e)){if(t)throw Error(i(479))}else t=ni(e,n,r,2),t!==null&&B(t,e,2)}function Rs(e){var t=e.alternate;return e===R||t!==null&&t===R}function zs(e,t){_o=go=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Bs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,et(e,n)}}var Vs={readContext:ta,use:Io,useCallback:Co,useContext:Co,useEffect:Co,useImperativeHandle:Co,useLayoutEffect:Co,useInsertionEffect:Co,useMemo:Co,useReducer:Co,useRef:Co,useState:Co,useDebugValue:Co,useDeferredValue:Co,useTransition:Co,useSyncExternalStore:Co,useId:Co,useHostTransitionStatus:Co,useFormState:Co,useActionState:Co,useOptimistic:Co,useMemoCache:Co,useCacheRefresh:Co};Vs.useEffectEvent=Co;var Hs={readContext:ta,use:Io,useCallback:function(e,t){return Mo().memoizedState=[e,t===void 0?null:t],e},useContext:ta,useEffect:fs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),us(4194308,4,vs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return us(4194308,4,e,t)},useInsertionEffect:function(e,t){us(4,2,e,t)},useMemo:function(e,t){var n=Mo();t=t===void 0?null:t;var r=e();if(vo){Le(!0);try{e()}finally{Le(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Mo();if(n!==void 0){var i=n(t);if(vo){Le(!0);try{n(t)}finally{Le(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Ps.bind(null,R,e),[r.memoizedState,e]},useRef:function(e){var t=Mo();return e={current:e},t.memoizedState=e},useState:function(e){e=Jo(e);var t=e.queue,n=Fs.bind(null,R,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:bs,useDeferredValue:function(e,t){return Cs(Mo(),e,t)},useTransition:function(){var e=Jo(!1);return e=Ts.bind(null,R,e.queue,!0,!1),Mo().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=R,a=Mo();if(L){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Wl===null)throw Error(i(349));Kl&127||Uo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,fs(Go.bind(null,r,o,e),[e]),r.flags|=2048,cs(9,{destroy:void 0},Wo.bind(null,r,o,n,t),null),n},useId:function(){var e=Mo(),t=Wl.identifierPrefix;if(L){var n=Di,r=Ei;n=(r&~(1<<32-Re(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=yo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[ot]=t,o[st]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Gd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Fc(t)}}return Bc(t),Ic(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Fc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=ce.current,Vi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Ni,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[ot]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Hd(e.nodeValue,n)),e||Ri(t,!0)}else e=Zd(e).createTextNode(r),e[ot]=t,t.stateNode=e}return Bc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Vi(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[ot]=t}else Hi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Bc(t),e=!1}else n=Ui(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(lo(t),t):(lo(t),null);if(t.flags&128)throw Error(i(558))}return Bc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Vi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[ot]=t}else Hi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Bc(t),a=!1}else a=Ui(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(lo(t),t):(lo(t),null)}return lo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Rc(t,t.updateQueue),Bc(t),null);case 4:return de(),e===null&&Md(t.stateNode.containerInfo),Bc(t),null;case 10:return Yi(t.type),Bc(t),null;case 19:if(ie(uo),r=t.memoizedState,r===null)return Bc(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)zc(r,!1);else{if($l!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=fo(e),o!==null){for(t.flags|=128,zc(r,!1),e=o.updateQueue,t.updateQueue=e,Rc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)di(n,e),n=n.sibling;return ae(uo,uo.current&1|2),L&&Oi(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ee()>uu&&(t.flags|=128,a=!0,zc(r,!1),t.lanes=4194304)}else{if(!a)if(e=fo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Rc(t,e),zc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!L)return Bc(t),null}else 2*Ee()-r.renderingStartTime>uu&&n!==536870912&&(t.flags|=128,a=!0,zc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(Bc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ee(),e.sibling=null,n=uo.current,ae(uo,a?n&1|2:n&1),L&&Oi(t,r.treeForkCount),e);case 22:case 23:return lo(t),no(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Bc(t),t.subtreeFlags&6&&(t.flags|=8192)):Bc(t),n=t.updateQueue,n!==null&&Rc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&ie(va),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Yi(sa),Bc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Hc(e,t){switch(ji(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Yi(sa),de(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return pe(t),null;case 31:if(t.memoizedState!==null){if(lo(t),t.alternate===null)throw Error(i(340));Hi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(lo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Hi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ie(uo),null;case 4:return de(),null;case 10:return Yi(t.type),null;case 22:case 23:return lo(t),no(),e!==null&&ie(va),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Yi(sa),null;case 25:return null;default:return null}}function Uc(e,t){switch(ji(t),t.tag){case 3:Yi(sa),de();break;case 26:case 27:case 5:pe(t);break;case 4:de();break;case 31:t.memoizedState!==null&&lo(t);break;case 13:lo(t);break;case 19:ie(uo);break;case 10:Yi(t.type);break;case 22:case 23:lo(t),no(),e!==null&&ie(va);break;case 24:Yi(sa)}}function Wc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){td(t,t.return,e)}}function Gc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){td(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){td(t,t.return,e)}}function Kc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Za(t,n)}catch(t){td(e,e.return,t)}}}function qc(e,t,n){n.props=Ys(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){td(e,t,n)}}function Jc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){td(e,t,n)}}function Yc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){td(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){td(e,t,n)}else n.current=null}function Xc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){td(e,e.return,t)}}function Zc(e,t,n){try{var r=e.stateNode;Kd(r,e.type,n,t),r[st]=t}catch(t){td(e,e.return,t)}}function Qc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&lf(e.type)||e.tag===4}function $c(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Qc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&lf(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function el(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=$t));else if(r!==4&&(r===27&&lf(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(el(e,t,n),e=e.sibling;e!==null;)el(e,t,n),e=e.sibling}function tl(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&lf(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(tl(e,t,n),e=e.sibling;e!==null;)tl(e,t,n),e=e.sibling}function nl(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Gd(t,r,n),t[ot]=e,t[st]=n}catch(t){td(e,e.return,t)}}var rl=!1,il=!1,al=!1,ol=typeof WeakSet==`function`?WeakSet:Set,sl=null;function cl(e,t){if(e=e.containerInfo,Yd=vp,e=Dr(e),Or(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(Xd={focusedElem:e,selectionRange:n},vp=!1,sl=t;sl!==null;)if(t=sl,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,sl=e;else for(;sl!==null;){switch(t=sl,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Gd(o,r,n),o[ot]=e,yt(o),r=o;break a;case`link`:var s=Qf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=Tr(s,h),v=Tr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,P.T=null,n=vu,vu=null;var o=mu,s=gu;if(pu=0,hu=mu=null,gu=0,Ul&6)throw Error(i(331));var c=Ul;if(Ul|=4,Rl(o.current),Al(o,o.current,s,n),Ul=c,hd(0,!1),Ie&&typeof Ie.onPostCommitFiberRoot==`function`)try{Ie.onPostCommitFiberRoot(Fe,o)}catch{}return!0}finally{F.p=a,P.T=r,Zu(e,t)}}function ed(e,t,n){t=vi(n,t),t=tc(e.stateNode,t,2),e=Wa(e,t,2),e!==null&&(Ze(e,2),md(e))}function td(e,t,n){if(e.tag===3)ed(e,e,n);else for(;t!==null;){if(t.tag===3){ed(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(fu===null||!fu.has(r))){e=vi(n,e),n=nc(2),r=Wa(t,n,2),r!==null&&(rc(n,r,t,e),Ze(r,2),md(r));break}}t=t.return}}function nd(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Hl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Zl=!0,i.add(n),e=rd.bind(null,e,t,n),t.then(e,e))}function rd(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Wl===e&&(Kl&n)===n&&($l===4||$l===3&&(Kl&62914560)===Kl&&300>Ee()-cu?!(Ul&2)&&Mu(e,0):nu|=n,iu===Kl&&(iu=0)),md(e)}function id(e,t){t===0&&(t=Ye()),e=ri(e,t),e!==null&&(Ze(e,t),md(e))}function ad(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),id(e,n)}function od(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),id(e,n)}function sd(e,t){return Se(e,t)}var cd=null,ld=null,ud=!1,dd=!1,fd=!1,pd=0;function md(e){e!==ld&&e.next===null&&(ld===null?cd=ld=e:ld=ld.next=e),dd=!0,ud||(ud=!0,xd())}function hd(e,t){if(!fd&&dd){fd=!0;do for(var n=!1,r=cd;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Re(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,bd(r,a))}else a=Kl,a=Ke(r,r===Wl?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||qe(r,a)||(n=!0,bd(r,a));r=r.next}while(n);fd=!1}}function gd(){_d()}function _d(){dd=ud=!1;var e=0;pd!==0&&nf()&&(e=pd);for(var t=Ee(),n=null,r=cd;r!==null;){var i=r.next,a=vd(r,t);a===0?(r.next=null,n===null?cd=i:n.next=i,i===null&&(ld=n)):(n=r,(e!==0||a&3)&&(dd=!0)),r=i}pu!==0&&pu!==5||hd(e,!1),pd!==0&&(pd=0)}function vd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&qd(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function Mf(e,t,n){var r=jf;if(r&&typeof t==`string`&&t){var i=Rt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),Ef.has(i)||(Ef.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Gd(t,`link`,e),yt(t),r.head.appendChild(t)))}}function Nf(e){Of.D(e),Mf(`dns-prefetch`,e,null)}function Pf(e,t){Of.C(e,t),Mf(`preconnect`,e,t)}function Ff(e,t,n){Of.L(e,t,n);var r=jf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Rt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Rt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Rt(n.imageSizes)+`"]`)):i+=`[href="`+Rt(e)+`"]`;var a=i;switch(t){case`style`:a=Vf(e);break;case`script`:a=Gf(e)}Tf.has(a)||(e=f({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),Tf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Hf(a))||t===`script`&&r.querySelector(Kf(a))||(t=r.createElement(`link`),Gd(t,`link`,e),yt(t),r.head.appendChild(t)))}}function If(e,t){Of.m(e,t);var n=jf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Rt(r)+`"][href="`+Rt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Gf(e)}if(!Tf.has(a)&&(e=f({rel:`modulepreload`,href:e},t),Tf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Kf(a)))return}r=n.createElement(`link`),Gd(r,`link`,e),yt(r),n.head.appendChild(r)}}}function Lf(e,t,n){Of.S(e,t,n);var r=jf;if(r&&e){var i=vt(r).hoistableStyles,a=Vf(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Hf(a)))s.loading=5;else{e=f({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=Tf.get(a))&&Yf(e,n);var c=o=r.createElement(`link`);yt(c),Gd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Jf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Rf(e,t){Of.X(e,t);var n=jf;if(n&&e){var r=vt(n).hoistableScripts,i=Gf(e),a=r.get(i);a||(a=n.querySelector(Kf(i)),a||(e=f({src:e,async:!0},t),(t=Tf.get(i))&&Xf(e,t),a=n.createElement(`script`),yt(a),Gd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function zf(e,t){Of.M(e,t);var n=jf;if(n&&e){var r=vt(n).hoistableScripts,i=Gf(e),a=r.get(i);a||(a=n.querySelector(Kf(i)),a||(e=f({src:e,async:!0,type:`module`},t),(t=Tf.get(i))&&Xf(e,t),a=n.createElement(`script`),yt(a),Gd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Bf(e,t,n,r){var a=(a=ce.current)?Df(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Vf(n.href),n=vt(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Vf(n.href);var o=vt(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Hf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),Tf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},Tf.set(e,n),o||Wf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Gf(n),n=vt(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Vf(e){return`href="`+Rt(e)+`"`}function Hf(e){return`link[rel="stylesheet"][`+e+`]`}function Uf(e){return f({},e,{"data-precedence":e.precedence,precedence:null})}function Wf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Gd(t,`link`,n),yt(t),e.head.appendChild(t))}function Gf(e){return`[src="`+Rt(e)+`"]`}function Kf(e){return`script[async]`+e}function qf(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Rt(n.href)+`"]`);if(r)return t.instance=r,yt(r),r;var a=f({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),yt(r),Gd(r,`style`,a),Jf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Vf(n.href);var o=e.querySelector(Hf(a));if(o)return t.state.loading|=4,t.instance=o,yt(o),o;r=Uf(n),(a=Tf.get(a))&&Yf(r,a),o=(e.ownerDocument||e).createElement(`link`),yt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Gd(o,`link`,r),t.state.loading|=4,Jf(o,n.precedence,e),t.instance=o;case`script`:return o=Gf(n.src),(a=e.querySelector(Kf(o)))?(t.instance=a,yt(a),a):(r=n,(a=Tf.get(o))&&(r=f({},n),Xf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),yt(a),Gd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Jf(r,n.precedence,e));return t.instance}function Jf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function ep(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function tp(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function np(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Vf(r.href),a=t.querySelector(Hf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=ap.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,yt(a);return}a=t.ownerDocument||t,r=Uf(r),(i=Tf.get(i))&&Yf(r,i),a=a.createElement(`link`),yt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Gd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=ap.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var rp=0;function ip(e,t){return e.stylesheets&&e.count===0&&sp(e,e.stylesheets),0rp?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function ap(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)sp(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var op=null;function sp(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,op=new Map,t.forEach(cp,e),op=null,ap.call(e))}function cp(e,t){if(!(t.state.loading&4)){var n=op.get(e);if(n)var r=n.get(null);else{n=new Map,op.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=Ou()}))();function Au(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var ju=e=>typeof e==`object`&&!!e;function Mu(e){return Object.fromEntries(Object.entries(e??{}).filter(([e,t])=>t!==void 0))}var Nu=e=>e===`base`;function Pu(e){return e.slice().filter(e=>!Nu(e))}function Fu(e){return String.fromCharCode(e+(e>25?39:97))}function Iu(e){let t=``,n;for(n=Math.abs(e);n>52;n=n/52|0)t=Fu(n%52)+t;return Fu(n%52)+t}function Lu(e,t){let n=t.length;for(;n;)e=e*33^t.charCodeAt(--n);return e}function Ru(e){return Iu(Lu(5381,e)>>>0)}var zu=/\s*!(important)?/i;function Bu(e){return typeof e==`string`?zu.test(e):!1}function Vu(e){return typeof e==`string`?e.replace(zu,``).trim():e}function Hu(e){return typeof e==`string`?e.replaceAll(` `,`_`):e}var Uu=e=>{let t=new Map;return(...n)=>{let r=JSON.stringify(n);if(t.has(r))return t.get(r);let i=e(...n);return t.set(r,i),i}},Wu=new Set([`__proto__`,`constructor`,`prototype`]);function Gu(...e){return e.reduce((e,t)=>(t&&Object.keys(t).forEach(n=>{if(Wu.has(n))return;let r=e[n],i=t[n];Au(r)&&Au(i)?e[n]=Gu(r,i):e[n]=i}),e),{})}var Ku=e=>e!=null;function qu(e,t,n={}){let{stop:r,getKey:i}=n;function a(e,n=[]){if(ju(e)){let o={};for(let[s,c]of Object.entries(e)){let l=i?.(s,c)??s,u=[...n,l];if(r?.(e,u))return t(e,n);let d=a(c,u);Ku(d)&&(o[l]=d)}return o}return t(e,n)}return a(e)}function Ju(e,t){return e.reduce((e,n,r)=>{let i=t[r];return n!=null&&(e[i]=n),e},{})}function Yu(e,t,n=!0){let{utility:r,conditions:i}=t,{hasShorthand:a,resolveShorthand:o}=r;return qu(e,e=>Array.isArray(e)?Ju(e,i.breakpoints.keys):e,{stop:e=>Array.isArray(e),getKey:n?e=>a?o(e):e:void 0})}var Xu={shift:e=>e,finalize:e=>e,breakpoints:{keys:[]}},Zu=e=>typeof e==`string`?e.replaceAll(/[\n\s]+/g,` `):e;function Qu(e){let{utility:t,hash:n,conditions:r=Xu}=e,i=e=>[t.prefix,e].filter(Boolean).join(`-`),a=(e,a)=>{let o;if(n){let n=[...r.finalize(e),a];o=i(t.toHash(n,Ru))}else o=[...r.finalize(e),i(a)].join(`:`);return o};return Uu(({base:n,...i}={})=>{let o=Yu(Object.assign(i,n),e),s=new Set;return qu(o,(e,n)=>{if(e==null)return;let i=Bu(e),[o,...c]=r.shift(n),l=a(Pu(c),t.transform(o,Vu(Zu(e))).className);i&&(l=`${l}!`),s.add(l)}),Array.from(s).join(` `)})}function $u(...e){return e.flat().filter(e=>Au(e)&&Object.keys(Mu(e)).length>0)}function ed(e){function t(t){let n=$u(...t);return n.length===1?n:n.map(t=>Yu(t,e))}function n(...e){return Gu(...t(e))}function r(...e){return Object.assign({},...t(e))}return{mergeCss:Uu(n),assignCss:r}}var td=/([A-Z])/g,nd=/^ms-/,rd=Uu(e=>e.startsWith(`--`)?e:e.replace(td,`-$1`).replace(nd,`-ms-`).toLowerCase());RegExp(`^(${[`min`,`max`,`clamp`,`calc`].join(`|`)})\\(.*\\)`);var id=`(?:${`cm,mm,Q,in,pc,pt,px,em,ex,ch,rem,lh,rlh,vw,vh,vmin,vmax,vb,vi,svw,svh,lvw,lvh,dvw,dvh,cqw,cqh,cqi,cqb,cqmin,cqmax,%`.split(`,`).join(`|`)})`;RegExp(`^[+-]?[0-9]*.?[0-9]+(?:[eE][+-]?[0-9]+)?${id}$`);function ad(e,...t){let n=Object.getOwnPropertyDescriptors(e),r=Object.keys(n),i=e=>{let t={};for(let r=0;ri(Array.isArray(e)?e:r.filter(e))).concat(i(r))}var od=(...e)=>{let t=e.reduce((e,t)=>(t&&t.forEach(t=>e.add(t)),e),new Set([]));return Array.from(t)},sd=[`htmlSize`,`htmlTranslate`,`htmlWidth`,`htmlHeight`];function cd(e){return sd.includes(e)?e.replace(`html`,``).toLowerCase():e}function ld(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[cd(e),t]))}ld.keys=sd;var ud=new Set(`_hover,_focus,_focusWithin,_focusVisible,_disabled,_active,_visited,_target,_readOnly,_readWrite,_empty,_checked,_enabled,_expanded,_highlighted,_complete,_incomplete,_dragging,_before,_after,_firstLetter,_firstLine,_marker,_selection,_file,_backdrop,_first,_last,_only,_even,_odd,_firstOfType,_lastOfType,_onlyOfType,_peerFocus,_peerHover,_peerActive,_peerFocusWithin,_peerFocusVisible,_peerDisabled,_peerChecked,_peerInvalid,_peerExpanded,_peerPlaceholderShown,_groupFocus,_groupHover,_groupActive,_groupFocusWithin,_groupFocusVisible,_groupDisabled,_groupChecked,_groupExpanded,_groupInvalid,_indeterminate,_required,_valid,_invalid,_autofill,_inRange,_outOfRange,_placeholder,_placeholderShown,_pressed,_selected,_grabbed,_underValue,_overValue,_atValue,_default,_optional,_open,_closed,_fullscreen,_loading,_hidden,_current,_currentPage,_currentStep,_today,_unavailable,_rangeStart,_rangeEnd,_now,_topmost,_motionReduce,_motionSafe,_print,_landscape,_portrait,_dark,_light,_osDark,_osLight,_highContrast,_lessContrast,_moreContrast,_ltr,_rtl,_scrollbar,_scrollbarThumb,_scrollbarTrack,_horizontal,_vertical,_icon,_starting,_noscript,_invertedColors,sm,smOnly,smDown,md,mdOnly,mdDown,lg,lgOnly,lgDown,xl,xlOnly,xlDown,2xl,2xlOnly,2xlDown,smToMd,smToLg,smToXl,smTo2xl,mdToLg,mdToXl,mdTo2xl,lgToXl,lgTo2xl,xlTo2xl,@/xs,@/sm,@/md,@/lg,@/xl,@/2xl,@/3xl,@/4xl,@/5xl,@/6xl,@/7xl,@/8xl,base`.split(`,`)),dd=/^@|&|&$/;function fd(e){return ud.has(e)||dd.test(e)}var pd=/^_/,md=/&|@/;function hd(e){return e.map(e=>ud.has(e)?e.replace(pd,``):md.test(e)?`[${Hu(e.trim())}]`:e)}function gd(e){return e.sort((e,t)=>{let n=fd(e),r=fd(t);return n&&!r?1:!n&&r?-1:0})}var _d=`aspectRatio:asp,boxDecorationBreak:bx-db,zIndex:z,boxSizing:bx-s,objectPosition:obj-p,objectFit:obj-f,overscrollBehavior:ovs-b,overscrollBehaviorX:ovs-bx,overscrollBehaviorY:ovs-by,position:pos/1,top:top,left:left,inset:inset,insetInline:inset-x/insetX,insetBlock:inset-y/insetY,insetBlockEnd:inset-be,insetBlockStart:inset-bs,insetInlineEnd:inset-e/insetEnd/end,insetInlineStart:inset-s/insetStart/start,right:right,bottom:bottom,float:float,visibility:vis,display:d,hideFrom:hide,hideBelow:show,flexBasis:flex-b,flex:flex,flexDirection:flex-d/flexDir,flexGrow:flex-g,flexShrink:flex-sh,gridTemplateColumns:grid-tc,gridTemplateRows:grid-tr,gridColumn:grid-c,gridRow:grid-r,gridColumnStart:grid-cs,gridColumnEnd:grid-ce,gridAutoFlow:grid-af,gridAutoColumns:grid-ac,gridAutoRows:grid-ar,gap:gap,gridGap:grid-g,gridRowGap:grid-rg,gridColumnGap:grid-cg,rowGap:rg,columnGap:cg,justifyContent:jc,alignContent:ac,alignItems:ai,alignSelf:as,padding:p/1,paddingLeft:pl/1,paddingRight:pr/1,paddingTop:pt/1,paddingBottom:pb/1,paddingBlock:py/1/paddingY,paddingBlockEnd:pbe,paddingBlockStart:pbs,paddingInline:px/paddingX/1,paddingInlineEnd:pe/1/paddingEnd,paddingInlineStart:ps/1/paddingStart,marginLeft:ml/1,marginRight:mr/1,marginTop:mt/1,marginBottom:mb/1,margin:m/1,marginBlock:my/1/marginY,marginBlockEnd:mbe,marginBlockStart:mbs,marginInline:mx/1/marginX,marginInlineEnd:me/1/marginEnd,marginInlineStart:ms/1/marginStart,spaceX:sx,spaceY:sy,outlineWidth:ring-w/ringWidth,outlineColor:ring-c/ringColor,outline:ring/1,outlineOffset:ring-o/ringOffset,focusRing:focus-ring,focusVisibleRing:focus-v-ring,focusRingColor:focus-ring-c,focusRingOffset:focus-ring-o,focusRingWidth:focus-ring-w,focusRingStyle:focus-ring-s,divideX:dvd-x,divideY:dvd-y,divideColor:dvd-c,divideStyle:dvd-s,width:w/1,inlineSize:w-is,minWidth:min-w/minW,minInlineSize:min-w-is,maxWidth:max-w/maxW,maxInlineSize:max-w-is,height:h/1,blockSize:h-bs,minHeight:min-h/minH,minBlockSize:min-h-bs,maxHeight:max-h/maxH,maxBlockSize:max-b,boxSize:size,color:c,fontFamily:ff,fontSize:fs,fontSizeAdjust:fs-a,fontPalette:fp,fontKerning:fk,fontFeatureSettings:ff-s,fontWeight:fw,fontSmoothing:fsmt,fontVariant:fv,fontVariantAlternates:fv-alt,fontVariantCaps:fv-caps,fontVariationSettings:fv-s,fontVariantNumeric:fv-num,letterSpacing:ls,lineHeight:lh,textAlign:ta,textDecoration:td,textDecorationColor:td-c,textEmphasisColor:te-c,textDecorationStyle:td-s,textDecorationThickness:td-t,textUnderlineOffset:tu-o,textTransform:tt,textIndent:ti,textShadow:tsh,textShadowColor:tsh-c/textShadowColor,WebkitTextFillColor:wktf-c,textOverflow:tov,verticalAlign:va,wordBreak:wb,textWrap:tw,truncate:trunc,lineClamp:lc,listStyleType:li-t,listStylePosition:li-pos,listStyleImage:li-img,listStyle:li-s,backgroundPosition:bg-p/bgPosition,backgroundPositionX:bg-p-x/bgPositionX,backgroundPositionY:bg-p-y/bgPositionY,backgroundAttachment:bg-a/bgAttachment,backgroundClip:bg-cp/bgClip,background:bg/1,backgroundColor:bg-c/bgColor,backgroundOrigin:bg-o/bgOrigin,backgroundImage:bg-i/bgImage,backgroundRepeat:bg-r/bgRepeat,backgroundBlendMode:bg-bm/bgBlendMode,backgroundSize:bg-s/bgSize,backgroundGradient:bg-grad/bgGradient,backgroundLinear:bg-linear/bgLinear,backgroundRadial:bg-radial/bgRadial,backgroundConic:bg-conic/bgConic,textGradient:txt-grad,gradientFromPosition:grad-from-pos,gradientToPosition:grad-to-pos,gradientFrom:grad-from,gradientTo:grad-to,gradientVia:grad-via,gradientViaPosition:grad-via-pos,borderRadius:bdr/rounded,borderTopLeftRadius:bdr-tl/roundedTopLeft,borderTopRightRadius:bdr-tr/roundedTopRight,borderBottomRightRadius:bdr-br/roundedBottomRight,borderBottomLeftRadius:bdr-bl/roundedBottomLeft,borderTopRadius:bdr-t/roundedTop,borderRightRadius:bdr-r/roundedRight,borderBottomRadius:bdr-b/roundedBottom,borderLeftRadius:bdr-l/roundedLeft,borderStartStartRadius:bdr-ss/roundedStartStart,borderStartEndRadius:bdr-se/roundedStartEnd,borderStartRadius:bdr-s/roundedStart,borderEndStartRadius:bdr-es/roundedEndStart,borderEndEndRadius:bdr-ee/roundedEndEnd,borderEndRadius:bdr-e/roundedEnd,border:bd,borderWidth:bd-w,borderTopWidth:bd-t-w,borderLeftWidth:bd-l-w,borderRightWidth:bd-r-w,borderBottomWidth:bd-b-w,borderBlockStartWidth:bd-bs-w,borderBlockEndWidth:bd-be-w,borderColor:bd-c,borderInline:bd-x/borderX,borderInlineWidth:bd-x-w/borderXWidth,borderInlineColor:bd-x-c/borderXColor,borderBlock:bd-y/borderY,borderBlockWidth:bd-y-w/borderYWidth,borderBlockColor:bd-y-c/borderYColor,borderLeft:bd-l,borderLeftColor:bd-l-c,borderInlineStart:bd-s/borderStart,borderInlineStartWidth:bd-s-w/borderStartWidth,borderInlineStartColor:bd-s-c/borderStartColor,borderRight:bd-r,borderRightColor:bd-r-c,borderInlineEnd:bd-e/borderEnd,borderInlineEndWidth:bd-e-w/borderEndWidth,borderInlineEndColor:bd-e-c/borderEndColor,borderTop:bd-t,borderTopColor:bd-t-c,borderBottom:bd-b,borderBottomColor:bd-b-c,borderBlockEnd:bd-be,borderBlockEndColor:bd-be-c,borderBlockStart:bd-bs,borderBlockStartColor:bd-bs-c,opacity:op,boxShadow:bx-sh/shadow,boxShadowColor:bx-sh-c/shadowColor,mixBlendMode:mix-bm,filter:filter,brightness:brightness,contrast:contrast,grayscale:grayscale,hueRotate:hue-rotate,invert:invert,saturate:saturate,sepia:sepia,dropShadow:drop-shadow,blur:blur,backdropFilter:bkdp,backdropBlur:bkdp-blur,backdropBrightness:bkdp-brightness,backdropContrast:bkdp-contrast,backdropGrayscale:bkdp-grayscale,backdropHueRotate:bkdp-hue-rotate,backdropInvert:bkdp-invert,backdropOpacity:bkdp-opacity,backdropSaturate:bkdp-saturate,backdropSepia:bkdp-sepia,borderCollapse:bd-cl,borderSpacing:bd-sp,borderSpacingX:bd-sx,borderSpacingY:bd-sy,tableLayout:tbl,transitionTimingFunction:trs-tmf,transitionDelay:trs-dly,transitionDuration:trs-dur,transitionProperty:trs-prop,transition:trs,animation:anim,animationName:anim-n,animationTimingFunction:anim-tmf,animationDuration:anim-dur,animationDelay:anim-dly,animationPlayState:anim-ps,animationComposition:anim-comp,animationFillMode:anim-fm,animationDirection:anim-dir,animationIterationCount:anim-ic,animationRange:anim-r,animationState:anim-s,animationRangeStart:anim-rs,animationRangeEnd:anim-re,animationTimeline:anim-tl,transformOrigin:trf-o,transformBox:trf-b,transformStyle:trf-s,transform:trf,rotate:rotate,rotateX:rotate-x,rotateY:rotate-y,rotateZ:rotate-z,scale:scale,scaleX:scale-x,scaleY:scale-y,translate:translate,translateX:translate-x/x,translateY:translate-y/y,translateZ:translate-z/z,accentColor:ac-c,caretColor:ca-c,scrollBehavior:scr-bhv,scrollbar:scr-bar,scrollbarColor:scr-bar-c,scrollbarGutter:scr-bar-g,scrollbarWidth:scr-bar-w,scrollMargin:scr-m,scrollMarginLeft:scr-ml,scrollMarginRight:scr-mr,scrollMarginTop:scr-mt,scrollMarginBottom:scr-mb,scrollMarginBlock:scr-my/scrollMarginY,scrollMarginBlockEnd:scr-mbe,scrollMarginBlockStart:scr-mbt,scrollMarginInline:scr-mx/scrollMarginX,scrollMarginInlineEnd:scr-me,scrollMarginInlineStart:scr-ms,scrollPadding:scr-p,scrollPaddingBlock:scr-py/scrollPaddingY,scrollPaddingBlockStart:scr-pbs,scrollPaddingBlockEnd:scr-pbe,scrollPaddingInline:scr-px/scrollPaddingX,scrollPaddingInlineEnd:scr-pe,scrollPaddingInlineStart:scr-ps,scrollPaddingLeft:scr-pl,scrollPaddingRight:scr-pr,scrollPaddingTop:scr-pt,scrollPaddingBottom:scr-pb,scrollSnapAlign:scr-sa,scrollSnapStop:scrs-s,scrollSnapType:scrs-t,scrollSnapStrictness:scrs-strt,scrollSnapMargin:scrs-m,scrollSnapMarginTop:scrs-mt,scrollSnapMarginBottom:scrs-mb,scrollSnapMarginLeft:scrs-ml,scrollSnapMarginRight:scrs-mr,scrollSnapCoordinate:scrs-c,scrollSnapDestination:scrs-d,scrollSnapPointsX:scrs-px,scrollSnapPointsY:scrs-py,scrollSnapTypeX:scrs-tx,scrollSnapTypeY:scrs-ty,scrollTimeline:scrtl,scrollTimelineAxis:scrtl-a,scrollTimelineName:scrtl-n,touchAction:tch-a,userSelect:us,overflow:ov,overflowWrap:ov-wrap,overflowX:ov-x,overflowY:ov-y,overflowAnchor:ov-a,overflowBlock:ov-b,overflowInline:ov-i,overflowClipBox:ovcp-bx,overflowClipMargin:ovcp-m,overscrollBehaviorBlock:ovs-bb,overscrollBehaviorInline:ovs-bi,fill:fill,stroke:stk,strokeWidth:stk-w,strokeDasharray:stk-dsh,strokeDashoffset:stk-do,strokeLinecap:stk-lc,strokeLinejoin:stk-lj,strokeMiterlimit:stk-ml,strokeOpacity:stk-op,srOnly:sr,debug:debug,appearance:ap,backfaceVisibility:bfv,clipPath:cp-path,hyphens:hy,mask:msk,maskImage:msk-i,maskSize:msk-s,textSizeAdjust:txt-adj,container:cq,containerName:cq-n,containerType:cq-t,cursor:cursor,textStyle:textStyle`,vd=new Map,yd=new Map;_d.split(`,`).forEach(e=>{let[t,n]=e.split(`:`),[r,...i]=n.split(`/`);vd.set(t,r),i.length&&i.forEach(e=>{yd.set(e===`1`?r:e,t)})});var bd=e=>yd.get(e)||e,xd={conditions:{shift:gd,finalize:hd,breakpoints:{keys:[`base`,`sm`,`md`,`lg`,`xl`,`2xl`]}},utility:{transform:(e,t)=>{let n=bd(e);return{className:`${vd.get(n)||rd(n)}_${Hu(t)}`}},hasShorthand:!0,toHash:(e,t)=>t(e.join(`:`)),resolveShorthand:bd}},Sd=Qu(xd),V=(...e)=>Sd(Cd(...e));V.raw=(...e)=>Cd(...e);var{mergeCss:Cd,assignCss:wd}=ed(xd);function Td(){let e=``,t=0,n;for(;t({base:{},variants:{},defaultVariants:{},compoundVariants:[],...e});function H(e){let{base:t,variants:n,defaultVariants:r,compoundVariants:i}=Ed(e),a=e=>({...r,...Mu(e)});function o(e={}){let r=a(e),o={...t};for(let[e,t]of Object.entries(r))n[e]?.[t]&&(o=Cd(o,n[e][t]));let s=Dd(i,r);return Cd(o,s)}function s(e){let a=Ed(e.config),o=od(e.variantKeys,Object.keys(n));return H({base:Cd(t,a.base),variants:Object.fromEntries(o.map(e=>[e,Cd(n[e],a.variants[e])])),defaultVariants:Gu(r,a.defaultVariants),compoundVariants:[...i,...a.compoundVariants]})}function c(e){return V(o(e))}let l=Object.keys(n);function u(e){return ad(e,l)}let d=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,Object.keys(t)]));return Object.assign(Uu(c),{__cva__:!0,variantMap:d,variantKeys:l,raw:o,config:e,merge:s,splitVariantProps:u,getVariantProps:a})}function Dd(e,t){let n={};return e.forEach(e=>{Object.entries(e).every(([e,n])=>e===`css`?!0:(Array.isArray(n)?n:[n]).some(n=>t[e]===n))&&(n=Cd(n,e.css))}),n}function Od(e){return e.codeWorktreeExists||e.memoryWorktreeExists}var kd=[],Ad=null,jd=null,Md=kd,Nd=e=>{let t=e.analytics?.attentionQueue??kd,n=e.suppressedAttentionIds;return Object.keys(n).length===0?t:t===Ad&&n===jd?Md:(Ad=t,jd=n,Md=t.filter(e=>!n[e.id]),Md)};function Pd(e){return e==null?`—`:e<60?`${Math.round(e)}s`:e<3600?`${Math.round(e/60)}m`:e<86400?`${Math.round(e/3600)}h`:`${Math.round(e/86400)}d`}var Fd=new Set([`stopped`,`failed`,`error`,`down`,`unreachable`]),Id=new Set([`indexing`,`indexing-pending`,`reindexing`,`seeding`]);function Ld(e){return e.ok===!1||Fd.has(e.state)?`down`:Id.has(e.indexingState)?`indexing`:`nominal`}var Rd={code:0,memory:1};function zd(e){return[...e].sort((e,t)=>(Rd[e.role??``]??9)-(Rd[t.role??``]??9)||e.id.localeCompare(t.id))}function Bd(e){let t=e.filter(e=>e.scope!==`worktree`),n=new Map;for(let t of e){if(t.scope!==`worktree`)continue;let e=t.worktreeGroup??`(worktree)`,r=n.get(e);r?r.push(t):n.set(e,[t])}let r=[];t.length>0&&r.push({key:`workspace`,scope:`workspace`,repoId:null,engines:zd(t)});for(let[e,t]of[...n.entries()].sort(([e],[t])=>e.localeCompare(t)))r.push({key:e,scope:`worktree`,repoId:t[0]?.repoId??null,engines:zd(t)});return r}var Vd=[`current`,`drifted`,`missingVerification`,`missing`,`orphaned`,`unsupported`];function Hd(e){let t=e?.counts??{},n=Object.values(t).reduce((e,t)=>e+t,0);return n===0?[]:[...new Set([...Vd,...Object.keys(t)])].filter(e=>(t[e]??0)>0).map(e=>({cls:e,count:t[e],pct:Math.round(t[e]/n*100)}))}var Ud=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},Wd=(e=>e?Ud(e):Ud),Gd=e=>e;function Kd(e,t=Gd){let n=g.useSyncExternalStore(e.subscribe,g.useCallback(()=>t(e.getState()),[e,t]),g.useCallback(()=>t(e.getInitialState()),[e,t]));return g.useDebugValue(n),n}var qd=new Set([`staleSeconds`,`snapshotStaleSeconds`,`ageSeconds`,`waitSeconds`,`heartbeatAgeSeconds`]);function Jd(e,t){if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length?!1:e.every((e,n)=>Jd(e,t[n]));if(typeof e!=`object`||typeof t!=`object`||e===null||t===null)return!1;let n=e,r=t,i=Object.keys(n).filter(e=>!qd.has(e)),a=Object.keys(r).filter(e=>!qd.has(e));return i.length===a.length?i.every(e=>Object.prototype.hasOwnProperty.call(r,e)&&Jd(n[e],r[e])):!1}var Yd=new WeakMap;function Xd(e,t=Date.now()){Yd.set(e,t)}function Zd(e,t,n){if(t==null)return;if(e==null)return t;let r=Yd.get(e);return r==null?t:t+Math.max(0,(n-r)/1e3)}function Qd(e=1e4){let[t,n]=(0,g.useState)(()=>Date.now());return(0,g.useEffect)(()=>{let t=window.setInterval(()=>n(Date.now()),e);return()=>window.clearInterval(t)},[e]),t}var $d=2e3,ef=(e,t)=>Jd(e,t)?e:t,tf=(e,t)=>e===t?!0:e===null||t===null?!1:e.lastTickAt===t.lastTickAt&&e.ageSeconds===t.ageSeconds&&e.staleCutoffSeconds===t.staleCutoffSeconds&&e.stale===t.stale&&e.pendingInboxCount===t.pendingInboxCount&&e.redeliverableInboxCount===t.redeliverableInboxCount&&e.lastSweepDurationSeconds===t.lastSweepDurationSeconds,nf=(e,t,n)=>{let r={},i=!1;for(let a of t){let t=n(a),o=e[t];o!==void 0&&Jd(o,a)?r[t]=o:(Xd(a),r[t]=a,i=!0)}return!i&&Object.keys(e).length===t.length?e:r},rf=e=>{if(!e)return;let t=Date.now(),n=[e.driftSnapshots,e.stalestSidecars,e.setupSummaries,e.setupProgress,e.toolReports,e.agentPickups,e.taskDocuments,e.series,e.attentionQueue,e.engineProcesses];for(let e of n)for(let n of e??[])Xd(n,t)},af=(e,t,n)=>({...e,[n(t)]:t}),of=(e,t)=>{let n={...e};return delete n[t],n},sf=(e,t)=>{let n=Object.keys(e);if(n.length===0)return e;let r=new Set((t?.attentionQueue??[]).map(e=>e.id)),i=n.filter(e=>r.has(e));return i.length===n.length?e:Object.fromEntries(i.map(e=>[e,!0]))};function cf(e,t,n){switch(t){case`lifecycle`:{let t=n;return Jd(e.lifecycles[t.id],t)?null:(Xd(t),{lifecycles:af(e.lifecycles,t,e=>e.id)})}case`lifecycle.removed`:{let{id:t}=n;return t in e.lifecycles?{lifecycles:of(e.lifecycles,t)}:null}case`enclosure`:{let t=n;return Jd(e.enclosures[t.enclosure],t)?null:(Xd(t),{enclosures:af(e.enclosures,t,e=>e.enclosure)})}case`enclosure.removed`:{let{enclosure:t}=n;return t in e.enclosures?{enclosures:of(e.enclosures,t)}:null}case`provider`:{let t=n;return Jd(e.providers[t.id],t)?null:(Xd(t),{providers:af(e.providers,t,e=>e.id)})}case`provider.removed`:{let{id:t}=n;return t in e.providers?{providers:of(e.providers,t)}:null}case`activeWorktreeGroups`:{let{activeWorktreeGroups:t}=n;return Jd(e.activeWorktreeGroups,t)?null:{activeWorktreeGroups:t}}case`metrics`:{let t=n;return Jd(e.metrics,t)?null:{metrics:t}}case`analytics`:{let t=n;return Jd(e.analytics,t)?null:(rf(t),{analytics:t,suppressedAttentionIds:sf(e.suppressedAttentionIds,t)})}default:return null}}var lf=Wd((e,t)=>({conn:`connecting`,generatedAt:null,gen:0,lifecycles:{},enclosures:{},providers:{},activeWorktreeGroups:[],metrics:null,analytics:null,servingBuild:null,supervisorHeartbeat:null,events:[],eventsHydrated:!1,suppressedAttentionIds:{},setConn:n=>{t().conn!==n&&e({conn:n})},applySnapshot:n=>{let r=t(),i=nf(r.lifecycles,n.lifecycles,e=>e.id),a=nf(r.enclosures,n.enclosures,e=>e.enclosure),o=nf(r.providers,n.providers,e=>e.id),s=ef(r.activeWorktreeGroups,n.activeWorktreeGroups??[]),c=ef(r.metrics,n.metrics),l=ef(r.analytics,n.analytics);l!==r.analytics&&rf(l);let u=ef(r.servingBuild,n.servingBuild??null),d=n.supervisorHeartbeat??null,f=sf(r.suppressedAttentionIds,l),p=i===r.lifecycles&&a===r.enclosures&&o===r.providers&&s===r.activeWorktreeGroups&&c===r.metrics&&l===r.analytics&&u===r.servingBuild&&f===r.suppressedAttentionIds;if(p&&r.conn===`live`){tf(r.supervisorHeartbeat,d)||e({supervisorHeartbeat:d});return}e({conn:`live`,generatedAt:p?r.generatedAt:n.generatedAt,lifecycles:i,enclosures:a,providers:o,activeWorktreeGroups:s,metrics:c,analytics:l,servingBuild:u,supervisorHeartbeat:d,suppressedAttentionIds:f})},applyDelta:(n,r)=>{let i=cf(t(),n,r);i!==null&&e(i)},pushEvent:t=>e(e=>{try{let n=JSON.parse(t),r=[...e.events,n];return{events:r.length>$d?r.slice(r.length-$d):r,eventsHydrated:!0}}catch{return{}}}),markEventsHydrated:()=>e({eventsHydrated:!0}),suppressAttention:t=>e(e=>({suppressedAttentionIds:{...e.suppressedAttentionIds,...Object.fromEntries(t.map(e=>[e,!0]))}})),releaseAttention:t=>e(e=>{let n={...e.suppressedAttentionIds};for(let e of t)delete n[e];return{suppressedAttentionIds:n}}),reset:()=>e(e=>({gen:e.gen+1,generatedAt:null,lifecycles:{},enclosures:{},providers:{},activeWorktreeGroups:[],metrics:null,analytics:null,servingBuild:null,supervisorHeartbeat:null,events:[],eventsHydrated:!1,suppressedAttentionIds:{}}))})),uf=e=>Kd(lf,e),df=[`lifecycle`,`lifecycle.removed`,`enclosure`,`enclosure.removed`,`provider`,`provider.removed`,`activeWorktreeGroups`,`metrics`,`analytics`];function ff(e=``){let t=new EventSource(`${e}/api/stream`),n=lf.getState();t.addEventListener(`snapshot`,e=>{n.applySnapshot(JSON.parse(e.data))});for(let e of df)t.addEventListener(e,t=>{n.applyDelta(e,JSON.parse(t.data))});return t.addEventListener(`open`,()=>n.setConn(`live`)),t.addEventListener(`error`,()=>n.setConn(`signal-lost`)),()=>t.close()}function pf(e,t=``,n){let r=new EventSource(`${t}/api/events`);return r.addEventListener(`event`,t=>e(t.data)),r.addEventListener(`ready`,()=>n?.()),()=>r.close()}var mf=`taskdoc:`,hf=`series:`,gf=`lifecycle:`,_f=e=>`${mf}${e}`,vf=e=>`${hf}${e}`,yf=e=>`${gf}${e}`;function bf(e,t,n){return e?e.startsWith(mf)?{kind:`taskdoc`,docPath:e.slice(8)}:e.startsWith(hf)?{kind:`series`,seriesId:e.slice(7)}:e.startsWith(gf)?{kind:`lifecycle`,lifecycleId:e.slice(10)}:t[e]?{kind:`lifecycle`,lifecycleId:e}:n?.series.some(t=>t.seriesId===e)?{kind:`series`,seriesId:e}:n?.taskDocuments.some(t=>t.docPath===e)?{kind:`taskdoc`,docPath:e}:null:null}function xf(e,t,n){let r=bf(e,t,n);if(r?.kind===`lifecycle`)return r.lifecycleId;if(r?.kind===`taskdoc`)return n?.taskDocuments.find(e=>e.docPath===r.docPath)?.lifecycleId}function Sf(e){let t=e.docPath.split(`/`).slice(0,-1).filter(Boolean).pop()??``;if(!(!e.repository||!t||!e.id))return`${e.repository}/${t}/${e.id}`}function Cf(e,t){return e.find(e=>Sf(e)===t)?.title}function wf(e){return e.split(`/`).filter(Boolean).pop()??e}var Tf=e=>e.docPath.split(`/`).slice(0,-1).filter(Boolean).pop()??``;function Ef(e){let t=new Map,n=new Map,r=new Map;for(let i of e){if(i.kind!==`master`)continue;let e=Tf(i);if(!e||t.has(e))continue;let a={key:e,title:i.title||e,master:e,children:[]};t.set(e,a),r.set(e,i),i.lifecycleId&&n.set(i.lifecycleId,a)}let i=new Set;for(let[e,a]of t){let t=r.get(e)?.masterLifecycleId,o=t?n.get(t):void 0;o&&o!==a&&(o.children.push(a),i.add(a))}let a=[];for(let r of e){if(r.kind!==`subTask`)continue;let e=Sf(r);if(!e)continue;let i={key:e,title:r.title||wf(e),leafKey:e,children:[]},o=t.get(Tf(r))??(r.masterLifecycleId?n.get(r.masterLifecycleId):void 0);o?o.children.push(i):a.push(i)}return[...[...t.values()].filter(e=>!i.has(e)),...a]}function Df(e,t){for(let n of e){if(n.master===t)return[n];let e=Df(n.children,t);if(e.length)return[n,...e]}return[]}function Of(e,t,n){let r=bf(e,t,n);if(!r)return;let i=n?.taskDocuments??[],a;return r.kind===`taskdoc`?a=i.find(e=>e.docPath===r.docPath):r.kind===`lifecycle`&&(a=i.find(e=>e.lifecycleId===r.lifecycleId)),a&&Tf(a)||void 0}function kf(e){let t=new Map;for(let n of e)n.lifecycleId&&t.set(n.lifecycleId,n);return t}function Af(e,t,n){return e.enclosure&&t[e.enclosure]?t[e.enclosure]:n.get(e.id)}function jf(e,t,n){return n?e.id===n.taskId||e.id===n.taskName||t.length>1?n.taskName||n.taskId||Pf(e.id):n.leafId||n.enclosureId||n.taskName||Pf(e.id):Nf(t,Pf(e.id))}function Mf(e,t){return t.filter(t=>t.lifecycleId===e.id)}function Nf(e,t){let n=e.find(e=>e.kind===`master`);return n?.title?n.title:e.length===1&&e[0].title?e[0].title:t}function Pf(e){return e.includes(`/`)?e.slice(e.indexOf(`/`)+1):e}function Ff(...e){return(...t)=>{for(let n of e)typeof n==`function`&&n(...t)}}var If=typeof document<`u`?g.useLayoutEffect:()=>{},Lf={prefix:String(Math.round(Math.random()*1e10)),current:0},Rf=g.createContext(Lf),zf=g.createContext(!1);typeof window<`u`&&window.document&&window.document.createElement;var Bf=new WeakMap;function Vf(e=!1){let t=(0,g.useContext)(Rf),n=(0,g.useRef)(null);if(n.current===null&&!e){let e=g.default.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;if(e){let n=Bf.get(e);n==null?Bf.set(e,{id:t.current,state:e.memoizedState}):e.memoizedState!==n.state&&(t.current=n.id,Bf.delete(e))}n.current=++t.current}return n.current}function Hf(e){let t=(0,g.useContext)(Rf),n=Vf(!!e),r=`react-aria${t.prefix}`;return e||`${r}-${n}`}function Uf(e){let t=g.useId(),[n]=(0,g.useState)(Jf()),r=n?`react-aria`:`react-aria${Lf.prefix}`;return e||`${r}-${t}`}var Wf=typeof g.useId==`function`?Uf:Hf;function Gf(){return!1}function Kf(){return!0}function qf(e){return()=>{}}function Jf(){return typeof g.useSyncExternalStore==`function`?g.useSyncExternalStore(qf,Gf,Kf):(0,g.useContext)(zf)}function Yf(e){let[t,n]=(0,g.useState)(e),r=(0,g.useRef)(t),i=(0,g.useRef)(null),a=(0,g.useRef)(()=>{if(!i.current)return;let e=i.current.next();if(e.done){i.current=null;return}r.current===e.value?a.current():n(e.value)});return If(()=>{r.current=t,i.current&&a.current()}),[t,(0,g.useCallback)(e=>{i.current=e(r.current),a.current()},[a])]}var Xf=!!(typeof window<`u`&&window.document&&window.document.createElement),Zf=new Map,Qf;typeof FinalizationRegistry<`u`&&(Qf=new FinalizationRegistry(e=>{Zf.delete(e)}));function $f(e){let[t,n]=(0,g.useState)(e),r=(0,g.useRef)(null),i=Wf(t),a=(0,g.useRef)(null);if(Qf&&Qf.register(a,i),Xf){let e=Zf.get(i);e&&!e.includes(r)?e.push(r):Zf.set(i,[r])}return If(()=>{let e=i;return()=>{Qf&&Qf.unregister(a),Zf.delete(e)}},[i]),(0,g.useEffect)(()=>{let e=r.current;return e&&n(e),()=>{e&&(r.current=null)}}),i}function ep(e,t){if(e===t)return e;let n=Zf.get(e);if(n)return n.forEach(e=>e.current=t),t;let r=Zf.get(t);return r?(r.forEach(t=>t.current=e),e):t}function tp(e=[]){let t=$f(),[n,r]=Yf(t),i=(0,g.useCallback)(()=>{r(function*(){yield t,yield document.getElementById(t)?t:void 0})},[t,r]);return If(i,[t,i,...e]),n}function np(...e){return e.length===1&&e[0]?e[0]:t=>{let n=!1,r=e.map(e=>{let r=rp(e,t);return n||=typeof r==`function`,r});if(n)return()=>{r.forEach((t,n)=>{typeof t==`function`?t():rp(e[n],null)})}}}function rp(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function ip(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t=65&&e.charCodeAt(2)<=90?t[e]=Ff(n,i):(e===`className`||e===`UNSAFE_className`)&&typeof n==`string`&&typeof i==`string`?t[e]=ap(n,i):e===`id`&&n&&i?t.id=ep(n,i):e===`ref`&&n&&i?t.ref=np(n,i):t[e]=i===void 0?n:i}}return t}function sp(e){let t=(0,g.useRef)(null),n=(0,g.useRef)(void 0),r=(0,g.useCallback)(t=>{if(typeof e==`function`){let n=e,r=n(t);return()=>{typeof r==`function`?r():n(null)}}else if(e)return e.current=t,()=>{e.current=null}},[e]);return(0,g.useMemo)(()=>({get current(){return t.current},set current(e){t.current=e,n.current&&=(n.current(),void 0),e!=null&&(n.current=r(e))}}),[r])}var cp=Symbol(`default`);function lp({values:e,children:t}){for(let[n,r]of e)t=g.createElement(n.Provider,{value:r},t);return t}function up(e){let{className:t,style:n,children:r,defaultClassName:i,defaultChildren:a,defaultStyle:o,values:s,render:c}=e;return(0,g.useMemo)(()=>{let e,l,u;return e=typeof t==`function`?t({...s,defaultClassName:i}):t,l=typeof n==`function`?n({...s,defaultStyle:o||{}}):n,u=typeof r==`function`?r({...s,defaultChildren:a}):r??a,{className:e??i,style:l||o?{...o,...l}:void 0,children:u??a,"data-rac":``,render:c?e=>c(e,s):void 0}},[t,n,r,i,a,o,s,c])}function dp(e,t){let n=(0,g.useContext)(e);if(t===null)return null;if(n&&typeof n==`object`&&`slots`in n&&n.slots){let e=t||cp;if(!n.slots[e]){let e=new Intl.ListFormat().format(Object.keys(n.slots).map(e=>`"${e}"`)),r=t?`Invalid slot "${t}".`:`A slot prop is required.`;throw Error(`${r} Valid slot names are ${e}.`)}return n.slots[e]}return n}function fp(e,t,n){let{ref:r,...i}=dp(n,e.slot)||{},a=sp((0,g.useMemo)(()=>np(t,r),[t,r])),o=op(i,e);return`style`in i&&i.style&&`style`in e&&e.style&&(typeof i.style==`function`||typeof e.style==`function`?o.style=t=>{let n=typeof i.style==`function`?i.style(t):i.style,r={...t.defaultStyle,...n},a=typeof e.style==`function`?e.style({...t,defaultStyle:r}):e.style;return{...r,...a}}:o.style={...i.style,...e.style}),[o,a]}function pp(e=!0){let[t,n]=(0,g.useState)(e),r=(0,g.useRef)(!1),i=(0,g.useCallback)(e=>{r.current=!0,n(!!e)},[]);return If(()=>{r.current||n(!1)},[]),[i,t]}function mp(e){let t=/^(data-.*)$/,n={};for(let r in e)t.test(r)||(n[r]=e[r]);return n}function hp(e,t,n){let{render:r,...i}=t,a=(0,g.useRef)(null),o=(0,g.useMemo)(()=>np(n,a),[n,a]);If(()=>{},[e,r]);let s={...i,ref:o};return r?r(s,void 0):g.createElement(e,s)}var gp={},_p=new Proxy({},{get(e,t){if(typeof t!=`string`)return;let n=gp[t];return n||(n=(0,g.forwardRef)(hp.bind(null,t)),gp[t]=n),n}}),vp=`react-aria-clear-focus`,yp=`react-aria-focus`,bp=e=>e?.ownerDocument??document,xp=e=>e&&`window`in e&&e.window===e?e:bp(e).defaultView||window;function Sp(e){return typeof e==`object`&&!!e&&`nodeType`in e&&typeof e.nodeType==`number`}function Cp(e){return Sp(e)&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&`host`in e}var wp=!1;function Tp(){return wp}function U(e,t){if(!Tp())return t&&e?e.contains(t):!1;if(!e||!t)return!1;let n=t;for(;n!==null;){if(n===e)return!0;n=n.tagName===`SLOT`&&n.assignedSlot?n.assignedSlot.parentNode:Cp(n)?n.host:n.parentNode}return!1}var Ep=(e=document)=>{if(!Tp())return e.activeElement;let t=e.activeElement;for(;t&&`shadowRoot`in t&&t.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t};function W(e){if(Tp()&&e.target instanceof Element&&e.target.shadowRoot){if(`composedPath`in e)return e.composedPath()[0]??null;if(`composedPath`in e.nativeEvent)return e.nativeEvent.composedPath()[0]??null}return e.target}function Dp(e){if(!e)return!1;let t=e.getRootNode(),n=xp(e);if(!(t instanceof n.Document||t instanceof n.ShadowRoot))return!1;let r=t.activeElement;return r!=null&&e.contains(r)}function Op(e){let t=jp(bp(e));t!==e&&(t&&kp(t,e),e&&Ap(e,t))}function kp(e,t){e.dispatchEvent(new FocusEvent(`blur`,{relatedTarget:t})),e.dispatchEvent(new FocusEvent(`focusout`,{bubbles:!0,relatedTarget:t}))}function Ap(e,t){e.dispatchEvent(new FocusEvent(`focus`,{relatedTarget:t})),e.dispatchEvent(new FocusEvent(`focusin`,{bubbles:!0,relatedTarget:t}))}function jp(e){let t=Ep(e),n=t?.getAttribute(`aria-activedescendant`);return n&&e.getElementById(n)||t}function Mp(e){if(Pp())e.focus({preventScroll:!0});else{let t=Fp(e);e.focus(),Ip(t)}}var Np=null;function Pp(){if(Np==null){Np=!1;try{document.createElement(`div`).focus({get preventScroll(){return Np=!0,!0}})}catch{}}return Np}function Fp(e){let t=e.parentNode,n=[],r=document.scrollingElement||document.documentElement;for(;t instanceof HTMLElement&&t!==r;)(t.offsetHeightt.defaultPrevented,t.isPropagationStopped=()=>t.cancelBubble,t.persist=()=>{},t}function Jp(e,t){Object.defineProperty(e,"target",{value:t}),Object.defineProperty(e,"currentTarget",{value:t})}function Yp(e){let t=(0,g.useRef)({isFocused:!1,observer:null});return If(()=>{let e=t.current;return()=>{e.observer&&=(e.observer.disconnect(),null)}},[]),(0,g.useCallback)(n=>{let r=W(n);if(r instanceof HTMLButtonElement||r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement||r instanceof HTMLSelectElement){t.current.isFocused=!0;let n=r;n.addEventListener(`focusout`,r=>{if(t.current.isFocused=!1,n.disabled){let t=qp(r);e?.(t)}t.current.observer&&(t.current.observer.disconnect(),t.current.observer=null)},{once:!0}),t.current.observer=new MutationObserver(()=>{if(t.current.isFocused&&n.disabled){t.current.observer?.disconnect();let e=n===Ep()?null:Ep();n.dispatchEvent(new FocusEvent(`blur`,{relatedTarget:e})),n.dispatchEvent(new FocusEvent(`focusout`,{bubbles:!0,relatedTarget:e}))}}),t.current.observer.observe(n,{attributes:!0,attributeFilter:[`disabled`]})}},[e])}var Xp=!1;function Zp(e){for(;e&&!Wp(e,{skipVisibilityCheck:!0});)e=e.parentElement;let t=xp(e),n=t.document.activeElement;if(!n||n===e)return;Xp=!0;let r=!1,i=e=>{(W(e)===n||r)&&e.stopImmediatePropagation()},a=t=>{(W(t)===n||r)&&(t.stopImmediatePropagation(),!e&&!r&&(r=!0,Mp(n),c()))},o=t=>{(W(t)===e||r)&&t.stopImmediatePropagation()},s=t=>{(W(t)===e||r)&&(t.stopImmediatePropagation(),r||(r=!0,Mp(n),c()))};t.addEventListener(`blur`,i,!0),t.addEventListener(`focusout`,a,!0),t.addEventListener(`focusin`,s,!0),t.addEventListener(`focus`,o,!0);let c=()=>{cancelAnimationFrame(l),t.removeEventListener(`blur`,i,!0),t.removeEventListener(`focusout`,a,!0),t.removeEventListener(`focusin`,s,!0),t.removeEventListener(`focus`,o,!0),Xp=!1,r=!1},l=requestAnimationFrame(c);return c}function Qp(e){if(typeof window>`u`||window.navigator==null)return!1;let t=window.navigator.userAgentData?.brands;return Array.isArray(t)&&t.some(t=>e.test(t.brand))||e.test(window.navigator.userAgent)}function $p(e){return typeof window<`u`&&window.navigator!=null?e.test(window.navigator.userAgentData?.platform||window.navigator.platform):!1}function em(e){let t=null;return()=>(t??=e(),t)}var tm=em(function(){return $p(/^Mac/i)}),nm=em(function(){return $p(/^iPhone/i)}),rm=em(function(){return $p(/^iPad/i)||tm()&&navigator.maxTouchPoints>1}),im=em(function(){return nm()||rm()}),am=em(function(){return tm()||im()}),om=em(function(){return Qp(/AppleWebKit/i)&&!sm()}),sm=em(function(){return Qp(/Chrome/i)}),cm=em(function(){return Qp(/Android/i)}),lm=em(function(){return Qp(/Firefox/i)});function um(e){return e.pointerType===``&&e.isTrusted?!0:cm()&&e.pointerType?e.type===`click`&&e.buttons===1:e.detail===0&&!e.pointerType}function dm(e){return!cm()&&e.width===0&&e.height===0||e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType===`mouse`}var fm=(0,g.createContext)({isNative:!0,open:eee,useHref:e=>e});function pm(){return(0,g.useContext)(fm)}function mm(e,t,n=!0){let{metaKey:r,ctrlKey:i,altKey:a,shiftKey:o}=t;lm()&&window.event?.type?.startsWith(`key`)&&e.target===`_blank`&&(tm()?r=!0:i=!0);let s=om()&&tm()&&!rm()?new KeyboardEvent(`keydown`,{keyIdentifier:`Enter`,metaKey:r,ctrlKey:i,altKey:a,shiftKey:o}):new MouseEvent(`click`,{metaKey:r,ctrlKey:i,altKey:a,shiftKey:o,detail:1,bubbles:!0,cancelable:!0});mm.isOpening=n,Mp(e),e.dispatchEvent(s),mm.isOpening=!1}mm.isOpening=!1;function hm(e,t){if(e instanceof HTMLAnchorElement)t(e);else if(e.hasAttribute(`data-href`)){let n=document.createElement(`a`);n.href=e.getAttribute(`data-href`),e.hasAttribute(`data-target`)&&(n.target=e.getAttribute(`data-target`)),e.hasAttribute(`data-rel`)&&(n.rel=e.getAttribute(`data-rel`)),e.hasAttribute(`data-download`)&&(n.download=e.getAttribute(`data-download`)),e.hasAttribute(`data-ping`)&&(n.ping=e.getAttribute(`data-ping`)),e.hasAttribute(`data-referrer-policy`)&&(n.referrerPolicy=e.getAttribute(`data-referrer-policy`)),e.appendChild(n),t(n),e.removeChild(n)}}function eee(e,t){hm(e,e=>mm(e,t))}function gm(e){let t=pm().useHref(e.href??``);return{"data-href":e.href?t:void 0,"data-target":e.target,"data-rel":e.rel,"data-download":e.download,"data-ping":e.ping,"data-referrer-policy":e.referrerPolicy}}function _m(e){let t=pm().useHref(e?.href??``),n={};if(e)for(let r of[`href`,`target`,`rel`,`download`,`ping`,`referrerPolicy`])r in e&&(n[r]=r===`href`?t:e[r]);return n}var vm=null,ym=new Set,bm=new Map,xm=!1,Sm=!1,Cm={Tab:!0,Escape:!0};function wm(e,t){for(let n of ym)n(e,t)}function Tm(e){return!(e.metaKey||!tm()&&e.altKey||e.ctrlKey||e.key===`Control`||e.key===`Shift`||e.key===`Meta`)}function Em(e){xm=!0,!mm.isOpening&&Tm(e)&&(vm=`keyboard`,wm(`keyboard`,e))}function Dm(e){vm=`pointer`,`pointerType`in e&&e.pointerType,(e.type===`mousedown`||e.type===`pointerdown`)&&(xm=!0,wm(`pointer`,e))}function Om(e){!mm.isOpening&&um(e)&&(xm=!0,vm=`virtual`)}function km(e){let t=xp(W(e)),n=bp(W(e));W(e)===t||W(e)===n||Xp||!e.isTrusted||(!xm&&!Sm&&(vm=`virtual`,wm(`virtual`,e)),xm=!1,Sm=!1)}function Am(){Xp||(xm=!1,Sm=!0)}function jm(e){if(typeof window>`u`||typeof document>`u`)return;let t=xp(e),n=bp(e);if(bm.get(t))return;let r=t.HTMLElement.prototype.focus;t.HTMLElement.prototype.focus=function(){xm=!0,r.apply(this,arguments)},n.addEventListener(`keydown`,Em,!0),n.addEventListener(`keyup`,Em,!0),n.addEventListener(`click`,Om,!0),t.addEventListener(`focus`,km,!0),t.addEventListener(`blur`,Am,!1),typeof PointerEvent<`u`&&(n.addEventListener(`pointerdown`,Dm,!0),n.addEventListener(`pointermove`,Dm,!0),n.addEventListener(`pointerup`,Dm,!0)),t.addEventListener(`beforeunload`,()=>{Mm(e)},{once:!0}),bm.set(t,{focus:r})}var Mm=(e,t)=>{let n=xp(e),r=bp(e);t&&r.removeEventListener(`DOMContentLoaded`,t),bm.has(n)&&(n.HTMLElement.prototype.focus=bm.get(n).focus,r.removeEventListener(`keydown`,Em,!0),r.removeEventListener(`keyup`,Em,!0),r.removeEventListener(`click`,Om,!0),n.removeEventListener(`focus`,km,!0),n.removeEventListener(`blur`,Am,!1),typeof PointerEvent<`u`&&(r.removeEventListener(`pointerdown`,Dm,!0),r.removeEventListener(`pointermove`,Dm,!0),r.removeEventListener(`pointerup`,Dm,!0)),bm.delete(n))};function Nm(e){let t=bp(e),n;return t.readyState===`loading`?(n=()=>{jm(e)},t.addEventListener(`DOMContentLoaded`,n)):jm(e),()=>Mm(e,n)}typeof document<`u`&&Nm();function Pm(){return vm!==`pointer`}function Fm(){return vm}function Im(e){vm=e,wm(e,null)}function Lm(){jm();let[e,t]=(0,g.useState)(vm);return(0,g.useEffect)(()=>{let e=()=>{t(vm)};return ym.add(e),()=>{ym.delete(e)}},[]),Jf()?null:e}var Rm=new Set([`checkbox`,`radio`,`range`,`color`,`file`,`image`,`button`,`submit`,`reset`]);function zm(e,t,n){let r=n?W(n):void 0,i=bp(r),a=xp(r),o=a===void 0?HTMLInputElement:a.HTMLInputElement,s=a===void 0?HTMLTextAreaElement:a.HTMLTextAreaElement,c=a===void 0?HTMLElement:a.HTMLElement,l=a===void 0?KeyboardEvent:a.KeyboardEvent,u=Ep(i);return e=e||u instanceof o&&!Rm.has(u.type)||u instanceof s||u instanceof c&&u.isContentEditable,!(e&&t===`keyboard`&&n instanceof l&&!Cm[n.key])}function Bm(e,t,n){jm(),(0,g.useEffect)(()=>{if(n?.enabled===!1)return;let t=(t,r)=>{zm(!!n?.isTextInput,t,r)&&e(Pm())};return ym.add(t),()=>{ym.delete(t)}},t)}function Vm(e){return tm()?e.metaKey:e.ctrlKey}var tee=new Set([`checkbox`,`radio`,`range`,`color`,`file`,`image`,`button`,`submit`,`reset`]);function Hm(e){return e instanceof HTMLInputElement&&!tee.has(e.type)||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable}var nee=g.useInsertionEffect??If;function Um(e){let t=(0,g.useRef)(null);return nee(()=>{t.current=e},[e]),(0,g.useCallback)((...e)=>{let n=t.current;return n?.(...e)},[])}function Wm(e,t,n,r){let i=Um(n),a=n==null;(0,g.useEffect)(()=>{if(a||!e.current)return;let n=e.current;return n.addEventListener(t,i,r),()=>{n.removeEventListener(t,i,r)}},[e,t,r,a])}function Gm(e,t){let{id:n,"aria-label":r,"aria-labelledby":i}=e;return n=$f(n),i&&r?i=[...new Set([n,...i.trim().split(/\s+/)])].join(` `):i&&=i.trim().split(/\s+/).join(` `),!r&&!i&&t&&(r=t),{id:n,"aria-label":r,"aria-labelledby":i}}var ree=new Set([`Arab`,`Syrc`,`Samr`,`Mand`,`Thaa`,`Mend`,`Nkoo`,`Adlm`,`Rohg`,`Hebr`]),iee=new Set([`ae`,`ar`,`arc`,`bcc`,`bqi`,`ckb`,`dv`,`fa`,`glk`,`he`,`ku`,`mzn`,`nqo`,`pnb`,`ps`,`sd`,`ug`,`ur`,`yi`]);function aee(e){if(Intl.Locale){let t=new Intl.Locale(e).maximize(),n=typeof t.getTextInfo==`function`?t.getTextInfo():t.textInfo;if(n)return n.direction===`rtl`;if(t.script)return ree.has(t.script)}let t=e.split(`-`)[0];return iee.has(t)}var Km=Symbol.for(`react-aria.i18n.locale`);function qm(){let e=typeof window<`u`&&window[Km]||typeof navigator<`u`&&(navigator.language||navigator.userLanguage)||`en-US`;try{Intl.DateTimeFormat.supportedLocalesOf([e])}catch{e=`en-US`}return{locale:e,direction:aee(e)?`rtl`:`ltr`}}var Jm=qm(),Ym=new Set;function Xm(){Jm=qm();for(let e of Ym)e(Jm)}function Zm(){let e=Jf(),[t,n]=(0,g.useState)(Jm);return(0,g.useEffect)(()=>(Ym.size===0&&window.addEventListener(`languagechange`,Xm),Ym.add(n),()=>{Ym.delete(n),Ym.size===0&&window.removeEventListener(`languagechange`,Xm)}),[]),e?{locale:typeof window<`u`&&window[Km]||`en-US`,direction:`ltr`}:t}var Qm=g.createContext(null);function $m(){let e=Zm();return(0,g.useContext)(Qm)||e}var eh=Symbol.for(`react-aria.i18n.locale`),th=Symbol.for(`react-aria.i18n.strings`),nh=void 0,rh=class e{constructor(e,t=`en-US`){this.strings=Object.fromEntries(Object.entries(e).filter(([,e])=>e)),this.defaultLocale=t}getStringForLocale(e,t){let n=this.getStringsForLocale(t)[e];if(!n)throw Error(`Could not find intl message ${e} in ${t} locale`);return n}getStringsForLocale(e){let t=this.strings[e];return t||(t=ih(e,this.strings,this.defaultLocale),this.strings[e]=t),t}static getGlobalDictionaryForPackage(t){if(typeof window>`u`)return null;let n=window[eh];if(nh===void 0){let t=window[th];if(!t)return null;nh={};for(let r in t)nh[r]=new e({[n]:t[r]},n)}let r=nh?.[t];if(!r)throw Error(`Strings for package "${t}" were not included by LocalizedStringProvider. Please add it to the list passed to createLocalizedStringDictionary.`);return r}};function ih(e,t,n=`en-US`){if(t[e])return t[e];let r=ah(e);if(t[r])return t[r];for(let e in t)if(e.startsWith(r+`-`))return t[e];return t[n]}function ah(e){return Intl.Locale?new Intl.Locale(e).language:e.split(`-`)[0]}var oh=new Map,sh=new Map,ch=class{constructor(e,t){this.locale=e,this.strings=t}format(e,t){let n=this.strings.getStringForLocale(e,this.locale);return typeof n==`function`?n(t,this):n}plural(e,t,n=`cardinal`){let r=t[`=`+e];if(r)return typeof r==`function`?r():r;let i=this.locale+`:`+n,a=oh.get(i);return a||(a=new Intl.PluralRules(this.locale,{type:n}),oh.set(i,a)),r=t[a.select(e)]||t.other,typeof r==`function`?r():r}number(e){let t=sh.get(this.locale);return t||(t=new Intl.NumberFormat(this.locale),sh.set(this.locale,t)),t.format(e)}select(e,t){let n=e[t]||e.other;return typeof n==`function`?n():n}},lh=new WeakMap;function uh(e){let t=lh.get(e);return t||(t=new rh(e),lh.set(e,t)),t}function dh(e,t){return t&&rh.getGlobalDictionaryForPackage(t)||uh(e)}function fh(e,t){let{locale:n}=$m(),r=dh(e,t);return(0,g.useMemo)(()=>new ch(n,r),[n,r])}var ph=typeof document<`u`?g.useInsertionEffect??g.useLayoutEffect:()=>{};function mh(e,t,n){let[r,i]=(0,g.useState)(e||t),a=(0,g.useRef)(r),o=(0,g.useRef)(e!==void 0),s=e!==void 0;(0,g.useEffect)(()=>{o.current,o.current=s},[s]);let c=s?e:r;ph(()=>{a.current=c});let[,l]=(0,g.useReducer)(()=>({}),{});return[c,(0,g.useCallback)((e,...t)=>{let r=typeof e==`function`?e(a.current):e;Object.is(a.current,r)||(a.current=r,i(r),l(),n?.(r,...t))},[n])]}var hh=(0,g.createContext)(null),gh=(0,g.createContext)(null),_h=class{constructor(e){this.value=null,this.level=0,this.hasChildNodes=!1,this.rendered=null,this.textValue=``,this[`aria-label`]=void 0,this.index=0,this.parentKey=null,this.prevKey=null,this.nextKey=null,this.firstChildKey=null,this.lastChildKey=null,this.props={},this.colSpan=null,this.colIndex=null,this.type=this.constructor.type,this.key=e}get childNodes(){throw Error(`childNodes is not supported`)}clone(){let e=new this.constructor(this.key);return e.value=this.value,e.level=this.level,e.hasChildNodes=this.hasChildNodes,e.rendered=this.rendered,e.textValue=this.textValue,e[`aria-label`]=this[`aria-label`],e.index=this.index,e.parentKey=this.parentKey,e.prevKey=this.prevKey,e.nextKey=this.nextKey,e.firstChildKey=this.firstChildKey,e.lastChildKey=this.lastChildKey,e.props=this.props,e.render=this.render,e.colSpan=this.colSpan,e.colIndex=this.colIndex,e}filter(e,t,n){let r=this.clone();return t.addDescendants(r,e),r}},vh=class extends _h{filter(e,t,n){let[r,i]=wh(e,t,this.firstChildKey,n),a=this.clone();return a.firstChildKey=r,a.lastChildKey=i,a}},yh=class extends _h{static{this.type=`header`}},bh=class extends _h{static{this.type=`loader`}},xh=class extends vh{static{this.type=`item`}filter(e,t,n){if(n(this.textValue,this)){let n=this.clone();return t.addDescendants(n,e),n}return null}},Sh=class extends vh{static{this.type=`section`}filter(e,t,n){let r=super.filter(e,t,n);if(r&&r.lastChildKey!==null){let t=e.getItem(r.lastChildKey);if(t&&t.type!==`header`)return r}return null}},Ch=class{get size(){return this.itemCount}getKeys(){return this.keyMap.keys()}*[Symbol.iterator](){let e=this.firstKey==null?void 0:this.keyMap.get(this.firstKey);for(;e;)yield e,e=e.nextKey==null?void 0:this.keyMap.get(e.nextKey)}getChildren(e){let t=this.keyMap;return{*[Symbol.iterator](){let n=t.get(e),r=n?.firstChildKey==null?null:t.get(n.firstChildKey);for(;r;)yield r,r=r.nextKey==null?void 0:t.get(r.nextKey)}}}getKeyBefore(e){let t=this.keyMap.get(e);if(!t)return null;if(t.prevKey!=null){for(t=this.keyMap.get(t.prevKey);t&&t.type!==`item`&&t.lastChildKey!=null;)t=this.keyMap.get(t.lastChildKey);return t?.key??null}return t.parentKey}getKeyAfter(e){let t=this.keyMap.get(e);if(!t)return null;if(t.type!==`item`&&t.firstChildKey!=null)return t.firstChildKey;for(;t;){if(t.nextKey!=null)return t.nextKey;if(t.parentKey!=null)t=this.keyMap.get(t.parentKey);else return null}return null}getFirstKey(){return this.firstKey}getLastKey(){let e=this.lastKey==null?null:this.keyMap.get(this.lastKey);for(;e?.lastChildKey!=null;)e=this.keyMap.get(e.lastChildKey);return e?.key??null}getItem(e){return this.keyMap.get(e)??null}at(){throw Error(`Not implemented`)}clone(){let e=this.constructor,t=new e;return t.keyMap=new Map(this.keyMap),t.firstKey=this.firstKey,t.lastKey=this.lastKey,t.itemCount=this.itemCount,t}addNode(e){if(this.frozen)throw Error(`Cannot add a node to a frozen collection`);e.type===`item`&&this.keyMap.get(e.key)==null&&this.itemCount++,this.keyMap.set(e.key,e)}addDescendants(e,t){this.addNode(e);let n=t.getChildren(e.key);for(let e of n)this.addDescendants(e,t)}removeNode(e){if(this.frozen)throw Error(`Cannot remove a node to a frozen collection`);let t=this.keyMap.get(e);t!=null&&t.type===`item`&&this.itemCount--,this.keyMap.delete(e)}commit(e,t,n=!1){if(this.frozen)throw Error(`Cannot commit a frozen collection`);this.firstKey=e,this.lastKey=t,this.frozen=!n}filter(e){let t=new this.constructor,[n,r]=wh(this,t,this.firstKey,e);return t?.commit(n,r),t}constructor(){this.keyMap=new Map,this.firstKey=null,this.lastKey=null,this.frozen=!1,this.itemCount=0}};function wh(e,t,n,r){if(n==null)return[null,null];let i=null,a=null,o=e.getItem(n);for(;o!=null;){let n=o.filter(e,t,r);n!=null&&(n.nextKey=null,a&&(n.prevKey=a.key,a.nextKey=n.key),i??=n,t.addNode(n),a=n),o=o.nextKey==null?null:e.getItem(o.nextKey)}if(a&&a.type===`separator`){let e=a.prevKey;t.removeNode(a.key),e==null?a=null:(a=t.getItem(e),a.nextKey=null)}return[i?.key??null,a?.key??null]}var Th=class{constructor(e){this._firstChild=null,this._lastChild=null,this._previousSibling=null,this._nextSibling=null,this._parentNode=null,this._minInvalidChildIndex=null,this.ownerDocument=e}*[Symbol.iterator](){let e=this.firstChild;for(;e;)yield e,e=e.nextSibling}get firstChild(){return this._firstChild}set firstChild(e){this._firstChild=e,this.ownerDocument.markDirty(this)}get lastChild(){return this._lastChild}set lastChild(e){this._lastChild=e,this.ownerDocument.markDirty(this)}get previousSibling(){return this._previousSibling}set previousSibling(e){this._previousSibling=e,this.ownerDocument.markDirty(this)}get nextSibling(){return this._nextSibling}set nextSibling(e){this._nextSibling=e,this.ownerDocument.markDirty(this)}get parentNode(){return this._parentNode}set parentNode(e){this._parentNode=e,this.ownerDocument.markDirty(this)}get isConnected(){return this.parentNode?.isConnected||!1}invalidateChildIndices(e){(this._minInvalidChildIndex==null||!this._minInvalidChildIndex.isConnected||e.indexthis.subscriptions.delete(e)}resetAfterSSR(){this.isSSR&&(this.isSSR=!1,this.firstChild=null,this.lastChild=null,this.nodeId=0)}};function Oh(e){let{children:t,items:n,idScope:r,addIdAndValue:i,dependencies:a=[]}=e,o=(0,g.useMemo)(()=>void 0,[t]),s=(0,g.useMemo)(()=>new WeakMap,[...a,o]);return(0,g.useMemo)(()=>{if(n&&typeof t==`function`){let e=[];for(let a of n){let n=kh(a)?a:null,o=n?s.get(n):null;if(!o){o=t(a);let c=o.props.id??a?.key??a?.id;r!=null&&o.props.id==null&&c!=null&&(c=r+`:`+c);let l=c??e.length;o=(0,g.cloneElement)(o,i?{key:l,id:c,value:a}:{key:l}),n&&s.set(n,o)}e.push(o)}return e}else if(typeof t!=`function`)return t},[t,n,s,r,i])}function kh(e){switch(typeof e){case`object`:return e!=null;case`function`:case`symbol`:return!0;default:return!1}}var Ah=new Map,jh=new Set;function Mh(){if(typeof window>`u`)return;function e(e){return`propertyName`in e}let t=t=>{let r=W(t);if(!e(t)||!r)return;let i=Ah.get(r);i||(i=new Set,Ah.set(r,i),r.addEventListener(`transitioncancel`,n,{once:!0})),i.add(t.propertyName)},n=t=>{let r=W(t);if(!e(t)||!r)return;let i=Ah.get(r);if(i&&(i.delete(t.propertyName),i.size===0&&(r.removeEventListener(`transitioncancel`,n),Ah.delete(r)),Ah.size===0)){for(let e of jh)e();jh.clear()}};document.body.addEventListener(`transitionrun`,t),document.body.addEventListener(`transitionend`,n)}typeof document<`u`&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,Mh):Mh());function Nh(){for(let[e]of Ah)`isConnected`in e&&!e.isConnected&&Ah.delete(e)}function Ph(e){requestAnimationFrame(()=>{Nh(),Ah.size===0?e():jh.add(e)})}function Fh(e){if(!e.isConnected)return;let t=bp(e);if(Fm()===`virtual`){let n=Ep(t);Ph(()=>{let r=Ep(t);(r===n||r===t.body)&&e.isConnected&&Mp(e)})}else Mp(e)}function Ih(e){let{isDisabled:t,onFocus:n,onBlur:r,onFocusChange:i}=e,a=(0,g.useCallback)(e=>{if(W(e)===e.currentTarget)return r&&r(e),i&&i(!1),!0},[r,i]),o=Yp(a),s=(0,g.useCallback)(e=>{let t=W(e),r=bp(t),a=r?Ep(r):Ep();t===e.currentTarget&&t===a&&(n&&n(e),i&&i(!0),o(e))},[i,n,o]);return{focusProps:{onFocus:!t&&(n||i||r)?s:void 0,onBlur:!t&&(r||i)?a:void 0}}}function Lh(e){if(!e)return;let t=!0;return n=>{e({...n,preventDefault(){n.preventDefault()},isDefaultPrevented(){return n.isDefaultPrevented()},stopPropagation(){t=!0},continuePropagation(){t=!1},isPropagationStopped(){return t}}),t&&n.stopPropagation()}}function Rh(e){return{keyboardProps:e.isDisabled?{}:{onKeyDown:Lh(e.onKeyDown),onKeyUp:Lh(e.onKeyUp)}}}function zh(e,t){If(()=>{if(e&&e.ref&&t)return e.ref.current=t.current,()=>{e.ref&&(e.ref.current=null)}})}var Bh=g.createContext(null);function oee(e){let t=(0,g.useContext)(Bh)||{};zh(t,e);let{ref:n,...r}=t;return r}function Vh(e,t){let{focusProps:n}=Ih(e),{keyboardProps:r}=Rh(e),i=op(n,r),a=oee(t),o=e.isDisabled?{}:a,s=(0,g.useRef)(e.autoFocus);(0,g.useEffect)(()=>{s.current&&t.current&&Fh(t.current),s.current=!1},[t]);let c=e.excludeFromTabOrder?-1:0;return e.isDisabled&&(c=void 0),{focusableProps:op({...i,tabIndex:c},o)}}typeof HTMLTemplateElement<`u`&&(Object.defineProperty(HTMLTemplateElement.prototype,"firstChild",{configurable:!0,enumerable:!0,get:function(){return this.content.firstChild}}),Object.defineProperty(HTMLTemplateElement.prototype,"appendChild",{configurable:!0,enumerable:!0,value:function(e){return this.content.appendChild(e)}}),Object.defineProperty(HTMLTemplateElement.prototype,"removeChild",{configurable:!0,enumerable:!0,value:function(e){return this.content.removeChild(e)}}),Object.defineProperty(HTMLTemplateElement.prototype,"insertBefore",{configurable:!0,enumerable:!0,value:function(e,t){return this.content.insertBefore(e,t)}}));var Hh=(0,g.createContext)(!1);function see(e){if((0,g.useContext)(Hh))return g.createElement(g.Fragment,null,e.children);let t=g.createElement(Hh.Provider,{value:!0},e.children);return g.createElement(`template`,null,t)}function Uh(e){let t=(t,n)=>(0,g.useContext)(Hh)?null:e(t,n);return t.displayName=e.displayName||e.name,(0,g.forwardRef)(t)}function cee(){return(0,g.useContext)(Hh)}var lee=s((e=>{var t=h();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var r=typeof Object.is==`function`?Object.is:n,i=t.useState,a=t.useEffect,o=t.useLayoutEffect,s=t.useDebugValue;function c(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),c=r[0].inst,u=r[1];return o(function(){c.value=n,c.getSnapshot=t,l(c)&&u({inst:c})},[e,n,t]),a(function(){return l(c)&&u({inst:c}),e(function(){l(c)&&u({inst:c})})},[e]),s(n),n}function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch{return!0}}function u(e,t){return t()}var d=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?u:c;e.useSyncExternalStore=t.useSyncExternalStore===void 0?d:t.useSyncExternalStore})),uee=s(((e,t)=>{t.exports=lee()})),Wh=u(Du(),1),dee=uee(),Gh=(0,g.createContext)(!1),Kh=(0,g.createContext)(null);function qh(e){if((0,g.useContext)(Kh))return e.content;let{collection:t,document:n}=Yh(e.createCollection);return g.createElement(g.Fragment,null,g.createElement(see,null,g.createElement(Kh.Provider,{value:n},e.content)),g.createElement(fee,{render:e.children,collection:t}))}function fee({collection:e,render:t}){return t(e)}function pee(e,t,n){let r=Jf(),i=(0,g.useRef)(r);return i.current=r,(0,dee.useSyncExternalStore)(e,(0,g.useCallback)(()=>i.current?n():t(),[t,n]))}var Jh=typeof g.useSyncExternalStore==`function`?g.useSyncExternalStore:pee;function Yh(e){let[t]=(0,g.useState)(()=>new Dh(e?.()||new Ch));return{collection:Jh((0,g.useCallback)(e=>t.subscribe(e),[t]),(0,g.useCallback)(()=>{let e=t.getCollection();return t.isSSR&&t.resetAfterSSR(),e},[t]),(0,g.useCallback)(()=>(t.isSSR=!0,t.getCollection()),[t])),document:t}}var Xh=(0,g.createContext)(null);function Zh(e){return class extends _h{static{this.type=e}}}function Qh(e,t,n,r,i,a){typeof e==`string`&&(e=Zh(e));let o=(0,g.useCallback)(i=>{i?.setProps(t,n,e,r,a)},[t,n,r,a,e]),s=(0,g.useContext)(Xh);if(s){let o=s.ownerDocument.nodesByProps.get(t);return o||(o=s.ownerDocument.createElement(e.type),o.setProps(t,n,e,r,a),s.appendChild(o),s.ownerDocument.updateCollection(),s.ownerDocument.nodesByProps.set(t,o)),i?g.createElement(Xh.Provider,{value:o},i):null}return g.createElement(e.type,{ref:o},i)}function $h(e,t){let n=({node:e})=>t(e.props,e.props.ref,e),r=(0,g.forwardRef)((r,i)=>{let a=(0,g.useContext)(Bh);if(!(0,g.useContext)(Gh)){if(t.length>=3)throw Error(t.name+` cannot be rendered outside a collection.`);return t(r,i)}return Qh(e,r,i,`children`in r?r.children:null,null,e=>g.createElement(Bh.Provider,{value:a},g.createElement(n,{node:e})))});return r.displayName=t.name,r}function eg(e,t,n=tg){let r=({node:e})=>t(e.props,e.props.ref,e),i=(0,g.forwardRef)((t,i)=>Qh(e,t,i,null,n(t),e=>g.createElement(r,{node:e}))??g.createElement(g.Fragment,null));return i.displayName=t.name,i}function tg(e){return Oh({...e,addIdAndValue:!0})}var ng=(0,g.createContext)(null);function rg(e){let t=(0,g.useContext)(ng),n=(t?.dependencies||[]).concat(e.dependencies),r=e.idScope??t?.idScope,i=tg({...e,idScope:r,dependencies:n});return(0,g.useContext)(Kh)&&(i=g.createElement(ig,null,i)),t=(0,g.useMemo)(()=>({dependencies:n,idScope:r}),[r,...n]),g.createElement(ng.Provider,{value:t},i)}function ig({children:e}){let t=(0,g.useContext)(Kh),n=(0,g.useMemo)(()=>g.createElement(Kh.Provider,{value:null},g.createElement(Gh.Provider,{value:!0},e)),[e]);return Jf()?g.createElement(Xh.Provider,{value:t},n):(0,Wh.createPortal)(n,t)}var ag=(0,g.createContext)(null),og={CollectionRoot({collection:e,renderDropIndicator:t}){return sg(e,null,t)},CollectionBranch({collection:e,parent:t,renderDropIndicator:n}){return sg(e,t,n)}};function sg(e,t,n){return Oh({items:t?e.getChildren(t.key):e,dependencies:[n],children(t){if(t.type===`content`)return g.createElement(g.Fragment,null);let r=t.render(t);return!n||t.type!==`item`?r:g.createElement(g.Fragment,null,n({type:`item`,key:t.key,dropPosition:`before`}),r,cg(e,t,n))}})}function cg(e,t,n){let r=t.key,i=e.getKeyAfter(r),a=i==null?null:e.getItem(i);for(;a!=null&&a.type!==`item`;)i=e.getKeyAfter(a.key),a=i==null?null:e.getItem(i);let o=t.nextKey==null?null:e.getItem(t.nextKey);for(;o!=null&&o.type!==`item`;)o=o.nextKey==null?null:e.getItem(o.nextKey);let s=[];if(o==null){let r=t;for(;r?.type===`item`&&(!a||r.parentKey!==a.parentKey&&a.level{Ph(()=>{if(_g===`restoring`){let t=bp(e);t.documentElement.style.webkitUserSelect===`none`&&(t.documentElement.style.webkitUserSelect=vg||``),vg=``,_g=`default`}})},300)}else if((e instanceof HTMLElement||e instanceof SVGElement)&&e&&yg.has(e)){let t=yg.get(e),n=`userSelect`in e.style?`userSelect`:`webkitUserSelect`;e.style[n]===`none`&&(e.style[n]=t),e.getAttribute(`style`)===``&&e.removeAttribute(`style`),yg.delete(e)}}function xg(e){return e?.defaultView?.__webpack_nonce__||globalThis.__webpack_nonce__||void 0}var Sg=new WeakMap;function Cg(e){let t=e??(typeof document<`u`?document:void 0);if(!t)return xg(t);if(Sg.has(t))return Sg.get(t);let n=t.querySelector(`meta[property="csp-nonce"]`),r=n&&n instanceof xp(n).HTMLMetaElement&&(n.nonce||n.content)||xg(t)||void 0;return r!==void 0&&Sg.set(t,r),r}var wg=g.createContext({register:()=>{}});wg.displayName=`PressResponderContext`;function Tg(){let e=(0,g.useRef)(new Map),t=(0,g.useCallback)((t,n,r,i)=>{let a=i?.once?(...t)=>{e.current.delete(r),r(...t)}:r;e.current.set(r,{type:n,eventTarget:t,fn:a,options:i}),t.addEventListener(n,a,i)},[]),n=(0,g.useCallback)((t,n,r,i)=>{let a=e.current.get(r)?.fn||r;t.removeEventListener(n,a,i),e.current.delete(r)},[]),r=(0,g.useCallback)(()=>{e.current.forEach((e,t)=>{n(e.eventTarget,e.type,t,e.options)})},[n]);return(0,g.useEffect)(()=>r,[r]),{addGlobalListener:t,removeGlobalListener:n,removeAllGlobalListeners:r}}function Eg(e){let t=(0,g.useContext)(wg);if(t){let{register:n,ref:r,...i}=t;e=op(i,e),n()}return zh(t,e.ref),e}var Dg=class{#e;constructor(e,t,n,r){this.#e=!0;let i=(r?.target??n.currentTarget)?.getBoundingClientRect(),a,o=0,s,c=null;n.clientX!=null&&n.clientY!=null&&(s=n.clientX,c=n.clientY),i&&(s!=null&&c!=null?(a=s-i.left,o=c-i.top):(a=i.width/2,o=i.height/2)),this.type=e,this.pointerType=t,this.target=n.currentTarget,this.shiftKey=n.shiftKey,this.metaKey=n.metaKey,this.ctrlKey=n.ctrlKey,this.altKey=n.altKey,this.x=a,this.y=o,this.key=n.key}continuePropagation(){this.#e=!1}get shouldStopPropagation(){return this.#e}},Og=Symbol(`linkClicked`),kg=`react-aria-pressable-style`,Ag=`data-react-aria-pressable`;function jg(e){let{onPress:t,onPressChange:n,onPressStart:r,onPressEnd:i,onPressUp:a,onClick:o,isDisabled:s,isPressed:c,preventFocusOnPress:l,shouldCancelOnPointerExit:u,allowTextSelectionOnPress:d,ref:f,...p}=Eg(e),[m,h]=(0,g.useState)(!1),_=(0,g.useRef)({isPressed:!1,ignoreEmulatedMouseEvents:!1,didFirePressStart:!1,isTriggeringEvent:!1,activePointerId:null,target:null,isOverTarget:!1,pointerType:null,disposables:[]}),{addGlobalListener:v,removeAllGlobalListeners:y}=Tg(),b=(0,g.useCallback)((e,t)=>{let i=_.current;if(s||i.didFirePressStart)return!1;let a=!0;if(i.isTriggeringEvent=!0,r){let n=new Dg(`pressstart`,t,e);r(n),a=n.shouldStopPropagation}return n&&n(!0),i.isTriggeringEvent=!1,i.didFirePressStart=!0,h(!0),a},[s,r,n]),x=(0,g.useCallback)((e,r,a=!0)=>{let o=_.current;if(!o.didFirePressStart)return!1;o.didFirePressStart=!1,o.isTriggeringEvent=!0;let c=!0;if(i){let t=new Dg(`pressend`,r,e);i(t),c=t.shouldStopPropagation}if(n&&n(!1),h(!1),t&&a&&!s){let n=new Dg(`press`,r,e);t(n),c&&=n.shouldStopPropagation}return o.isTriggeringEvent=!1,c},[s,i,n,t]),S=Um(x),C=Um((0,g.useCallback)((e,t)=>{let n=_.current;if(s)return!1;if(a){n.isTriggeringEvent=!0;let r=new Dg(`pressup`,t,e);return a(r),n.isTriggeringEvent=!1,r.shouldStopPropagation}return!0},[s,a])),w=(0,g.useCallback)(e=>{let t=_.current;if(t.isPressed&&t.target){t.didFirePressStart&&t.pointerType!=null&&x(Pg(t.target,e),t.pointerType,!1),t.isPressed=!1,t.isOverTarget=!1,t.activePointerId=null,t.pointerType=null,y(),d||bg(t.target);for(let e of t.disposables)e();t.disposables=[]}},[d,y,x]),T=Um(w);(0,g.useEffect)(()=>{s&&_.current.isPressed&&T({currentTarget:_.current.target,shiftKey:!1,ctrlKey:!1,metaKey:!1,altKey:!1})},[s]);let E=(0,g.useCallback)(e=>{u&&w(e)},[u,w]),D=(0,g.useCallback)(e=>{s||o?.(e)},[s,o]),O=(0,g.useCallback)((e,t)=>{if(!s&&o){let n=new MouseEvent(`click`,e);Jp(n,t),o(qp(n))}},[s,o]),k=(0,g.useMemo)(()=>{let e=_.current,t={onKeyDown(t){if(Ng(t.nativeEvent,t.currentTarget)&&U(t.currentTarget,W(t))){Fg(W(t),t.key)&&t.preventDefault();let r=!0;!e.isPressed&&!t.repeat&&(e.target=t.currentTarget,e.isPressed=!0,e.pointerType=`keyboard`,r=b(t,`keyboard`));let i=t.currentTarget;v(bp(t.currentTarget),`keyup`,Ff(t=>{Ng(t,i)&&!t.repeat&&U(i,W(t))&&e.target&&C(Pg(e.target,t),`keyboard`)},n),!0),r&&t.stopPropagation(),t.metaKey&&tm()&&e.metaKeyEvents?.set(t.key,t.nativeEvent)}else t.key===`Meta`&&(e.metaKeyEvents=new Map)},onClick(t){if(!(t&&!U(t.currentTarget,W(t)))&&t&&t.button===0&&!e.isTriggeringEvent&&!mm.isOpening){let n=!0;if(s&&t.preventDefault(),!e.ignoreEmulatedMouseEvents&&!e.isPressed&&(e.pointerType===`virtual`||um(t.nativeEvent))){let e=b(t,`virtual`),r=C(t,`virtual`),i=S(t,`virtual`);D(t),n=e&&r&&i}else if(e.isPressed&&e.pointerType!==`keyboard`){let r=e.pointerType||t.nativeEvent.pointerType||`virtual`,i=C(Pg(t.currentTarget,t),r),a=S(Pg(t.currentTarget,t),r,!0);n=i&&a,e.isOverTarget=!1,D(t),T(t)}e.ignoreEmulatedMouseEvents=!1,n&&t.stopPropagation()}}},n=t=>{if(e.isPressed&&e.target&&Ng(t,e.target)){Fg(W(t),t.key)&&t.preventDefault();let n=W(t),r=U(e.target,n);S(Pg(e.target,t),`keyboard`,r),r&&O(t,e.target),y(),t.key!==`Enter`&&Mg(e.target)&&U(e.target,n)&&!t[Og]&&(t[Og]=!0,mm(e.target,t,!1)),e.isPressed=!1,e.metaKeyEvents?.delete(t.key)}else if(t.key===`Meta`&&e.metaKeyEvents?.size){let t=e.metaKeyEvents;e.metaKeyEvents=void 0;for(let n of t.values())e.target?.dispatchEvent(new KeyboardEvent(`keyup`,n))}};if(typeof PointerEvent<`u`){t.onPointerDown=t=>{if(t.button!==0||!U(t.currentTarget,W(t)))return;if(dm(t.nativeEvent)){e.pointerType=`virtual`;return}e.pointerType=t.pointerType;let i=!0;if(!e.isPressed){e.isPressed=!0,e.isOverTarget=!0,e.activePointerId=t.pointerId,e.target=t.currentTarget,d||mee(e.target),i=b(t,e.pointerType);let a=W(t);`releasePointerCapture`in a&&(`hasPointerCapture`in a?a.hasPointerCapture(t.pointerId)&&a.releasePointerCapture(t.pointerId):a.releasePointerCapture(t.pointerId)),v(bp(t.currentTarget),`pointerup`,n,!1),v(bp(t.currentTarget),`pointercancel`,r,!1)}i&&t.stopPropagation()},t.onMouseDown=t=>{if(U(t.currentTarget,W(t))&&t.button===0){if(l){let n=Zp(t.target);n&&e.disposables.push(n)}t.stopPropagation()}},t.onPointerUp=t=>{!U(t.currentTarget,W(t))||e.pointerType===`virtual`||t.button===0&&!e.isPressed&&C(t,e.pointerType||t.pointerType)},t.onPointerEnter=t=>{t.pointerId===e.activePointerId&&e.target&&!e.isOverTarget&&e.pointerType!=null&&(e.isOverTarget=!0,b(Pg(e.target,t),e.pointerType))},t.onPointerLeave=t=>{t.pointerId===e.activePointerId&&e.target&&e.isOverTarget&&e.pointerType!=null&&(e.isOverTarget=!1,S(Pg(e.target,t),e.pointerType,!1),E(t))};let n=t=>{if(t.pointerId===e.activePointerId&&e.isPressed&&t.button===0&&e.target){if(U(e.target,W(t))&&e.pointerType!=null){let n=!1,r=setTimeout(()=>{e.isPressed&&e.target instanceof HTMLElement&&(n?T(t):(Mp(e.target),e.target.click()))},80);v(t.currentTarget,`click`,()=>n=!0,!0),e.disposables.push(()=>clearTimeout(r))}else T(t);e.isOverTarget=!1}},r=e=>{T(e)};t.onDragStart=e=>{U(e.currentTarget,W(e))&&T(e)}}return t},[v,s,l,y,d,E,b,D,O]);return(0,g.useEffect)(()=>{if(!f)return;let e=bp(f.current);if(!e||!e.head||e.getElementById(kg))return;let t=e.createElement(`style`);t.id=kg;let n=Cg(e);n&&(t.nonce=n),t.textContent=` +@layer { + [${Ag}] { + touch-action: pan-x pan-y pinch-zoom; + } +} + `.trim(),e.head.prepend(t)},[f]),(0,g.useEffect)(()=>{let e=_.current;return()=>{d||bg(e.target??void 0);for(let t of e.disposables)t();e.disposables=[]}},[d]),{isPressed:c||m,pressProps:op(p,k,{[Ag]:!0})}}function Mg(e){return e.tagName===`A`&&e.hasAttribute(`href`)}function Ng(e,t){let{key:n,code:r}=e,i=t,a=i.getAttribute(`role`);return(n===`Enter`||n===` `||n===`Spacebar`||r===`Space`)&&!(i instanceof xp(i).HTMLInputElement&&!Lg(i,n)||i instanceof xp(i).HTMLTextAreaElement||i.isContentEditable)&&!((a===`link`||!a&&Mg(i))&&n!==`Enter`)}function Pg(e,t){let n=t.clientX,r=t.clientY;return{currentTarget:e,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,metaKey:t.metaKey,altKey:t.altKey,clientX:n,clientY:r,key:t.key}}function hee(e){return e instanceof HTMLInputElement?!1:e instanceof HTMLButtonElement?e.type!==`submit`&&e.type!==`reset`:!Mg(e)}function Fg(e,t){return e instanceof HTMLInputElement?!Lg(e,t):hee(e)}var Ig=new Set([`checkbox`,`radio`,`range`,`color`,`file`,`image`,`button`,`submit`,`reset`]);function Lg(e,t){return e.type===`checkbox`||e.type===`radio`?t===` `:Ig.has(e.type)}function Rg(e){let{isDisabled:t,onBlurWithin:n,onFocusWithin:r,onFocusWithinChange:i}=e,a=(0,g.useRef)({isFocusWithin:!1}),{addGlobalListener:o,removeAllGlobalListeners:s}=Tg(),c=(0,g.useCallback)(e=>{U(e.currentTarget,W(e))&&a.current.isFocusWithin&&!U(e.currentTarget,e.relatedTarget)&&(a.current.isFocusWithin=!1,s(),n&&n(e),i&&i(!1))},[n,i,a,s]),l=Yp(c),u=(0,g.useCallback)(e=>{if(!U(e.currentTarget,W(e)))return;let t=W(e),n=bp(t),s=Ep(n);if(!a.current.isFocusWithin&&s===t){r&&r(e),i&&i(!0),a.current.isFocusWithin=!0,l(e);let t=e.currentTarget;o(n,`focus`,e=>{let r=W(e);if(a.current.isFocusWithin&&!U(t,r)){let e=new n.defaultView.FocusEvent(`blur`,{relatedTarget:r});Jp(e,t),c(qp(e))}},{capture:!0})}},[r,i,l,o,c]);return t?{focusWithinProps:{onFocus:void 0,onBlur:void 0}}:{focusWithinProps:{onFocus:u,onBlur:c}}}function zg(e={}){let{autoFocus:t=!1,isTextInput:n,within:r}=e,i=(0,g.useRef)({isFocused:!1,isFocusVisible:t||Pm()}),[a,o]=(0,g.useState)(!1),[s,c]=(0,g.useState)(()=>i.current.isFocused&&i.current.isFocusVisible),l=(0,g.useCallback)(()=>c(i.current.isFocused&&i.current.isFocusVisible),[]),u=(0,g.useCallback)(e=>{i.current.isFocused=e,i.current.isFocusVisible=Pm(),o(e),l()},[l]);Bm(e=>{i.current.isFocusVisible=e,l()},[n,a],{enabled:a,isTextInput:n});let{focusProps:d}=Ih({isDisabled:r,onFocusChange:u}),{focusWithinProps:f}=Rg({isDisabled:!r,onFocusWithinChange:u});return{isFocused:a,isFocusVisible:s,focusProps:r?f:d}}var Bg=!1,Vg=0;function Hg(){Bg=!0,setTimeout(()=>{Bg=!1},500)}function Ug(e){e.pointerType===`touch`&&Hg()}function Wg(){let e=bp(null);if(e!==void 0)return Vg===0&&typeof PointerEvent<`u`&&e.addEventListener(`pointerup`,Ug),Vg++,()=>{Vg--,!(Vg>0)&&typeof PointerEvent<`u`&&e.removeEventListener(`pointerup`,Ug)}}function Gg(e){let{onHoverStart:t,onHoverChange:n,onHoverEnd:r,isDisabled:i}=e,[a,o]=(0,g.useState)(!1),s=(0,g.useRef)({isHovered:!1,ignoreEmulatedMouseEvents:!1,pointerType:``,target:null}).current;(0,g.useEffect)(Wg,[]);let{addGlobalListener:c,removeAllGlobalListeners:l}=Tg(),{hoverProps:u,triggerHoverEnd:d}=(0,g.useMemo)(()=>{let e=(e,r)=>{if(s.pointerType=r,i||r===`touch`||s.isHovered||!U(e.currentTarget,W(e)))return;s.isHovered=!0;let l=e.currentTarget;s.target=l,c(bp(W(e)),`pointerover`,e=>{s.isHovered&&s.target&&!U(s.target,W(e))&&a(e,e.pointerType)},{capture:!0}),t&&t({type:`hoverstart`,target:l,pointerType:r}),n&&n(!0),o(!0)},a=(e,t)=>{let i=s.target;s.pointerType=``,s.target=null,!(t===`touch`||!s.isHovered||!i)&&(s.isHovered=!1,l(),r&&r({type:`hoverend`,target:i,pointerType:t}),n&&n(!1),o(!1))},u={};return typeof PointerEvent<`u`&&(u.onPointerEnter=t=>{Bg&&t.pointerType===`mouse`||e(t,t.pointerType)},u.onPointerLeave=e=>{!i&&U(e.currentTarget,W(e))&&a(e,e.pointerType)}),{hoverProps:u,triggerHoverEnd:a}},[t,n,r,i,s,c,l]);return(0,g.useEffect)(()=>{i&&d({currentTarget:s.target},s.pointerType)},[i]),{hoverProps:u,isHovered:a}}var Kg=(0,g.createContext)({});function qg(e){let{id:t,label:n,"aria-labelledby":r,"aria-label":i,labelElementType:a=`label`}=e;t=$f(t);let o=$f(),s={};n&&(r=r?`${o} ${r}`:o,s={id:o,htmlFor:a===`label`?t:void 0});let c=Gm({id:t,"aria-label":i,"aria-labelledby":r});return{labelProps:s,fieldProps:c}}function Jg(e,t=-1/0,n=1/0){return Math.min(Math.max(e,t),n)}var Yg=(0,g.createContext)(null),Xg=7e3,Zg=null;function Qg(e,t=`assertive`,n=Xg){Zg?Zg.announce(e,t,n):(Zg=new $g,(typeof IS_REACT_ACT_ENVIRONMENT==`boolean`?IS_REACT_ACT_ENVIRONMENT:typeof jest<`u`)?Zg.announce(e,t,n):setTimeout(()=>{Zg?.isAttached()&&Zg?.announce(e,t,n)},100))}var $g=class{constructor(){this.node=null,this.assertiveLog=null,this.politeLog=null,typeof document<`u`&&(this.node=document.createElement(`div`),this.node.dataset.liveAnnouncer=`true`,Object.assign(this.node.style,{border:0,clip:`rect(0 0 0 0)`,clipPath:`inset(50%)`,height:`1px`,margin:`-1px`,overflow:`hidden`,padding:0,position:`absolute`,width:`1px`,whiteSpace:`nowrap`}),this.assertiveLog=this.createLog(`assertive`),this.node.appendChild(this.assertiveLog),this.politeLog=this.createLog(`polite`),this.node.appendChild(this.politeLog),document.body.prepend(this.node))}isAttached(){return this.node?.isConnected}createLog(e){let t=document.createElement(`div`);return t.setAttribute(`role`,`log`),t.setAttribute(`aria-live`,e),t.setAttribute(`aria-relevant`,`additions`),t}destroy(){this.node&&=(document.body.removeChild(this.node),null)}announce(e,t=`assertive`,n=Xg){if(!this.node)return;let r=document.createElement(`div`);typeof e==`object`?(r.setAttribute(`role`,`img`),r.setAttribute(`aria-labelledby`,e[`aria-labelledby`])):r.textContent=e,t===`assertive`?this.assertiveLog?.appendChild(r):this.politeLog?.appendChild(r),e!==``&&setTimeout(()=>{r.remove()},n)}clear(e){this.node&&((!e||e===`assertive`)&&this.assertiveLog&&(this.assertiveLog.innerHTML=``),(!e||e===`polite`)&&this.politeLog&&(this.politeLog.innerHTML=``))}};function e_(e,t){let{elementType:n=`button`,isDisabled:r,onPress:i,onPressStart:a,onPressEnd:o,onPressUp:s,onPressChange:c,preventFocusOnPress:l,allowFocusWhenDisabled:u,onClick:d,href:f,target:p,rel:m,type:h=`button`}=e,g;g=n===`button`?{type:h,disabled:r,form:e.form,formAction:e.formAction,formEncType:e.formEncType,formMethod:e.formMethod,formNoValidate:e.formNoValidate,formTarget:e.formTarget,name:e.name,value:e.value}:{role:`button`,href:n===`a`&&!r?f:void 0,target:n===`a`?p:void 0,type:n===`input`?h:void 0,disabled:n===`input`?r:void 0,"aria-disabled":!r||n===`input`?void 0:r,rel:n===`a`?m:void 0};let{pressProps:_,isPressed:v}=jg({onPressStart:a,onPressEnd:o,onPressChange:c,onPress:i,onPressUp:s,onClick:d,isDisabled:r,preventFocusOnPress:l,ref:t}),{focusableProps:y}=Vh(e,t);u&&(y.tabIndex=r?-1:y.tabIndex);let b=op(y,_,gg(e,{labelable:!0}));return{isPressed:v,buttonProps:op(g,b,{"aria-haspopup":e[`aria-haspopup`],"aria-expanded":e[`aria-expanded`],"aria-controls":e[`aria-controls`],"aria-pressed":e[`aria-pressed`],"aria-current":e[`aria-current`],"aria-disabled":e[`aria-disabled`]})}}var t_=(0,g.createContext)({}),n_=Uh(function(e,t){[e,t]=fp(e,t,t_);let n=e,{isPending:r}=n,{buttonProps:i,isPressed:a}=e_(e,t);i=i_(i,r);let{focusProps:o,isFocused:s,isFocusVisible:c}=zg(e),{hoverProps:l,isHovered:u}=Gg({...e,isDisabled:e.isDisabled||r}),d={isHovered:u,isPressed:(n.isPressed||a)&&!r,isFocused:s,isFocusVisible:c,isDisabled:e.isDisabled||!1,isPending:r??!1},f=up({...e,values:d,defaultClassName:`react-aria-Button`}),p=$f(i.id),m=$f(),h=i[`aria-labelledby`];r&&(h?h=`${h} ${m}`:i[`aria-label`]&&(h=`${p} ${m}`));let _=(0,g.useRef)(r);(0,g.useEffect)(()=>{let e={"aria-labelledby":h||p};(!_.current&&s&&r||_.current&&s&&!r)&&Qg(e,`assertive`),_.current=r},[r,s,h,p]);let v=gg(e,{global:!0});return delete v.onClick,g.createElement(_p.button,{...op(v,f,i,o,l),type:i.type===`submit`&&r?`button`:i.type,id:p,ref:t,"aria-labelledby":h,slot:e.slot||void 0,"aria-disabled":r?`true`:i[`aria-disabled`],"data-disabled":e.isDisabled||void 0,"data-pressed":d.isPressed||void 0,"data-hovered":u||void 0,"data-focused":s||void 0,"data-pending":r||void 0,"data-focus-visible":c||void 0},g.createElement(Yg.Provider,{value:{id:m}},f.children))}),r_=/Focus|Blur|Hover|Pointer(Enter|Leave|Over|Out)|Mouse(Enter|Leave|Over|Out)/;function i_(e,t){if(t){for(let t in e)t.startsWith(`on`)&&!r_.test(t)&&(e[t]=void 0);e.href=void 0,e.target=void 0}return e}var a_=(0,g.createContext)({}),o_=(0,g.createContext)({});function s_(e,t){let n=(0,g.useRef)(!0),r=(0,g.useRef)(null),i=Um(e);(0,g.useEffect)(()=>(n.current=!0,()=>{n.current=!1}),[]),(0,g.useEffect)(()=>{let e=r.current;n.current?n.current=!1:(!e||t.some((t,n)=>!Object.is(t,e[n])))&&i(),r.current=t},t)}function c_(e,t){if(!e)return!1;let n=window.getComputedStyle(e),r=document.scrollingElement||document.documentElement,i=/(auto|scroll)/.test(n.overflow+n.overflowX+n.overflowY);return e===r&&n.overflow!==`hidden`&&(i=!0),i&&t&&(i=e.scrollHeight!==e.clientHeight||e.scrollWidth!==e.clientWidth),i}function l_(e,t){let n=e;for(c_(n,t)&&(n=n.parentElement);n&&!c_(n,t);)n=n.parentElement;return n||document.scrollingElement||document.documentElement}function u_(e,t){let n=[],r=document.scrollingElement||document.documentElement;for(;e&&(c_(e,t)&&n.push(e),e!==r);)e=e.parentElement;return n}function d_(e,t,n={}){let{block:r=`nearest`,inline:i=`nearest`}=n;if(e===t)return;let a=e.scrollTop,o=e.scrollLeft,s=t.getBoundingClientRect(),c=e.getBoundingClientRect(),l=window.getComputedStyle(t),u=window.getComputedStyle(e),d=document.scrollingElement||document.documentElement,f=e===d,p=e===d?0:c.top,m=e===d?e.clientHeight:c.bottom,h=e===d?0:c.left,g=e===d?e.clientWidth:c.right,_=parseFloat(l.scrollMarginTop)||0,v=parseFloat(l.scrollMarginBottom)||0,y=parseFloat(l.scrollMarginLeft)||0,b=parseFloat(l.scrollMarginRight)||0,x=parseFloat(u.scrollPaddingTop)||0,S=parseFloat(u.scrollPaddingBottom)||0,C=parseFloat(u.scrollPaddingLeft)||0,w=parseFloat(u.scrollPaddingRight)||0,T=parseFloat(u.borderTopWidth)||0,E=parseFloat(u.borderBottomWidth)||0,D=parseFloat(u.borderLeftWidth)||0,O=parseFloat(u.borderRightWidth)||0,k=s.top-_,A=s.bottom+v,j=s.left-y,M=s.right+b,N=e===d?0:D+O,P=e===d?0:T+E,F=e===d?0:e.offsetWidth-e.clientWidth-N,ee=e===d?0:e.offsetHeight-e.clientHeight-P,te=p+(f?0:T)+x,ne=m-(f?0:E)-S-ee,re=h+(f?0:D)+C,ie=g-(f?0:O)-w;u.direction===`rtl`&&!im()?re+=F:ie-=F;let ae=kne,oe=jie;if(ae&&r===`start`)a+=k-te;else if(ae&&r===`center`)a+=(k+A)/2-(te+ne)/2;else if(ae&&r===`end`)a+=A-ne;else if(ae&&r===`nearest`){let e=k-te,t=A-ne;a+=Math.abs(e)<=Math.abs(t)?e:t}if(oe&&i===`start`)o+=j-re;else if(oe&&i===`center`)o+=(j+M)/2-(re+ie)/2;else if(oe&&i===`end`)o+=M-ie;else if(oe&&i===`nearest`){let e=j-re,t=M-ie;o+=Math.abs(e)<=Math.abs(t)?e:t}e.scrollTo({left:o,top:a})}function f_(e,t={}){let{containingElement:n}=t;if(e&&e.isConnected){let t=document.scrollingElement||document.documentElement;if(window.getComputedStyle(t).overflow!==`hidden`){let{left:t,top:r}=e.getBoundingClientRect();e?.scrollIntoView?.({block:`nearest`});let{left:i,top:a}=e.getBoundingClientRect();(Math.abs(t-i)>1||Math.abs(r-a)>1)&&(n?.scrollIntoView?.({block:`center`,inline:`center`}),e.scrollIntoView?.({block:`nearest`}))}else{let{left:t,top:r}=e.getBoundingClientRect(),i=u_(e,!0);for(let t of i)d_(t,e);let{left:a,top:o}=e.getBoundingClientRect();if(Math.abs(t-a)>1||Math.abs(r-o)>1){i=n?u_(n,!0):[];for(let e of i)d_(e,n,{block:`center`,inline:`center`});for(let t of u_(e,!0))d_(t,e)}}}}var p_=0,m_=new Map;function h_(e){let[t,n]=(0,g.useState)();return If(()=>{if(!e)return;let t=m_.get(e);if(t)n(t.element.id);else{let r=`react-aria-description-${p_++}`;n(r);let i=document.createElement(`div`);i.id=r,i.style.display=`none`,i.textContent=e,document.body.appendChild(i),t={refCount:0,element:i},m_.set(e,t)}return t.refCount++,()=>{t&&--t.refCount===0&&(t.element.remove(),m_.delete(e))}},[e]),{"aria-describedby":e?t:void 0}}var g_={border:0,clip:`rect(0 0 0 0)`,clipPath:`inset(50%)`,height:`1px`,margin:`-1px`,overflow:`hidden`,padding:0,position:`absolute`,width:`1px`,whiteSpace:`nowrap`};function __(e={}){let{style:t,isFocusable:n}=e,[r,i]=(0,g.useState)(!1),{focusWithinProps:a}=Rg({isDisabled:!n,onFocusWithinChange:e=>i(e)}),o=(0,g.useMemo)(()=>r?t:t?{...g_,...t}:g_,[r]);return{visuallyHiddenProps:{...a,style:o}}}function v_(e){let{children:t,elementType:n=`div`,isFocusable:r,style:i,...a}=e,{visuallyHiddenProps:o}=__(e);return g.createElement(n,op(a,o),t)}var y_=(0,g.createContext)(null),b_={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valueMissing:!1,valid:!0},x_={...b_,customError:!0,valid:!1},S_={isInvalid:!1,validationDetails:b_,validationErrors:[]},C_=(0,g.createContext)({}),w_=`__reactAriaFormValidationState`;function T_(e){if(e.__reactAriaFormValidationState){let{realtimeValidation:t,displayValidation:n,updateValidation:r,resetValidation:i,commitValidation:a}=e[w_];return{realtimeValidation:t,displayValidation:n,updateValidation:r,resetValidation:i,commitValidation:a}}return gee(e)}function gee(e){let{isInvalid:t,validationState:n,name:r,value:i,builtinValidation:a,validate:o,validationBehavior:s=`aria`}=e;n&&(t||=n===`invalid`);let c=t===void 0?null:{isInvalid:t,validationErrors:[],validationDetails:x_},l=(0,g.useMemo)(()=>!o||i==null?null:D_(_ee(o,i)),[o,i]);a?.validationDetails.valid&&(a=void 0);let u=(0,g.useContext)(C_),d=(0,g.useMemo)(()=>r?Array.isArray(r)?r.flatMap(e=>E_(u[e])):E_(u[r]):[],[u,r]),[f,p]=(0,g.useState)(u),[m,h]=(0,g.useState)(!1);u!==f&&(p(u),h(!1));let _=(0,g.useMemo)(()=>D_(m?[]:d),[m,d]),v=(0,g.useRef)(S_),[y,b]=(0,g.useState)(S_),x=(0,g.useRef)(S_),S=()=>{if(!C)return;w(!1);let e=l||a||v.current;O_(e,x.current)||(x.current=e,b(e))},[C,w]=(0,g.useState)(!1);return(0,g.useEffect)(S),{realtimeValidation:c||_||l||a||S_,displayValidation:s===`native`?c||_||y:c||_||l||a||y,updateValidation(e){s===`aria`&&!O_(y,e)?b(e):v.current=e},resetValidation(){let e=S_;O_(e,x.current)||(x.current=e,b(e)),s===`native`&&w(!1),h(!0)},commitValidation(){s===`native`&&w(!0),h(!0)}}}function E_(e){return e?Array.isArray(e)?e:[e]:[]}function _ee(e,t){if(typeof e==`function`){let n=e(t);if(n&&typeof n!=`boolean`)return E_(n)}return[]}function D_(e){return e.length?{isInvalid:!0,validationErrors:e,validationDetails:x_}:null}function O_(e,t){return e===t?!0:!!e&&!!t&&e.isInvalid===t.isInvalid&&e.validationErrors.length===t.validationErrors.length&&e.validationErrors.every((e,n)=>e===t.validationErrors[n])&&Object.entries(e.validationDetails).every(([e,n])=>t.validationDetails[e]===n)}var k_=(0,g.createContext)(null);function A_(e){let{description:t,errorMessage:n,isInvalid:r,validationState:i}=e,{labelProps:a,fieldProps:o}=qg(e),s=tp([!!t,!!n,r,i]),c=tp([!!t,!!n,r,i]);return o=op(o,{"aria-describedby":[s,c,e[`aria-describedby`]].filter(Boolean).join(` `)||void 0}),{labelProps:a,fieldProps:o,descriptionProps:{id:s},errorMessageProps:{id:c}}}function j_(e,t,n){let r=Um(e=>{n&&!e.defaultPrevented&&n(t)});(0,g.useEffect)(()=>{let t=e?.current?.form;return t?.addEventListener(`reset`,r),()=>{t?.removeEventListener(`reset`,r)}},[e])}function M_(e,t,n){let{validationBehavior:r,focus:i}=e;If(()=>{if(r===`native`&&n?.current&&!n.current.disabled){let e=t.realtimeValidation.isInvalid?t.realtimeValidation.validationErrors.join(` `)||`Invalid value.`:``;n.current.setCustomValidity(e),n.current.hasAttribute(`title`)||(n.current.title=``),t.realtimeValidation.isInvalid||t.updateValidation(P_(n.current))}});let a=(0,g.useRef)(!1),o=Um(()=>{a.current||t.resetValidation()}),s=Um(e=>{t.displayValidation.isInvalid||t.commitValidation();let r=n?.current?.form;!e.defaultPrevented&&n&&r&&F_(r)===n.current&&(i?i():n.current?.focus(),Im(`keyboard`)),e.preventDefault()}),c=Um(()=>{t.commitValidation()});(0,g.useEffect)(()=>{let e=n?.current;if(!e)return;let t=e.form,r=t?.reset;return t&&(t.reset=()=>{a.current=!window.event||window.event.type===`message`&&W(window.event)instanceof MessagePort,r?.call(t),a.current=!1}),e.addEventListener(`invalid`,s),e.addEventListener(`change`,c),t?.addEventListener(`reset`,o),()=>{e.removeEventListener(`invalid`,s),e.removeEventListener(`change`,c),t?.removeEventListener(`reset`,o),t&&(t.reset=r)}},[n,r])}function N_(e){let t=e.validity;return{badInput:t.badInput,customError:t.customError,patternMismatch:t.patternMismatch,rangeOverflow:t.rangeOverflow,rangeUnderflow:t.rangeUnderflow,stepMismatch:t.stepMismatch,tooLong:t.tooLong,tooShort:t.tooShort,typeMismatch:t.typeMismatch,valueMissing:t.valueMissing,valid:t.valid}}function P_(e){return{isInvalid:!e.validity.valid,validationDetails:N_(e),validationErrors:e.validationMessage?[e.validationMessage]:[]}}function F_(e){for(let t=0;tl(W(e).value),autoComplete:e.autoComplete,autoCapitalize:e.autoCapitalize,maxLength:e.maxLength,minLength:e.minLength,name:e.name,form:e.form,placeholder:e.placeholder,inputMode:e.inputMode,autoCorrect:e.autoCorrect,spellCheck:e.spellCheck,enterKeyHint:e.enterKeyHint,onCopy:e.onCopy,onCut:e.onCut,onPaste:e.onPaste,onCompositionEnd:e.onCompositionEnd,onCompositionStart:e.onCompositionStart,onCompositionUpdate:e.onCompositionUpdate,onSelect:e.onSelect,onBeforeInput:e.onBeforeInput,onInput:e.onInput,...u,..._}),descriptionProps:v,errorMessageProps:y,isInvalid:f,validationErrors:p,validationDetails:m}}var H_={};H_={colorSwatchPicker:`تغييرات الألوان`,dropzoneLabel:`DropZone`,selectPlaceholder:`حدد عنصرًا`,tableResizer:`أداة تغيير الحجم`};var U_={};U_={colorSwatchPicker:`Цветови мостри`,dropzoneLabel:`DropZone`,selectPlaceholder:`Изберете предмет`,tableResizer:`Преоразмерител`};var W_={};W_={colorSwatchPicker:`Vzorky barev`,dropzoneLabel:`Místo pro přetažení`,selectPlaceholder:`Vyberte položku`,tableResizer:`Změna velikosti`};var G_={};G_={colorSwatchPicker:`Farveprøver`,dropzoneLabel:`DropZone`,selectPlaceholder:`Vælg et element`,tableResizer:`Størrelsesændring`};var K_={};K_={colorSwatchPicker:`Farbfelder`,dropzoneLabel:`Ablegebereich`,selectPlaceholder:`Element wählen`,tableResizer:`Größenanpassung`};var q_={};q_={colorSwatchPicker:`Χρωματικά δείγματα`,dropzoneLabel:`DropZone`,selectPlaceholder:`Επιλέξτε ένα αντικείμενο`,tableResizer:`Αλλαγή μεγέθους`};var J_={};J_={selectPlaceholder:`Select an item`,tableResizer:`Resizer`,dropzoneLabel:`DropZone`,colorSwatchPicker:`Color swatches`};var Y_={};Y_={colorSwatchPicker:`Muestras de colores`,dropzoneLabel:`DropZone`,selectPlaceholder:`Seleccionar un artículo`,tableResizer:`Cambiador de tamaño`};var X_={};X_={colorSwatchPicker:`Värvinäidised`,dropzoneLabel:`DropZone`,selectPlaceholder:`Valige üksus`,tableResizer:`Suuruse muutja`};var Z_={};Z_={colorSwatchPicker:`Värimallit`,dropzoneLabel:`DropZone`,selectPlaceholder:`Valitse kohde`,tableResizer:`Koon muuttaja`};var Q_={};Q_={colorSwatchPicker:`Échantillons de couleurs`,dropzoneLabel:`DropZone`,selectPlaceholder:`Sélectionner un élément`,tableResizer:`Redimensionneur`};var $_={};$_={colorSwatchPicker:`דוגמיות צבע`,dropzoneLabel:`DropZone`,selectPlaceholder:`בחר פריט`,tableResizer:`שינוי גודל`};var ev={};ev={colorSwatchPicker:`Uzorci boja`,dropzoneLabel:`Zona spuštanja`,selectPlaceholder:`Odaberite stavku`,tableResizer:`Promjena veličine`};var tv={};tv={colorSwatchPicker:`Színtárak`,dropzoneLabel:`DropZone`,selectPlaceholder:`Válasszon ki egy elemet`,tableResizer:`Átméretező`};var nv={};nv={colorSwatchPicker:`Campioni di colore`,dropzoneLabel:`Zona di rilascio`,selectPlaceholder:`Seleziona un elemento`,tableResizer:`Ridimensionamento`};var rv={};rv={colorSwatchPicker:`カラースウォッチ`,dropzoneLabel:`ドロップゾーン`,selectPlaceholder:`項目を選択`,tableResizer:`サイズ変更ツール`};var iv={};iv={colorSwatchPicker:`색상 견본`,dropzoneLabel:`드롭 영역`,selectPlaceholder:`항목 선택`,tableResizer:`크기 조정기`};var av={};av={colorSwatchPicker:`Spalvų pavyzdžiai`,dropzoneLabel:`„DropZone“`,selectPlaceholder:`Pasirinkite elementą`,tableResizer:`Dydžio keitiklis`};var ov={};ov={colorSwatchPicker:`Krāsu paraugi`,dropzoneLabel:`DropZone`,selectPlaceholder:`Izvēlēties vienumu`,tableResizer:`Izmēra mainītājs`};var sv={};sv={colorSwatchPicker:`Fargekart`,dropzoneLabel:`Droppsone`,selectPlaceholder:`Velg et element`,tableResizer:`Størrelsesendrer`};var cv={};cv={colorSwatchPicker:`kleurstalen`,dropzoneLabel:`DropZone`,selectPlaceholder:`Selecteer een item`,tableResizer:`Resizer`};var lv={};lv={colorSwatchPicker:`Próbki kolorów`,dropzoneLabel:`Strefa upuszczania`,selectPlaceholder:`Wybierz element`,tableResizer:`Zmiana rozmiaru`};var uv={};uv={colorSwatchPicker:`Amostras de cores`,dropzoneLabel:`DropZone`,selectPlaceholder:`Selecione um item`,tableResizer:`Redimensionador`};var dv={};dv={colorSwatchPicker:`Amostras de cores`,dropzoneLabel:`DropZone`,selectPlaceholder:`Selecione um item`,tableResizer:`Redimensionador`};var fv={};fv={colorSwatchPicker:`Specimene de culoare`,dropzoneLabel:`Zonă de plasare`,selectPlaceholder:`Selectați un element`,tableResizer:`Instrument de redimensionare`};var pv={};pv={colorSwatchPicker:`Цветовые образцы`,dropzoneLabel:`DropZone`,selectPlaceholder:`Выберите элемент`,tableResizer:`Средство изменения размера`};var mv={};mv={colorSwatchPicker:`Vzorkovníky farieb`,dropzoneLabel:`DropZone`,selectPlaceholder:`Vyberte položku`,tableResizer:`Nástroj na zmenu veľkosti`};var hv={};hv={colorSwatchPicker:`Barvne palete`,dropzoneLabel:`DropZone`,selectPlaceholder:`Izberite element`,tableResizer:`Spreminjanje velikosti`};var gv={};gv={colorSwatchPicker:`Uzorci boje`,dropzoneLabel:`DropZone`,selectPlaceholder:`Izaberite stavku`,tableResizer:`Promena veličine`};var _v={};_v={colorSwatchPicker:`Färgrutor`,dropzoneLabel:`DropZone`,selectPlaceholder:`Välj en artikel`,tableResizer:`Storleksändrare`};var vv={};vv={colorSwatchPicker:`Renk örnekleri`,dropzoneLabel:`Bırakma Bölgesi`,selectPlaceholder:`Bir öğe seçin`,tableResizer:`Yeniden boyutlandırıcı`};var yv={};yv={colorSwatchPicker:`Зразки кольорів`,dropzoneLabel:`DropZone`,selectPlaceholder:`Виберіть елемент`,tableResizer:`Засіб змінення розміру`};var bv={};bv={colorSwatchPicker:`颜色色板`,dropzoneLabel:`放置区域`,selectPlaceholder:`选择一个项目`,tableResizer:`尺寸调整器`};var xv={};xv={colorSwatchPicker:`色票`,dropzoneLabel:`放置區`,selectPlaceholder:`選取項目`,tableResizer:`大小調整器`};var Sv={};Sv={"ar-AE":H_,"bg-BG":U_,"cs-CZ":W_,"da-DK":G_,"de-DE":K_,"el-GR":q_,"en-US":J_,"es-ES":Y_,"et-EE":X_,"fi-FI":Z_,"fr-FR":Q_,"he-IL":$_,"hr-HR":ev,"hu-HU":tv,"it-IT":nv,"ja-JP":rv,"ko-KR":iv,"lt-LT":av,"lv-LV":ov,"nb-NO":sv,"nl-NL":cv,"pl-PL":lv,"pt-BR":uv,"pt-PT":dv,"ro-RO":fv,"ru-RU":pv,"sk-SK":mv,"sl-SI":hv,"sr-SP":gv,"sv-SE":_v,"tr-TR":vv,"uk-UA":yv,"zh-CN":bv,"zh-TW":xv};var Cv=(0,g.createContext)({}),wv=(0,g.createContext)(null),Tv=(0,g.forwardRef)(function(e,t){let{render:n}=(0,g.useContext)(wv);return g.createElement(g.Fragment,null,n(e,t))});function Ev(e,t){let n=e?.renderDropIndicator,r=e?.isVirtualDragging?.(),i=(0,g.useCallback)(e=>{if(r||t?.isDropTarget(e))return n?n(e):g.createElement(Tv,{target:e})},[t?.target,r,n]);return e?.useDropIndicator?i:void 0}function Dv(e,t,n){let r=e.focusedKey,i=null;if(t?.isVirtualDragging?.()&&n?.target?.type===`item`&&(i=n.target.key,n.target.dropPosition===`after`)){let e=n.collection.getKeyAfter(i),t=null;if(e!=null){let r=n.collection.getItem(i)?.level??0;for(;e!=null;){let i=n.collection.getItem(e);if(!i)break;if(i.type!==`item`){e=n.collection.getKeyAfter(e);continue}if((i.level??0)<=r)break;t=e,e=n.collection.getKeyAfter(e)}}i=e??t??i}return(0,g.useMemo)(()=>new Set([r,i].filter(e=>e!=null)),[r,i])}var Ov=(0,g.createContext)({}),kv=$h(yh,function(e,t){return[e,t]=fp(e,t,Ov),g.createElement(_p.header,{className:`react-aria-Header`,...e,ref:t},e.children)}),Av=(0,g.createContext)(null);function jv(e){let t=(0,g.useRef)({});return g.createElement(Av.Provider,{value:t},e.children)}var Mv=(0,g.createContext)({isSelected:!1}),Nv=(0,g.createContext)({});(class extends _h{static{this.type=`separator`}filter(e,t){let n=t.getItem(this.prevKey);if(n&&n.type!==`separator`){let n=this.clone();return t.addDescendants(n,e),n}return null}});var Pv=new WeakMap;function Fv(e){return typeof e==`string`?e.replace(/\s*/g,``):``+e}function Iv(e,t){let n=Pv.get(e);if(!n)throw Error(`Unknown list`);return`${n.id}-option-${Fv(t)}`}var Lv=class{constructor(e,t,n,r){this._walkerStack=[],this._currentSetFor=new Set,this._acceptNode=e=>{if(e.nodeType===Node.ELEMENT_NODE){let t=e.shadowRoot;if(t){let e=this._doc.createTreeWalker(t,this.whatToShow,{acceptNode:this._acceptNode});return this._walkerStack.unshift(e),NodeFilter.FILTER_ACCEPT}else if(typeof this.filter==`function`)return this.filter(e);else if(this.filter?.acceptNode)return this.filter.acceptNode(e);else if(this.filter===null)return NodeFilter.FILTER_ACCEPT}return NodeFilter.FILTER_SKIP},this._doc=e,this.root=t,this.filter=r??null,this.whatToShow=n??NodeFilter.SHOW_ALL,this._currentNode=t,this._walkerStack.unshift(e.createTreeWalker(t,n,this._acceptNode));let i=t.shadowRoot;if(i){let e=this._doc.createTreeWalker(i,this.whatToShow,{acceptNode:this._acceptNode});this._walkerStack.unshift(e)}}get currentNode(){return this._currentNode}set currentNode(e){if(!U(this.root,e))throw Error(`Cannot set currentNode to a node that is not contained by the root node.`);let t=[],n=e,r=e;for(this._currentNode=e;n&&n!==this.root;)if(n.nodeType===Node.DOCUMENT_FRAGMENT_NODE){let e=n,i=this._doc.createTreeWalker(e,this.whatToShow,{acceptNode:this._acceptNode});t.push(i),i.currentNode=r,this._currentSetFor.add(i),n=r=e.host}else n=n.parentNode;let i=this._doc.createTreeWalker(this.root,this.whatToShow,{acceptNode:this._acceptNode});t.push(i),i.currentNode=r,this._currentSetFor.add(i),this._walkerStack=t}get doc(){return this._doc}firstChild(){let e=this.currentNode,t=this.nextNode();return U(e,t)?(t&&(this.currentNode=t),t):(this.currentNode=e,null)}lastChild(){let e=this._walkerStack[0].lastChild();return e&&(this.currentNode=e),e}nextNode(){let e=this._walkerStack[0].nextNode();if(e){if(e.shadowRoot){let t;if(typeof this.filter==`function`?t=this.filter(e):this.filter?.acceptNode&&(t=this.filter.acceptNode(e)),t===NodeFilter.FILTER_ACCEPT)return this.currentNode=e,e;let n=this.nextNode();return n&&(this.currentNode=n),n}return e&&(this.currentNode=e),e}else if(this._walkerStack.length>1){this._walkerStack.shift();let e=this.nextNode();return e&&(this.currentNode=e),e}else return null}previousNode(){let e=this._walkerStack[0];if(e.currentNode===e.root){if(this._currentSetFor.has(e))if(this._currentSetFor.delete(e),this._walkerStack.length>1){this._walkerStack.shift();let e=this.previousNode();return e&&(this.currentNode=e),e}else return null;return null}let t=e.previousNode();if(t){if(t.shadowRoot){let e;if(typeof this.filter==`function`?e=this.filter(t):this.filter?.acceptNode&&(e=this.filter.acceptNode(t)),e===NodeFilter.FILTER_ACCEPT)return t&&(this.currentNode=t),t;let n=this.lastChild();return n&&(this.currentNode=n),n}return t&&(this.currentNode=t),t}else if(this._walkerStack.length>1){this._walkerStack.shift();let e=this.previousNode();return e&&(this.currentNode=e),e}else return null}nextSibling(){return null}previousSibling(){return null}parentNode(){return null}};function Rv(e,t,n,r){return Tp()?new Lv(e,t,n,r):e.createTreeWalker(t,n,r)}var zv=g.createContext(null),Bv=`react-aria-focus-scope-restore`,Vv=null;function Hv(e){let{children:t,contain:n,restoreFocus:r,autoFocus:i}=e,a=(0,g.useRef)(null),o=(0,g.useRef)(null),s=(0,g.useRef)([]),{parentNode:c}=(0,g.useContext)(zv)||{},l=(0,g.useMemo)(()=>new fy({scopeRef:s}),[s]);If(()=>{let e=c||py.root;if(py.getTreeNode(e.scopeRef)&&Vv&&!$v(Vv,e.scopeRef)){let t=py.getTreeNode(Vv);t&&(e=t)}e.addChild(l),py.addNode(l)},[l,c]),If(()=>{let e=py.getTreeNode(s);e&&(e.contain=!!n)},[n]),If(()=>{let e=a.current?.nextSibling,t=[],n=e=>e.stopPropagation();for(;e&&e!==o.current;)t.push(e),e.addEventListener(Bv,n),e=e.nextSibling;return s.current=t,()=>{for(let e of t)e.removeEventListener(Bv,n)}},[t]),iy(s,r,n),Jv(s,n),oy(s,r,n),ry(s,i),(0,g.useEffect)(()=>{let e=Ep(bp(s.current?s.current[0]:void 0)),t=null;if(Xv(e,s.current)){for(let n of py.traverse())n.scopeRef&&Xv(e,n.scopeRef.current)&&(t=n);t===py.getTreeNode(s)&&(Vv=t.scopeRef)}},[s]),If(()=>()=>{let e=py.getTreeNode(s)?.parent?.scopeRef??null;(s===Vv||$v(s,Vv))&&(!e||py.getTreeNode(e))&&(Vv=e),py.removeTreeNode(s)},[s]);let u=(0,g.useMemo)(()=>Uv(s),[]),d=(0,g.useMemo)(()=>({focusManager:u,parentNode:l}),[l,u]);return g.createElement(zv.Provider,{value:d},g.createElement(`span`,{"data-focus-scope-start":!0,hidden:!0,ref:a}),t,g.createElement(`span`,{"data-focus-scope-end":!0,hidden:!0,ref:o}))}function Uv(e){return{focusNext(t={}){let n=e.current,{from:r,tabbable:i,wrap:a,accept:o}=t,s=r||Ep(bp(n[0]??void 0)),c=n[0].previousElementSibling,l=cy(Wv(n),{tabbable:i,accept:o},n);l.currentNode=Xv(s,n)?s:c;let u=l.nextNode();return!u&&a&&(l.currentNode=c,u=l.nextNode()),u&&ey(u,!0),u},focusPrevious(t={}){let n=e.current,{from:r,tabbable:i,wrap:a,accept:o}=t,s=r||Ep(bp(n[0]??void 0)),c=n[n.length-1].nextElementSibling,l=cy(Wv(n),{tabbable:i,accept:o},n);l.currentNode=Xv(s,n)?s:c;let u=l.previousNode();return!u&&a&&(l.currentNode=c,u=l.previousNode()),u&&ey(u,!0),u},focusFirst(t={}){let n=e.current,{tabbable:r,accept:i}=t,a=cy(Wv(n),{tabbable:r,accept:i},n);a.currentNode=n[0].previousElementSibling;let o=a.nextNode();return o&&ey(o,!0),o},focusLast(t={}){let n=e.current,{tabbable:r,accept:i}=t,a=cy(Wv(n),{tabbable:r,accept:i},n);a.currentNode=n[n.length-1].nextElementSibling;let o=a.previousNode();return o&&ey(o,!0),o}}}function Wv(e){return e[0].parentElement}function Gv(e){let t=py.getTreeNode(Vv);for(;t&&t.scopeRef!==e;){if(t.contain)return!1;t=t.parent}return!0}function Kv(e){if(!e.form)return Array.from(bp(e).querySelectorAll(`input[type="radio"][name="${CSS.escape(e.name)}"]`)).filter(e=>!e.form);let t=e.form.elements.namedItem(e.name),n=xp(e);return t instanceof n.RadioNodeList?Array.from(t).filter(e=>e instanceof n.HTMLInputElement):t instanceof n.HTMLInputElement?[t]:[]}function qv(e){if(e.checked)return!0;let t=Kv(e);return t.length>0&&!t.some(e=>e.checked)}function Jv(e,t){let n=(0,g.useRef)(void 0),r=(0,g.useRef)(void 0);If(()=>{let i=e.current;if(!t){r.current&&=(cancelAnimationFrame(r.current),void 0);return}let a=bp(i?i[0]:void 0),o=t=>{if(t.key!==`Tab`||t.altKey||t.ctrlKey||t.metaKey||!Gv(e)||t.isComposing)return;let n=Ep(a),r=e.current;if(!r||!Xv(n,r))return;let i=cy(Wv(r),{tabbable:!0},r);if(!n)return;i.currentNode=n;let o=t.shiftKey?i.previousNode():i.nextNode();o||=(i.currentNode=t.shiftKey?r[r.length-1].nextElementSibling:r[0].previousElementSibling,t.shiftKey?i.previousNode():i.nextNode()),t.preventDefault(),o&&(ey(o,!0),o instanceof xp(o).HTMLInputElement&&o.select())},s=t=>{(!Vv||$v(Vv,e))&&Xv(W(t),e.current)?(Vv=e,n.current=W(t)):Gv(e)&&!Zv(W(t),e)?n.current?n.current.focus():Vv&&Vv.current&&ny(Vv.current):Gv(e)&&(n.current=W(t))},c=t=>{r.current&&cancelAnimationFrame(r.current),r.current=requestAnimationFrame(()=>{let r=Fm(),i=(r===`virtual`||r===null)&&cm()&&sm(),o=Ep(a);if(!i&&o&&Gv(e)&&!Zv(o,e)){Vv=e;let r=W(t);r&&r.isConnected?(n.current=r,n.current?.focus()):Vv.current&&ny(Vv.current)}})};return a.addEventListener(`keydown`,o,!1),a.addEventListener(`focusin`,s,!1),i?.forEach(e=>e.addEventListener(`focusin`,s,!1)),i?.forEach(e=>e.addEventListener(`focusout`,c,!1)),()=>{a.removeEventListener(`keydown`,o,!1),a.removeEventListener(`focusin`,s,!1),i?.forEach(e=>e.removeEventListener(`focusin`,s,!1)),i?.forEach(e=>e.removeEventListener(`focusout`,c,!1))}},[e,t]),If(()=>()=>{r.current&&cancelAnimationFrame(r.current)},[r])}function Yv(e){return Zv(e)}function Xv(e,t){return!e||!t?!1:t.some(t=>U(t,e))}function Zv(e,t=null){if(e instanceof Element&&e.closest(`[data-react-aria-top-layer]`))return!0;for(let{scopeRef:n}of py.traverse(py.getTreeNode(t)))if(n&&Xv(e,n.current))return!0;return!1}function Qv(e){return Zv(e,Vv)}function $v(e,t){let n=py.getTreeNode(t)?.parent;for(;n;){if(n.scopeRef===e)return!0;n=n.parent}return!1}function ey(e,t=!1){if(e!=null&&!t)try{Fh(e)}catch{}else if(e!=null)try{e.focus()}catch{}}function ty(e,t=!0){let n=e[0].previousElementSibling,r=Wv(e),i=cy(r,{tabbable:t},e);i.currentNode=n;let a=i.nextNode();return t&&!a&&(r=Wv(e),i=cy(r,{tabbable:!1},e),i.currentNode=n,a=i.nextNode()),a}function ny(e,t=!0){ey(ty(e,t))}function ry(e,t){let n=g.useRef(t);(0,g.useEffect)(()=>{n.current&&(Vv=e,!Xv(Ep(bp(e.current?e.current[0]:void 0)),Vv.current)&&e.current&&ny(e.current)),n.current=!1},[e])}function iy(e,t,n){If(()=>{if(t||n)return;let r=e.current,i=bp(r?r[0]:void 0),a=t=>{let n=W(t);Xv(n,e.current)?Vv=e:Yv(n)||(Vv=null)};return i.addEventListener(`focusin`,a,!1),r?.forEach(e=>e.addEventListener(`focusin`,a,!1)),()=>{i.removeEventListener(`focusin`,a,!1),r?.forEach(e=>e.removeEventListener(`focusin`,a,!1))}},[e,t,n])}function ay(e){let t=py.getTreeNode(Vv);for(;t&&t.scopeRef!==e;){if(t.nodeToRestore)return!1;t=t.parent}return t?.scopeRef===e}function oy(e,t,n){let r=(0,g.useRef)(typeof document<`u`?Ep(bp(e.current?e.current[0]:void 0)):null);If(()=>{let r=e.current,i=bp(r?r[0]:void 0);if(!t||n)return;let a=()=>{(!Vv||$v(Vv,e))&&Xv(Ep(i),e.current)&&(Vv=e)};return i.addEventListener(`focusin`,a,!1),r?.forEach(e=>e.addEventListener(`focusin`,a,!1)),()=>{i.removeEventListener(`focusin`,a,!1),r?.forEach(e=>e.removeEventListener(`focusin`,a,!1))}},[e,n]),If(()=>{let r=bp(e.current?e.current[0]:void 0);if(!t)return;let i=t=>{if(t.key!==`Tab`||t.altKey||t.ctrlKey||t.metaKey||!Gv(e)||t.isComposing)return;let n=r.activeElement;if(!Zv(n,e)||!ay(e))return;let i=py.getTreeNode(e);if(!i)return;let a=i.nodeToRestore,o=cy(r.body,{tabbable:!0});o.currentNode=n;let s=t.shiftKey?o.previousNode():o.nextNode();if((!a||!a.isConnected||a===r.body)&&(a=void 0,i.nodeToRestore=void 0),(!s||!Zv(s,e))&&a){o.currentNode=a;do s=t.shiftKey?o.previousNode():o.nextNode();while(Zv(s,e));t.preventDefault(),t.stopPropagation(),s?ey(s,!0):Yv(a)?ey(a,!0):n.blur()}};return n||r.addEventListener(`keydown`,i,!0),()=>{n||r.removeEventListener(`keydown`,i,!0)}},[e,t,n]),If(()=>{let n=bp(e.current?e.current[0]:void 0);if(!t)return;let i=py.getTreeNode(e);if(i)return i.nodeToRestore=r.current??void 0,()=>{let r=py.getTreeNode(e);if(!r)return;let i=r.nodeToRestore,a=Ep(n);if(t&&i&&(a&&Zv(a,e)||a===n.body&&ay(e))){let t=py.clone();requestAnimationFrame(()=>{if(n.activeElement===n.body){let n=t.getTreeNode(e);for(;n;){if(n.nodeToRestore&&n.nodeToRestore.isConnected){sy(n.nodeToRestore);return}n=n.parent}for(n=t.getTreeNode(e);n;){if(n.scopeRef&&n.scopeRef.current&&py.getTreeNode(n.scopeRef)){sy(ty(n.scopeRef.current,!0));return}n=n.parent}}})}}},[e,t])}function sy(e){e.dispatchEvent(new CustomEvent(Bv,{bubbles:!0,cancelable:!0}))&&ey(e)}function cy(e,t,n){let r=t?.tabbable?Gp:Wp,i=bp(e?.nodeType===Node.ELEMENT_NODE?e:null),a=Rv(i,e||i,NodeFilter.SHOW_ELEMENT,{acceptNode(e){return U(t?.from,e)||t?.tabbable&&e.tagName===`INPUT`&&e.getAttribute(`type`)===`radio`&&(!qv(e)||a.currentNode.tagName===`INPUT`&&a.currentNode.type===`radio`&&a.currentNode.name===e.name)?NodeFilter.FILTER_REJECT:r(e)&&(!n||Xv(e,n))&&(!t?.accept||t.accept(e))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});return t?.from&&(a.currentNode=t.from),a}function ly(e,t={}){return{focusNext(n={}){let r=e.current;if(!r)return null;let{from:i,tabbable:a=t.tabbable,wrap:o=t.wrap,accept:s=t.accept}=n,c=i||Ep(bp(r)),l=cy(r,{tabbable:a,accept:s});U(r,c)&&(l.currentNode=c);let u=l.nextNode();return!u&&o&&(l.currentNode=r,u=l.nextNode()),u&&ey(u,!0),u},focusPrevious(n=t){let r=e.current;if(!r)return null;let{from:i,tabbable:a=t.tabbable,wrap:o=t.wrap,accept:s=t.accept}=n,c=i||Ep(bp(r)),l=cy(r,{tabbable:a,accept:s});if(U(r,c))l.currentNode=c;else{let e=uy(l);return e&&ey(e,!0),e??null}let u=l.previousNode();if(!u&&o){l.currentNode=r;let e=uy(l);if(!e)return null;u=e}return u&&ey(u,!0),u??null},focusFirst(n=t){let r=e.current;if(!r)return null;let{tabbable:i=t.tabbable,accept:a=t.accept}=n,o=cy(r,{tabbable:i,accept:a}).nextNode();return o&&ey(o,!0),o},focusLast(n=t){let r=e.current;if(!r)return null;let{tabbable:i=t.tabbable,accept:a=t.accept}=n,o=uy(cy(r,{tabbable:i,accept:a}));return o&&ey(o,!0),o??null}}}function uy(e){let t,n;do n=e.lastChild(),n&&(t=n);while(n);return t}var dy=class e{constructor(){this.fastMap=new Map,this.root=new fy({scopeRef:null}),this.fastMap.set(null,this.root)}get size(){return this.fastMap.size}getTreeNode(e){return this.fastMap.get(e)}addTreeNode(e,t,n){let r=this.fastMap.get(t??null);if(!r)return;let i=new fy({scopeRef:e});r.addChild(i),i.parent=r,this.fastMap.set(e,i),n&&(i.nodeToRestore=n)}addNode(e){this.fastMap.set(e.scopeRef,e)}removeTreeNode(e){if(e===null)return;let t=this.fastMap.get(e);if(!t)return;let n=t.parent;for(let e of this.traverse())e!==t&&t.nodeToRestore&&e.nodeToRestore&&t.scopeRef&&t.scopeRef.current&&Xv(e.nodeToRestore,t.scopeRef.current)&&(e.nodeToRestore=t.nodeToRestore);let r=t.children;n&&(n.removeChild(t),r.size>0&&r.forEach(e=>n&&n.addChild(e))),this.fastMap.delete(t.scopeRef)}*traverse(e=this.root){if(e.scopeRef!=null&&(yield e),e.children.size>0)for(let t of e.children)yield*this.traverse(t)}clone(){let t=new e;for(let e of this.traverse())t.addTreeNode(e.scopeRef,e.parent?.scopeRef??null,e.nodeToRestore);return t}},fy=class{constructor(e){this.children=new Set,this.contain=!1,this.scopeRef=e.scopeRef}addChild(e){this.children.add(e),e.parent=this}removeChild(e){this.children.delete(e),e.parent=void 0}},py=new dy;function my(e){return am()?e.altKey:e.ctrlKey}function hy(e,t){let n=`[data-key="${CSS.escape(String(t))}"]`,r=e.current?.dataset.collection;return r&&(n=`[data-collection="${CSS.escape(r)}"]${n}`),e.current?.querySelector(n)}var gy=new WeakMap;function _y(e){let t=$f();return gy.set(e,t),t}function vy(e){return gy.get(e)}var yy=1e3;function by(e){let{keyboardDelegate:t,selectionManager:n,onTypeSelect:r}=e,i=(0,g.useRef)({search:``,timeout:void 0}).current;return{typeSelectProps:{onKeyDownCapture:t.getKeyForSearch?e=>{let a=xy(e.key);if(!(!a||e.ctrlKey||e.metaKey||!U(e.currentTarget,W(e))||i.search.length===0&&a===` `)){if(a===` `&&i.search.trim().length>0&&(e.preventDefault(),`continuePropagation`in e||e.stopPropagation()),i.search+=a,t.getKeyForSearch!=null){let e=t.getKeyForSearch(i.search,n.focusedKey);e??=t.getKeyForSearch(i.search),e!=null&&(n.setFocusedKey(e),r&&r(e))}clearTimeout(i.timeout),i.timeout=setTimeout(()=>{i.search=``},yy)}}:void 0}}}function xy(e){return e.length===1||!/^[A-Z]/i.test(e)?e:``}function Sy(e,t){let n=(0,g.useRef)(!0),r=(0,g.useRef)(null);If(()=>(n.current=!0,()=>{n.current=!1}),[]),If(()=>{n.current?n.current=!1:(!r.current||t.some((e,t)=>!Object.is(e,r[t])))&&e(),r.current=t},t)}function Cy(e){let{selectionManager:t,keyboardDelegate:n,ref:r,autoFocus:i=!1,shouldFocusWrap:a=!1,disallowEmptySelection:o=!1,disallowSelectAll:s=!1,escapeKeyBehavior:c=`clearSelection`,selectOnFocus:l=t.selectionBehavior===`replace`,disallowTypeAhead:u=!1,shouldUseVirtualFocus:d,allowsTabNavigation:f=!1,scrollRef:p=r,linkBehavior:m=`action`}=e,{direction:h}=$m(),_=pm(),v=e=>{if(e.altKey&&e.key===`Tab`&&e.preventDefault(),!r.current||!U(r.current,W(e)))return;let i=(n,i)=>{if(n!=null){if(t.isLink(n)&&m===`selection`&&l&&!my(e)){(0,Wh.flushSync)(()=>{t.setFocusedKey(n,i)});let a=hy(r,n),o=t.getItemProps(n);a&&_.open(a,e,o.href,o.routerOptions);return}if(t.setFocusedKey(n,i),t.isLink(n)&&m===`override`)return;e.shiftKey&&t.selectionMode===`multiple`?t.extendSelection(n):l&&!my(e)&&t.replaceSelection(n)}};switch(e.key){case`ArrowDown`:if(n.getKeyBelow){let r=t.focusedKey==null?n.getFirstKey?.():n.getKeyBelow?.(t.focusedKey);r==null&&a&&(r=n.getFirstKey?.(t.focusedKey)),r!=null&&(e.preventDefault(),i(r))}break;case`ArrowUp`:if(n.getKeyAbove){let r=t.focusedKey==null?n.getLastKey?.():n.getKeyAbove?.(t.focusedKey);r==null&&a&&(r=n.getLastKey?.(t.focusedKey)),r!=null&&(e.preventDefault(),i(r))}break;case`ArrowLeft`:if(n.getKeyLeftOf){let r=t.focusedKey==null?n.getFirstKey?.():n.getKeyLeftOf?.(t.focusedKey);r==null&&a&&(r=h===`rtl`?n.getFirstKey?.(t.focusedKey):n.getLastKey?.(t.focusedKey)),r!=null&&(e.preventDefault(),i(r,h===`rtl`?`first`:`last`))}break;case`ArrowRight`:if(n.getKeyRightOf){let r=t.focusedKey==null?n.getFirstKey?.():n.getKeyRightOf?.(t.focusedKey);r==null&&a&&(r=h===`rtl`?n.getLastKey?.(t.focusedKey):n.getFirstKey?.(t.focusedKey)),r!=null&&(e.preventDefault(),i(r,h===`rtl`?`last`:`first`))}break;case`Home`:if(n.getFirstKey){if(t.focusedKey===null&&e.shiftKey)return;e.preventDefault();let r=n.getFirstKey(t.focusedKey,Vm(e));t.setFocusedKey(r),r!=null&&(Vm(e)&&e.shiftKey&&t.selectionMode===`multiple`?t.extendSelection(r):l&&t.replaceSelection(r))}break;case`End`:if(n.getLastKey){if(t.focusedKey===null&&e.shiftKey)return;e.preventDefault();let r=n.getLastKey(t.focusedKey,Vm(e));t.setFocusedKey(r),r!=null&&(Vm(e)&&e.shiftKey&&t.selectionMode===`multiple`?t.extendSelection(r):l&&t.replaceSelection(r))}break;case`PageDown`:if(n.getKeyPageBelow&&t.focusedKey!=null){let r=n.getKeyPageBelow(t.focusedKey);r!=null&&(e.preventDefault(),i(r))}break;case`PageUp`:if(n.getKeyPageAbove&&t.focusedKey!=null){let r=n.getKeyPageAbove(t.focusedKey);r!=null&&(e.preventDefault(),i(r))}break;case`a`:Vm(e)&&t.selectionMode===`multiple`&&s!==!0&&(e.preventDefault(),t.selectAll());break;case`Escape`:c===`clearSelection`&&!o&&t.selectedKeys.size!==0&&(e.stopPropagation(),e.preventDefault(),t.clearSelection());break;case`Tab`:if(!f){if(e.shiftKey)r.current.focus();else{let e=cy(r.current,{tabbable:!0}),t,n;do n=e.lastChild(),n&&(t=n);while(n);let i=Ep();t&&(!Dp(t)||i&&!Gp(i))&&Mp(t)}break}}},y=(0,g.useRef)({top:0,left:0});Wm(p,`scroll`,()=>{y.current={top:p.current?.scrollTop??0,left:p.current?.scrollLeft??0}});let b=e=>{if(t.isFocused){U(e.currentTarget,W(e))||t.setFocused(!1);return}if(U(e.currentTarget,W(e))){if(t.setFocused(!0),t.focusedKey==null){let r=e=>{e!=null&&(t.setFocusedKey(e),l&&!t.isSelected(e)&&t.replaceSelection(e))},i=e.relatedTarget;i&&e.currentTarget.compareDocumentPosition(i)&Node.DOCUMENT_POSITION_FOLLOWING?r(t.lastSelectedKey??n.getLastKey?.()):r(t.firstSelectedKey??n.getFirstKey?.())}else p.current&&(p.current.scrollTop=y.current.top,p.current.scrollLeft=y.current.left);if(t.focusedKey!=null&&p.current){let e=hy(r,t.focusedKey);e instanceof HTMLElement&&(!Dp(e)&&!d&&Mp(e),Fm()===`keyboard`&&f_(e,{containingElement:r.current}))}}},x=e=>{U(e.currentTarget,e.relatedTarget)||t.setFocused(!1)},S=(0,g.useRef)(!1);Wm(r,yp,d?e=>{let{detail:n}=e;e.stopPropagation(),t.setFocused(!0),n?.focusStrategy===`first`&&(S.current=!0)}:void 0),Sy(()=>{if(S.current){let e=n.getFirstKey?.()??null;if(e==null){let e=Ep();Op(r.current),Ap(e,null),t.collection.size>0&&(S.current=!1)}else t.setFocusedKey(e),S.current=!1}},[t.collection]),Sy(()=>{t.collection.size>0&&(S.current=!1)},[t.focusedKey]),Wm(r,vp,d?e=>{e.stopPropagation(),t.setFocused(!1),e.detail?.clearFocusKey&&t.setFocusedKey(null)}:void 0);let C=(0,g.useRef)(i),w=(0,g.useRef)(!1);(0,g.useEffect)(()=>{if(C.current){let e=null;i===`first`&&(e=n.getFirstKey?.()??null),i===`last`&&(e=n.getLastKey?.()??null);let a=t.selectedKeys;if(a.size){for(let n of a)if(t.canSelectItem(n)){e=n;break}}t.setFocused(!0),t.setFocusedKey(e),e==null&&!d&&r.current&&Fh(r.current),t.collection.size>0&&(C.current=!1,w.current=!0)}});let T=(0,g.useRef)(t.focusedKey),E=(0,g.useRef)(null);(0,g.useEffect)(()=>{if(t.isFocused&&t.focusedKey!=null&&(t.focusedKey!==T.current||w.current)&&p.current&&r.current){let e=Fm(),n=hy(r,t.focusedKey);if(!(n instanceof HTMLElement))return;(e===`keyboard`||w.current)&&(E.current&&cancelAnimationFrame(E.current),E.current=requestAnimationFrame(()=>{p.current&&(d_(p.current,n),e!==`virtual`&&f_(n,{containingElement:r.current}))}))}!d&&t.isFocused&&t.focusedKey==null&&T.current!=null&&r.current&&Fh(r.current),T.current=t.focusedKey,w.current=!1}),(0,g.useEffect)(()=>()=>{E.current&&cancelAnimationFrame(E.current)},[]),Wm(r,`react-aria-focus-scope-restore`,e=>{e.preventDefault(),t.setFocused(!0)});let D={onKeyDown:v,onFocus:b,onBlur:x,onMouseDown(e){p.current===W(e)&&e.preventDefault()}},{typeSelectProps:O}=by({keyboardDelegate:n,selectionManager:t});u||(D=op(O,D));let k;d||(k=t.focusedKey==null?0:-1);let A=_y(t.collection);return{collectionProps:op(D,{tabIndex:k,"data-collection":A})}}var wy=class{constructor(e){this.ref=e}getItemRect(e){let t=this.ref.current;if(!t)return null;let n=e==null?null:hy(this.ref,e);if(!n)return null;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect();return{x:i.left-r.left-t.clientLeft+t.scrollLeft,y:i.top-r.top-t.clientTop+t.scrollTop,width:i.width,height:i.height}}getContentSize(){let e=this.ref.current;return{width:e?.scrollWidth??0,height:e?.scrollHeight??0}}getVisibleRect(){let e=this.ref.current;return{x:e?.scrollLeft??0,y:e?.scrollTop??0,width:e?.clientWidth??0,height:e?.clientHeight??0}}},Ty=class{constructor(...e){if(e.length===1){let t=e[0];this.collection=t.collection,this.ref=t.ref,this.collator=t.collator,this.disabledKeys=t.disabledKeys||new Set,this.disabledBehavior=t.disabledBehavior||`all`,this.orientation=t.orientation||`vertical`,this.direction=t.direction,this.layout=t.layout||`stack`,this.layoutDelegate=t.layoutDelegate||new wy(t.ref)}else this.collection=e[0],this.disabledKeys=e[1],this.ref=e[2],this.collator=e[3],this.layout=`stack`,this.orientation=`vertical`,this.disabledBehavior=`all`,this.layoutDelegate=new wy(this.ref);this.layout===`stack`&&this.orientation===`vertical`&&(this.getKeyLeftOf=void 0,this.getKeyRightOf=void 0)}isDisabled(e){return this.disabledBehavior===`all`&&(e.props?.isDisabled||this.disabledKeys.has(e.key))&&e.props?.disabledBehavior!==`selection`}findNextNonDisabled(e,t,n=!1){let r=e;for(;r!=null;){let e=this.collection.getItem(r);if(e?.type===`item`&&(n||!this.isDisabled(e)))return r;r=t(r)}return null}getNextKey(e,t){let n=e;return n=this.collection.getKeyAfter(n),this.findNextNonDisabled(n,e=>this.collection.getKeyAfter(e),t?.includeDisabled)}getPreviousKey(e,t){let n=e;return n=this.collection.getKeyBefore(n),this.findNextNonDisabled(n,e=>this.collection.getKeyBefore(e),t?.includeDisabled)}findKey(e,t,n){let r=e,i=this.layoutDelegate.getItemRect(r);if(!i||r==null)return null;let a=i;do{if(r=t(r),r==null)break;i=this.layoutDelegate.getItemRect(r)}while(i&&n(a,i)&&r!=null);return r}isSameRow(e,t){return e.y===t.y||e.x!==t.x}isSameColumn(e,t){return e.x===t.x||e.y!==t.y}getKeyBelow(e,t){return this.layout===`grid`&&this.orientation===`vertical`?this.findKey(e,e=>this.getNextKey(e,t),this.isSameRow):this.getNextKey(e,t)}getKeyAbove(e,t){return this.layout===`grid`&&this.orientation===`vertical`?this.findKey(e,e=>this.getPreviousKey(e,t),this.isSameRow):this.getPreviousKey(e,t)}getNextColumn(e,t,n){return t?this.getPreviousKey(e,n):this.getNextKey(e,n)}getKeyRightOf(e,t){let n=this.direction===`ltr`?`getKeyRightOf`:`getKeyLeftOf`;return this.layoutDelegate[n]?(e=this.layoutDelegate[n](e),this.findNextNonDisabled(e,e=>this.layoutDelegate[n](e),t?.includeDisabled)):this.layout===`grid`?this.orientation===`vertical`?this.getNextColumn(e,this.direction===`rtl`,t):this.findKey(e,e=>this.getNextColumn(e,this.direction===`rtl`,t),this.isSameColumn):this.orientation===`horizontal`?this.getNextColumn(e,this.direction===`rtl`,t):null}getKeyLeftOf(e,t){let n=this.direction===`ltr`?`getKeyLeftOf`:`getKeyRightOf`;return this.layoutDelegate[n]?(e=this.layoutDelegate[n](e),this.findNextNonDisabled(e,e=>this.layoutDelegate[n](e),t?.includeDisabled)):this.layout===`grid`?this.orientation===`vertical`?this.getNextColumn(e,this.direction===`ltr`,t):this.findKey(e,e=>this.getNextColumn(e,this.direction===`ltr`,t),this.isSameColumn):this.orientation===`horizontal`?this.getNextColumn(e,this.direction===`ltr`,t):null}getFirstKey(){let e=this.collection.getFirstKey();return this.findNextNonDisabled(e,e=>this.collection.getKeyAfter(e))}getLastKey(){let e=this.collection.getLastKey();return this.findNextNonDisabled(e,e=>this.collection.getKeyBefore(e))}getKeyPageAbove(e){let t=this.ref.current,n=this.layoutDelegate.getItemRect(e);if(!n)return null;if(t&&!c_(t))return this.getFirstKey();let r=e;if(this.orientation===`horizontal`){let e=Math.max(0,n.x+n.width-this.layoutDelegate.getVisibleRect().width);for(;n&&n.x>e&&r!=null;)r=this.getKeyAbove(r),n=r==null?null:this.layoutDelegate.getItemRect(r)}else{let e=Math.max(0,n.y+n.height-this.layoutDelegate.getVisibleRect().height);for(;n&&n.y>e&&r!=null;)r=this.getKeyAbove(r),n=r==null?null:this.layoutDelegate.getItemRect(r)}return r??this.getFirstKey()}getKeyPageBelow(e){let t=this.ref.current,n=this.layoutDelegate.getItemRect(e);if(!n)return null;if(t&&!c_(t))return this.getLastKey();let r=e;if(this.orientation===`horizontal`){let e=Math.min(this.layoutDelegate.getContentSize().width,n.x-n.width+this.layoutDelegate.getVisibleRect().width);for(;n&&n.xe[0]a||new Ty({collection:n,disabledKeys:r,disabledBehavior:l,ref:i,collator:c,layoutDelegate:o,orientation:s}),[a,o,n,r,i,c,l,s]),{collectionProps:d}=Cy({...e,ref:i,selectionManager:t,keyboardDelegate:u});return{listProps:d}}function ky(e,t,n){let r=gg(e,{labelable:!0}),i=e.selectionBehavior||`toggle`,a=e.orientation||`vertical`,o=e.linkBehavior||(i===`replace`?`action`:`override`);i===`toggle`&&o===`action`&&(o=`override`);let{listProps:s}=Oy({...e,ref:n,selectionManager:t.selectionManager,collection:t.collection,disabledKeys:t.disabledKeys,linkBehavior:o}),{focusWithinProps:c}=Rg({onFocusWithin:e.onFocus,onBlurWithin:e.onBlur,onFocusWithinChange:e.onFocusChange}),l=$f(e.id);Pv.set(t,{id:l,shouldUseVirtualFocus:e.shouldUseVirtualFocus,shouldSelectOnPressUp:e.shouldSelectOnPressUp,shouldFocusOnHover:e.shouldFocusOnHover,isVirtualized:e.isVirtualized,onAction:e.onAction,linkBehavior:o,UNSTABLE_itemBehavior:e.UNSTABLE_itemBehavior});let{labelProps:u,fieldProps:d}=qg({...e,id:l,labelElementType:`span`});return{labelProps:u,listBoxProps:op(r,c,t.selectionManager.selectionMode===`multiple`?{"aria-multiselectable":`true`}:{},{role:`listbox`,"aria-orientation":a,...op(d,s)})}}var Ay=500;function jy(e){let{isDisabled:t,onLongPressStart:n,onLongPressEnd:r,onLongPress:i,threshold:a=Ay,accessibilityDescription:o}=e,s=(0,g.useRef)(void 0),{addGlobalListener:c,removeGlobalListener:l}=Tg(),{pressProps:u}=jg({isDisabled:t,onPressStart(e){if(e.continuePropagation(),(e.pointerType===`mouse`||e.pointerType===`touch`)&&(n&&n({...e,type:`longpressstart`}),s.current=setTimeout(()=>{e.target.dispatchEvent(new PointerEvent(`pointercancel`,{bubbles:!0})),bp(e.target).activeElement!==e.target&&Mp(e.target),i&&i({...e,type:`longpress`}),s.current=void 0},a),e.pointerType===`touch`)){let t=e=>{e.preventDefault()},n=xp(e.target);c(e.target,`contextmenu`,t,{once:!0}),c(n,`pointerup`,()=>{setTimeout(()=>{l(e.target,`contextmenu`,t)},30)},{once:!0})}},onPressEnd(e){s.current&&clearTimeout(s.current),r&&(e.pointerType===`mouse`||e.pointerType===`touch`)&&r({...e,type:`longpressend`})}});return{longPressProps:op(u,h_(i&&!t?o:void 0))}}function My(e){let{id:t,selectionManager:n,key:r,ref:i,shouldSelectOnPressUp:a,shouldUseVirtualFocus:o,focus:s,isDisabled:c,onAction:l,allowsDifferentPressOrigin:u,linkBehavior:d=`action`}=e,f=pm();t=$f(t);let p=e=>{if(e.pointerType===`keyboard`&&my(e))n.toggleSelection(r);else{if(n.selectionMode===`none`)return;if(n.isLink(r)){if(d===`selection`&&i.current){let t=n.getItemProps(r);f.open(i.current,e,t.href,t.routerOptions),n.setSelectedKeys(n.selectedKeys);return}else if(d===`override`||d===`none`)return}n.selectionMode===`single`?n.isSelected(r)&&!n.disallowEmptySelection?n.toggleSelection(r):n.replaceSelection(r):e&&e.shiftKey?n.extendSelection(r):n.selectionBehavior===`toggle`||e&&(Vm(e)||e.pointerType===`touch`||e.pointerType===`virtual`)?n.toggleSelection(r):n.replaceSelection(r)}};(0,g.useEffect)(()=>{r===n.focusedKey&&n.isFocused&&(o?Op(i.current):s?s():Ep()!==i.current&&i.current&&Fh(i.current))},[i,r,n.focusedKey,n.childFocusStrategy,n.isFocused,o]),c||=n.isDisabled(r);let m={};!o&&!c?m={tabIndex:r===n.focusedKey?0:-1,onFocus(e){W(e)===i.current&&n.setFocusedKey(r)}}:c&&(m.onMouseDown=e=>{e.preventDefault()}),(0,g.useEffect)(()=>{c&&n.focusedKey===r&&n.setFocusedKey(null)},[n,c,r]);let h=n.isLink(r)&&d===`override`,_=l&&e.UNSTABLE_itemBehavior===`action`,v=n.isLink(r)&&d!==`selection`&&d!==`none`,y=!c&&n.canSelectItem(r)&&!h&&!_,b=(l||v)&&!c,x=b&&(n.selectionBehavior===`replace`?!y:!y||n.isEmpty),S=b&&y&&n.selectionBehavior===`replace`,C=x||S,w=(0,g.useRef)(null),T=C&&y,E=(0,g.useRef)(!1),D=(0,g.useRef)(!1),O=n.getItemProps(r),k=e=>{l&&(l(),i.current?.dispatchEvent(new CustomEvent(`react-aria-item-action`,{bubbles:!0}))),v&&i.current&&f.open(i.current,e,O.href,O.routerOptions)},A={ref:i};if(a?(A.onPressStart=e=>{w.current=e.pointerType,E.current=T,e.pointerType===`keyboard`&&(!C||Py(e.key))&&p(e)},u?(A.onPressUp=x?void 0:e=>{e.pointerType===`mouse`&&y&&p(e)},A.onPress=x?k:e=>{e.pointerType!==`keyboard`&&e.pointerType!==`mouse`&&y&&p(e)}):A.onPress=e=>{if(x||S&&e.pointerType!==`mouse`){if(e.pointerType===`keyboard`&&!Ny(e.key))return;k(e)}else e.pointerType!==`keyboard`&&y&&p(e)}):(A.onPressStart=e=>{w.current=e.pointerType,E.current=T,D.current=x,y&&(e.pointerType===`mouse`&&!x||e.pointerType===`keyboard`&&(!b||Py(e.key)))&&p(e)},A.onPress=e=>{(e.pointerType===`touch`||e.pointerType===`pen`||e.pointerType===`virtual`||e.pointerType===`keyboard`&&C&&Ny(e.key)||e.pointerType===`mouse`&&D.current)&&(C?k(e):y&&p(e))}),m[`data-collection`]=vy(n.collection),m[`data-key`]=r,A.preventFocusOnPress=o,o&&(A=op(A,{onPressStart(e){e.pointerType!==`touch`&&(n.setFocused(!0),n.setFocusedKey(r))},onPress(e){e.pointerType===`touch`&&(n.setFocused(!0),n.setFocusedKey(r))}})),O)for(let e of[`onPressStart`,`onPressEnd`,`onPressChange`,`onPress`,`onPressUp`,`onClick`])O[e]&&(A[e]=Ff(A[e],O[e]));let{pressProps:j,isPressed:M}=jg(A),N=S?e=>{w.current===`mouse`&&(e.stopPropagation(),e.preventDefault(),k(e))}:void 0,{longPressProps:P}=jy({isDisabled:!T,onLongPress(e){e.pointerType===`touch`&&(p(e),n.setSelectionBehavior(`toggle`))}}),F=e=>{w.current===`touch`&&E.current&&e.preventDefault()},ee=d!==`none`&&n.isLink(r)?e=>{mm.isOpening||e.preventDefault()}:void 0;return{itemProps:op(m,y||x||o&&!c?j:{},T?P:{},{onDoubleClick:N,onDragStartCapture:F,onClick:ee,id:t},o?{onMouseDown:e=>e.preventDefault()}:void 0),isPressed:M,isSelected:n.isSelected(r),isFocused:n.isFocused&&n.focusedKey===r,isDisabled:c,allowsSelection:y,hasAction:C}}function Ny(e){return e===`Enter`}function Py(e){return e===` `}function Fy(e,t){return typeof t.getChildren==`function`?t.getChildren(e.key):e.childNodes}function vee(e){return yee(e,0)}function yee(e,t){if(t<0)return;let n=0;for(let r of e){if(n===t)return r;n++}}function Iy(e,t,n){if(t.parentKey===n.parentKey)return t.index-n.index;let r=[...Ly(e,t),t],i=[...Ly(e,n),n],a=r.slice(0,i.length).findIndex((e,t)=>e!==i[t]);return a===-1?r.findIndex(e=>e===n)>=0?1:(i.findIndex(e=>e===t),-1):(t=r[a],n=i[a],t.index-n.index)}function Ly(e,t){let n=[],r=t;for(;r?.parentKey!=null;)r=e.getItem(r.parentKey),r&&n.unshift(r);return n}var Ry=new WeakMap;function bee(e){let t=Ry.get(e);if(t!=null)return t;let n=0,r=t=>{for(let i of t)i.type===`section`?r(Fy(i,e)):i.type===`item`&&n++};return r(e),Ry.set(e,n),n}function xee(e,t,n){let{key:r}=e,i=Pv.get(t),a=e.isDisabled??t.selectionManager.isDisabled(r),o=e.isSelected??t.selectionManager.isSelected(r),s=e.shouldSelectOnPressUp??i?.shouldSelectOnPressUp,c=e.shouldFocusOnHover??i?.shouldFocusOnHover,l=e.shouldUseVirtualFocus??i?.shouldUseVirtualFocus,u=e.isVirtualized??i?.isVirtualized,d=tp(),f=tp(),p={role:`option`,"aria-disabled":a||void 0,"aria-selected":t.selectionManager.selectionMode===`none`?void 0:o,"aria-label":e[`aria-label`],"aria-labelledby":d,"aria-describedby":f},m=t.collection.getItem(r);if(u){let e=Number(m?.index);p[`aria-posinset`]=Number.isNaN(e)?void 0:e+1,p[`aria-setsize`]=bee(t.collection)}let h=i?.onAction?()=>i?.onAction?.(r):void 0,g=Iv(t,r),{itemProps:_,isPressed:v,isFocused:y,hasAction:b,allowsSelection:x}=My({selectionManager:t.selectionManager,key:r,ref:n,shouldSelectOnPressUp:s,allowsDifferentPressOrigin:s&&c,isVirtualized:u,shouldUseVirtualFocus:l,isDisabled:a,onAction:h||m?.props?.onAction?Ff(m?.props?.onAction,h):void 0,linkBehavior:i?.linkBehavior,UNSTABLE_itemBehavior:i?.UNSTABLE_itemBehavior,id:g}),{hoverProps:S}=Gg({isDisabled:a||!c,onHoverStart(){Pm()||(t.selectionManager.setFocused(!0),t.selectionManager.setFocusedKey(r))}}),C=gg(m?.props);delete C.id;let w=_m(m?.props);return{optionProps:{...p,...op(C,_,S,w),id:g},labelProps:{id:d},descriptionProps:{id:f},isFocused:y,isFocusVisible:y&&t.selectionManager.isFocused&&Pm(),isSelected:o,isDisabled:a,isPressed:v,allowsSelection:x,hasAction:b}}function See(e){let{heading:t,"aria-label":n}=e,r=$f();return{itemProps:{role:`presentation`},headingProps:t?{id:r,role:`presentation`,onMouseDown:e=>{e.preventDefault()}}:{},groupProps:{role:`group`,"aria-label":n,"aria-labelledby":t?r:void 0}}}function zy(e){let t=g.version.split(`.`);return parseInt(t[0],10)>=19?e:e?`true`:void 0}var By=class{constructor(e){this.keyMap=new Map,this.firstKey=null,this.lastKey=null,this.iterable=e;let t=e=>{if(this.keyMap.set(e.key,e),e.childNodes&&e.type===`section`)for(let n of e.childNodes)t(n)};for(let n of e)t(n);let n=null,r=0,i=0;for(let[e,t]of this.keyMap)n?(n.nextKey=e,t.prevKey=n.key):(this.firstKey=e,t.prevKey=void 0),t.type===`item`&&(t.index=r++),(t.type===`section`||t.type===`item`)&&i++,n=t,n.nextKey=void 0;this._size=i,this.lastKey=n?.key??null}*[Symbol.iterator](){yield*this.iterable}get size(){return this._size}getKeys(){return this.keyMap.keys()}getKeyBefore(e){let t=this.keyMap.get(e);return t?t.prevKey??null:null}getKeyAfter(e){let t=this.keyMap.get(e);return t?t.nextKey??null:null}getFirstKey(){return this.firstKey}getLastKey(){return this.lastKey}getItem(e){return this.keyMap.get(e)??null}at(e){let t=[...this.getKeys()];return this.getItem(t[e])}getChildren(e){return this.keyMap.get(e)?.childNodes||[]}},Vy=class e extends Set{constructor(t,n,r){super(t),t instanceof e?(this.anchorKey=n??t.anchorKey,this.currentKey=r??t.currentKey):(this.anchorKey=n??null,this.currentKey=r??null)}};function Cee(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function wee(e){let{selectionMode:t=`none`,disallowEmptySelection:n=!1,allowDuplicateSelectionEvents:r,selectionBehavior:i=`toggle`,disabledBehavior:a=`all`}=e,o=(0,g.useRef)(!1),[,s]=(0,g.useState)(!1),c=(0,g.useRef)(null),l=(0,g.useRef)(null),[,u]=(0,g.useState)(null),[d,f]=mh((0,g.useMemo)(()=>Hy(e.selectedKeys),[e.selectedKeys]),(0,g.useMemo)(()=>Hy(e.defaultSelectedKeys,new Vy),[e.defaultSelectedKeys]),e.onSelectionChange),p=(0,g.useMemo)(()=>e.disabledKeys?new Set(e.disabledKeys):new Set,[e.disabledKeys]),[m,h]=(0,g.useState)(i);i===`replace`&&m===`toggle`&&typeof d==`object`&&d.size===0&&h(`replace`);let _=(0,g.useRef)(i);return(0,g.useEffect)(()=>{i!==_.current&&(h(i),_.current=i)},[i]),{selectionMode:t,disallowEmptySelection:n,selectionBehavior:m,setSelectionBehavior:h,get isFocused(){return o.current},setFocused(e){o.current=e,s(e)},get focusedKey(){return c.current},get childFocusStrategy(){return l.current},setFocusedKey(e,t=`first`){c.current=e,l.current=t,u(e)},selectedKeys:d,setSelectedKeys(e){(r||!Cee(e,d))&&f(e)},disabledKeys:p,disabledBehavior:a}}function Hy(e,t){return e?e===`all`?`all`:new Vy(e):t}var Tee=class e{constructor(e,t,n){this.collection=e,this.state=t,this.allowsCellSelection=n?.allowsCellSelection??!1,this._isSelectAll=null,this.layoutDelegate=n?.layoutDelegate||null,this.fullCollection=n?.fullCollection||null}get selectionMode(){return this.state.selectionMode}get disallowEmptySelection(){return this.state.disallowEmptySelection}get selectionBehavior(){return this.state.selectionBehavior}setSelectionBehavior(e){this.state.setSelectionBehavior(e)}get isFocused(){return this.state.isFocused}setFocused(e){this.state.setFocused(e)}get focusedKey(){return this.state.focusedKey}get childFocusStrategy(){return this.state.childFocusStrategy}setFocusedKey(e,t){(e==null||this.collection.getItem(e))&&this.state.setFocusedKey(e,t)}get selectedKeys(){return this.state.selectedKeys===`all`?new Set(this.getSelectAllKeys()):this.state.selectedKeys}get rawSelection(){return this.state.selectedKeys}isSelected(e){if(this.state.selectionMode===`none`)return!1;let t=this.getKey(e);return t==null?!1:this.state.selectedKeys===`all`?this.canSelectItem(t):this.state.selectedKeys.has(t)}get isEmpty(){return this.state.selectedKeys!==`all`&&this.state.selectedKeys.size===0}get isSelectAll(){if(this.isEmpty)return!1;if(this.state.selectedKeys===`all`)return!0;if(this._isSelectAll!=null)return this._isSelectAll;let e=this.getSelectAllKeys(),t=this.state.selectedKeys;return this._isSelectAll=e.every(e=>t.has(e)),this._isSelectAll}get firstSelectedKey(){let e=null;for(let t of this.state.selectedKeys){let n=this.collection.getItem(t);(!e||n&&Iy(this.collection,n,e)<0)&&(e=n)}return e?.key??null}get lastSelectedKey(){let e=null;for(let t of this.state.selectedKeys){let n=this.collection.getItem(t);(!e||n&&Iy(this.collection,n,e)>0)&&(e=n)}return e?.key??null}get disabledKeys(){return this.state.disabledKeys}get disabledBehavior(){return this.state.disabledBehavior}extendSelection(e){if(this.selectionMode===`none`)return;if(this.selectionMode===`single`){this.replaceSelection(e);return}let t=this.getKey(e);if(t==null)return;let n;if(this.state.selectedKeys===`all`)n=new Vy([t],t,t);else{let e=this.state.selectedKeys,r=e.anchorKey??t;n=new Vy(e,r,t);for(let i of this.getKeyRange(r,e.currentKey??t))n.delete(i);for(let e of this.getKeyRange(t,r))this.canSelectItem(e)&&n.add(e)}this.state.setSelectedKeys(n)}getKeyRange(e,t){let n=this.collection.getItem(e),r=this.collection.getItem(t);return n&&r?Iy(this.collection,n,r)<=0?this.getKeyRangeInternal(e,t):this.getKeyRangeInternal(t,e):[]}getKeyRangeInternal(e,t){if(this.layoutDelegate?.getKeyRange)return this.layoutDelegate.getKeyRange(e,t);let n=[],r=e;for(;r!=null;){let e=this.collection.getItem(r);if(e&&(e.type===`item`||e.type===`cell`&&this.allowsCellSelection)&&n.push(r),r===t)return n;r=this.collection.getKeyAfter(r)}return[]}getKey(e){let t=this.collection.getItem(e);if(!t||t.type===`cell`&&this.allowsCellSelection)return e;for(;t&&t.type!==`item`&&t.parentKey!=null;)t=this.collection.getItem(t.parentKey);return!t||t.type!==`item`?null:t.key}toggleSelection(e){if(this.selectionMode===`none`)return;if(this.selectionMode===`single`&&!this.isSelected(e)){this.replaceSelection(e);return}let t=this.getKey(e);if(t==null)return;let n=new Vy(this.state.selectedKeys===`all`?this.getSelectAllKeys():this.state.selectedKeys);n.has(t)?n.delete(t):this.canSelectItem(t)&&(n.add(t),n.anchorKey=t,n.currentKey=t),!(this.disallowEmptySelection&&n.size===0)&&this.state.setSelectedKeys(n)}replaceSelection(e){if(this.selectionMode===`none`)return;let t=this.getKey(e);if(t==null)return;let n=this.canSelectItem(t)?new Vy([t],t,t):new Vy;this.state.setSelectedKeys(n)}setSelectedKeys(e){if(this.selectionMode===`none`)return;let t=new Vy;for(let n of e){let e=this.getKey(n);if(e!=null&&(t.add(e),this.selectionMode===`single`))break}this.state.setSelectedKeys(t)}getSelectAllKeys(){let e=this.fullCollection??this.collection,t=[],n=r=>{for(;r!=null;){if(this.canSelectItemIn(r,e)){let i=e.getItem(r);i?.type===`item`&&t.push(r),i?.hasChildNodes&&(this.allowsCellSelection||i.type!==`item`)&&n(vee(Fy(i,e))?.key??null)}r=e.getKeyAfter(r)}};return n(e.getFirstKey()),t}selectAll(){!this.isSelectAll&&this.selectionMode===`multiple`&&this.state.setSelectedKeys(`all`)}clearSelection(){!this.disallowEmptySelection&&(this.state.selectedKeys===`all`||this.state.selectedKeys.size>0)&&this.state.setSelectedKeys(new Vy)}toggleSelectAll(){this.isSelectAll?this.clearSelection():this.selectAll()}select(e,t){this.selectionMode!==`none`&&(this.selectionMode===`single`?this.isSelected(e)&&!this.disallowEmptySelection?this.toggleSelection(e):this.replaceSelection(e):this.selectionBehavior===`toggle`||t&&(t.pointerType===`touch`||t.pointerType===`virtual`)?this.toggleSelection(e):this.replaceSelection(e))}isSelectionEqual(e){if(e===this.state.selectedKeys)return!0;let t=this.selectedKeys;if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;for(let n of t)if(!e.has(n))return!1;return!0}canSelectItem(e){return this.canSelectItemIn(e,this.collection)}canSelectItemIn(e,t){if(this.state.selectionMode===`none`||this.state.disabledKeys.has(e))return!1;let n=t.getItem(e);return!(!n||n?.props?.isDisabled||n.type===`cell`&&!this.allowsCellSelection)}isDisabled(e){let t=this.collection.getItem(e);return this.state.disabledBehavior===`all`&&(this.state.disabledKeys.has(e)||!!t?.props?.isDisabled)&&t?.props?.disabledBehavior!==`selection`}isLink(e){return!!this.collection.getItem(e)?.props?.href}getItemProps(e){return this.collection.getItem(e)?.props}withCollection(t){return new e(t,this.state,{allowsCellSelection:this.allowsCellSelection,layoutDelegate:this.layoutDelegate||void 0,fullCollection:this.fullCollection??this.collection})}},Eee=class{build(e,t){return this.context=t,Uy(()=>this.iterateCollection(e))}*iterateCollection(e){let{children:t,items:n}=e;if(g.isValidElement(t)&&t.type===g.Fragment)yield*this.iterateCollection({children:t.props.children,items:n});else if(typeof t==`function`){if(!n)throw Error(`props.children was a function but props.items is missing`);let e=0;for(let r of n)yield*this.getFullNode({value:r,index:e},{renderer:t}),e++}else{let e=[];g.Children.forEach(t,t=>{t&&e.push(t)});let n=0;for(let t of e){let e=this.getFullNode({element:t,index:n},{});for(let t of e)n++,yield t}}}getKey(e,t,n,r){if(e.key!=null)return e.key;if(t.type===`cell`&&t.key!=null)return`${r}${t.key}`;let i=t.value;if(i!=null){let e=i.key??i.id;if(e==null)throw Error(`No key found for item`);return e}return r?`${r}.${t.index}`:`$.${t.index}`}getChildState(e,t){return{renderer:t.renderer||e.renderer}}*getFullNode(e,t,n,r){if(g.isValidElement(e.element)&&e.element.type===g.Fragment){let i=[];g.Children.forEach(e.element.props.children,e=>{i.push(e)});let a=e.index??0;for(let e of i)yield*this.getFullNode({element:e,index:a++},t,n,r);return}let i=e.element;if(!i&&e.value&&t&&t.renderer){let n=this.cache.get(e.value);if(n&&(!n.shouldInvalidate||!n.shouldInvalidate(this.context))){n.index=e.index,n.parentKey=r?r.key:null,yield n;return}i=t.renderer(e.value)}if(g.isValidElement(i)){let a=i.type;if(typeof a!=`function`&&typeof a.getCollectionNode!=`function`){let e=i.type;throw Error(`Unknown element <${e}> in collection.`)}let o=a.getCollectionNode(i.props,this.context),s=e.index??0,c=o.next();for(;!c.done&&c.value;){let a=c.value;e.index=s;let l=a.key??null;l??=a.element?null:this.getKey(i,e,t,n);let u=[...this.getFullNode({...a,key:l,index:s,wrapper:Dee(e.wrapper,a.wrapper)},this.getChildState(t,a),n?`${n}${i.key}`:i.key,r)];for(let t of u){if(t.value=a.value??e.value??null,t.value&&this.cache.set(t.value,t),e.type&&t.type!==e.type)throw Error(`Unsupported type <${Wy(t.type)}> in <${Wy(r?.type??`unknown parent type`)}>. Only <${Wy(e.type)}> is supported.`);s++,yield t}c=o.next(u)}return}if(e.key==null||e.type==null)return;let a=this,o={type:e.type,props:e.props,key:e.key,parentKey:r?r.key:null,value:e.value??null,level:(r?.level??0)+ +(r?.type===`item`),index:e.index,rendered:e.rendered,textValue:e.textValue??``,"aria-label":e[`aria-label`],wrapper:e.wrapper,shouldInvalidate:e.shouldInvalidate,hasChildNodes:e.hasChildNodes||!1,childNodes:Uy(function*(){if(!e.hasChildNodes||!e.childNodes)return;let n=0;for(let r of e.childNodes()){r.key!=null&&(r.key=`${o.key}${r.key}`);let e=a.getFullNode({...r,index:n},a.getChildState(t,r),o.key,o);for(let t of e)n++,yield t}})};yield o}constructor(){this.cache=new WeakMap}};function Uy(e){let t=[],n=null;return{*[Symbol.iterator](){for(let e of t)yield e;n||=e();for(let e of n)t.push(e),yield e}}}function Dee(e,t){if(e&&t)return n=>e(t(n));if(e)return e;if(t)return t}function Wy(e){return e[0].toUpperCase()+e.slice(1)}function Oee(e,t,n){let r=(0,g.useMemo)(()=>new Eee,[]),{children:i,items:a,collection:o}=e;return(0,g.useMemo)(()=>o||t(r.build({children:i,items:a},n)),[r,i,a,o,n,t])}function Gy(e){let{filter:t,layoutDelegate:n}=e,r=wee(e),i=(0,g.useMemo)(()=>e.disabledKeys?new Set(e.disabledKeys):new Set,[e.disabledKeys]),a=Oee(e,(0,g.useCallback)(e=>t?new By(t(e)):new By(e),[t]),(0,g.useMemo)(()=>({suppressTextValueWarning:e.suppressTextValueWarning}),[e.suppressTextValueWarning])),o=(0,g.useMemo)(()=>new Tee(a,r,{layoutDelegate:n}),[a,r,n]);return qy(a,o),{collection:a,disabledKeys:i,selectionManager:o}}function Ky(e,t){let n=(0,g.useMemo)(()=>t?e.collection.filter(t):e.collection,[e.collection,t]),r=e.selectionManager.withCollection(n);return qy(n,r),{collection:n,selectionManager:r,disabledKeys:e.disabledKeys}}function qy(e,t){let n=(0,g.useRef)(null);(0,g.useEffect)(()=>{if(t.focusedKey!=null&&!e.getItem(t.focusedKey)&&n.current){let r=n.current.getKeyAfter(t.focusedKey),i=null;for(;r!=null;){let a=e.getItem(r);if(a&&a.type===`item`&&!t.isDisabled(r)){i=r;break}r=n.current.getKeyAfter(r)}if(i==null)for(r=n.current.getKeyBefore(t.focusedKey);r!=null;){let a=e.getItem(r);if(a&&a.type===`item`&&!t.isDisabled(r)){i=r;break}r=n.current.getKeyBefore(r)}t.setFocusedKey(i)}n.current=e},[e,t])}function Jy(e,t){let{collection:n,onLoadMore:r,scrollOffset:i=1}=e,a=(0,g.useRef)(null),o=Um(e=>{for(let t of e)t.isIntersecting&&r&&r()});If(()=>(t.current&&(a.current=new IntersectionObserver(o,{root:l_(t?.current),rootMargin:`0px ${100*i}% ${100*i}% ${100*i}%`}),a.current.observe(t.current)),()=>{a.current&&a.current.disconnect()}),[n,t,i])}var Yy=(0,g.createContext)(null),Xy=(0,g.createContext)(null),Zy=(0,g.forwardRef)(function(e,t){[e,t]=fp(e,t,Yy);let n=(0,g.useContext)(Xy);return n?g.createElement(Qy,{state:n,props:e,listBoxRef:t}):g.createElement(qh,{content:g.createElement(rg,e)},n=>g.createElement(kee,{props:e,listBoxRef:t,collection:n}))});function kee({props:e,listBoxRef:t,collection:n}){e={...e,collection:n,children:null,items:null};let{layoutDelegate:r}=(0,g.useContext)(lg),i=Gy({...e,layoutDelegate:r});return g.createElement(Qy,{state:i,props:e,listBoxRef:t})}function Qy({state:e,props:t,listBoxRef:n}){[t,n]=fp(t,n,hh);let{dragAndDropHooks:r,layout:i=`stack`,orientation:a=`vertical`,filter:o}=t,s=Ky(e,o),{collection:c,selectionManager:l}=s,u=!!r?.useDraggableCollectionState,d=!!r?.useDroppableCollectionState,{direction:f}=$m(),{disabledBehavior:p,disabledKeys:m}=l,h=Dy({usage:`search`,sensitivity:`base`}),{isVirtualized:_,layoutDelegate:v,dropTargetDelegate:y,CollectionRoot:b}=(0,g.useContext)(lg),x=(0,g.useMemo)(()=>t.keyboardDelegate||new Ty({collection:c,collator:h,ref:n,disabledKeys:m,disabledBehavior:p,layout:i,orientation:a,direction:f,layoutDelegate:v}),[c,h,n,p,m,a,f,t.keyboardDelegate,i,v]),{listBoxProps:S}=ky({...t,shouldSelectOnPressUp:u||t.shouldSelectOnPressUp,keyboardDelegate:x,isVirtualized:_},s,n);(0,g.useRef)(u),(0,g.useRef)(d),(0,g.useEffect)(()=>{},[u,d]);let C,w,T,E=!1,D=null,O=(0,g.useRef)(null);if(u&&r){C=r.useDraggableCollectionState({collection:c,selectionManager:l,preview:r.renderDragPreview?O:void 0}),r.useDraggableCollection({},C,n);let e=r.DragPreview;D=r.renderDragPreview?g.createElement(e,{ref:O},r.renderDragPreview):null}if(d&&r){w=r.useDroppableCollectionState({collection:c,selectionManager:l});let e=r.dropTargetDelegate||y||new r.ListDropTargetDelegate(c,n,{orientation:a,layout:i,direction:f});T=r.useDroppableCollection({keyboardDelegate:x,dropTargetDelegate:e},w,n),E=w.isDropTarget({type:`root`})}let{focusProps:k,isFocused:A,isFocusVisible:j}=zg(),M=s.collection.size===0,N={isDropTarget:E,isEmpty:M,isFocused:A,isFocusVisible:j,layout:t.layout||`stack`,orientation:a,state:s},P=up({...t,children:void 0,defaultClassName:`react-aria-ListBox`,values:N}),F=null;M&&t.renderEmptyState&&(F=g.createElement(`div`,{role:`option`,style:{display:`contents`}},t.renderEmptyState(N)));let ee=gg(t,{global:!0});return g.createElement(Hv,null,g.createElement(_p.div,{...op(ee,P,S,k,T?.collectionProps),ref:n,slot:t.slot||void 0,onScroll:t.onScroll,"data-drop-target":E||void 0,"data-empty":M||void 0,"data-focused":A||void 0,"data-focus-visible":j||void 0,"data-layout":t.layout||`stack`,"data-orientation":a},g.createElement(lp,{values:[[Yy,t],[Xy,s],[Cv,{dragAndDropHooks:r,dragState:C,dropState:w}],[Nv,{elementType:`div`}],[wv,{render:jee}],[ag,{name:`ListBoxSection`,render:$y}]]},g.createElement(jv,null,g.createElement(b,{collection:c,scrollRef:n,persistedKeys:Dv(l,r,w),renderDropIndicator:Ev(r,w)}))),F,D))}function $y(e,t,n,r=`react-aria-ListBoxSection`){let i=(0,g.useContext)(Xy),{dragAndDropHooks:a,dropState:o}=(0,g.useContext)(Cv),{CollectionBranch:s}=(0,g.useContext)(lg),[c,l]=pp(),{headingProps:u,groupProps:d}=See({heading:l,"aria-label":e[`aria-label`]??void 0}),f=up({...e,id:void 0,children:void 0,defaultClassName:r,values:void 0}),p=gg(e,{global:!0});return delete p.id,g.createElement(_p.section,{...op(p,f,d),ref:t},g.createElement(Ov.Provider,{value:{...u,ref:c}},g.createElement(s,{collection:i.collection,parent:n,renderDropIndicator:Ev(a,o)})))}var Aee=eg(Sh,$y),eb=$h(xh,function(e,t,n){let r=sp(t),i=(0,g.useContext)(Xy),{dragAndDropHooks:a,dragState:o,dropState:s}=(0,g.useContext)(Cv),c=o&&!(o.isDisabled||o.selectionManager.isDisabled(n.key)),{optionProps:l,labelProps:u,descriptionProps:d,...f}=xee({key:n.key,"aria-label":e?.[`aria-label`]},i,r),{hoverProps:p,isHovered:m}=Gg({isDisabled:!f.allowsSelection&&!f.hasAction&&!c,onHoverStart:n.props.onHoverStart,onHoverChange:n.props.onHoverChange,onHoverEnd:n.props.onHoverEnd}),{keyboardProps:h}=Rh(e),{focusProps:_}=Ih(e),v=null;o&&a&&(v=a.useDraggableItem({key:n.key,hasAction:f.hasAction},o));let y=null;s&&a&&(y=a.useDroppableItem({target:{type:`item`,key:n.key,dropPosition:`on`}},s,r));let b=o&&o.isDragging(n.key),x=up({...e,id:void 0,children:e.children,defaultClassName:`react-aria-ListBoxItem`,values:{...f,isHovered:m,selectionMode:i.selectionManager.selectionMode,selectionBehavior:i.selectionManager.selectionBehavior,allowsDragging:!!o,isDragging:b,isDropTarget:y?.isDropTarget}});(0,g.useEffect)(()=>{n.textValue},[n.textValue]);let S=e.href?_p.a:_p.div,C=gg(e,{global:!0});return delete C.id,delete C.onClick,e.href&&l.tabIndex==null&&(l.tabIndex=-1),g.createElement(S,{...op(C,x,l,p,h,_,v?.dragProps,y?.dropProps),ref:r,"data-allows-dragging":!!o||void 0,"data-selected":f.isSelected||void 0,"data-disabled":f.isDisabled||void 0,"data-hovered":m||void 0,"data-focused":f.isFocused||void 0,"data-focus-visible":f.isFocusVisible||void 0,"data-pressed":f.isPressed||void 0,"data-dragging":b||void 0,"data-drop-target":y?.isDropTarget||void 0,"data-selection-mode":i.selectionManager.selectionMode===`none`?void 0:i.selectionManager.selectionMode},g.createElement(lp,{values:[[o_,{slots:{[cp]:u,label:u,description:d}}],[Mv,{isSelected:f.isSelected}]]},x.children))});function jee(e,t){t=sp(t);let{dragAndDropHooks:n,dropState:r}=(0,g.useContext)(Cv),{dropIndicatorProps:i,isHidden:a,isDropTarget:o}=n.useDropIndicator(e,r,t);return a?null:g.createElement(Nee,{...e,dropIndicatorProps:i,isDropTarget:o,ref:t})}function Mee(e,t){let{dropIndicatorProps:n,isDropTarget:r,...i}=e,a=up({...i,defaultClassName:`react-aria-DropIndicator`,values:{isDropTarget:r}});return g.createElement(g.Fragment,null,g.createElement(_p.div,{...n,...a,role:`option`,ref:t,"data-drop-target":r||void 0}))}var Nee=(0,g.forwardRef)(Mee);$h(bh,function(e,t,n){let r=(0,g.useContext)(Xy),{isLoading:i,onLoadMore:a,scrollOffset:o,...s}=e,c=(0,g.useRef)(null);Jy((0,g.useMemo)(()=>({onLoadMore:a,collection:r?.collection,sentinelRef:c,scrollOffset:o}),[a,o,r?.collection]),c);let l=up({...s,id:void 0,children:n.rendered,defaultClassName:`react-aria-ListBoxLoadingIndicator`,values:void 0});return g.createElement(g.Fragment,null,g.createElement(`div`,{style:{position:`relative`,width:0,height:0},inert:zy(!0)},g.createElement(`div`,{"data-testid":`loadMoreSentinel`,ref:c,style:{position:`absolute`,height:1,width:1}})),i&&l.children&&g.createElement(g.Fragment,null,g.createElement(_p.div,{...op(gg(e,{global:!0}),{tabIndex:-1}),...l,role:`option`,ref:t},l.children)))});var Pee=(0,g.createContext)({placement:`bottom`}),Fee=typeof HTMLElement<`u`&&`inert`in HTMLElement.prototype;function tb(e){return e.dataset.liveAnnouncer===`true`||e.dataset.reactAriaTopLayer!==void 0}var nb=new WeakMap,rb=[];function Iee(e,t){let n=xp(e?.[0]),r=t instanceof n.Element?{root:t}:t,i=r?.root??document.body,a=r?.shouldUseInert&&Fee,o=new Set(e),s=new Set,c=e=>a&&e instanceof n.HTMLElement?e.inert:e.getAttribute(`aria-hidden`)===`true`,l=(e,t)=>{a&&e instanceof n.HTMLElement?e.inert=t:t?e.setAttribute(`aria-hidden`,`true`):(e.removeAttribute(`aria-hidden`),e instanceof n.HTMLElement&&(e.inert=!1))},u=new Set;if(Tp())for(let t of e){let e=t;for(;e&&e!==i;){let t=e.getRootNode();`shadowRoot`in t&&u.add(t.shadowRoot),e=t.parentNode}}let d=e=>{for(let t of e.querySelectorAll(`[data-live-announcer], [data-react-aria-top-layer]`))o.add(t);let t=e=>{if(s.has(e)||o.has(e)||e.parentElement&&s.has(e.parentElement)&&e.parentElement.getAttribute(`role`)!==`row`)return NodeFilter.FILTER_REJECT;for(let t of o)if(U(e,t))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_ACCEPT},n=Rv(bp(e),e,NodeFilter.SHOW_ELEMENT,{acceptNode:t}),r=t(e);if(r===NodeFilter.FILTER_ACCEPT&&f(e),r!==NodeFilter.FILTER_REJECT){let e=n.nextNode();for(;e!=null;)f(e),e=n.nextNode()}},f=e=>{let t=nb.get(e)??0;c(e)&&t===0||(t===0&&l(e,!0),s.add(e),nb.set(e,t+1))};rb.length&&rb[rb.length-1].disconnect(),d(i);let p=new MutationObserver(e=>{for(let t of e)if(t.type===`childList`){if(t.target.isConnected&&![...o,...s].some(e=>U(e,t.target)))for(let e of t.addedNodes)(e instanceof HTMLElement||e instanceof SVGElement)&&tb(e)?o.add(e):e instanceof Element&&d(e);if(Tp()){for(let e of u)if(!e.isConnected){p.disconnect();break}}}});p.observe(i,{childList:!0,subtree:!0});let m=new Set;if(Tp())for(let e of u){let t=new MutationObserver(e=>{for(let t of e)if(t.type===`childList`){if(t.target.isConnected&&![...o,...s].some(e=>U(e,t.target)))for(let e of t.addedNodes)(e instanceof HTMLElement||e instanceof SVGElement)&&tb(e)?o.add(e):e instanceof Element&&d(e);if(Tp()){for(let e of u)if(!e.isConnected){p.disconnect();break}}}});t.observe(e,{childList:!0,subtree:!0}),m.add(t)}let h={visibleNodes:o,hiddenNodes:s,observe(){p.observe(i,{childList:!0,subtree:!0})},disconnect(){p.disconnect()}};return rb.push(h),()=>{if(p.disconnect(),Tp())for(let e of m)e.disconnect();for(let e of s){let t=nb.get(e);t!=null&&(t===1?(l(e,!1),nb.delete(e)):nb.set(e,t-1))}h===rb[rb.length-1]?(rb.pop(),rb.length&&rb[rb.length-1].observe()):rb.splice(rb.indexOf(h),1)}}function Lee(e){let t=rb[rb.length-1];if(t&&!t.visibleNodes.has(e))return t.visibleNodes.add(e),()=>{t.visibleNodes.delete(e)}}var ib={top:`top`,bottom:`top`,left:`left`,right:`left`},ab={top:`bottom`,bottom:`top`,left:`right`,right:`left`},Ree={top:`left`,left:`top`},ob={top:`height`,left:`width`},sb={width:`totalWidth`,height:`totalHeight`},cb={},lb=()=>typeof document<`u`?window.visualViewport:null;function ub(e,t){let n=0,r=0,i=0,a=0,o=0,s=0,c={},l=(t?.scale??1)>1;if(e.tagName===`BODY`||e.tagName===`HTML`){let l=document.documentElement;i=l.clientWidth,a=l.clientHeight,n=t?.width??i,r=t?.height??a,c.top=l.scrollTop||e.scrollTop,c.left=l.scrollLeft||e.scrollLeft,t&&(o=t.offsetTop,s=t.offsetLeft)}else ({width:n,height:r,top:o,left:s}=xb(e,!1)),c.top=e.scrollTop,c.left=e.scrollLeft,i=n,a=r;return om()&&(e.tagName===`BODY`||e.tagName===`HTML`)&&l&&(c.top=0,c.left=0,o=t?.pageTop??0,s=t?.pageLeft??0),{width:n,height:r,totalWidth:i,totalHeight:a,scroll:c,top:o,left:s}}function db(e){return{top:e.scrollTop,left:e.scrollLeft,width:e.scrollWidth,height:e.scrollHeight}}function fb(e,t,n,r,i,a,o){let s=i.scroll[e]??0,c=r[ob[e]],l=o[e]+r.scroll[ib[e]]+a,u=o[e]+r.scroll[ib[e]]+c-a,d=t-s+r.scroll[ib[e]]+o[e]-r[ib[e]],f=t-s+n+r.scroll[ib[e]]+o[e]-r[ib[e]];return du?Math.max(u-f,l-d):0}function pb(e){let t=window.getComputedStyle(e);return{top:parseInt(t.marginTop,10)||0,bottom:parseInt(t.marginBottom,10)||0,left:parseInt(t.marginLeft,10)||0,right:parseInt(t.marginRight,10)||0}}function mb(e){if(cb[e])return cb[e];let[t,n]=e.split(` `),r=ib[t]||`right`,i=Ree[r];ib[n]||(n=`center`);let a=ob[r],o=ob[i];return cb[e]={placement:t,crossPlacement:n,axis:r,crossAxis:i,size:a,crossSize:o},cb[e]}function hb(e,t,n,r,i,a,o,s,c,l,u){let{placement:d,crossPlacement:f,axis:p,crossAxis:m,size:h,crossSize:g}=r,_={};_[m]=e[m]??0,f===`center`?_[m]+=((e[g]??0)-(n[g]??0))/2:f!==m&&(_[m]+=(e[g]??0)-(n[g]??0)),_[m]+=a;let v=e[m]-n[g]+c+l,y=e[m]+e[g]-c-l;if(_[m]=Jg(_[m],v,y),d===p){let t=s?u[h]:u[sb[h]];_[ab[p]]=Math.floor(t-e[p]+i)}else _[p]=Math.floor(e[p]+e[h]+i);return _}function gb(e,t,n,r,i,a,o,s,c,l,u){let d=(e.top==null?c[sb.height]-(e.bottom??0)-o:e.top)-(c.scroll.top??0),f=l?n.top:0,p={top:Math.max(t.top+f,(u?.offsetTop??t.top)+f),bottom:Math.min(t.top+t.height+f,(u?.offsetTop??0)+(u?.height??0))};return s===`top`?Math.max(0,d+o-p.top-((i.top??0)+(i.bottom??0)+a)):Math.max(0,p.bottom-d-((i.top??0)+(i.bottom??0)+a))}function _b(e,t,n,r,i,a,o,s){let{placement:c,axis:l,size:u}=a;return c===l?Math.max(0,n[l]-(o.scroll[l]??0)-(e[l]+(s?t[l]:0))-(r[l]??0)-r[ab[l]]-i):Math.max(0,e[u]+e[l]+(s?t[l]:0)-n[l]-n[u]+(o.scroll[l]??0)-(r[l]??0)-r[ab[l]]-i)}function vb(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_){let v=mb(e),{size:y,crossAxis:b,crossSize:x,placement:S,crossPlacement:C}=v,w=hb(t,s,n,v,u,d,l,f,m,h,c),T=u,E=_b(s,l,t,i,a+u,v,c,g);if(o&&n[y]>E){let e=mb(`${ab[S]} ${C}`),r=hb(t,s,n,e,u,d,l,f,m,h,c);_b(s,l,t,i,a+u,e,c,g)>E&&(v=e,w=r,T=u)}let D=`bottom`;v.axis===`top`?v.placement===`top`?D=`top`:v.placement===`bottom`&&(D=`bottom`):v.crossAxis===`top`&&(v.crossPlacement===`top`?D=`bottom`:v.crossPlacement===`bottom`&&(D=`top`));let O=fb(b,w[b],n[x],s,c,a,l);w[b]+=O;let k=gb(w,s,l,f,i,a,n.height,D,c,g,_);p&&p{if(!n||r===null)return;let e=e=>{let n=W(e);if(!t.current||n instanceof Node&&!U(n,t.current)||n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement)return;let i=r||Tb.get(t.current);i&&i()};return window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`scroll`,e,!0)}},[n,r,t])}function Db(){return window.ResizeObserver!==void 0}function Ob(e){let{ref:t,box:n,onResize:r}=e,i=Um(r);(0,g.useEffect)(()=>{let e=t?.current;if(e)if(Db()){let t=new window.ResizeObserver(e=>{e.length&&i()});return t.observe(e,{box:n}),()=>{e&&t.unobserve(e)}}else return window.addEventListener(`resize`,i,!1),()=>{window.removeEventListener(`resize`,i,!1)}},[t,n])}var kb=typeof document<`u`?window.visualViewport:null;function Ab(e){let{direction:t}=$m(),{arrowSize:n,targetRef:r,overlayRef:i,arrowRef:a,scrollRef:o=i,placement:s=`bottom`,containerPadding:c=12,shouldFlip:l=!0,boundaryElement:u=typeof document<`u`?document.body:null,offset:d=0,crossOffset:f=0,shouldUpdatePosition:p=!0,isOpen:m=!0,onClose:h,maxHeight:_,arrowBoundaryOffset:v=0}=e,[y,b]=(0,g.useState)(null),x=[p,s,i.current,r.current,a?.current,o.current,c,l,u,d,f,m,t,_,v,n],S=(0,g.useRef)(kb?.scale);(0,g.useEffect)(()=>{m&&(S.current=kb?.scale)},[m]);let C=(0,g.useCallback)(()=>{if(p===!1||!m||!i.current||!r.current||!u||kb?.scale!==S.current)return;let e=null;if(o.current&&Dp(o.current)){let t=Ep()?.getBoundingClientRect(),n=o.current.getBoundingClientRect();e={type:`top`,offset:(t?.top??0)-n.top},e.offset>n.height/2&&(e.type=`bottom`,e.offset=(t?.bottom??0)-n.bottom)}let h=i.current;!_&&i.current&&(h.style.top=`0px`,h.style.bottom=``,h.style.maxHeight=(window.visualViewport?.height??window.innerHeight)+`px`);let g=yb({placement:Mb(s,t),overlayNode:i.current,targetNode:r.current,scrollNode:o.current||i.current,padding:c,shouldFlip:l,boundaryElement:u,offset:d,crossOffset:f,maxHeight:_,arrowSize:n??(a?.current?bb(a.current,!0).width:0),arrowBoundaryOffset:v});if(!g.position)return;h.style.top=``,h.style.bottom=``,h.style.left=``,h.style.right=``,Object.keys(g.position).forEach(e=>h.style[e]=g.position[e]+`px`),h.style.maxHeight=g.maxHeight==null?``:g.maxHeight+`px`;let y=Ep();if(e&&y&&o.current){let t=y.getBoundingClientRect(),n=o.current.getBoundingClientRect(),r=t[e.type]-n[e.type];o.current.scrollTop+=r-e.offset}b(g)},x);If(C,x),jb(C),Ob({ref:i,onResize:C}),Ob({ref:r,onResize:C});let w=(0,g.useRef)(!1);If(()=>{let e,t=()=>{w.current=!0,clearTimeout(e),e=setTimeout(()=>{w.current=!1},500),C()},n=()=>{w.current&&t()};return kb?.addEventListener(`resize`,t),kb?.addEventListener(`scroll`,n),()=>{kb?.removeEventListener(`resize`,t),kb?.removeEventListener(`scroll`,n)}},[C]);let T=(0,g.useCallback)(()=>{w.current||h?.()},[h,w]);return Eb({triggerRef:r,isOpen:m,onClose:h&&T}),{overlayProps:{style:{position:y?`absolute`:`fixed`,top:y?void 0:0,left:y?void 0:0,zIndex:1e5,...y?.position,maxHeight:y?.maxHeight??`100vh`}},placement:y?.placement??null,triggerAnchorPoint:y?.triggerAnchorPoint??null,arrowProps:{"aria-hidden":`true`,role:`presentation`,style:{left:y?.arrowOffsetLeft,top:y?.arrowOffsetTop}},updatePosition:C}}function jb(e){If(()=>(window.addEventListener(`resize`,e,!1),()=>{window.removeEventListener(`resize`,e,!1)}),[e])}function Mb(e,t){return t===`rtl`?e.replace(`start`,`right`).replace(`end`,`left`):e.replace(`start`,`left`).replace(`end`,`right`)}function Nb(e){let{ref:t,onInteractOutside:n,isDisabled:r,onInteractOutsideStart:i}=e,a=(0,g.useRef)({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}),o=Um(e=>{n&&Pb(e,t)&&(i&&i(e),a.current.isPointerDown=!0)}),s=Um(e=>{n&&n(e)});(0,g.useEffect)(()=>{let e=a.current;if(r)return;let n=t.current,i=bp(n);if(typeof PointerEvent<`u`){let n=n=>{e.isPointerDown&&Pb(n,t)&&s(n),e.isPointerDown=!1};return i.addEventListener(`pointerdown`,o,!0),i.addEventListener(`click`,n,!0),()=>{i.removeEventListener(`pointerdown`,o,!0),i.removeEventListener(`click`,n,!0)}}},[t,r])}function Pb(e,t){if(e.button>0)return!1;let n=W(e);if(n){let e=n.ownerDocument;if(!e||!U(e.documentElement,n)||n.closest(`[data-react-aria-top-layer]`))return!1}return t.current?!e.composedPath().includes(t.current):!1}var Fb=[];function Ib(e,t){let{onClose:n,shouldCloseOnBlur:r,isOpen:i,isDismissable:a=!1,isKeyboardDismissDisabled:o=!1,shouldCloseOnInteractOutside:s}=e,c=(0,g.useRef)(void 0);(0,g.useEffect)(()=>{if(i&&!Fb.includes(t))return Fb.push(t),()=>{let e=Fb.indexOf(t);e>=0&&Fb.splice(e,1)}},[i,t]);let l=()=>{Fb[Fb.length-1]===t&&n&&n()},u=e=>{let n=Fb[Fb.length-1];c.current=n,(!s||s(W(e)))&&n===t&&e.stopPropagation()},d=e=>{(!s||s(W(e)))&&(Fb[Fb.length-1]===t&&e.stopPropagation(),c.current===t&&l()),c.current=void 0},f=e=>{e.key===`Escape`&&!o&&!e.nativeEvent.isComposing&&(e.stopPropagation(),e.preventDefault(),l())};Nb({ref:t,onInteractOutside:a&&i?d:void 0,onInteractOutsideStart:u});let{focusWithinProps:p}=Rg({isDisabled:!r,onBlurWithin:e=>{!e.relatedTarget||Qv(e.relatedTarget)||(!s||s(e.relatedTarget))&&n?.()}});return{overlayProps:{onKeyDown:f,...p},underlayProps:{}}}var Lb=typeof document<`u`&&window.visualViewport,Rb=0,zb;function Bb(e={}){let{isDisabled:t}=e;If(()=>{if(!t)return Rb++,Rb===1&&(zb=im()?Hb():Vb()),()=>{Rb--,Rb===0&&zb()}},[t])}function Vb(){let e=window.innerWidth-document.documentElement.clientWidth;return Ff(e>0&&(`scrollbarGutter`in document.documentElement.style?Ub(document.documentElement,`scrollbarGutter`,`stable`):Ub(document.documentElement,`paddingRight`,`${e}px`)),Ub(document.documentElement,`overflow`,`hidden`))}function Hb(){let e=Ub(document.documentElement,`overflow`,`hidden`),t,n=!1,r=e=>{let r=W(e);t=c_(r)?r:l_(r,!0),n=!1;let i=r.ownerDocument.defaultView.getSelection();i&&!i.isCollapsed&&i.containsNode(r,!0)&&(n=!0),e.composedPath().some(e=>e instanceof HTMLInputElement&&e.type===`range`)&&(n=!0),`selectionStart`in r&&`selectionEnd`in r&&r.selectionStart{if(!(e.touches.length===2||n)){if(!t||t===document.documentElement||t===document.body){e.preventDefault();return}t.scrollHeight===t.clientHeight&&t.scrollWidth===t.clientWidth&&e.preventDefault()}},s=e=>{let t=W(e),n=e.relatedTarget;n&&Hm(n)?(n.focus({preventScroll:!0}),Gb(n,Hm(t))):n||(t.parentElement?.closest(`[tabindex]`))?.focus({preventScroll:!0})},c=HTMLElement.prototype.focus;HTMLElement.prototype.focus=function(e){let t=Ep(),n=t!=null&&Hm(t);c.call(this,{...e,preventScroll:!0}),(!e||!e.preventScroll)&&Gb(this,n)};let l=Ff(Wb(document,`touchstart`,r,{passive:!1,capture:!0}),Wb(document,`touchmove`,o,{passive:!1,capture:!0}),Wb(document,`blur`,s,!0));return()=>{e(),l(),i.remove(),HTMLElement.prototype.focus=c}}function Ub(e,t,n){let r=e.style[t];return e.style[t]=n,()=>{e.style[t]=r}}function Wb(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function Gb(e,t){t||!Lb?Kb(e):Lb.addEventListener(`resize`,()=>Kb(e),{once:!0})}function Kb(e){let t=document.scrollingElement||document.documentElement,n=e;for(;n&&n!==t;){let e=l_(n);if(e!==document.documentElement&&e!==document.body&&e!==n){let t=e.getBoundingClientRect(),r=n.getBoundingClientRect();if(r.topt.top+n.clientHeight){let n=t.bottom;Lb&&(n=Math.min(n,Lb.offsetTop+Lb.height));let i=r.top-t.top-((n-t.top)/2-r.height/2);e.scrollTo({top:Math.max(0,Math.min(e.scrollHeight-e.clientHeight,e.scrollTop+i)),behavior:`smooth`})}}n=e.parentElement}}function qb(e,t){let{triggerRef:n,popoverRef:r,groupRef:i,isNonModal:a,isKeyboardDismissDisabled:o,shouldCloseOnInteractOutside:s,...c}=e,l=c.trigger===`SubmenuTrigger`,{overlayProps:u,underlayProps:d}=Ib({isOpen:t.isOpen,onClose:t.close,shouldCloseOnBlur:!0,isDismissable:!a||l,isKeyboardDismissDisabled:o,shouldCloseOnInteractOutside:s},i??r),{overlayProps:f,arrowProps:p,placement:m,triggerAnchorPoint:h}=Ab({...c,targetRef:n,overlayRef:r,isOpen:t.isOpen,onClose:a&&!l?t.close:null});return Bb({isDisabled:a||!t.isOpen}),(0,g.useEffect)(()=>{if(t.isOpen&&r.current)return a?Lee(i?.current??r.current):Iee([i?.current??r.current],{shouldUseInert:!0})},[a,t.isOpen,r,i]),{popoverProps:op(u,f),arrowProps:p,underlayProps:d,placement:m,triggerAnchorPoint:h}}var Jb={};Jb={dismiss:`تجاهل`};var Yb={};Yb={dismiss:`Отхвърляне`};var Xb={};Xb={dismiss:`Odstranit`};var Zb={};Zb={dismiss:`Luk`};var Qb={};Qb={dismiss:`Schließen`};var $b={};$b={dismiss:`Απόρριψη`};var ex={};ex={dismiss:`Dismiss`};var tx={};tx={dismiss:`Descartar`};var nx={};nx={dismiss:`Lõpeta`};var rx={};rx={dismiss:`Hylkää`};var ix={};ix={dismiss:`Rejeter`};var ax={};ax={dismiss:`התעלם`};var ox={};ox={dismiss:`Odbaci`};var sx={};sx={dismiss:`Elutasítás`};var cx={};cx={dismiss:`Ignora`};var lx={};lx={dismiss:`閉じる`};var ux={};ux={dismiss:`무시`};var dx={};dx={dismiss:`Atmesti`};var fx={};fx={dismiss:`Nerādīt`};var px={};px={dismiss:`Lukk`};var mx={};mx={dismiss:`Negeren`};var hx={};hx={dismiss:`Zignoruj`};var gx={};gx={dismiss:`Descartar`};var _x={};_x={dismiss:`Dispensar`};var vx={};vx={dismiss:`Revocare`};var yx={};yx={dismiss:`Пропустить`};var bx={};bx={dismiss:`Zrušiť`};var xx={};xx={dismiss:`Opusti`};var Sx={};Sx={dismiss:`Odbaci`};var Cx={};Cx={dismiss:`Avvisa`};var wx={};wx={dismiss:`Kapat`};var Tx={};Tx={dismiss:`Скасувати`};var Ex={};Ex={dismiss:`取消`};var Dx={};Dx={dismiss:`關閉`};var Ox={};Ox={"ar-AE":Jb,"bg-BG":Yb,"cs-CZ":Xb,"da-DK":Zb,"de-DE":Qb,"el-GR":$b,"en-US":ex,"es-ES":tx,"et-EE":nx,"fi-FI":rx,"fr-FR":ix,"he-IL":ax,"hr-HR":ox,"hu-HU":sx,"it-IT":cx,"ja-JP":lx,"ko-KR":ux,"lt-LT":dx,"lv-LV":fx,"nb-NO":px,"nl-NL":mx,"pl-PL":hx,"pt-BR":gx,"pt-PT":_x,"ro-RO":vx,"ru-RU":yx,"sk-SK":bx,"sl-SI":xx,"sr-SP":Sx,"sv-SE":Cx,"tr-TR":wx,"uk-UA":Tx,"zh-CN":Ex,"zh-TW":Dx};function kx(e){return e&&e.__esModule?e.default:e}function Ax(e){let{onDismiss:t,...n}=e,r=Gm(n,fh(kx(Ox),`@react-aria/overlays`).format(`dismiss`)),i=()=>{t&&t()};return g.createElement(v_,null,g.createElement(`button`,{...r,tabIndex:-1,onClick:i,style:{width:1,height:1}}))}function jx({children:e}){let t=(0,g.useMemo)(()=>({register:()=>{}}),[]);return g.createElement(wg.Provider,{value:t},e)}var Mx=(0,g.createContext)({});function Nx(){return(0,g.useContext)(Mx)??{}}var Px=g.createContext(null);function Fx(e){let t=Jf(),{portalContainer:n=t?null:document.body,isExiting:r}=e,[i,a]=(0,g.useState)(!1),o=(0,g.useMemo)(()=>({contain:i,setContain:a}),[i,a]),{getContainer:s}=Nx();if(!e.portalContainer&&s&&(n=s()),!n)return null;let c=e.children;return e.disableFocusManagement||(c=g.createElement(Hv,{restoreFocus:!0,contain:(e.shouldContainFocus||i)&&!r},c)),c=g.createElement(Px.Provider,{value:o},g.createElement(jx,null,c)),Wh.createPortal(c,n)}function Ix(){let e=(0,g.useContext)(Px)?.setContain;If(()=>{e?.(!0)},[e])}function Lx(e){let[t,n]=mh(e.isOpen,e.defaultOpen||!1,e.onOpenChange);return{isOpen:t,setOpen:n,open:(0,g.useCallback)(()=>{n(!0)},[n]),close:(0,g.useCallback)(()=>{n(!1)},[n]),toggle:(0,g.useCallback)(()=>{n(!t)},[n,t])}}function Rx(e,t=!0){let[n,r]=(0,g.useState)(!0),i=n&&t;return If(()=>{if(i&&e.current&&`getAnimations`in e.current)for(let t of e.current.getAnimations())t instanceof CSSTransition&&t.cancel()},[e,i]),Bx(e,i,(0,g.useCallback)(()=>r(!1),[])),i}function zx(e,t){let[n,r]=(0,g.useState)(t?`open`:`closed`);switch(n){case`open`:t||r(`exiting`);break;case`closed`:case`exiting`:t&&r(`open`);break}let i=n===`exiting`;return Bx(e,i,(0,g.useCallback)(()=>{r(e=>e===`exiting`?`closed`:e)},[])),i}function Bx(e,t,n){If(()=>{if(t&&e.current){if(!(`getAnimations`in e.current)){n();return}let t=e.current.getAnimations();if(t.length===0){n();return}let r=!1;return Promise.allSettled(t.map(e=>e.finished)).then(()=>{r||(0,Wh.flushSync)(()=>{n()})}),()=>{r=!0}}},[e,t,n])}var Vx=(0,g.createContext)(null),Hx=(0,g.createContext)(null),Ux=(0,g.forwardRef)(function(e,t){[e,t]=fp(e,t,Vx);let n=(0,g.useContext)(jS),r=Lx(e),i=e.isOpen!=null||e.defaultOpen!=null||!n?r:n,a=zx(t,i.isOpen)||e.isExiting||!1,o=cee(),{direction:s}=$m();if(o){let t=e.children;return typeof t==`function`&&(t=t({trigger:e.trigger||null,placement:`bottom`,isEntering:!1,isExiting:!1,defaultChildren:null})),g.createElement(g.Fragment,null,t)}return i&&!i.isOpen&&!a?null:g.createElement(Wx,{...e,triggerRef:e.triggerRef,state:i,popoverRef:t,isExiting:a,dir:s})});function Wx({state:e,isExiting:t,UNSTABLE_portalContainer:n,clearContexts:r,...i}){let a=(0,g.useRef)(null),o=(0,g.useRef)(null),s=(0,g.useContext)(Hx),c=s&&i.trigger===`SubmenuTrigger`,{popoverProps:l,underlayProps:u,arrowProps:d,placement:f,triggerAnchorPoint:p}=qb({...i,offset:i.offset??8,arrowRef:a,groupRef:c?s:o},e),m=i.popoverRef,h=Rx(m,!!f)||i.isEntering||!1,_=up({...i,defaultClassName:`react-aria-Popover`,values:{trigger:i.trigger||null,placement:f,isEntering:h,isExiting:t}}),v=!i.isNonModal||i.trigger===`SubmenuTrigger`,[y,b]=(0,g.useState)(!1);If(()=>{m.current&&b(v&&!m.current.querySelector(`[role=dialog]`))},[m,v]),(0,g.useEffect)(()=>{y&&(i.trigger!==`SubmenuTrigger`||Fm()!==`pointer`)&&m.current&&!Dp(m.current)&&Fh(m.current)},[y,m,i.trigger]);let x=(0,g.useMemo)(()=>{let e=_.children;if(r)for(let t of r)e=g.createElement(t.Provider,{value:null},e);return e},[_.children,r]),[S,C]=(0,g.useState)(null),w=(0,g.useCallback)(()=>{i.triggerRef.current&&C(i.triggerRef.current.getBoundingClientRect().width+`px`)},[i.triggerRef]);If(w,[w]),Ob({ref:_.style?.[`--trigger-width`]?void 0:i.triggerRef,onResize:w});let T={...l.style,"--trigger-anchor-point":p?`${p.x}px ${p.y}px`:void 0,..._.style,"--trigger-width":_.style?.[`--trigger-width`]||S},E=g.createElement(_p.div,{...op(gg(i,{global:!0}),l),..._,role:y?`dialog`:void 0,tabIndex:y?-1:void 0,"aria-label":i[`aria-label`],"aria-labelledby":i[`aria-labelledby`],ref:m,slot:i.slot||void 0,style:T,dir:i.dir,"data-trigger":i.trigger,"data-placement":f,"data-entering":h||void 0,"data-exiting":t||void 0},!i.isNonModal&&g.createElement(Ax,{onDismiss:e.close}),g.createElement(Pee.Provider,{value:{...d,placement:f,ref:a}},x),g.createElement(Ax,{onDismiss:e.close}));return c?g.createElement(Fx,{...i,shouldContainFocus:y,isExiting:t,portalContainer:n??s?.current??void 0},E):g.createElement(Fx,{...i,shouldContainFocus:y,isExiting:t,portalContainer:n},!i.isNonModal&&e.isOpen&&g.createElement(`div`,{"data-testid":`underlay`,...u,style:{position:`fixed`,inset:0}}),g.createElement(`div`,{ref:o,style:{display:`contents`}},g.createElement(Hx.Provider,{value:o},E)))}var Gx={};Gx={longPressMessage:`اضغط مطولاً أو اضغط على Alt + السهم لأسفل لفتح القائمة`};var Kx={};Kx={longPressMessage:`Натиснете продължително или натиснете Alt+ стрелка надолу, за да отворите менюто`};var qx={};qx={longPressMessage:`Dlouhým stiskem nebo stisknutím kláves Alt + šipka dolů otevřete nabídku`};var Jx={};Jx={longPressMessage:`Langt tryk eller tryk på Alt + pil ned for at åbne menuen`};var Yx={};Yx={longPressMessage:`Drücken Sie lange oder drücken Sie Alt + Nach-unten, um das Menü zu öffnen`};var Xx={};Xx={longPressMessage:`Πιέστε παρατεταμένα ή πατήστε Alt + κάτω βέλος για να ανοίξετε το μενού`};var Zx={};Zx={longPressMessage:`Long press or press Alt + ArrowDown to open menu`};var Qx={};Qx={longPressMessage:`Mantenga pulsado o pulse Alt + flecha abajo para abrir el menú`};var $x={};$x={longPressMessage:`Menüü avamiseks vajutage pikalt või vajutage klahve Alt + allanool`};var eS={};eS={longPressMessage:`Avaa valikko painamalla pohjassa tai näppäinyhdistelmällä Alt + Alanuoli`};var tS={};tS={longPressMessage:`Appuyez de manière prolongée ou appuyez sur Alt\xA0+\xA0Flèche vers le bas pour ouvrir le menu.`};var nS={};nS={longPressMessage:`לחץ לחיצה ארוכה או הקש Alt + ArrowDown כדי לפתוח את התפריט`};var rS={};rS={longPressMessage:`Dugo pritisnite ili pritisnite Alt + strelicu prema dolje za otvaranje izbornika`};var iS={};iS={longPressMessage:`Nyomja meg hosszan, vagy nyomja meg az Alt + lefele nyíl gombot a menü megnyitásához`};var aS={};aS={longPressMessage:`Premi a lungo o premi Alt + Freccia giù per aprire il menu`};var oS={};oS={longPressMessage:`長押しまたは Alt+下矢印キーでメニューを開く`};var sS={};sS={longPressMessage:`길게 누르거나 Alt + 아래쪽 화살표를 눌러 메뉴 열기`};var cS={};cS={longPressMessage:`Norėdami atidaryti meniu, nuspaudę palaikykite arba paspauskite „Alt + ArrowDown“.`};var lS={};lS={longPressMessage:`Lai atvērtu izvēlni, turiet nospiestu vai nospiediet taustiņu kombināciju Alt + lejupvērstā bultiņa`};var uS={};uS={longPressMessage:`Langt trykk eller trykk Alt + PilNed for å åpne menyen`};var dS={};dS={longPressMessage:`Druk lang op Alt + pijl-omlaag of druk op Alt om het menu te openen`};var fS={};fS={longPressMessage:`Naciśnij i przytrzymaj lub naciśnij klawisze Alt + Strzałka w dół, aby otworzyć menu`};var pS={};pS={longPressMessage:`Pressione e segure ou pressione Alt + Seta para baixo para abrir o menu`};var mS={};mS={longPressMessage:`Prima continuamente ou prima Alt + Seta Para Baixo para abrir o menu`};var hS={};hS={longPressMessage:`Apăsați lung sau apăsați pe Alt + săgeată în jos pentru a deschide meniul`};var gS={};gS={longPressMessage:`Нажмите и удерживайте или нажмите Alt + Стрелка вниз, чтобы открыть меню`};var _S={};_S={longPressMessage:`Ponuku otvoríte dlhým stlačením alebo stlačením klávesu Alt + klávesu so šípkou nadol`};var vS={};vS={longPressMessage:`Za odprtje menija pritisnite in držite gumb ali pritisnite Alt+puščica navzdol`};var yS={};yS={longPressMessage:`Dugo pritisnite ili pritisnite Alt + strelicu prema dole da otvorite meni`};var bS={};bS={longPressMessage:`Håll nedtryckt eller tryck på Alt + pil nedåt för att öppna menyn`};var xS={};xS={longPressMessage:`Menüyü açmak için uzun basın veya Alt + Aşağı Ok tuşuna basın`};var SS={};SS={longPressMessage:`Довго або звичайно натисніть комбінацію клавіш Alt і стрілка вниз, щоб відкрити меню`};var CS={};CS={longPressMessage:`长按或按 Alt + 向下方向键以打开菜单`};var wS={};wS={longPressMessage:`長按或按 Alt+向下鍵以開啟功能表`};var TS={};TS={"ar-AE":Gx,"bg-BG":Kx,"cs-CZ":qx,"da-DK":Jx,"de-DE":Yx,"el-GR":Xx,"en-US":Zx,"es-ES":Qx,"et-EE":$x,"fi-FI":eS,"fr-FR":tS,"he-IL":nS,"hr-HR":rS,"hu-HU":iS,"it-IT":aS,"ja-JP":oS,"ko-KR":sS,"lt-LT":cS,"lv-LV":lS,"nb-NO":uS,"nl-NL":dS,"pl-PL":fS,"pt-BR":pS,"pt-PT":mS,"ro-RO":hS,"ru-RU":gS,"sk-SK":_S,"sl-SI":vS,"sr-SP":yS,"sv-SE":bS,"tr-TR":xS,"uk-UA":SS,"zh-CN":CS,"zh-TW":wS};function ES(e,t,n){let{type:r}=e,{isOpen:i}=t;(0,g.useEffect)(()=>{n&&n.current&&Tb.set(n.current,t.close)});let a;r===`menu`?a=!0:r===`listbox`&&(a=`listbox`);let o=$f();return{triggerProps:{"aria-haspopup":a,"aria-expanded":i,"aria-controls":i?o:void 0,onPress:t.toggle},overlayProps:{id:o}}}function DS(e){return e&&e.__esModule?e.default:e}function OS(e,t,n){let{type:r=`menu`,isDisabled:i,trigger:a=`press`}=e,o=$f(),{triggerProps:s,overlayProps:c}=ES({type:r},t,n),l=e=>{if(!i&&!(a===`longPress`&&!e.altKey)&&n&&n.current)switch(e.key){case`Enter`:case` `:if(a===`longPress`||e.isDefaultPrevented())return;case`ArrowDown`:`continuePropagation`in e||e.stopPropagation(),e.preventDefault(),t.toggle(`first`);break;case`ArrowUp`:`continuePropagation`in e||e.stopPropagation(),e.preventDefault(),t.toggle(`last`);break;default:`continuePropagation`in e&&e.continuePropagation()}},u=fh(DS(TS),`@react-aria/menu`),{longPressProps:d}=jy({isDisabled:i||a!==`longPress`,accessibilityDescription:u.format(`longPressMessage`),onLongPressStart(){t.close()},onLongPress(){t.open(`first`)}}),f={preventFocusOnPress:!0,onPressStart(e){e.pointerType!==`touch`&&e.pointerType!==`keyboard`&&!i&&(Mp(e.target),t.open(e.pointerType===`virtual`?`first`:null))},onPress(e){e.pointerType===`touch`&&!i&&(Mp(e.target),t.toggle())}};return delete s.onPress,{menuTriggerProps:{...s,...a===`press`?f:d,id:o,onKeyDown:l},menuProps:{...c,"aria-labelledby":o,autoFocus:t.focusStrategy||!0,onClose:t.close}}}function kS(e,t){let{role:n=`dialog`}=e,r=tp();r=e[`aria-label`]?void 0:r;let i=(0,g.useRef)(!1);return(0,g.useEffect)(()=>{if(t.current&&!Dp(t.current)){Fh(t.current);let e=setTimeout(()=>{(Ep()===t.current||Ep()===document.body)&&(i.current=!0,t.current&&(t.current.blur(),Fh(t.current)),i.current=!1)},500);return()=>{clearTimeout(e)}}},[t]),Ix(),(0,g.useRef)(!1),(0,g.useEffect)(()=>{}),{dialogProps:{...gg(e,{labelable:!0}),role:n,tabIndex:-1,"aria-labelledby":e[`aria-labelledby`]||r,onBlur:e=>{i.current&&e.stopPropagation()}},titleProps:{id:r}}}var AS=(0,g.createContext)(null),jS=(0,g.createContext)(null),MS=(0,g.forwardRef)(function(e,t){let n=e[`aria-labelledby`];[e,t]=fp(e,t,AS);let{dialogProps:r,titleProps:i}=kS({...e,"aria-labelledby":n},t),a=(0,g.useContext)(jS);!r[`aria-label`]&&!r[`aria-labelledby`]&&e[`aria-labelledby`]&&(r[`aria-labelledby`]=e[`aria-labelledby`]);let o=up({defaultClassName:`react-aria-Dialog`,className:e.className,style:e.style,children:e.children,values:{close:a?.close||(()=>{})}}),s=gg(e,{global:!0});return g.createElement(_p.section,{...op(s,o,r),render:e.render,ref:t,slot:e.slot||void 0},g.createElement(lp,{values:[[a_,{slots:{[cp]:{},title:{...i,level:2}}}],[t_,{slots:{[cp]:{},close:{onPress:()=>a?.close()}}}]]},o.children))});function NS(e={}){let{locale:t}=$m();return(0,g.useMemo)(()=>new Intl.ListFormat(t,e),[t,e])}var PS=new WeakMap;function FS(e,t){let{id:n}=PS.get(e)??{};if(!n)throw Error(`Unknown list`);return`${n}-${IS(t)}`}function IS(e){return typeof e==`string`?e.replace(/\s*/g,``):``+e}var LS={};LS={deselectedItem:e=>`${e.item} \u{63A}\u{64A}\u{631} \u{627}\u{644}\u{645}\u{62D}\u{62F}\u{62F}`,longPressToSelect:`اضغط مطولًا للدخول إلى وضع التحديد.`,select:`تحديد`,selectedAll:`جميع العناصر المحددة.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`لم يتم تحديد عناصر`,one:()=>`${t.number(e.count)} \u{639}\u{646}\u{635}\u{631} \u{645}\u{62D}\u{62F}\u{62F}`,other:()=>`${t.number(e.count)} \u{639}\u{646}\u{635}\u{631} \u{645}\u{62D}\u{62F}\u{62F}`})}.`,selectedItem:e=>`${e.item} \u{627}\u{644}\u{645}\u{62D}\u{62F}\u{62F}`};var RS={};RS={deselectedItem:e=>`${e.item} \u{43D}\u{435} \u{435} \u{438}\u{437}\u{431}\u{440}\u{430}\u{43D}.`,longPressToSelect:`Натиснете и задръжте за да влезете в избирателен режим.`,select:`Изберете`,selectedAll:`Всички елементи са избрани.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Няма избрани елементи`,one:()=>`${t.number(e.count)} \u{438}\u{437}\u{431}\u{440}\u{430}\u{43D} \u{435}\u{43B}\u{435}\u{43C}\u{435}\u{43D}\u{442}`,other:()=>`${t.number(e.count)} \u{438}\u{437}\u{431}\u{440}\u{430}\u{43D}\u{438} \u{435}\u{43B}\u{435}\u{43C}\u{435}\u{43D}\u{442}\u{438}`})}.`,selectedItem:e=>`${e.item} \u{438}\u{437}\u{431}\u{440}\u{430}\u{43D}.`};var zS={};zS={deselectedItem:e=>`Polo\u{17E}ka ${e.item} nen\xed vybr\xe1na.`,longPressToSelect:`Dlouhým stisknutím přejdete do režimu výběru.`,select:`Vybrat`,selectedAll:`Vybrány všechny položky.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Nevybrány žádné položky`,one:()=>`Vybr\xe1na ${t.number(e.count)} polo\u{17E}ka`,other:()=>`Vybr\xe1no ${t.number(e.count)} polo\u{17E}ek`})}.`,selectedItem:e=>`Vybr\xe1na polo\u{17E}ka ${e.item}.`};var BS={};BS={deselectedItem:e=>`${e.item} ikke valgt.`,longPressToSelect:`Lav et langt tryk for at aktivere valgtilstand.`,select:`Vælg`,selectedAll:`Alle elementer valgt.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Ingen elementer valgt`,one:()=>`${t.number(e.count)} element valgt`,other:()=>`${t.number(e.count)} elementer valgt`})}.`,selectedItem:e=>`${e.item} valgt.`};var VS={};VS={deselectedItem:e=>`${e.item} nicht ausgew\xe4hlt.`,longPressToSelect:`Gedrückt halten, um Auswahlmodus zu öffnen.`,select:`Auswählen`,selectedAll:`Alle Elemente ausgewählt.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Keine Elemente ausgewählt`,one:()=>`${t.number(e.count)} Element ausgew\xe4hlt`,other:()=>`${t.number(e.count)} Elemente ausgew\xe4hlt`})}.`,selectedItem:e=>`${e.item} ausgew\xe4hlt.`};var HS={};HS={deselectedItem:e=>`\u{394}\u{3B5}\u{3BD} \u{3B5}\u{3C0}\u{3B9}\u{3BB}\u{3AD}\u{3C7}\u{3B8}\u{3B7}\u{3BA}\u{3B5} \u{3C4}\u{3BF} \u{3C3}\u{3C4}\u{3BF}\u{3B9}\u{3C7}\u{3B5}\u{3AF}\u{3BF} ${e.item}.`,longPressToSelect:`Πατήστε παρατεταμένα για να μπείτε σε λειτουργία επιλογής.`,select:`Επιλογή`,selectedAll:`Επιλέχθηκαν όλα τα στοιχεία.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Δεν επιλέχθηκαν στοιχεία`,one:()=>`\u{395}\u{3C0}\u{3B9}\u{3BB}\u{3AD}\u{3C7}\u{3B8}\u{3B7}\u{3BA}\u{3B5} ${t.number(e.count)} \u{3C3}\u{3C4}\u{3BF}\u{3B9}\u{3C7}\u{3B5}\u{3AF}\u{3BF}`,other:()=>`\u{395}\u{3C0}\u{3B9}\u{3BB}\u{3AD}\u{3C7}\u{3B8}\u{3B7}\u{3BA}\u{3B1}\u{3BD} ${t.number(e.count)} \u{3C3}\u{3C4}\u{3BF}\u{3B9}\u{3C7}\u{3B5}\u{3AF}\u{3B1}`})}.`,selectedItem:e=>`\u{395}\u{3C0}\u{3B9}\u{3BB}\u{3AD}\u{3C7}\u{3B8}\u{3B7}\u{3BA}\u{3B5} \u{3C4}\u{3BF} \u{3C3}\u{3C4}\u{3BF}\u{3B9}\u{3C7}\u{3B5}\u{3AF}\u{3BF} ${e.item}.`};var US={};US={deselectedItem:e=>`${e.item} not selected.`,select:`Select`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`No items selected`,one:()=>`${t.number(e.count)} item selected`,other:()=>`${t.number(e.count)} items selected`})}.`,selectedAll:`All items selected.`,selectedItem:e=>`${e.item} selected.`,longPressToSelect:`Long press to enter selection mode.`};var WS={};WS={deselectedItem:e=>`${e.item} no seleccionado.`,longPressToSelect:`Mantenga pulsado para abrir el modo de selección.`,select:`Seleccionar`,selectedAll:`Todos los elementos seleccionados.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Ningún elemento seleccionado`,one:()=>`${t.number(e.count)} elemento seleccionado`,other:()=>`${t.number(e.count)} elementos seleccionados`})}.`,selectedItem:e=>`${e.item} seleccionado.`};var GS={};GS={deselectedItem:e=>`${e.item} pole valitud.`,longPressToSelect:`Valikurežiimi sisenemiseks vajutage pikalt.`,select:`Vali`,selectedAll:`Kõik üksused valitud.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Üksusi pole valitud`,one:()=>`${t.number(e.count)} \xfcksus valitud`,other:()=>`${t.number(e.count)} \xfcksust valitud`})}.`,selectedItem:e=>`${e.item} valitud.`};var KS={};KS={deselectedItem:e=>`Kohdetta ${e.item} ei valittu.`,longPressToSelect:`Siirry valintatilaan painamalla pitkään.`,select:`Valitse`,selectedAll:`Kaikki kohteet valittu.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Ei yhtään kohdetta valittu`,one:()=>`${t.number(e.count)} kohde valittu`,other:()=>`${t.number(e.count)} kohdetta valittu`})}.`,selectedItem:e=>`${e.item} valittu.`};var qS={};qS={deselectedItem:e=>`${e.item} non s\xe9lectionn\xe9.`,longPressToSelect:`Appuyez de manière prolongée pour passer en mode de sélection.`,select:`Sélectionner`,selectedAll:`Tous les éléments sélectionnés.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Aucun élément sélectionné`,one:()=>`${t.number(e.count)} \xe9l\xe9ment s\xe9lectionn\xe9`,other:()=>`${t.number(e.count)} \xe9l\xe9ments s\xe9lectionn\xe9s`})}.`,selectedItem:e=>`${e.item} s\xe9lectionn\xe9.`};var JS={};JS={deselectedItem:e=>`${e.item} \u{5DC}\u{5D0} \u{5E0}\u{5D1}\u{5D7}\u{5E8}.`,longPressToSelect:`הקשה ארוכה לכניסה למצב בחירה.`,select:`בחר`,selectedAll:`כל הפריטים נבחרו.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`לא נבחרו פריטים`,one:()=>`\u{5E4}\u{5E8}\u{5D9}\u{5D8} ${t.number(e.count)} \u{5E0}\u{5D1}\u{5D7}\u{5E8}`,other:()=>`${t.number(e.count)} \u{5E4}\u{5E8}\u{5D9}\u{5D8}\u{5D9}\u{5DD} \u{5E0}\u{5D1}\u{5D7}\u{5E8}\u{5D5}`})}.`,selectedItem:e=>`${e.item} \u{5E0}\u{5D1}\u{5D7}\u{5E8}.`};var YS={};YS={deselectedItem:e=>`Stavka ${e.item} nije odabrana.`,longPressToSelect:`Dugo pritisnite za ulazak u način odabira.`,select:`Odaberite`,selectedAll:`Odabrane su sve stavke.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Nije odabrana nijedna stavka`,one:()=>`Odabrana je ${t.number(e.count)} stavka`,other:()=>`Odabrano je ${t.number(e.count)} stavki`})}.`,selectedItem:e=>`Stavka ${e.item} je odabrana.`};var XS={};XS={deselectedItem:e=>`${e.item} nincs kijel\xf6lve.`,longPressToSelect:`Nyomja hosszan a kijelöléshez.`,select:`Kijelölés`,selectedAll:`Az összes elem kijelölve.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Egy elem sincs kijelölve`,one:()=>`${t.number(e.count)} elem kijel\xf6lve`,other:()=>`${t.number(e.count)} elem kijel\xf6lve`})}.`,selectedItem:e=>`${e.item} kijel\xf6lve.`};var ZS={};ZS={deselectedItem:e=>`${e.item} non selezionato.`,longPressToSelect:`Premi a lungo per passare alla modalità di selezione.`,select:`Seleziona`,selectedAll:`Tutti gli elementi selezionati.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Nessun elemento selezionato`,one:()=>`${t.number(e.count)} elemento selezionato`,other:()=>`${t.number(e.count)} elementi selezionati`})}.`,selectedItem:e=>`${e.item} selezionato.`};var QS={};QS={deselectedItem:e=>`${e.item} \u{304C}\u{9078}\u{629E}\u{3055}\u{308C}\u{3066}\u{3044}\u{307E}\u{305B}\u{3093}\u{3002}`,longPressToSelect:`長押しして選択モードを開きます。`,select:`選択`,selectedAll:`すべての項目を選択しました。`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`項目が選択されていません`,one:()=>`${t.number(e.count)} \u{9805}\u{76EE}\u{3092}\u{9078}\u{629E}\u{3057}\u{307E}\u{3057}\u{305F}`,other:()=>`${t.number(e.count)} \u{9805}\u{76EE}\u{3092}\u{9078}\u{629E}\u{3057}\u{307E}\u{3057}\u{305F}`})}\u{3002}`,selectedItem:e=>`${e.item} \u{3092}\u{9078}\u{629E}\u{3057}\u{307E}\u{3057}\u{305F}\u{3002}`};var $S={};$S={deselectedItem:e=>`${e.item}\u{C774}(\u{AC00}) \u{C120}\u{D0DD}\u{B418}\u{C9C0} \u{C54A}\u{C558}\u{C2B5}\u{B2C8}\u{B2E4}.`,longPressToSelect:`선택 모드로 들어가려면 길게 누르십시오.`,select:`선택`,selectedAll:`모든 항목이 선택되었습니다.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`선택된 항목이 없습니다`,one:()=>`${t.number(e.count)}\u{AC1C} \u{D56D}\u{BAA9}\u{C774} \u{C120}\u{D0DD}\u{B418}\u{C5C8}\u{C2B5}\u{B2C8}\u{B2E4}`,other:()=>`${t.number(e.count)}\u{AC1C} \u{D56D}\u{BAA9}\u{C774} \u{C120}\u{D0DD}\u{B418}\u{C5C8}\u{C2B5}\u{B2C8}\u{B2E4}`})}.`,selectedItem:e=>`${e.item}\u{C774}(\u{AC00}) \u{C120}\u{D0DD}\u{B418}\u{C5C8}\u{C2B5}\u{B2C8}\u{B2E4}.`};var eC={};eC={deselectedItem:e=>`${e.item} nepasirinkta.`,longPressToSelect:`Norėdami įjungti pasirinkimo režimą, paspauskite ir palaikykite.`,select:`Pasirinkti`,selectedAll:`Pasirinkti visi elementai.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Nepasirinktas nė vienas elementas`,one:()=>`Pasirinktas ${t.number(e.count)} elementas`,other:()=>`Pasirinkta element\u{173}: ${t.number(e.count)}`})}.`,selectedItem:e=>`Pasirinkta: ${e.item}.`};var tC={};tC={deselectedItem:e=>`Vienums ${e.item} nav atlas\u{12B}ts.`,longPressToSelect:`Ilgi turiet nospiestu. lai ieslēgtu atlases režīmu.`,select:`Atlasīt`,selectedAll:`Atlasīti visi vienumi.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Nav atlasīts neviens vienums`,one:()=>`Atlas\u{12B}to vienumu skaits: ${t.number(e.count)}`,other:()=>`Atlas\u{12B}to vienumu skaits: ${t.number(e.count)}`})}.`,selectedItem:e=>`Atlas\u{12B}ts vienums ${e.item}.`};var nC={};nC={deselectedItem:e=>`${e.item} er ikke valgt.`,longPressToSelect:`Bruk et langt trykk for å gå inn i valgmodus.`,select:`Velg`,selectedAll:`Alle elementer er valgt.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Ingen elementer er valgt`,one:()=>`${t.number(e.count)} element er valgt`,other:()=>`${t.number(e.count)} elementer er valgt`})}.`,selectedItem:e=>`${e.item} er valgt.`};var rC={};rC={deselectedItem:e=>`${e.item} niet geselecteerd.`,longPressToSelect:`Druk lang om de selectiemodus te openen.`,select:`Selecteren`,selectedAll:`Alle items geselecteerd.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Geen items geselecteerd`,one:()=>`${t.number(e.count)} item geselecteerd`,other:()=>`${t.number(e.count)} items geselecteerd`})}.`,selectedItem:e=>`${e.item} geselecteerd.`};var iC={};iC={deselectedItem:e=>`Nie zaznaczono ${e.item}.`,longPressToSelect:`Naciśnij i przytrzymaj, aby wejść do trybu wyboru.`,select:`Zaznacz`,selectedAll:`Wszystkie zaznaczone elementy.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Nie zaznaczono żadnych elementów`,one:()=>`${t.number(e.count)} zaznaczony element`,other:()=>`${t.number(e.count)} zaznaczonych element\xf3w`})}.`,selectedItem:e=>`Zaznaczono ${e.item}.`};var aC={};aC={deselectedItem:e=>`${e.item} n\xe3o selecionado.`,longPressToSelect:`Mantenha pressionado para entrar no modo de seleção.`,select:`Selecionar`,selectedAll:`Todos os itens selecionados.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Nenhum item selecionado`,one:()=>`${t.number(e.count)} item selecionado`,other:()=>`${t.number(e.count)} itens selecionados`})}.`,selectedItem:e=>`${e.item} selecionado.`};var oC={};oC={deselectedItem:e=>`${e.item} n\xe3o selecionado.`,longPressToSelect:`Prima continuamente para entrar no modo de seleção.`,select:`Selecionar`,selectedAll:`Todos os itens selecionados.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Nenhum item selecionado`,one:()=>`${t.number(e.count)} item selecionado`,other:()=>`${t.number(e.count)} itens selecionados`})}.`,selectedItem:e=>`${e.item} selecionado.`};var sC={};sC={deselectedItem:e=>`${e.item} neselectat.`,longPressToSelect:`Apăsați lung pentru a intra în modul de selectare.`,select:`Selectare`,selectedAll:`Toate elementele selectate.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Niciun element selectat`,one:()=>`${t.number(e.count)} element selectat`,other:()=>`${t.number(e.count)} elemente selectate`})}.`,selectedItem:e=>`${e.item} selectat.`};var cC={};cC={deselectedItem:e=>`${e.item} \u{43D}\u{435} \u{432}\u{44B}\u{431}\u{440}\u{430}\u{43D}\u{43E}.`,longPressToSelect:`Нажмите и удерживайте для входа в режим выбора.`,select:`Выбрать`,selectedAll:`Выбраны все элементы.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Нет выбранных элементов`,one:()=>`${t.number(e.count)} \u{44D}\u{43B}\u{435}\u{43C}\u{435}\u{43D}\u{442} \u{432}\u{44B}\u{431}\u{440}\u{430}\u{43D}`,other:()=>`${t.number(e.count)} \u{44D}\u{43B}\u{435}\u{43C}\u{435}\u{43D}\u{442}\u{43E}\u{432} \u{432}\u{44B}\u{431}\u{440}\u{430}\u{43D}\u{43E}`})}.`,selectedItem:e=>`${e.item} \u{432}\u{44B}\u{431}\u{440}\u{430}\u{43D}\u{43E}.`};var lC={};lC={deselectedItem:e=>`Nevybrat\xe9 polo\u{17E}ky: ${e.item}.`,longPressToSelect:`Dlhším stlačením prejdite do režimu výberu.`,select:`Vybrať`,selectedAll:`Všetky vybraté položky.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Žiadne vybraté položky`,one:()=>`${t.number(e.count)} vybrat\xe1 polo\u{17E}ka`,other:()=>`Po\u{10D}et vybrat\xfdch polo\u{17E}iek:${t.number(e.count)}`})}.`,selectedItem:e=>`Vybrat\xe9 polo\u{17E}ky: ${e.item}.`};var uC={};uC={deselectedItem:e=>`Element ${e.item} ni izbran.`,longPressToSelect:`Za izbirni način pritisnite in dlje časa držite.`,select:`Izberite`,selectedAll:`Vsi elementi so izbrani.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Noben element ni izbran`,one:()=>`${t.number(e.count)} element je izbran`,other:()=>`${t.number(e.count)} elementov je izbranih`})}.`,selectedItem:e=>`Element ${e.item} je izbran.`};var dC={};dC={deselectedItem:e=>`${e.item} nije izabrano.`,longPressToSelect:`Dugo pritisnite za ulazak u režim biranja.`,select:`Izaberite`,selectedAll:`Izabrane su sve stavke.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Nije izabrana nijedna stavka`,one:()=>`Izabrana je ${t.number(e.count)} stavka`,other:()=>`Izabrano je ${t.number(e.count)} stavki`})}.`,selectedItem:e=>`${e.item} je izabrano.`};var fC={};fC={deselectedItem:e=>`${e.item} ej markerat.`,longPressToSelect:`Tryck länge när du vill öppna väljarläge.`,select:`Markera`,selectedAll:`Alla markerade objekt.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Inga markerade objekt`,one:()=>`${t.number(e.count)} markerat objekt`,other:()=>`${t.number(e.count)} markerade objekt`})}.`,selectedItem:e=>`${e.item} markerat.`};var pC={};pC={deselectedItem:e=>`${e.item} se\xe7ilmedi.`,longPressToSelect:`Seçim moduna girmek için uzun basın.`,select:`Seç`,selectedAll:`Tüm ögeler seçildi.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Hiçbir öge seçilmedi`,one:()=>`${t.number(e.count)} \xf6ge se\xe7ildi`,other:()=>`${t.number(e.count)} \xf6ge se\xe7ildi`})}.`,selectedItem:e=>`${e.item} se\xe7ildi.`};var mC={};mC={deselectedItem:e=>`${e.item} \u{43D}\u{435} \u{432}\u{438}\u{431}\u{440}\u{430}\u{43D}\u{43E}.`,longPressToSelect:`Виконайте довге натиснення, щоб перейти в режим вибору.`,select:`Вибрати`,selectedAll:`Усі елементи вибрано.`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`Жодних елементів не вибрано`,one:()=>`${t.number(e.count)} \u{435}\u{43B}\u{435}\u{43C}\u{435}\u{43D}\u{442} \u{432}\u{438}\u{431}\u{440}\u{430}\u{43D}\u{43E}`,other:()=>`\u{412}\u{438}\u{431}\u{440}\u{430}\u{43D}\u{43E} \u{435}\u{43B}\u{435}\u{43C}\u{435}\u{43D}\u{442}\u{456}\u{432}: ${t.number(e.count)}`})}.`,selectedItem:e=>`${e.item} \u{432}\u{438}\u{431}\u{440}\u{430}\u{43D}\u{43E}.`};var hC={};hC={deselectedItem:e=>`\u{672A}\u{9009}\u{62E9} ${e.item}\u{3002}`,longPressToSelect:`长按以进入选择模式。`,select:`选择`,selectedAll:`已选择所有项目。`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`未选择项目`,one:()=>`\u{5DF2}\u{9009}\u{62E9} ${t.number(e.count)} \u{4E2A}\u{9879}\u{76EE}`,other:()=>`\u{5DF2}\u{9009}\u{62E9} ${t.number(e.count)} \u{4E2A}\u{9879}\u{76EE}`})}\u{3002}`,selectedItem:e=>`\u{5DF2}\u{9009}\u{62E9} ${e.item}\u{3002}`};var gC={};gC={deselectedItem:e=>`\u{672A}\u{9078}\u{53D6}\u{300C}${e.item}\u{300D}\u{3002}`,longPressToSelect:`長按以進入選擇模式。`,select:`選取`,selectedAll:`已選取所有項目。`,selectedCount:(e,t)=>`${t.plural(e.count,{"=0":`未選取任何項目`,one:()=>`\u{5DF2}\u{9078}\u{53D6} ${t.number(e.count)} \u{500B}\u{9805}\u{76EE}`,other:()=>`\u{5DF2}\u{9078}\u{53D6} ${t.number(e.count)} \u{500B}\u{9805}\u{76EE}`})}\u{3002}`,selectedItem:e=>`\u{5DF2}\u{9078}\u{53D6}\u{300C}${e.item}\u{300D}\u{3002}`};var _C={};_C={"ar-AE":LS,"bg-BG":RS,"cs-CZ":zS,"da-DK":BS,"de-DE":VS,"el-GR":HS,"en-US":US,"es-ES":WS,"et-EE":GS,"fi-FI":KS,"fr-FR":qS,"he-IL":JS,"hr-HR":YS,"hu-HU":XS,"it-IT":ZS,"ja-JP":QS,"ko-KR":$S,"lt-LT":eC,"lv-LV":tC,"nb-NO":nC,"nl-NL":rC,"pl-PL":iC,"pt-BR":aC,"pt-PT":oC,"ro-RO":sC,"ru-RU":cC,"sk-SK":lC,"sl-SI":uC,"sr-SP":dC,"sv-SE":fC,"tr-TR":pC,"uk-UA":mC,"zh-CN":hC,"zh-TW":gC};function vC(e){return e&&e.__esModule?e.default:e}function yC(e,t){let{getRowText:n=e=>t.collection.getTextValue?.(e)??t.collection.getItem(e)?.textValue}=e,r=fh(vC(_C),`@react-aria/grid`),i=t.selectionManager.rawSelection,a=(0,g.useRef)(i),o=(0,g.useCallback)(()=>{if(!t.selectionManager.isFocused||i===a.current){a.current=i;return}let e=bC(i,a.current),o=bC(a.current,i),s=t.selectionManager.selectionBehavior===`replace`,c=[];if(t.selectionManager.selectedKeys.size===1&&s){let e=t.selectionManager.selectedKeys.keys().next().value;if(e!=null&&t.collection.getItem(e)){let t=n(e);t&&c.push(r.format(`selectedItem`,{item:t}))}}else if(e.size===1&&o.size===0){let t=e.keys().next().value;if(t!=null){let e=n(t);e&&c.push(r.format(`selectedItem`,{item:e}))}}else if(o.size===1&&e.size===0){let e=o.keys().next().value;if(e!=null&&t.collection.getItem(e)){let t=n(e);t&&c.push(r.format(`deselectedItem`,{item:t}))}}t.selectionManager.selectionMode===`multiple`&&(c.length===0||i===`all`||i.size>1||a.current===`all`||a.current?.size>1)&&c.push(i===`all`?r.format(`selectedAll`):r.format(`selectedCount`,{count:i.size})),c.length>0&&Qg(c.join(` `)),a.current=i},[i,t.selectionManager.selectedKeys,t.selectionManager.isFocused,t.selectionManager.selectionBehavior,t.selectionManager.selectionMode,t.collection,n,r]);s_(()=>{if(t.selectionManager.isFocused)o();else{let e=requestAnimationFrame(o);return()=>cancelAnimationFrame(e)}},[i,t.selectionManager.isFocused])}function bC(e,t){let n=new Set;if(e===`all`||t===`all`)return n;for(let r of e.keys())t.has(r)||n.add(r);return n}function xC(e,t){let n=t?.isDisabled,[r,i]=(0,g.useState)(!1);return If(()=>{if(e?.current&&!n){let t=()=>{e.current&&i(!!cy(e.current,{tabbable:!0}).nextNode())};t();let n=new MutationObserver(t);return n.observe(e.current,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[`tabIndex`,`disabled`]}),()=>{n.disconnect()}}}),n?!1:r}function SC(e){return e&&e.__esModule?e.default:e}function CC(e){let t=fh(SC(_C),`@react-aria/grid`),n=Lm(),r=(n===`pointer`||n===`virtual`||n==null)&&typeof window<`u`&&`ontouchstart`in window;return h_((0,g.useMemo)(()=>{let n=e.selectionManager.selectionMode,i=e.selectionManager.selectionBehavior,a;return r&&(a=t.format(`longPressToSelect`)),i===`replace`&&n!==`none`&&e.hasItemActions?a:void 0},[e.selectionManager.selectionMode,e.selectionManager.selectionBehavior,e.hasItemActions,t,r]))}function wC(e,t,n){let{isVirtualized:r,keyboardDelegate:i,layoutDelegate:a,onAction:o,disallowTypeAhead:s,linkBehavior:c=`action`,keyboardNavigationBehavior:l=`arrow`,escapeKeyBehavior:u=`clearSelection`,shouldSelectOnPressUp:d}=e;!e[`aria-label`]&&!e[`aria-labelledby`]&&console.warn(`An aria-label or aria-labelledby prop is required for accessibility.`);let{listProps:f}=Oy({selectionManager:t.selectionManager,collection:t.collection,disabledKeys:t.disabledKeys,ref:n,keyboardDelegate:i,layoutDelegate:a,isVirtualized:r,selectOnFocus:t.selectionManager.selectionBehavior===`replace`,shouldFocusWrap:e.shouldFocusWrap,linkBehavior:c,disallowTypeAhead:s,autoFocus:e.autoFocus,escapeKeyBehavior:u}),p=$f(e.id);PS.set(t,{id:p,onAction:o,linkBehavior:c,keyboardNavigationBehavior:l,shouldSelectOnPressUp:d});let m=CC({selectionManager:t.selectionManager,hasItemActions:!!o}),h=xC(n,{isDisabled:t.collection.size!==0}),g=op(gg(e,{labelable:!0}),{role:`grid`,id:p,"aria-multiselectable":t.selectionManager.selectionMode===`multiple`?`true`:void 0},t.collection.size===0?{tabIndex:h?-1:0}:f,m);return r&&(g[`aria-rowcount`]=t.collection.size,g[`aria-colcount`]=1),yC({},t),{gridProps:g}}var TC={expand:{ltr:`ArrowRight`,rtl:`ArrowLeft`},collapse:{ltr:`ArrowLeft`,rtl:`ArrowRight`}};function EC(e,t,n){let{node:r,isVirtualized:i}=e,{direction:a}=$m(),{onAction:o,linkBehavior:s,keyboardNavigationBehavior:c,shouldSelectOnPressUp:l}=PS.get(t),u=tp(),d=(0,g.useRef)(null),f=()=>{n.current!==null&&(d.current!=null&&r.key!==d.current||!Dp(n.current))&&Fh(n.current)},p={},m=e.hasChildItems,h=t.selectionManager.isLink(r.key);if(r!=null&&`expandedKeys`in t){let e=t.collection.getChildren?.(r.key);m||=[...e??[]].length>1,o==null&&!h&&t.selectionManager.selectionMode===`none`&&m&&(o=()=>t.toggleKey(r.key));let n=m?t.expandedKeys.has(r.key):void 0,i=1,a=r.index;if(r.level>=0&&r?.parentKey!=null){let e=t.collection.getItem(r.parentKey);if(e){let n=OC(e,t.collection);i=[...n].filter(e=>e.type===`item`).length,a>0&&n[0].type!==`item`&&--a}}else i=[...t.collection].filter(e=>e.level===0&&e.type===`item`).length;p={"aria-expanded":n,"aria-level":r.level+1,"aria-posinset":a+1,"aria-setsize":i}}let{itemProps:_,...v}=My({selectionManager:t.selectionManager,key:r.key,ref:n,isVirtualized:i,shouldSelectOnPressUp:e.shouldSelectOnPressUp||l,onAction:o||r.props?.onAction?Ff(r.props?.onAction,o?()=>o(r.key):void 0):void 0,focus:f,linkBehavior:s}),y=e=>{let i=Ep();if(!U(e.currentTarget,W(e))||!n.current||!i)return;let o=cy(n.current);if(o.currentNode=i,`expandedKeys`in t&&i===n.current){if(e.key===TC.expand[a]&&t.selectionManager.focusedKey===r.key&&m&&!t.expandedKeys.has(r.key)){t.toggleKey(r.key),e.stopPropagation();return}else if(e.key===TC.collapse[a]&&t.selectionManager.focusedKey===r.key){if(m&&t.expandedKeys.has(r.key)){t.toggleKey(r.key),e.stopPropagation();return}else if(!t.expandedKeys.has(r.key)&&r.parentKey&&t.collection.getItem(r.parentKey)?.type===`item`){t.selectionManager.setFocusedKey(r.parentKey),e.stopPropagation();return}}}switch(e.key){case`ArrowLeft`:if(c===`arrow`){let t=a===`rtl`?o.nextNode():o.previousNode();if(t)e.preventDefault(),e.stopPropagation(),Fh(t),f_(t,{containingElement:l_(n.current)});else if(e.preventDefault(),e.stopPropagation(),a===`rtl`)Fh(n.current),f_(n.current,{containingElement:l_(n.current)});else{o.currentNode=n.current;let e=DC(o);e&&(Fh(e),f_(e,{containingElement:l_(n.current)}))}}break;case`ArrowRight`:if(c===`arrow`){let t=a===`rtl`?o.previousNode():o.nextNode();if(t)e.preventDefault(),e.stopPropagation(),Fh(t),f_(t,{containingElement:l_(n.current)});else if(e.preventDefault(),e.stopPropagation(),a===`ltr`)Fh(n.current),f_(n.current,{containingElement:l_(n.current)});else{o.currentNode=n.current;let e=DC(o);e&&(Fh(e),f_(e,{containingElement:l_(n.current)}))}}break;case`ArrowUp`:case`ArrowDown`:!e.altKey&&U(n.current,W(e))&&(e.stopPropagation(),e.preventDefault(),n.current.parentElement?.dispatchEvent(new KeyboardEvent(e.nativeEvent.type,e.nativeEvent)));break}},b=e=>{if(d.current=r.key,W(e)!==n.current){Pm()||t.selectionManager.setFocusedKey(r.key);return}},x=e=>{let t=Ep();if(!(!U(e.currentTarget,W(e))||!n.current||!t))switch(e.key){case`Tab`:if(c===`tab`){let r=cy(n.current,{tabbable:!0});r.currentNode=t,(e.shiftKey?r.previousNode():r.nextNode())&&e.stopPropagation()}}},S=gm(r.props),C=op(_,v.hasAction?S:{},{role:`row`,onKeyDownCapture:y,onKeyDown:x,onFocus:b,"aria-label":r[`aria-label`]||r.textValue||void 0,"aria-selected":t.selectionManager.canSelectItem(r.key)?t.selectionManager.isSelected(r.key):void 0,"aria-disabled":t.selectionManager.isDisabled(r.key)||void 0,"aria-labelledby":u&&(r[`aria-label`]||r.textValue)?`${FS(t,r.key)} ${u}`:void 0,id:FS(t,r.key)});if(i){let{collection:e}=t;C[`aria-rowindex`]=[...e].find(e=>e.type===`section`)?[...e.getKeys()].filter(t=>e.getItem(t)?.type!==`section`).findIndex(e=>e===r.key)+1:r.index+1}let w={role:`gridcell`,"aria-colindex":1};return{rowProps:{...op(C,p)},gridCellProps:w,descriptionProps:{id:u},...v}}function DC(e){let t=null,n=null;do n=e.lastChild(),n&&(t=n);while(n);return t}function OC(e,t){let n=t.getChildren?.(e.key),r=n?Array.from(n):[],i=r.length>0?r[0]:null,a=[];for(;i;)a.push(i),i=i.nextKey==null?null:t.getItem(i.nextKey);return a}function kC(e){return e&&e.__esModule?e.default:e}function AC(e,t){let{key:n}=e,r=t.selectionManager,i=$f(),a=!t.selectionManager.canSelectItem(n),o=t.selectionManager.isSelected(n);return{checkboxProps:{id:i,"aria-label":fh(kC(_C),`@react-aria/grid`).format(`select`),isSelected:o,isDisabled:a,onChange:()=>r.toggleSelection(n)}}}function jC(e,t){let{key:n}=e,{checkboxProps:r}=AC(e,t);return{checkboxProps:{...r,"aria-labelledby":`${r.id} ${FS(t,n)}`}}}var MC=(0,g.createContext)(null),NC=(0,g.forwardRef)(function(e,t){return[e,t]=fp(e,t,MC),g.createElement(qh,{content:g.createElement(rg,e)},n=>g.createElement(PC,{props:e,collection:n,gridListRef:t}))});function PC({props:e,collection:t,gridListRef:n}){[e,n]=fp(e,n,hh);let{shouldUseVirtualFocus:r,filter:i,disallowTypeAhead:a,...o}=e,{dragAndDropHooks:s,keyboardNavigationBehavior:c=`arrow`,layout:l=`stack`,orientation:u=`vertical`}=e,{CollectionRoot:d,isVirtualized:f,layoutDelegate:p,dropTargetDelegate:m}=(0,g.useContext)(lg),h=Ky(Gy({...o,collection:t,children:void 0,layoutDelegate:p}),i),_=Dy({usage:`search`,sensitivity:`base`}),{disabledBehavior:v,disabledKeys:y}=h.selectionManager,{direction:b}=$m(),x=(0,g.useMemo)(()=>new Ty({collection:h.collection,collator:_,ref:n,disabledKeys:y,disabledBehavior:v,layoutDelegate:p,layout:l,orientation:u,direction:b}),[h.collection,n,l,u,y,v,p,_,b]),{gridProps:S}=wC({...o,keyboardDelegate:x,keyboardNavigationBehavior:l===`grid`?`tab`:c,isVirtualized:f,shouldSelectOnPressUp:e.shouldSelectOnPressUp,disallowTypeAhead:a},h,n),C=h.selectionManager,w=!!s?.useDraggableCollectionState,T=!!s?.useDroppableCollectionState;(0,g.useRef)(w),(0,g.useRef)(T),(0,g.useEffect)(()=>{},[w,T]);let E,D,O,k=!1,A=null,j=(0,g.useRef)(null);if(w&&s){E=s.useDraggableCollectionState({collection:h.collection,selectionManager:C,preview:s.renderDragPreview?j:void 0}),s.useDraggableCollection({},E,n);let e=s.DragPreview;A=s.renderDragPreview?g.createElement(e,{ref:j},s.renderDragPreview):null}if(T&&s){D=s.useDroppableCollectionState({collection:h.collection,selectionManager:C});let e=s.dropTargetDelegate||m||new s.ListDropTargetDelegate(t,n,{layout:l,direction:b,orientation:u});O=s.useDroppableCollection({keyboardDelegate:x,dropTargetDelegate:e},D,n),k=D.isDropTarget({type:`root`})}let{focusProps:M,isFocused:N,isFocusVisible:P}=zg(),F=h.collection.size===0,ee={isDropTarget:k,orientation:u,isEmpty:F,isFocused:N,isFocusVisible:P,layout:l,state:h},te=up({...e,children:void 0,defaultClassName:`react-aria-GridList`,values:ee}),ne=null;if(F&&e.renderEmptyState){let t=e.renderEmptyState(ee);ne=g.createElement(`div`,{role:`row`,"aria-rowindex":1,style:{display:`contents`}},g.createElement(`div`,{role:`gridcell`,style:{display:`contents`}},t))}let re=gg(e,{global:!0});return g.createElement(Hv,null,g.createElement(_p.div,{...op(re,te,S,M,O?.collectionProps,null),ref:n,slot:e.slot||void 0,onScroll:e.onScroll,"data-drop-target":k||void 0,"data-empty":F||void 0,"data-focused":N||void 0,"data-focus-visible":P||void 0,"data-layout":l,"data-orientation":u},g.createElement(lp,{values:[[Xy,h],[Cv,{dragAndDropHooks:s,dragState:E,dropState:D}],[wv,{render:IC}]]},T&&g.createElement(zC,null),g.createElement(jv,null,g.createElement(d,{collection:h.collection,scrollRef:n,persistedKeys:Dv(C,s,D),renderDropIndicator:Ev(s,D)}))),ne,A))}var FC=$h(xh,function(e,t,n){let r=(0,g.useContext)(Xy),{dragAndDropHooks:i,dragState:a,dropState:o}=(0,g.useContext)(Cv),s=sp(t),{isVirtualized:c}=(0,g.useContext)(lg),l=a&&!(a.isDisabled||a.selectionManager.isDisabled(n.key)),{rowProps:u,gridCellProps:d,descriptionProps:f,...p}=EC({node:n,shouldSelectOnPressUp:!!a,isVirtualized:c},r,s),{hoverProps:m,isHovered:h}=Gg({isDisabled:!p.allowsSelection&&!p.hasAction&&!l,onHoverStart:n.props.onHoverStart,onHoverChange:n.props.onHoverChange,onHoverEnd:n.props.onHoverEnd}),{isFocusVisible:_,focusProps:v}=zg(),{isFocusVisible:y,focusProps:b}=zg({within:!0}),{checkboxProps:x}=jC({key:n.key},r),S=r.selectionManager.disabledBehavior===`all`&&p.isDisabled?{isDisabled:!0}:{},C=null;a&&i&&(C=i.useDraggableItem({key:n.key,hasDragButton:!0},a));let w=null,T=(0,g.useRef)(null),{visuallyHiddenProps:E}=__();o&&i&&(w=i.useDropIndicator({target:{type:`item`,key:n.key,dropPosition:`on`}},o,T));let D=a&&a.isDragging(n.key),O=up({...e,id:void 0,children:n.rendered,defaultClassName:`react-aria-GridListItem`,values:{...p,isHovered:h,isFocusVisible:_,isFocusVisibleWithin:y,selectionMode:r.selectionManager.selectionMode,selectionBehavior:r.selectionManager.selectionBehavior,allowsDragging:!!a,isDragging:D,isDropTarget:w?.isDropTarget,id:n.key,state:r}}),k=(0,g.useRef)(null);(0,g.useEffect)(()=>{a&&!k.current&&console.warn(`Draggable items in a GridList must contain a + ) : depth === 1 ? - {session.lifecycleId ? {session.lifecycleId} : null} - {session.turnState ? {session.turnState} : null} + {session.lifecycleId ? {session.lifecycleId} : null} + {session.turnState ? {session.turnState} : null} {session.status && session.status !== "running" ? ( - {session.status} + {session.status} ) : null}