From 0753dae6ba036ebace672f3584b654301d1a11df Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 10:48:38 +0800 Subject: [PATCH 1/5] Build and qualify frontend delivery artifacts outside Git Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .github/workflows/desktop-updater.yml | 3 + .github/workflows/frontstage-pages.yml | 19 +- .github/workflows/full-public-smokes.yml | 3 + .github/workflows/python-tests.yml | 75 ++++- .github/workflows/release-artifacts.yml | 17 + .gitignore | 4 + MANIFEST.in | 1 + apps/presentation/dashboard/package.json | 8 +- .../dashboard/vite.chat.config.ts | 64 +--- loopx/chat_server.py | 3 + loopx/dashboard_launcher.py | 4 + loopx/presentation/chat_bundle.py | 163 +++++++++ loopx/web/chat/asset-retention.json | 35 -- ...st-cyrillic-ext-wght-normal-DjL33-gN.woff2 | Bin 7420 -> 0 bytes .../geist-cyrillic-wght-normal-BEAKL7Jp.woff2 | Bin 15084 -> 0 bytes ...geist-latin-ext-wght-normal-DC-KSUi6.woff2 | Bin 16512 -> 0 bytes .../geist-latin-wght-normal-BgDaEnEv.woff2 | Bin 29400 -> 0 bytes ...no-cyrillic-ext-wght-normal-X_5orZeX.woff2 | Bin 6176 -> 0 bytes ...t-mono-cyrillic-wght-normal-DiZS0aHC.woff2 | Bin 12940 -> 0 bytes ...-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 | Bin 14696 -> 0 bytes ...eist-mono-latin-wght-normal-XN7g48iV.woff2 | Bin 23128 -> 0 bytes ...t-mono-symbols2-wght-normal-CO5SzqOn.woff2 | Bin 5812 -> 0 bytes ...mono-vietnamese-wght-normal-DadHysG0.woff2 | Bin 7696 -> 0 bytes ...eist-vietnamese-wght-normal-6IgcOCM7.woff2 | Bin 8004 -> 0 bytes loopx/web/chat/assets/index-BGlmetKk.js | 141 -------- loopx/web/chat/assets/index-CFEaAATG.js | 141 -------- loopx/web/chat/assets/index-C_Imc7ZG.css | 1 - loopx/web/chat/index.html | 39 --- loopx/web/chat/manifest.webmanifest | 22 -- loopx/web/chat/pwa/icon-192.png | Bin 57231 -> 0 bytes loopx/web/chat/pwa/icon-512.png | Bin 338633 -> 0 bytes loopx/windows_install.py | 9 + pyproject.toml | 2 +- scripts/chat_bundle.py | 317 ++++++++++++++++++ scripts/dashboard-dev.sh | 2 + scripts/desktop_runtime_bundle.py | 104 +++++- scripts/install-local.sh | 17 +- scripts/verify_installed_chat.py | 52 +++ setup.py | 37 ++ 39 files changed, 813 insertions(+), 470 deletions(-) create mode 100644 MANIFEST.in create mode 100644 loopx/presentation/chat_bundle.py delete mode 100644 loopx/web/chat/asset-retention.json delete mode 100644 loopx/web/chat/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 delete mode 100644 loopx/web/chat/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 delete mode 100644 loopx/web/chat/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 delete mode 100644 loopx/web/chat/assets/geist-latin-wght-normal-BgDaEnEv.woff2 delete mode 100644 loopx/web/chat/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 delete mode 100644 loopx/web/chat/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 delete mode 100644 loopx/web/chat/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 delete mode 100644 loopx/web/chat/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 delete mode 100644 loopx/web/chat/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 delete mode 100644 loopx/web/chat/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 delete mode 100644 loopx/web/chat/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 delete mode 100644 loopx/web/chat/assets/index-BGlmetKk.js delete mode 100644 loopx/web/chat/assets/index-CFEaAATG.js delete mode 100644 loopx/web/chat/assets/index-C_Imc7ZG.css delete mode 100644 loopx/web/chat/index.html delete mode 100644 loopx/web/chat/manifest.webmanifest delete mode 100644 loopx/web/chat/pwa/icon-192.png delete mode 100644 loopx/web/chat/pwa/icon-512.png create mode 100644 scripts/chat_bundle.py create mode 100644 scripts/verify_installed_chat.py create mode 100644 setup.py diff --git a/.github/workflows/desktop-updater.yml b/.github/workflows/desktop-updater.yml index 1e95fdc3e9..6ace736149 100644 --- a/.github/workflows/desktop-updater.yml +++ b/.github/workflows/desktop-updater.yml @@ -31,6 +31,9 @@ jobs: - uses: Swatinem/rust-cache@v2 with: workspaces: apps/desktop/loopx-control-plane/src-tauri -> target + - uses: actions/setup-node@v6 + with: + node-version: "24" - run: python3 scripts/desktop_runtime_bundle.py - run: python3 -m unittest discover -s tests/desktop -p 'test_*.py' - run: cargo test --locked && cargo clippy --all-targets --locked -- -D warnings diff --git a/.github/workflows/frontstage-pages.yml b/.github/workflows/frontstage-pages.yml index 4fe7140b1d..702d54dbf3 100644 --- a/.github/workflows/frontstage-pages.yml +++ b/.github/workflows/frontstage-pages.yml @@ -10,7 +10,8 @@ on: - "README.md" - "README.zh-CN.md" - "apps/presentation/dashboard/**" - - "loopx/web/chat/**" + - "scripts/chat_bundle.py" + - "loopx/presentation/chat_bundle.py" - "apps/presentation/site/**" - "benchmark/deepswe/behavior-discovery/**" - "docs/**" @@ -46,7 +47,8 @@ on: - "README.md" - "README.zh-CN.md" - "apps/presentation/dashboard/**" - - "loopx/web/chat/**" + - "scripts/chat_bundle.py" + - "loopx/presentation/chat_bundle.py" - "apps/presentation/site/**" - "benchmark/deepswe/behavior-discovery/**" - "docs/**" @@ -125,14 +127,17 @@ jobs: working-directory: apps/presentation/dashboard run: | npm run build:chat - if [[ -n "$(git -C ../../.. status --short --untracked-files=all -- loopx/web/chat)" ]]; then - git -C ../../.. status --short --untracked-files=all -- loopx/web/chat - echo "Tracked packaged Dashboard assets differ from a clean source build." >&2 - exit 1 - fi + python ../../../scripts/chat_bundle.py verify --source ./node_modules/.bin/playwright install --with-deps chromium npm run smoke:personal-workspace-packaged + - uses: actions/upload-artifact@v7 + with: + name: frontstage-chat-bundle-${{ github.sha }} + path: loopx/web/chat/ + if-no-files-found: error + retention-days: 7 + - name: Install docs dependencies run: | python -m pip install --disable-pip-version-check -r docs/requirements-docs.txt diff --git a/.github/workflows/full-public-smokes.yml b/.github/workflows/full-public-smokes.yml index 5edb67a875..7a2a1207a2 100644 --- a/.github/workflows/full-public-smokes.yml +++ b/.github/workflows/full-public-smokes.yml @@ -76,6 +76,9 @@ jobs: - name: Install locked TypeScript parser for semantic production checks run: npm ci --ignore-scripts + - name: Build the packaged frontend from source + run: python scripts/chat_bundle.py build --install + - name: Preview full-public shard run: | python3 examples/run-smokes.py \ diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 0e9d979fa7..313fc6853d 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -19,6 +19,8 @@ on: - "package.json" - "package-lock.json" - "pyproject.toml" + - "setup.py" + - "MANIFEST.in" - "tsconfig.control-plane.json" permissions: @@ -83,8 +85,32 @@ jobs: if-no-files-found: error retention-days: 7 - kernel-static-checks: + chat-bundle: needs: changes + if: needs.changes.outputs.core_tests == 'true' || needs.changes.outputs.python_tests == 'true' || needs.changes.outputs.presentation_tests == 'true' + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-python@v6 + with: + python-version: "3.11" + - uses: actions/setup-node@v6 + with: + node-version: "24" + cache: npm + cache-dependency-path: apps/presentation/dashboard/package-lock.json + - run: python scripts/chat_bundle.py build --install + - run: python scripts/chat_bundle.py verify --source + - uses: actions/upload-artifact@v7 + with: + name: chat-bundle-${{ github.sha }} + path: loopx/web/chat/ + if-no-files-found: error + retention-days: 7 + + kernel-static-checks: + needs: [changes, chat-bundle] if: needs.changes.outputs.core_tests == 'true' runs-on: ubuntu-latest timeout-minutes: 60 @@ -94,6 +120,11 @@ jobs: with: fetch-depth: 0 + - uses: actions/download-artifact@v7 + with: + name: chat-bundle-${{ github.sha }} + path: loopx/web/chat/ + - name: Set up Python uses: actions/setup-python@v6 with: @@ -154,7 +185,7 @@ jobs: run: python examples/control_plane/cli-output-budget-regression-smoke.py dashboard-acceptance: - needs: changes + needs: [changes, chat-bundle] if: needs.changes.outputs.core_tests == 'true' runs-on: ubuntu-latest timeout-minutes: 15 @@ -162,6 +193,11 @@ jobs: - name: Check out repository uses: actions/checkout@v7 + - uses: actions/download-artifact@v7 + with: + name: chat-bundle-${{ github.sha }} + path: loopx/web/chat/ + - name: Set up the qualified Node.js runtime uses: actions/setup-node@v6 with: @@ -261,7 +297,7 @@ jobs: npm run test:control-plane test-shard: - needs: changes + needs: [changes, chat-bundle] if: needs.changes.outputs.python_tests == 'true' runs-on: ubuntu-latest timeout-minutes: 30 @@ -273,6 +309,11 @@ jobs: - uses: actions/checkout@v7 with: fetch-depth: 0 + - uses: actions/download-artifact@v7 + with: + name: chat-bundle-${{ github.sha }} + path: loopx/web/chat/ + - uses: actions/setup-python@v6 with: python-version: "3.11" @@ -381,7 +422,7 @@ jobs: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} stage2c-suite: - needs: changes + needs: [changes, chat-bundle] if: needs.changes.outputs.stage2c_tests == 'true' name: stage2c (${{ matrix.suite }} ${{ matrix.shard }}) runs-on: ubuntu-latest @@ -396,6 +437,11 @@ jobs: - {suite: installed, shard: 0} steps: - uses: actions/checkout@v7 + - uses: actions/download-artifact@v7 + with: + name: chat-bundle-${{ github.sha }} + path: loopx/web/chat/ + - uses: actions/setup-python@v6 with: python-version: "3.11" @@ -475,7 +521,7 @@ jobs: run: test "$STAGE2C_RESULT" = success windows-powershell: - needs: changes + needs: [changes, chat-bundle] if: needs.changes.outputs.python_tests == 'true' runs-on: windows-latest timeout-minutes: 20 @@ -485,6 +531,11 @@ jobs: with: fetch-depth: 0 + - uses: actions/download-artifact@v7 + with: + name: chat-bundle-${{ github.sha }} + path: loopx/web/chat/ + - name: Set up Python uses: actions/setup-python@v6 with: @@ -531,12 +582,17 @@ jobs: tests/control_plane_ts/sqlite_runtime_admission.test.ts presentation: - needs: changes + needs: [changes, chat-bundle] if: needs.changes.outputs.presentation_tests == 'true' runs-on: ubuntu-latest timeout-minutes: 15 steps: - uses: actions/checkout@v7 + - uses: actions/download-artifact@v7 + with: + name: chat-bundle-${{ github.sha }} + path: loopx/web/chat/ + - uses: actions/setup-python@v6 with: python-version: "3.11" @@ -551,13 +607,10 @@ jobs: working-directory: apps/presentation/dashboard run: | npm ci --ignore-scripts - npm run build:chat - if [[ -n "$(git -C ../../.. status --short --untracked-files=all -- loopx/web/chat)" ]]; then - echo "Packaged Dashboard differs from its source build." >&2 - exit 1 - fi + python ../../../scripts/chat_bundle.py verify --source ./node_modules/.bin/playwright install --with-deps chromium npm run smoke:personal-workspace-packaged + npm run smoke:chat-upgrade merge-gate: # Always publish one stable outcome, including documentation-only PRs. diff --git a/.github/workflows/release-artifacts.yml b/.github/workflows/release-artifacts.yml index cb1c0b72d5..6d7680055e 100644 --- a/.github/workflows/release-artifacts.yml +++ b/.github/workflows/release-artifacts.yml @@ -9,6 +9,11 @@ on: - "package.json" - "package-lock.json" - "pyproject.toml" + - "setup.py" + - "MANIFEST.in" + - "apps/presentation/dashboard/**" + - "scripts/chat_bundle.py" + - "scripts/verify_installed_chat.py" - "README.md" - "scripts/release_artifacts.py" - "tsconfig.control-plane.json" @@ -75,6 +80,11 @@ jobs: echo "SOURCE_DATE_EPOCH=${source_date_epoch}" >> "${GITHUB_ENV}" echo "PYTHONHASHSEED=0" >> "${GITHUB_ENV}" + - name: Build exact release frontend with previous delivery assets + env: + GH_TOKEN: ${{ github.token }} + run: python scripts/chat_bundle.py release-build --tag "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" + - name: Install release build tools run: python -m pip install --disable-pip-version-check build==1.4.4 twine==6.2.0 @@ -196,6 +206,13 @@ jobs: assert committed["replayed"] is False, committed PY + - name: Verify installed frontend and sdist rebuild + run: | + python scripts/verify_installed_chat.py --python "${RUNNER_TEMP}/loopx-wheel/bin/python" + python -m pip wheel --no-deps dist/packages/*.tar.gz --wheel-dir "${RUNNER_TEMP}/sdist-wheel" + "${RUNNER_TEMP}/loopx-wheel/bin/python" -m pip install --force-reinstall --no-deps "${RUNNER_TEMP}"/sdist-wheel/*.whl + python scripts/verify_installed_chat.py --python "${RUNNER_TEMP}/loopx-wheel/bin/python" + - name: Verify wheel through the DSH managed-runtime install shape run: | set -euo pipefail diff --git a/.gitignore b/.gitignore index 681d2da831..f4caa404fd 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,7 @@ logs/ # Legacy semantic census reports are derived locally, never repository authority. /loopx/semantics/inventory_v0.json + +# Frontend delivery artifacts are built and qualified from source. +/loopx/web/chat/ +/loopx/web/.chat-build-*/ diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000000..abe2377880 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +graft loopx/web/chat diff --git a/apps/presentation/dashboard/package.json b/apps/presentation/dashboard/package.json index 4fe86c367a..467fdc1e5e 100644 --- a/apps/presentation/dashboard/package.json +++ b/apps/presentation/dashboard/package.json @@ -7,8 +7,8 @@ "scripts": { "smoke:workspace-progressive-loader": "node smoke/workspace-progressive-status-smoke.mjs", "smoke:workspace-progressive": "node ../../../examples/workspace-progressive-loading-browser-smoke.mjs", - "build": "tsc --noEmit && vite build && vite build --config vite.chat.config.ts", - "build:chat": "tsc --noEmit && vite build --config vite.chat.config.ts", + "build": "tsc --noEmit && vite build && npm run build:chat", + "build:chat": "python3 ../../../scripts/chat_bundle.py build", "build:desktop": "tsc --noEmit && vite build", "dev": "bash ../../../scripts/dashboard-dev.sh", "dev:web": "vite --host 127.0.0.1", @@ -51,7 +51,9 @@ "smoke:attention-details": "tsc --ignoreConfig --target ES2022 --module CommonJS --moduleResolution Node --ignoreDeprecations 6.0 --resolveJsonModule --esModuleInterop --skipLibCheck --strict --outDir /tmp/loopx-attention-details-smoke smoke/attention-details-smoke.ts && NODE_PATH=\"$PWD/node_modules\" node /tmp/loopx-attention-details-smoke/apps/presentation/dashboard/smoke/attention-details-smoke.js", "smoke:delivery-review": "tsc --ignoreConfig --target ES2022 --module NodeNext --moduleResolution NodeNext --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/delivery-review src/data/delivery-review.ts src/data/goal-acceptance-observation.ts src/features/personal-workspace/delivery-review-copy.ts && node smoke/delivery-review-smoke.mjs", "smoke:team-artifact-comparison": "tsc --ignoreConfig --target ES2022 --module ES2022 --moduleResolution Bundler --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/team-comparison src/features/personal-workspace/team-artifact-comparison.ts src/vite-env.d.ts && node smoke/team-artifact-comparison-smoke.mjs", - "smoke:team-report": "tsc --ignoreConfig --target ES2022 --module ES2022 --moduleResolution Bundler --jsx react-jsx --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/team-report src/features/personal-workspace/team-artifact-content.tsx src/vite-env.d.ts && node smoke/team-report-smoke.mjs" + "smoke:team-report": "tsc --ignoreConfig --target ES2022 --module ES2022 --moduleResolution Bundler --jsx react-jsx --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/team-report src/features/personal-workspace/team-artifact-content.tsx src/vite-env.d.ts && node smoke/team-report-smoke.mjs", + "build:chat:vite": "tsc --noEmit && vite build --config vite.chat.config.ts", + "smoke:chat-upgrade": "LOOPX_PLAYWRIGHT_PACKAGE=\"$PWD/node_modules/playwright\" node ../../../examples/chat-bundle-upgrade-browser-smoke.mjs" }, "dependencies": { "@fontsource-variable/geist": "^5.3.0", diff --git a/apps/presentation/dashboard/vite.chat.config.ts b/apps/presentation/dashboard/vite.chat.config.ts index 37915176e4..f7c3de734c 100644 --- a/apps/presentation/dashboard/vite.chat.config.ts +++ b/apps/presentation/dashboard/vite.chat.config.ts @@ -1,67 +1,13 @@ -import { existsSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs"; +import { readFileSync } from "node:fs"; import tailwindcss from "@tailwindcss/vite"; import react from "@vitejs/plugin-react"; import { resolve } from "node:path"; import { defineConfig, type Plugin } from "vite"; const dashboardPublicDir = resolve(import.meta.dirname, "public"); -const chatOutDir = resolve(import.meta.dirname, "../../../loopx/web/chat"); -const retainedAssetsPath = resolve(chatOutDir, "asset-retention.json"); +const chatOutDir = process.env.LOOPX_CHAT_OUT_DIR ?? resolve(import.meta.dirname, "../../../loopx/web/chat"); const sharedPwaAssets = ["manifest.webmanifest", "pwa/icon-192.png", "pwa/icon-512.png"] as const; -function retainedChatAssets(): Plugin { - const previousIndex = resolve(chatOutDir, "index.html"); - const previousEntryAssets = existsSync(previousIndex) - ? [...readFileSync(previousIndex, "utf8").matchAll(/(?:src|href)="\/chat\/(assets\/[^"]+)"/g)].map((match) => match[1]) - : []; - const previousManifest = existsSync(retainedAssetsPath) - ? JSON.parse(readFileSync(retainedAssetsPath, "utf8")) - : { schema_version: "loopx_chat_asset_retention_v1", generations: [] }; - const previousGenerations = previousManifest.generations; - if (previousManifest.schema_version !== "loopx_chat_asset_retention_v1" - || !Array.isArray(previousGenerations) || previousGenerations.some( - (generation) => !Array.isArray(generation) || generation.some( - (asset) => typeof asset !== "string" || !/^assets\/[A-Za-z0-9._-]+$/.test(asset), - ), - )) { - throw new Error("Invalid chat asset retention manifest"); - } - const previousGeneration = previousGenerations.find((generation) => - previousEntryAssets.every((asset) => generation.includes(asset)), - ) ?? previousEntryAssets; - - return { - name: "loopx-bounded-chat-asset-retention", - writeBundle(_options, bundle) { - const generations: string[][] = []; - const retained = new Set(); - for (const generation of [ - Object.keys(bundle).filter((path) => path.startsWith("assets/")).sort(), - previousGeneration, - ...previousGenerations, - ]) { - const normalized = [...new Set(generation)].sort(); - if (normalized.some((asset) => !existsSync(resolve(chatOutDir, asset)))) continue; - if (normalized.every((asset) => retained.has(asset))) continue; - if (normalized.length && !generations.some((item) => item.join("\0") === normalized.join("\0"))) { - generations.push(normalized); - normalized.forEach((asset) => retained.add(asset)); - } - // ponytail: one prior bundle protects rolling upgrades; add a larger - // retention window only if multi-release stale tabs become a real need. - if (generations.length === 2) break; - } - for (const name of readdirSync(resolve(chatOutDir, "assets"))) { - if (!retained.has(`assets/${name}`)) rmSync(resolve(chatOutDir, "assets", name)); - } - writeFileSync(retainedAssetsPath, `${JSON.stringify({ - schema_version: "loopx_chat_asset_retention_v1", - generations, - }, null, 2)}\n`); - }, - }; -} - function emitSharedPwaAssets(): Plugin { return { name: "loopx-shared-dashboard-pwa-assets", @@ -83,10 +29,10 @@ export default defineConfig({ // The chat bundle shares the root dashboard's manifest and icons without // copying unrelated showcase assets into the packaged chat directory. publicDir: false, - plugins: [react(), tailwindcss(), emitSharedPwaAssets(), retainedChatAssets()], + plugins: [react(), tailwindcss(), emitSharedPwaAssets()], build: { outDir: chatOutDir, - // Retention is bounded by retainedChatAssets instead of growing forever. - emptyOutDir: false, + // The delivery builder stages output and retains only an explicit prior delivery. + emptyOutDir: true, }, }); diff --git a/loopx/chat_server.py b/loopx/chat_server.py index 0457244f63..579196c31c 100644 --- a/loopx/chat_server.py +++ b/loopx/chat_server.py @@ -1411,6 +1411,9 @@ def serve_chat( if not is_loopback_host(host): raise ValueError("loopx chat requires a loopback --host such as 127.0.0.1") resolved_assets = (assets_dir or default_chat_assets_dir()).expanduser().resolve() + if assets_dir is None: + from .presentation.chat_bundle import validate_bundle + validate_bundle(resolved_assets, source_root=Path(__file__).resolve().parents[1]) if not (resolved_assets / "index.html").is_file(): raise FileNotFoundError("LoopX Chat web assets are unavailable; reinstall LoopX or rebuild the chat bundle") resolved_registry_path = registry_path or (Path.home() / ".loopx" / "registry.json") diff --git a/loopx/dashboard_launcher.py b/loopx/dashboard_launcher.py index 95ec4320ed..eb29b21730 100644 --- a/loopx/dashboard_launcher.py +++ b/loopx/dashboard_launcher.py @@ -230,6 +230,10 @@ def launch_dashboard( env=environment, ) + if assets_dir is None: + from .presentation.chat_bundle import validate_bundle + validate_bundle(default_packaged_assets_dir(), source_root=Path(__file__).resolve().parents[1]) + existing_chat = _probe_existing_chat( host, port, diff --git a/loopx/presentation/chat_bundle.py b/loopx/presentation/chat_bundle.py new file mode 100644 index 0000000000..a5904d0324 --- /dev/null +++ b/loopx/presentation/chat_bundle.py @@ -0,0 +1,163 @@ +"""Integrity and source freshness for the generated, packaged Chat frontend.""" + +from __future__ import annotations + +import hashlib +import json +import re +from pathlib import Path, PurePosixPath + +MANIFEST = "bundle-manifest.json" +SCHEMA = "loopx_chat_bundle_v1" +SOURCE_ROOTS = ( + "apps/presentation/dashboard/src", + "apps/presentation/dashboard/chat", + "apps/presentation/dashboard/public", +) +SOURCE_FILES = ( + "apps/presentation/dashboard/package.json", + "apps/presentation/dashboard/package-lock.json", + "apps/presentation/dashboard/vite.chat.config.ts", + "apps/presentation/dashboard/tsconfig.json", +) +BUILD_HELP = "Run npm ci and npm run build:chat in apps/presentation/dashboard (or reinstall a complete LoopX package)." + + +def digest(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def source_digest(path: Path, content: bytes | None = None) -> str: + # Git may check text out with CRLF on Windows; binary assets remain exact. + data = path.read_bytes() if content is None else content + if path.suffix in { + ".ts", + ".tsx", + ".js", + ".mjs", + ".json", + ".html", + ".css", + ".svg", + ".py", + }: + data = data.replace(b"\r\n", b"\n") + return hashlib.sha256(data).hexdigest() + + +def source_inputs(root: Path) -> dict[str, str]: + paths = [root / name for name in SOURCE_FILES] + for name in SOURCE_ROOTS: + paths.extend( + path + for path in (root / name).rglob("*") + if path.is_file() and not path.name.endswith(".local.json") + ) + # Shared typed contracts imported by the frontend are build inputs too. + paths.extend((root / "loopx/control_plane").rglob("*.ts")) + paths.extend((root / "loopx/control_plane").rglob("*.json")) + paths.append(root / "scripts/chat_bundle.py") + paths.append(root / "loopx/presentation/chat_bundle.py") + return { + path.relative_to(root).as_posix(): source_digest(path) + for path in sorted(paths) + if path.is_file() + } + + +def safe_relative(value: str) -> bool: + if not isinstance(value, str): + return False + path = PurePosixPath(value) + return ( + bool(value) + and not path.is_absolute() + and ".." not in path.parts + and "\\" not in value + and ":" not in value + and "\0" not in value + and str(path) == value + ) + + +def validate_bundle(bundle: Path, *, source_root: Path | None = None) -> dict: + try: + manifest = json.loads((bundle / MANIFEST).read_text(encoding="utf-8")) + if not isinstance(manifest, dict) or manifest.get("schema_version") != SCHEMA: + raise ValueError("unsupported bundle manifest") + files = manifest["files"] + if ( + not isinstance(files, dict) + or not {"index.html", "manifest.webmanifest", "asset-retention.json"} + <= files.keys() + ): + raise ValueError("incomplete bundle") + actual = { + p.relative_to(bundle).as_posix() + for p in bundle.rglob("*") + if p.is_file() and p.relative_to(bundle).as_posix() != MANIFEST + } + if actual != files.keys(): + raise ValueError("bundle file inventory changed") + for name, expected in files.items(): + if ( + not safe_relative(name) + or not isinstance(expected, str) + or not re.fullmatch(r"[0-9a-f]{64}", expected) + ): + raise ValueError("invalid bundle witness") + path = bundle / name + if ( + path.is_symlink() + or any( + (bundle / Path(*PurePosixPath(name).parts[:i])).is_symlink() + for i in range(1, len(PurePosixPath(name).parts) + 1) + ) + or digest(path) != expected + ): + raise ValueError(f"bundle file changed: {name}") + current = manifest["current_assets"] + retention = json.loads( + (bundle / "asset-retention.json").read_text(encoding="utf-8") + ) + generations = retention["generations"] + if not isinstance(generations, list) or any( + not isinstance(g, list) + or not g + or any( + not isinstance(n, str) + or not safe_relative(n) + or not n.startswith("assets/") + for n in g + ) + or len(g) != len(set(g)) + for g in generations + ): + raise ValueError("invalid asset generation entries") + if ( + retention.get("schema_version") != "loopx_chat_asset_retention_v1" + or not 1 <= len(generations) <= 2 + or generations[0] != current + ): + raise ValueError("invalid asset generations") + if set().union(*(set(g) for g in generations)) != { + name for name in files if name.startswith("assets/") + }: + raise ValueError("asset retention is incomplete") + entries = re.findall( + r'(?:src|href)="/chat/(assets/[^\"]+)"', + (bundle / "index.html").read_text(encoding="utf-8"), + ) + if not entries or not set(entries) <= set(current): + raise ValueError("entry references missing assets") + if ( + source_root is not None + and (source_root / "apps/presentation/dashboard/package.json").is_file() + ): + if manifest.get("source_files") != source_inputs(source_root): + raise ValueError("frontend source changed since the last build") + return manifest + except (OSError, ValueError, KeyError, TypeError, AttributeError) as error: + raise RuntimeError( + f"LoopX Chat bundle is missing, stale or invalid: {error}. {BUILD_HELP}" + ) from error diff --git a/loopx/web/chat/asset-retention.json b/loopx/web/chat/asset-retention.json deleted file mode 100644 index 43ca88ff52..0000000000 --- a/loopx/web/chat/asset-retention.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "schema_version": "loopx_chat_asset_retention_v1", - "generations": [ - [ - "assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2", - "assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2", - "assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2", - "assets/geist-latin-wght-normal-BgDaEnEv.woff2", - "assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2", - "assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2", - "assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2", - "assets/geist-mono-latin-wght-normal-XN7g48iV.woff2", - "assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2", - "assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2", - "assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2", - "assets/index-BGlmetKk.js", - "assets/index-C_Imc7ZG.css" - ], - [ - "assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2", - "assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2", - "assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2", - "assets/geist-latin-wght-normal-BgDaEnEv.woff2", - "assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2", - "assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2", - "assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2", - "assets/geist-mono-latin-wght-normal-XN7g48iV.woff2", - "assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2", - "assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2", - "assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2", - "assets/index-CFEaAATG.js", - "assets/index-C_Imc7ZG.css" - ] - ] -} diff --git a/loopx/web/chat/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 b/loopx/web/chat/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 deleted file mode 100644 index 4c462958aa6c743b29bfa5cd4d45d6931be218ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7420 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 diff --git a/loopx/web/chat/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 b/loopx/web/chat/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 deleted file mode 100644 index 4b7a2bec63a95ed108dd2e8e79337bb6a2bfaf77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15084 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 OXZNpuUsPKB2><{xq*XQm diff --git a/loopx/web/chat/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 b/loopx/web/chat/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 deleted file mode 100644 index ba90e209496d19069f05deeedac672fe02e1314e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16512 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

4xJl4d-DN79mrX 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 diff --git a/loopx/web/chat/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 b/loopx/web/chat/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 deleted file mode 100644 index 2fb7832f2fe964004e2bd9e0ecd24d659dce7775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12940 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 diff --git a/loopx/web/chat/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 b/loopx/web/chat/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 deleted file mode 100644 index 49730a410873e9f63454ccb8f99e94dda0592b08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7696 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 K^Z(lMz-|S()T4+1 diff --git a/loopx/web/chat/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 b/loopx/web/chat/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 deleted file mode 100644 index ee965898ba8ee6c341808f471b1f0da88e47ecd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8004 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 G@d*GQ_e_ld diff --git a/loopx/web/chat/assets/index-BGlmetKk.js b/loopx/web/chat/assets/index-BGlmetKk.js deleted file mode 100644 index 8e6d241b50..0000000000 --- a/loopx/web/chat/assets/index-BGlmetKk.js +++ /dev/null @@ -1,141 +0,0 @@ -var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(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},c=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));(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),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l=o((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&&ee(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&&ee(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}}}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 ee(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,ee(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}}}})),u=o(((e,t)=>{t.exports=l()})),d=o((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 ee(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function j(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 M(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,M(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ee(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),M(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=d()})),p=o((e=>{var t=f();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=p()})),h=o((e=>{var t=u(),n=f(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1ae||(e.current=ie[ae],ie[ae]=null,ae--)}function I(e,t){ae++,ie[ae]=e.current,e.current=t}var se=F(null),L=F(null),ce=F(null),le=F(null);function ue(e,t){switch(I(ce,t),I(L,e),I(se,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Wd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Wd(t),e=Gd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}oe(se),I(se,e)}function de(){oe(se),oe(L),oe(ce)}function fe(e){e.memoizedState!==null&&I(le,e);var t=se.current,n=Gd(t,e.type);t!==n&&(I(L,e),I(se,n))}function pe(e){L.current===e&&(oe(se),oe(L)),le.current===e&&(oe(le),tp._currentValue=re)}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,R=t.unstable_setDisableYieldValue,z=null,Pe=null;function Fe(e){if(typeof Ne==`function`&&R(e),Pe&&typeof Pe.setStrictMode==`function`)try{Pe.setStrictMode(z,e)}catch{}}var Ie=Math.clz32?Math.clz32:B,Le=Math.log,Re=Math.LN2;function B(e){return e>>>=0,e===0?32:31-(Le(e)/Re|0)|0}var ze=256,Be=262144,Ve=4194304;function He(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 Ue(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=He(n))):i=He(o):i=He(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=He(n))):i=He(o)):i=He(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 We(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Ge(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 Ke(){var e=Ve;return Ve<<=1,!(Ve&62914560)&&(Ve=4194304),e}function qe(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function V(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Je(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),sn=!1;if(on)try{var cn={};Object.defineProperty(cn,"passive",{get:function(){sn=!0}}),window.addEventListener(`test`,cn,cn),window.removeEventListener(`test`,cn,cn)}catch{sn=!1}var ln=null,un=null,dn=null;function fn(){if(dn)return dn;var e,t=un,n=t.length,r,i=`value`in ln?ln.value:ln.textContent,a=i.length;for(e=0;e=Wn),qn=` `,Jn=!1;function Yn(e,t){switch(e){case`keyup`:return Hn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function Xn(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var Zn=!1;function Qn(e,t){switch(e){case`compositionend`:return Xn(t);case`keypress`:return t.which===32?(Jn=!0,qn):null;case`textInput`:return e=t.data,e===qn&&Jn?null:e;default:return null}}function $n(e,t){if(Zn)return e===`compositionend`||!Un&&Yn(e,t)?(e=fn(),dn=un=ln=null,Zn=!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=xr(n)}}function Cr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Cr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function wr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Nt(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=Nt(e.document)}return t}function Tr(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 Er=on&&`documentMode`in document&&11>=document.documentMode,Dr=null,Or=null,kr=null,Ar=!1;function jr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ar||Dr==null||Dr!==Nt(r)||(r=Dr,`selectionStart`in r&&Tr(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}),kr&&br(kr,r)||(kr=r,r=Od(Or,`onSelect`),0>=o,i-=o,Ci=1<<32-Ie(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),Mi&&Ti(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),Mi&&Ti(a,g),u;if(h===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 Mi&&Ti(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),Mi&&Ti(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){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===O&&wa(l)===r.type){n(e,r.sibling),c=a(r,o.props),ja(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===y?(c=ui(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=li(o.type,o.key,o.props,null,e.mode,c),ja(c,o),c.return=e,e=c)}return s(e);case v: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}n(e,r);break}t(e,r),r=r.sibling}c=pi(o,e.mode,c),c.return=e,e=c}return s(e);case O:return o=wa(o),b(e,r,o,c)}if(ne(o))return h(e,r,o,c);if(j(o)){if(l=j(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Aa(o),c);if(o.$$typeof===C)return b(e,r,$i(e,o),c);Ma(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=di(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{ka=0;var i=b(e,t,n,r);return Oa=null,i}catch(t){if(t===ya||t===xa)throw t;var a=ai(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Pa=Na(!0),Fa=Na(!1),Ia=!1;function La(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ra(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 za(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ba(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Vl&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=ni(e),ti(e,null,n),t}return Qr(e,r,t,n),ni(e)}function Va(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,Xe(e,n)}}function Ha(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 Ua=!1;function Wa(){if(Ua){var e=ua;if(e!==null)throw e}}function Ga(e,t,n,r){Ua=!1;var i=e.updateQueue;Ia=!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 f=s.lane&-536870913,p=f!==s.lane;if(p?(Wl&f)===f:(r&f)===f){f!==0&&f===la&&(Ua=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(m=g.payload,typeof m==`function`){d=m.call(_,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=g.payload,f=typeof m==`function`?m.call(_,d,f):m,f==null)break a;d=h({},d,f);break a;case 2:Ia=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,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),Ql|=o,e.lanes=o,e.memoizedState=d}}function Ka(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function qa(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=N.T,s={};N.T=s,Ps(e,!1,t,n);try{var c=i(),l=N.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ns(e,t,pa(c,r),bu(e)):Ns(e,t,r,bu(e))}catch(n){Ns(e,t,{then:function(){},status:`rejected`,reason:n},bu())}finally{P.p=a,o!==null&&s.types!==null&&(o.types=s.types),N.T=o}}function Cs(){}function ws(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Ts(e).queue;Ss(e,a,t,re,n===null?Cs:function(){return Es(e),n(r)})}function Ts(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:re,baseState:re,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fo,lastRenderedState:re},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fo,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Es(e){var t=Ts(e);t.next===null&&(t=e.alternate.memoizedState),Ns(e,t.next.queue,{},bu())}function Ds(){return H(tp)}function Os(){return Ao().memoizedState}function ks(){return Ao().memoizedState}function As(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=bu();e=za(n);var r=Ba(t,e,n);r!==null&&(Su(r,t,n),Va(r,t,n)),t={cache:aa()},e.payload=t;return}t=t.return}}function js(e,t,n){var r=bu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Fs(e)?Is(t,n):(n=$r(e,t,n,r),n!==null&&(Su(n,e,r),Ls(n,t,r)))}function Ms(e,t,n){Ns(e,t,n,bu())}function Ns(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fs(e))Is(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,yr(s,o))return Qr(e,t,i,0),Hl===null&&Zr(),!1}catch{}if(n=$r(e,t,i,r),n!==null)return Su(n,e,r),Ls(n,t,r),!0}return!1}function Ps(e,t,n,r){if(r={lane:2,revertLane:md(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Fs(e)){if(t)throw Error(i(479))}else t=$r(e,n,r,2),t!==null&&Su(t,e,2)}function Fs(e){var t=e.alternate;return e===lo||t!==null&&t===lo}function Is(e,t){mo=po=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ls(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Xe(e,n)}}var Rs={readContext:H,use:No,useCallback:bo,useContext:bo,useEffect:bo,useImperativeHandle:bo,useLayoutEffect:bo,useInsertionEffect:bo,useMemo:bo,useReducer:bo,useRef:bo,useState:bo,useDebugValue:bo,useDeferredValue:bo,useTransition:bo,useSyncExternalStore:bo,useId:bo,useHostTransitionStatus:bo,useFormState:bo,useActionState:bo,useOptimistic:bo,useMemoCache:bo,useCacheRefresh:bo};Rs.useEffectEvent=bo;var zs={readContext:H,use:No,useCallback:function(e,t){return ko().memoizedState=[e,t===void 0?null:t],e},useContext:H,useEffect:ls,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),ss(4194308,4,hs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ss(4194308,4,e,t)},useInsertionEffect:function(e,t){ss(4,2,e,t)},useMemo:function(e,t){var n=ko();t=t===void 0?null:t;var r=e();if(ho){Fe(!0);try{e()}finally{Fe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=ko();if(n!==void 0){var i=n(t);if(ho){Fe(!0);try{n(t)}finally{Fe(!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=js.bind(null,lo,e),[r.memoizedState,e]},useRef:function(e){var t=ko();return e={current:e},t.memoizedState=e},useState:function(e){e=Go(e);var t=e.queue,n=Ms.bind(null,lo,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:_s,useDeferredValue:function(e,t){return bs(ko(),e,t)},useTransition:function(){var e=Go(!1);return e=Ss.bind(null,lo,e.queue,!0,!1),ko().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=lo,a=ko();if(Mi){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Hl===null)throw Error(i(349));Wl&127||Bo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,ls(Ho.bind(null,r,o,e),[e]),r.flags|=2048,as(9,{destroy:void 0},Vo.bind(null,r,o,n,t),null),n},useId:function(){var e=ko(),t=Hl.identifierPrefix;if(Mi){var n=wi,r=Ci;n=(r&~(1<<32-Ie(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=go++,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[rt]=t,o[it]=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(Ld(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&&Nc(t)}}return Rc(t),Pc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Nc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=ce.current,zi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Ai,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[rt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Pd(e.nodeValue,n)),e||Ii(t,!0)}else e=Ud(e).createTextNode(r),e[rt]=t,t.stateNode=e}return Rc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=zi(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[rt]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),e=!1}else n=Vi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(ao(t),t):(ao(t),null);if(t.flags&128)throw Error(i(558))}return Rc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=zi(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[rt]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),a=!1}else a=Vi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(ao(t),t):(ao(t),null)}return ao(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),Ic(t,t.updateQueue),Rc(t),null);case 4:return de(),e===null&&wd(t.stateNode.containerInfo),Rc(t),null;case 10:return qi(t.type),Rc(t),null;case 19:if(oe(oo),r=t.memoizedState,r===null)return Rc(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null){if(a)Lc(r,!1);else{if(Zl!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=so(e),o!==null){for(t.flags|=128,Lc(r,!1),e=o.updateQueue,t.updateQueue=e,Ic(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)ci(n,e),n=n.sibling;return I(oo,oo.current&1|2),Mi&&Ti(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ee()>cu&&(t.flags|=128,a=!0,Lc(r,!1),t.lanes=4194304)}}else{if(!a){if(e=so(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Ic(t,e),Lc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!Mi)return Rc(t),null}else 2*Ee()-r.renderingStartTime>cu&&n!==536870912&&(t.flags|=128,a=!0,Lc(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?(Rc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ee(),e.sibling=null,n=oo.current,I(oo,a?n&1|2:n&1),Mi&&Ti(t,r.treeForkCount),e);case 22:case 23:return ao(t),Qa(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Rc(t),t.subtreeFlags&6&&(t.flags|=8192)):Rc(t),n=t.updateQueue,n!==null&&Ic(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&&oe(ha),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),qi(ia),Rc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Oi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return qi(ia),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(ao(t),t.alternate===null)throw Error(i(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(ao(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return oe(oo),null;case 4:return de(),null;case 10:return qi(t.type),null;case 22:case 23:return ao(t),Qa(),e!==null&&oe(ha),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return qi(ia),null;case 25:return null;default:return null}}function Vc(e,t){switch(Oi(t),t.tag){case 3:qi(ia),de();break;case 26:case 27:case 5:pe(t);break;case 4:de();break;case 31:t.memoizedState!==null&&ao(t);break;case 13:ao(t);break;case 19:oe(oo);break;case 10:qi(t.type);break;case 22:case 23:ao(t),Qa(),e!==null&&oe(ha);break;case 24:qi(ia)}}function Hc(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){Zu(t,t.return,e)}}function Uc(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){Zu(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Zu(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{qa(t,n)}catch(t){Zu(e,e.return,t)}}}function Gc(e,t,n){n.props=Ks(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Zu(e,t,n)}}function Kc(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){Zu(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Zu(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){Zu(e,t,n)}else n.current=null}}function Jc(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){Zu(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Rd(r,e.type,n,t),r[it]=t}catch(t){Zu(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&ef(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(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&&ef(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 Qc(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=Xt));else if(r!==4&&(r===27&&ef(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(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&&ef(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Ld(t,r,n),t[rt]=e,t[it]=n}catch(t){Zu(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Vd=up,e=wr(e),Tr(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(Hd={focusedElem:e,selectionRange:n},up=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,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`))),Ld(o,r,n),o[rt]=e,gt(o),r=o;break a;case`link`:var s=Wf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=Sr(s,h),v=Sr(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,N.T=null,n=gu,gu=null;var o=fu,s=mu;if(du=0,pu=fu=null,mu=0,Vl&6)throw Error(i(331));var c=Vl;if(Vl|=4,Il(o.current),Ol(o,o.current,s,n),Vl=c,q(0,!1),Pe&&typeof Pe.onPostCommitFiberRoot==`function`)try{Pe.onPostCommitFiberRoot(z,o)}catch{}return!0}finally{P.p=a,N.T=r,qu(e,t)}}function Xu(e,t,n){t=hi(n,t),t=Qs(e.stateNode,t,2),e=Ba(e,t,2),e!==null&&(V(e,2),cd(e))}function Zu(e,t,n){if(e.tag===3)Xu(e,e,n);else for(;t!==null;){if(t.tag===3){Xu(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(uu===null||!uu.has(r))){e=hi(n,e),n=$s(2),r=Ba(t,n,2),r!==null&&(ec(n,r,t,e),V(r,2),cd(r));break}}t=t.return}}function Qu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Bl;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)||(Yl=!0,i.add(n),e=G.bind(null,e,t,n),t.then(e,e))}function G(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Hl===e&&(Wl&n)===n&&(Zl===4||Zl===3&&(Wl&62914560)===Wl&&300>Ee()-ou?!(Vl&2)&&ku(e,0):eu|=n,nu===Wl&&(nu=0)),cd(e)}function $u(e,t){t===0&&(t=Ke()),e=ei(e,t),e!==null&&(V(e,t),cd(e))}function ed(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),$u(e,n)}function td(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),$u(e,n)}function K(e,t){return Se(e,t)}var nd=null,rd=null,id=!1,ad=!1,od=!1,sd=0;function cd(e){e!==rd&&e.next===null&&(rd===null?nd=rd=e:rd=rd.next=e),ad=!0,id||(id=!0,pd())}function q(e,t){if(!od&&ad){od=!0;do for(var n=!1,r=nd;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-Ie(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,fd(r,a))}else a=Wl,a=Ue(r,r===Hl?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||We(r,a)||(n=!0,fd(r,a))}r=r.next}while(n);od=!1}}function ld(){J()}function J(){ad=id=!1;var e=0;sd!==0&&Jd()&&(e=sd);for(var t=Ee(),n=null,r=nd;r!==null;){var i=r.next,a=ud(r,t);a===0?(r.next=null,n===null?nd=i:n.next=i,i===null&&(rd=n)):(n=r,(e!==0||a&3)&&(ad=!0)),r=i}du!==0&&du!==5||q(e,!1),sd!==0&&(sd=0)}function ud(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&&zd(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function wf(e,t,n){var r=Cf;if(r&&typeof t==`string`&&t){var i=Ft(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),vf.has(i)||(vf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Ld(t,`link`,e),gt(t),r.head.appendChild(t)))}}function Tf(e){bf.D(e),wf(`dns-prefetch`,e,null)}function Ef(e,t){bf.C(e,t),wf(`preconnect`,e,t)}function Df(e,t,n){bf.L(e,t,n);var r=Cf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Ft(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Ft(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Ft(n.imageSizes)+`"]`)):i+=`[href="`+Ft(e)+`"]`;var a=i;switch(t){case`style`:a=Nf(e);break;case`script`:a=Lf(e)}_f.has(a)||(e=h({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),_f.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Pf(a))||t===`script`&&r.querySelector(Rf(a))||(t=r.createElement(`link`),Ld(t,`link`,e),gt(t),r.head.appendChild(t)))}}function Of(e,t){bf.m(e,t);var n=Cf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Ft(r)+`"][href="`+Ft(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Lf(e)}if(!_f.has(a)&&(e=h({rel:`modulepreload`,href:e},t),_f.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Rf(a)))return}r=n.createElement(`link`),Ld(r,`link`,e),gt(r),n.head.appendChild(r)}}}function kf(e,t,n){bf.S(e,t,n);var r=Cf;if(r&&e){var i=ht(r).hoistableStyles,a=Nf(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Pf(a)))s.loading=5;else{e=h({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=_f.get(a))&&Vf(e,n);var c=o=r.createElement(`link`);gt(c),Ld(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,Bf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Af(e,t){bf.X(e,t);var n=Cf;if(n&&e){var r=ht(n).hoistableScripts,i=Lf(e),a=r.get(i);a||(a=n.querySelector(Rf(i)),a||(e=h({src:e,async:!0},t),(t=_f.get(i))&&Hf(e,t),a=n.createElement(`script`),gt(a),Ld(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function jf(e,t){bf.M(e,t);var n=Cf;if(n&&e){var r=ht(n).hoistableScripts,i=Lf(e),a=r.get(i);a||(a=n.querySelector(Rf(i)),a||(e=h({src:e,async:!0,type:`module`},t),(t=_f.get(i))&&Hf(e,t),a=n.createElement(`script`),gt(a),Ld(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mf(e,t,n,r){var a=(a=ce.current)?yf(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=Nf(n.href),n=ht(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=Nf(n.href);var o=ht(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(Pf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),_f.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},_f.set(e,n),o||If(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=Lf(n),n=ht(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 Nf(e){return`href="`+Ft(e)+`"`}function Pf(e){return`link[rel="stylesheet"][`+e+`]`}function Ff(e){return h({},e,{"data-precedence":e.precedence,precedence:null})}function If(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}),Ld(t,`link`,n),gt(t),e.head.appendChild(t))}function Lf(e){return`[src="`+Ft(e)+`"]`}function Rf(e){return`script[async]`+e}function zf(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Ft(n.href)+`"]`);if(r)return t.instance=r,gt(r),r;var a=h({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),gt(r),Ld(r,`style`,a),Bf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Nf(n.href);var o=e.querySelector(Pf(a));if(o)return t.state.loading|=4,t.instance=o,gt(o),o;r=Ff(n),(a=_f.get(a))&&Vf(r,a),o=(e.ownerDocument||e).createElement(`link`),gt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Ld(o,`link`,r),t.state.loading|=4,Bf(o,n.precedence,e),t.instance=o;case`script`:return o=Lf(n.src),(a=e.querySelector(Rf(o)))?(t.instance=a,gt(a),a):(r=n,(a=_f.get(o))&&(r=h({},n),Hf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),gt(a),Ld(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,Bf(r,n.precedence,e));return t.instance}function Bf(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 Kf(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 qf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Jf(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=Nf(r.href),a=t.querySelector(Pf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Zf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,gt(a);return}a=t.ownerDocument||t,r=Ff(r),(i=_f.get(i))&&Vf(r,i),a=a.createElement(`link`),gt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Ld(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=Zf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Yf=0;function Xf(e,t){return e.stylesheets&&e.count===0&&$f(e,e.stylesheets),0Yf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Zf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)$f(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Qf=null;function $f(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Qf=new Map,t.forEach(ep,e),Qf=null,Zf.call(e))}function ep(e,t){if(!(t.state.loading&4)){var n=Qf.get(e);if(n)var r=n.get(null);else{n=new Map,Qf.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=h()})),_=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},v=new class extends _{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},y={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},b=new class{#e=y;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function x(e){setTimeout(e,0)}var S=typeof window>`u`||`Deno`in globalThis;function C(){}function w(e,t){return typeof e==`function`?e(t):e}function T(e){return typeof e==`number`&&e>=0&&e!==1/0}function E(e,t){return Math.max(e+(t||0)-Date.now(),0)}function D(e,t){return typeof e==`function`?e(t):e}function O(e,t){return typeof e==`function`?e(t):e}function k(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==ee(o,t.options))return!1}else if(!M(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function A(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(j(t.options.mutationKey)!==j(a))return!1}else if(!M(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function ee(e,t){return(t?.queryKeyHashFn||j)(e)}function j(e){return JSON.stringify(e,(e,t)=>P(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function M(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>M(e[n],t[n])):!1}var te=Object.prototype.hasOwnProperty;function ne(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=N(e)&&N(t);if(!r&&!(P(e)&&P(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{b.setTimeout(t,e)})}function ae(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:ne(e,t)}function F(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function oe(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var I=Symbol();function se(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===I?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function L(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var ce=(()=>{let e=()=>S;return{isServer(){return e()},setIsServer(t){e=t}}})();function le(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var ue=x;function de(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=ue,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var fe=de(),pe=new class extends _{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function me(e){return Math.min(1e3*2**e,3e4)}function he(e){return(e??`online`)!==`online`||pe.isOnline()}var ge=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function _e(e){let t=!1,n=0,r,i=le(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new ge(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>v.isFocused()&&(e.networkMode===`always`||pe.isOnline())&&e.canRun(),u=()=>he(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(ce.isServer()?0:3),o=e.retryDelay??me,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var ve=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),T(this.gcTime)&&(this.#e=b.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(ce.isServer()?1/0:3e5))}clearGcTimeout(){this.#e!==void 0&&(b.clearTimeout(this.#e),this.#e=void 0)}};function ye(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{L(e,()=>t.signal,()=>n=!0)},u=se(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?oe:F;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?xe:be,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:be(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):l}}}function be(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function xe(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Se=class extends ve{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=Te(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Te(this.options);e.data!==void 0&&(this.setState(we(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=ae(this.state.data,e,this.options);return this.#l({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#l({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(C).catch(C):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>O(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===I||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>D(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!E(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#s||this.#c()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#c(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#l({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)})},i=()=>{let e=se(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?ye(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#l({type:`fetch`,meta:a.fetchOptions?.meta}),this.#a=_e({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof ge&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#l({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#l({type:`pause`})},onContinue:()=>{this.#l({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#a.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof ge){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#l({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#l(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...Ce(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...we(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),fe.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function Ce(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:he(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function we(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Te(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Ee=class extends ve{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||De(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=_e({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){let t=t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}};this.state=t(this.state),fe.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function De(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Oe=class extends _{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new Ee({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t);if(n){if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}return!0}runNext(e){let t=ke(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){fe.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>A(t,e))}findAll(e={}){return this.getAll().filter(t=>A(e,t))}notify(e){fe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return fe.batch(()=>Promise.all(e.map(e=>e.continue().catch(C))))}};function ke(e){return e.options.scope?.id}var Ae=class extends _{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??ee(r,t),a=this.get(i);return a||(a=new Se({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){fe.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>k(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>k(e,t)):t}notify(e){fe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){fe.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){fe.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},je=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Ae,this.#t=e.mutationCache||new Oe,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=v.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=pe.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(D(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=w(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return fe.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;fe.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return fe.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=fe.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(C).catch(C)}invalidateQueries(e,t={}){return fe.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=fe.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(C)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(C)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(D(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(C).catch(C)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(C).catch(C)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return pe.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(j(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{M(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(j(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{M(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=ee(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===I&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Me=o((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})),Ne=o(((e,t)=>{t.exports=Me()})),R=c(f(),1),z=Ne(),Pe=R.createContext(void 0),Fe=({client:e,children:t})=>(R.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,z.jsx)(Pe.Provider,{value:e,children:t})),Ie=typeof window<`u`?R.useLayoutEffect:R.useEffect;function Le(e){let t=R.useRef({value:e,prev:null}),n=t.current.value;return e!==n&&(t.current={value:e,prev:n}),t.current.prev}function Re(e,t,n={},r={}){R.useEffect(()=>{if(!e.current||r.disabled||typeof IntersectionObserver!=`function`)return;let i=new IntersectionObserver(([e])=>{t(e)},n);return i.observe(e.current),()=>{i.disconnect()}},[t,n,r.disabled,e])}function B(e){let t=R.useRef(null);return R.useImperativeHandle(e,()=>t.current,[]),t}function ze(e){return e[e.length-1]}function Be(e){return typeof e==`function`}function Ve(e,t){return Be(e)?e(t):e}var He=Object.prototype.hasOwnProperty,Ue=Object.prototype.propertyIsEnumerable;function We(e){for(let t in e)if(He.call(e,t))return!0;return!1}var Ge=()=>Object.create(null),Ke=(e,t)=>qe(e,t,Ge);function qe(e,t,n=()=>({}),r=0){if(e===t)return e;if(r>500)return t;let i=t,a=Xe(e)&&Xe(i);if(!a&&!(Je(e)&&Je(i)))return i;let o=a?e:V(e);if(!o)return i;let s=a?i:V(i);if(!s)return i;let c=o.length,l=s.length,u=a?Array(l):n(),d=0;for(let t=0;ti||!Ze(e[o],t[o],n)))return!1;return i===a}return!1}function Qe(e){let t,n,r=new Promise((e,r)=>{t=e,n=r});return r.status=`pending`,r.resolve=n=>{r.status=`resolved`,r.value=n,t(n),e?.(n)},r.reject=e=>{r.status=`rejected`,n(e)},r}function $e(e){return!!(e&&typeof e==`object`&&typeof e.then==`function`)}function et(e){return e.replace(/[\x00-\x1f\x7f]/g,``)}function tt(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return et(t)}var nt=[`http:`,`https:`,`mailto:`,`tel:`];function rt(e,t){if(!e)return!1;try{let n=new URL(e);return!t.has(n.protocol)}catch{return!1}}function it(e){if(!e||!/[%\\\x00-\x1f\x7f]/.test(e)&&!e.startsWith(`//`))return{path:e,handledProtocolRelativeURL:!1};let t=/%25|%5C/gi,n=0,r=``,i;for(;(i=t.exec(e))!==null;)r+=tt(e.slice(n,i.index))+i[0],n=t.lastIndex;r+=tt(n?e.slice(n):e);let a=!1;return r.startsWith(`//`)&&(a=!0,r=`/`+r.replace(/^\/+/,``)),{path:r,handledProtocolRelativeURL:a}}function at(e){return/\s|[^\u0000-\u007F]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function ot(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n{e.next&&(e.prev?(e.prev.next=e.next,e.next.prev=e.prev,e.next=void 0,r&&(r.next=e,e.prev=r)):(e.next.prev=void 0,n=e.next,e.next=void 0,r&&(e.prev=r,r.next=e)),r=e)};return{get(e){let n=t.get(e);if(n)return i(n),n.value},set(a,o){if(t.size>=e&&n){let e=n;t.delete(e.key),e.next&&(n=e.next,e.next.prev=void 0),e===r&&(r=void 0)}let s=t.get(a);if(s)s.value=o,i(s);else{let e={key:a,value:o,prev:r};r&&(r.next=e),r=e,n||=e,t.set(a,e)}},clear(){t.clear(),n=void 0,r=void 0}}}var lt=4,ut=5;function dt(e){let t=e.indexOf(`{`);if(t===-1)return null;let n=e.indexOf(`}`,t);return n===-1||t+1>=e.length?null:[t,n]}function ft(e,t,n=new Uint16Array(6)){let r=e.indexOf(`/`,t),i=r===-1?e.length:r,a=e.substring(t,i);if(!a||!a.includes(`$`))return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n;if(a===`$`){let r=e.length;return n[0]=2,n[1]=t,n[2]=t,n[3]=r,n[4]=r,n[5]=r,n}if(a.charCodeAt(0)===36)return n[0]=1,n[1]=t,n[2]=t+1,n[3]=i,n[4]=i,n[5]=i,n;let o=dt(a);if(o){let[r,s]=o,c=a.charCodeAt(r+1);if(c===45){if(r+2!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=_t(1,n.fullPath??n.from,f,p,m);o=e,e.depth=a,e.parent=i,i.dynamic??=[],i.dynamic.push(e)}break}case 3:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.optional?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=_t(3,n.fullPath??n.from,f,p,m);o=e,e.parent=i,e.depth=a,i.optional??=[],i.optional.push(e)}break}case 2:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),l=c&&!!(t||s),f=t?l?t:t.toLowerCase():void 0,p=s?l?s:s.toLowerCase():void 0,m=_t(2,n.fullPath??n.from,l,f,p);o=m,m.parent=i,m.depth=a,i.wildcard??=[],i.wildcard.push(m)}}i=o}if(l&&n.children&&!n.isRoot&&n.id&&n.id.charCodeAt(n.id.lastIndexOf(`/`)+1)===95){let e=gt(n.fullPath??n.from);e.kind=ut,e.parent=i,a++,e.depth=a,i.pathless??=[],i.pathless.push(e),i=e}let u=(n.path||!n.children)&&!n.isRoot;if(u&&r.endsWith(`/`)){let e=gt(n.fullPath??n.from);e.kind=lt,e.parent=i,a++,e.depth=a,i.index=e,i=e}i.parse=l??null,i.priority=n.options?.params?.priority??0,u&&!i.route&&(i.route=n,i.fullPath=n.fullPath??n.from)}if(n.children)for(let r of n.children)pt(e,t,r,s,i,a,o)}function mt(e,t){if(e.parse&&!t.parse)return-1;if(!e.parse&&t.parse)return 1;if(e.parse&&t.parse&&(e.priority||t.priority))return t.priority-e.priority;if(e.prefix&&t.prefix&&e.prefix!==t.prefix){if(e.prefix.startsWith(t.prefix))return-1;if(t.prefix.startsWith(e.prefix))return 1}if(e.suffix&&t.suffix&&e.suffix!==t.suffix){if(e.suffix.endsWith(t.suffix))return-1;if(t.suffix.endsWith(e.suffix))return 1}return e.prefix&&!t.prefix?-1:!e.prefix&&t.prefix?1:e.suffix&&!t.suffix?-1:!e.suffix&&t.suffix?1:e.caseSensitive&&!t.caseSensitive?-1:!e.caseSensitive&&t.caseSensitive?1:0}function ht(e){if(e.pathless)for(let t of e.pathless)ht(t);if(e.static)for(let t of e.static.values())ht(t);if(e.staticInsensitive)for(let t of e.staticInsensitive.values())ht(t);if(e.dynamic?.length){e.dynamic.sort(mt);for(let t of e.dynamic)ht(t)}if(e.optional?.length){e.optional.sort(mt);for(let t of e.optional)ht(t)}if(e.wildcard?.length){e.wildcard.sort(mt);for(let t of e.wildcard)ht(t)}}function gt(e){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:e,parent:null,parse:null,priority:0}}function _t(e,t,n,r,i){return{kind:e,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:t,parent:null,parse:null,priority:0,caseSensitive:n,prefix:r,suffix:i}}function vt(e,t){let n=gt(`/`),r=new Uint16Array(6);for(let t of e)pt(!1,r,t,1,n,0);ht(n),t.masksTree=n,t.flatCache=ct(1e3)}function yt(e,t){e||=`/`;let n=t.flatCache.get(e);if(n)return n;let r=wt(e,t.masksTree);return t.flatCache.set(e,r),r}function bt(e,t,n,r,i){e||=`/`,r||=`/`;let a=t?`case\0${e}`:e,o=i.singleCache.get(a);return o||(o=gt(`/`),pt(t,new Uint16Array(6),{from:e},1,o,0),i.singleCache.set(a,o)),wt(r,o,n)}function xt(e,t,n=!1){let r=n?e:`nofuzz\0${e}`,i=t.matchCache.get(r);if(i!==void 0)return i;e||=`/`;let a;try{a=wt(e,t.segmentTree,n)}catch(e){if(e instanceof URIError)a=null;else throw e}return a&&(a.branch=Et(a.route)),t.matchCache.set(r,a),a}function St(e){return e===`/`?e:e.replace(/\/{1,}$/,``)}function Ct(e,t=!1,n){let r=gt(e.fullPath),i=new Uint16Array(6),a={},o={},s=0;return pt(t,i,e,1,r,0,e=>{if(n?.(e,s),e.id in a&&st(),a[e.id]=e,s!==0&&e.path){let t=St(e.fullPath);(!o[t]||e.fullPath.endsWith(`/`))&&(o[t]=e)}s++}),ht(r),{processedTree:{segmentTree:r,singleCache:ct(1e3),matchCache:ct(1e3),flatCache:null,masksTree:null},routesById:a,routesByPath:o}}function wt(e,t,n=!1){let r=e.split(`/`),i=Ot(e,r,t,n);if(!i)return null;let[a]=Tt(e,r,i);return{route:i.node.route,rawParams:a}}function Tt(e,t,n){let r=Dt(n.node),i=null,a=Object.create(null),o=n.extract?.part??0,s=n.extract?.node??0,c=n.extract?.path??0,l=n.extract?.segment??0;for(;s=0;e--){let n=i.wildcard[e],{prefix:r,suffix:a}=n;if(!(r&&(v||!(n.caseSensitive?y:b??=y.toLowerCase()).startsWith(r)))){if(a){if(v)continue;let e=t.slice(u).join(`/`).slice(-a.length);if((n.caseSensitive?e:e.toLowerCase())!==a)continue}s.push({node:n,index:o,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}if(i.optional){let e=d|1<=0;n--){let r=i.optional[n];s.push({node:r,index:u,skipped:e,depth:t,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v)for(let e=i.optional.length-1;e>=0;e--){let n=i.optional[e],{prefix:r,suffix:a}=n;if(r||a){let e=n.caseSensitive?y:b??=y.toLowerCase();if(r&&!e.startsWith(r)||a&&!e.endsWith(a))continue}s.push({node:n,index:u+1,skipped:d,depth:t,statics:p,dynamics:m,optionals:h+kt(o,u),extract:g,rawParams:_})}}if(!v&&i.dynamic&&y)for(let e=i.dynamic.length-1;e>=0;e--){let t=i.dynamic[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?y:b??=y.toLowerCase();if(n&&!e.startsWith(n)||r&&!e.endsWith(r))continue}s.push({node:t,index:u+1,skipped:d,depth:f+1,statics:p,dynamics:m+kt(o,u),optionals:h,extract:g,rawParams:_})}if(!v&&i.staticInsensitive){let e=i.staticInsensitive.get(b??=y.toLowerCase());e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+kt(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v&&i.static){let e=i.static.get(y);e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+kt(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(i.pathless){let e=f+1;for(let t=i.pathless.length-1;t>=0;t--){let n=i.pathless[t];s.push({node:n,index:u,skipped:d,depth:e,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}}if(l)return l;if(r&&c){let n=c.index;for(let e=0;ee.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===lt)>(e.node.kind===lt)||t.node.kind===lt==(e.node.kind===lt)&&t.depth>e.depth)))}function Nt(e){return Pt(e.filter(e=>e!==void 0).join(`/`))}function Pt(e){return e.replace(/\/{2,}/g,`/`)}function Ft(e){return e===`/`?e:e.replace(/^\/{1,}/,``)}function It(e){let t=e.length;return t>1&&e[t-1]===`/`?e.replace(/\/{1,}$/,``):e}function Lt(e){return It(Ft(e))}function Rt(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function zt(e,t,n){return Rt(e,n)===Rt(t,n)}function Bt({base:e,to:t,trailingSlash:n=`never`,cache:r}){let i=t.startsWith(`/`),a=!i&&t===`.`,o;if(r){o=i?t:a?e:e+`\0`+t;let n=r.get(o);if(n)return n}let s;if(a)s=e.split(`/`);else if(i)s=t.split(`/`);else{for(s=e.split(`/`);s.length>1&&ze(s)===``;)s.pop();let n=t.split(`/`);for(let e=0,t=n.length;e1&&(ze(s)===``?n===`never`&&s.pop():n===`always`&&s.push(``));let c=Pt(s.join(`/`))||`/`;return o&&r&&r.set(o,c),c}function Vt(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=Array.from(t.keys()).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),r=new RegExp(n,`g`);return e=>e.replace(r,e=>t.get(e)??e)}function Ht(e,t,n){let r=t[e];return typeof r==`string`?e===`_splat`?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split(`/`).map(e=>Wt(e,n)).join(`/`):Wt(r,n):r}function Ut({path:e,params:t,decoder:n,...r}){let i=!1,a=Object.create(null);if(!e||e===`/`)return{interpolatedPath:`/`,usedParams:a,isMissingParams:i};if(!e.includes(`$`))return{interpolatedPath:e,usedParams:a,isMissingParams:i};let o=e.length,s=0,c,l=``;for(;s{t[0]===`?`&&(t=t.substring(1));let n=Jt(t);for(let t in n){let r=n[t];if(typeof r==`string`)try{n[t]=e(r)}catch{}}return n}}function Qt(e,t){let n=typeof t==`function`;function r(r){if(typeof r==`object`&&r)try{return e(r)}catch{}else if(n&&typeof r==`string`)try{return t(r),e(r)}catch{}return r}return e=>{let t=Kt(e,r);return t?`?${t}`:``}}var $t=`__root__`;function en(e){if(e.statusCode=e.statusCode||e.code||307,!e._builtLocation&&!e.reloadDocument&&typeof e.href==`string`)try{new URL(e.href),e.reloadDocument=!0}catch{}let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function tn(e){return e instanceof Response&&!!e.options}var nn=e=>{if(!e.rendered)return e.rendered=!0,e.onReady?.()},rn=e=>e.stores.matchesId.get().some(t=>e.stores.matchStores.get(t)?.get()._forcePending),an=(e,t)=>!!(e.preload&&!e.router.stores.matchStores.has(t)),on=(e,t,n=!0)=>{let r={...e.router.options.context??{}},i=n?t:t-1;for(let t=0;t<=i;t++){let n=e.matches[t];if(!n)continue;let i=e.router.getMatch(n.id);i&&Object.assign(r,i.__routeContext,i.__beforeLoadContext)}return r},sn=(e,t)=>{if(!e.matches.length)return;let n=t.routeId,r=e.matches.findIndex(t=>t.routeId===e.router.routeTree.id),i=r>=0?r:0,a=n?e.matches.findIndex(e=>e.routeId===n):e.firstBadMatchIndex??e.matches.length-1;a<0&&(a=i);for(let t=a;t>=0;t--){let n=e.matches[t];if(e.router.looseRoutesById[n.routeId].options.notFoundComponent)return t}return n?a:i},cn=(e,t,n)=>{if(!(!tn(n)&&!Gt(n)))throw tn(n)&&n.redirectHandled&&!n.options.reloadDocument?n:(t&&(t._nonReactive.beforeLoadPromise?.resolve(),t._nonReactive.loaderPromise?.resolve(),t._nonReactive.beforeLoadPromise=void 0,t._nonReactive.loaderPromise=void 0,t._nonReactive.error=n,e.updateMatch(t.id,r=>({...r,status:tn(n)?`redirected`:Gt(n)?`notFound`:r.status===`pending`?`success`:r.status,context:on(e,t.index),isFetching:!1,error:n})),Gt(n)&&!n.routeId&&(n.routeId=t.routeId),t._nonReactive.loadPromise?.resolve()),tn(n)&&(e.rendered=!0,n.options._fromLocation=e.location,n.redirectHandled=!0,n=e.router.resolveRedirect(n)),n)},ln=(e,t)=>{let n=e.router.getMatch(t);return!!(!n||n._nonReactive.dehydrated)},un=(e,t,n)=>{let r=on(e,n);e.updateMatch(t,e=>({...e,context:r}))},dn=(e,t,n)=>{let{id:r,routeId:i}=e.matches[t],a=e.router.looseRoutesById[i];if(n instanceof Promise)throw n;e.firstBadMatchIndex??=t,cn(e,e.router.getMatch(r),n);try{a.options.onError?.(n)}catch(t){n=t,cn(e,e.router.getMatch(r),n)}e.updateMatch(r,e=>(e._nonReactive.beforeLoadPromise?.resolve(),e._nonReactive.beforeLoadPromise=void 0,e._nonReactive.loadPromise?.resolve(),{...e,error:n,status:`error`,isFetching:!1,updatedAt:Date.now(),abortController:new AbortController})),!e.preload&&!tn(n)&&!Gt(n)&&(e.serialError??=n)},fn=(e,t,n,r)=>{if(r._nonReactive.pendingTimeout!==void 0)return;let i=n.options.pendingMs??e.router.options.defaultPendingMs;if(e.onReady&&!an(e,t)&&(n.options.loader||n.options.beforeLoad||Cn(n))&&typeof i==`number`&&i!==1/0&&(n.options.pendingComponent??e.router.options?.defaultPendingComponent)){let t=setTimeout(()=>{nn(e)},i);r._nonReactive.pendingTimeout=t}},pn=(e,t,n)=>{let r=e.router.getMatch(t);if(!r._nonReactive.beforeLoadPromise&&!r._nonReactive.loaderPromise)return;fn(e,t,n,r);let i=()=>{let n=e.router.getMatch(t);n.preload&&(n.status===`redirected`||n.status===`notFound`)&&cn(e,n,n.error)};return r._nonReactive.beforeLoadPromise?r._nonReactive.beforeLoadPromise.then(i):i()},mn=(e,t,n,r)=>{let i=e.router.getMatch(t),a=i._nonReactive.loadPromise;i._nonReactive.loadPromise=Qe(()=>{a?.resolve(),a=void 0});let{paramsError:o,searchError:s}=i;o&&dn(e,n,o),s&&dn(e,n,s),fn(e,t,r,i);let c=new AbortController,l=!1,u=()=>{l||(l=!0,e.updateMatch(t,e=>({...e,isFetching:`beforeLoad`,fetchCount:e.fetchCount+1,abortController:c})))},d=()=>{i._nonReactive.beforeLoadPromise?.resolve(),i._nonReactive.beforeLoadPromise=void 0,e.updateMatch(t,e=>({...e,isFetching:!1}))};if(!r.options.beforeLoad){e.router.batch(()=>{u(),d()});return}i._nonReactive.beforeLoadPromise=Qe();let f={...on(e,n,!1),...i.__routeContext},{search:p,params:m,cause:h}=i,g=an(e,t),_={search:p,abortController:c,params:m,preload:g,context:f,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),buildLocation:e.router.buildLocation,cause:g?`preload`:h,matches:e.matches,routeId:r.id,...e.router.options.additionalContext},v=r=>{if(r===void 0){e.router.batch(()=>{u(),d()});return}(tn(r)||Gt(r))&&(u(),dn(e,n,r)),e.router.batch(()=>{u(),e.updateMatch(t,e=>({...e,__beforeLoadContext:r})),d()})},y;try{if(y=r.options.beforeLoad(_),$e(y))return u(),y.catch(t=>{dn(e,n,t)}).then(v)}catch(t){u(),dn(e,n,t)}v(y)},hn=(e,t)=>{let{id:n,routeId:r}=e.matches[t],i=e.router.looseRoutesById[r],a=()=>s(),o=()=>mn(e,n,t,i),s=()=>{if(ln(e,n))return;let t=pn(e,n,i);return $e(t)?t.then(o):o()};return a()},gn=(e,t,n)=>{let r=e.router.getMatch(t);if(!r||!n.options.head&&!n.options.scripts&&!n.options.headers)return;let i={ssr:e.router.options.ssr,matches:e.matches,match:r,params:r.params,loaderData:r.loaderData};return Promise.all([n.options.head?.(i),n.options.scripts?.(i),n.options.headers?.(i)]).then(([e,t,n])=>({meta:e?.meta,links:e?.links,headScripts:e?.scripts,headers:n,scripts:t,styles:e?.styles}))},_n=(e,t,n,r,i)=>{let a=t[r-1],{params:o,loaderDeps:s,abortController:c,cause:l}=e.router.getMatch(n),u=on(e,r),d=an(e,n);return{params:o,deps:s,preload:!!d,parentMatchPromise:a,abortController:c,context:u,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),cause:d?`preload`:l,route:i,...e.router.options.additionalContext}},vn=async(e,t,n,r,i)=>{try{let a=e.router.getMatch(n);try{Sn(i);let o=i.options.loader,s=typeof o==`function`?o:o?.handler,c=s?.(_n(e,t,n,r,i)),l=!!s&&$e(c);if((l||i._lazyPromise||i._componentsPromise||i.options.head||i.options.scripts||i.options.headers||a._nonReactive.minPendingPromise)&&e.updateMatch(n,e=>({...e,isFetching:`loader`})),s){let t=l?await c:c;cn(e,e.router.getMatch(n),t),t!==void 0&&e.updateMatch(n,e=>({...e,loaderData:t}))}i._lazyPromise&&await i._lazyPromise;let u=a._nonReactive.minPendingPromise;u&&await u,i._componentsPromise&&await i._componentsPromise,e.updateMatch(n,t=>({...t,error:void 0,context:on(e,r),status:`success`,isFetching:!1,updatedAt:Date.now()}))}catch(t){let o=t;if(o?.name===`AbortError`){if(a.abortController.signal.aborted){a._nonReactive.loaderPromise?.resolve(),a._nonReactive.loaderPromise=void 0;return}e.updateMatch(n,t=>({...t,status:t.status===`pending`?`success`:t.status,isFetching:!1,context:on(e,r)}));return}let s=a._nonReactive.minPendingPromise;s&&await s,Gt(t)&&await i.options.notFoundComponent?.preload?.(),cn(e,e.router.getMatch(n),t);try{i.options.onError?.(t)}catch(t){o=t,cn(e,e.router.getMatch(n),t)}!tn(o)&&!Gt(o)&&await Sn(i,[`errorComponent`]),e.updateMatch(n,t=>({...t,error:o,context:on(e,r),status:`error`,isFetching:!1}))}}catch(t){let r=e.router.getMatch(n);r&&(r._nonReactive.loaderPromise=void 0),cn(e,r,t)}},yn=async(e,t,n)=>{async function r(r,a,c,l,d){let f=Date.now()-a.updatedAt,p=r?d.options.preloadStaleTime??e.router.options.defaultPreloadStaleTime??3e4:d.options.staleTime??e.router.options.defaultStaleTime??0,m=d.options.shouldReload,h=typeof m==`function`?m(_n(e,t,i,n,d)):m,{status:g,invalid:_}=l,v=f>=p&&(!!e.forceStaleReload||l.cause===`enter`||c!==void 0&&c!==l.id);o=g===`success`&&(_||(h??v)),r&&d.options.preload===!1||(o&&!e.sync&&u?(s=!0,(async()=>{try{await vn(e,t,i,n,d);let r=e.router.getMatch(i);r._nonReactive.loaderPromise?.resolve(),r._nonReactive.loadPromise?.resolve(),r._nonReactive.loaderPromise=void 0,r._nonReactive.loadPromise=void 0}catch(t){tn(t)&&await e.router.navigate(t.options)}})()):g!==`success`||o?await vn(e,t,i,n,d):un(e,i,n))}let{id:i,routeId:a}=e.matches[n],o=!1,s=!1,c=e.router.looseRoutesById[a],l=c.options.loader,u=((typeof l==`function`?void 0:l?.staleReloadMode)??e.router.options.defaultStaleReloadMode)!==`blocking`;if(ln(e,i)){if(!e.router.getMatch(i))return e.matches[n];un(e,i,n)}else{let t=e.router.getMatch(i),o=e.router.stores.matchesId.get()[n],s=(o&&e.router.stores.matchStores.get(o)||null)?.routeId===a?o:e.router.stores.matches.get().find(e=>e.routeId===a)?.id,l=an(e,i);if(t._nonReactive.loaderPromise){if(t.status===`success`&&!e.sync&&!t.preload&&u)return t;await t._nonReactive.loaderPromise;let n=e.router.getMatch(i),a=n._nonReactive.error||n.error;a&&cn(e,n,a),n.status===`pending`&&await r(l,t,s,n,c)}else{let n=l&&!e.router.stores.matchStores.has(i),a=e.router.getMatch(i);a._nonReactive.loaderPromise=Qe(),n!==a.preload&&e.updateMatch(i,e=>({...e,preload:n})),await r(l,t,s,a,c)}}let d=e.router.getMatch(i);s||(d._nonReactive.loaderPromise?.resolve(),d._nonReactive.loadPromise?.resolve(),d._nonReactive.loadPromise=void 0),clearTimeout(d._nonReactive.pendingTimeout),d._nonReactive.pendingTimeout=void 0,s||(d._nonReactive.loaderPromise=void 0),d._nonReactive.dehydrated=void 0;let f=s?d.isFetching:!1;return f!==d.isFetching||d.invalid!==!1?(e.updateMatch(i,e=>({...e,isFetching:f,invalid:!1})),e.router.getMatch(i)):d};async function bn(e){let t=e,n=[];rn(t.router)&&nn(t);let r;for(let e=0;e({...e,...a?{status:`success`,globalNotFound:!0,error:void 0}:{status:`notFound`,error:l},isFetching:!1})),u=e,await Sn(r,[`notFoundComponent`])}else if(!t.preload){let e=t.matches[0];e.globalNotFound||t.router.getMatch(e.id)?.globalNotFound&&t.updateMatch(e.id,e=>({...e,globalNotFound:!1,error:void 0}))}if(t.serialError&&t.firstBadMatchIndex!==void 0){let e=t.router.looseRoutesById[t.matches[t.firstBadMatchIndex].routeId];await Sn(e,[`errorComponent`])}for(let e=0;e<=u;e++){let{id:n,routeId:r}=t.matches[e],i=t.router.looseRoutesById[r];try{let e=gn(t,n,i);if(e){let r=await e;t.updateMatch(n,e=>({...e,...r}))}}catch(e){console.error(`Error executing head for route ${r}:`,e)}}let d=nn(t);if($e(d)&&await d,l)throw l;if(t.serialError&&!t.preload&&!t.onReady)throw t.serialError;return t.matches}function xn(e,t){let n=t.map(t=>e.options[t]?.preload?.()).filter(Boolean);if(n.length!==0)return Promise.all(n)}function Sn(e,t=wn){!e._lazyLoaded&&e._lazyPromise===void 0&&(e.lazyFn?e._lazyPromise=e.lazyFn().then(t=>{let{id:n,...r}=t.options;Object.assign(e.options,r),e._lazyLoaded=!0,e._lazyPromise=void 0}):e._lazyLoaded=!0);let n=()=>e._componentsLoaded?void 0:t===wn?(()=>{if(e._componentsPromise===void 0){let t=xn(e,wn);t?e._componentsPromise=t.then(()=>{e._componentsLoaded=!0,e._componentsPromise=void 0}):e._componentsLoaded=!0}return e._componentsPromise})():xn(e,t);return e._lazyPromise?e._lazyPromise.then(n):n()}function Cn(e){for(let t of wn)if(e.options[t]?.preload)return!0;return!1}var wn=[`component`,`errorComponent`,`pendingComponent`,`notFoundComponent`];function Tn(e){return{input:({url:t})=>{for(let n of e)t=Dn(n,t);return t},output:({url:t})=>{for(let n=e.length-1;n>=0;n--)t=On(e[n],t);return t}}}function En(e){let t=Lt(e.basepath),n=`/${t}`,r=e.caseSensitive?n:n.toLowerCase(),i=`${r}/`;return{input:({url:t})=>{let a=e.caseSensitive?t.pathname:t.pathname.toLowerCase();return a===r?t.pathname=`/`:a.startsWith(i)&&(t.pathname=t.pathname.slice(n.length)),t},output:({url:e})=>(e.pathname=Nt([`/`,t,e.pathname]),e)}}function Dn(e,t){let n=e?.input?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function On(e,t){let n=e?.output?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function kn(e,t){let{createMutableStore:n,createReadonlyStore:r,batch:i,init:a}=t,o=new Map,s=new Map,c=new Map,l=n(e.status),u=n(e.loadedAt),d=n(e.isLoading),f=n(e.isTransitioning),p=n(e.location),m=n(e.resolvedLocation),h=n(e.statusCode),g=n(e.redirect),_=n([]),v=n([]),y=n([]),b=r(()=>An(o,_.get())),x=r(()=>An(s,v.get())),S=r(()=>An(c,y.get())),C=r(()=>_.get()[0]),w=r(()=>_.get().some(e=>o.get(e)?.get().status===`pending`)),T=r(()=>({locationHref:p.get().href,resolvedLocationHref:m.get()?.href,status:l.get()})),E=r(()=>({status:l.get(),loadedAt:u.get(),isLoading:d.get(),isTransitioning:f.get(),matches:b.get(),location:p.get(),resolvedLocation:m.get(),statusCode:h.get(),redirect:g.get()})),D=ct(64);function O(e){let t=D.get(e);return t||(t=r(()=>{let t=_.get();for(let n of t){let t=o.get(n);if(t&&t.routeId===e)return t.get()}}),D.set(e,t)),t}let k={status:l,loadedAt:u,isLoading:d,isTransitioning:f,location:p,resolvedLocation:m,statusCode:h,redirect:g,matchesId:_,pendingIds:v,cachedIds:y,matches:b,pendingMatches:x,cachedMatches:S,firstId:C,hasPending:w,matchRouteDeps:T,matchStores:o,pendingMatchStores:s,cachedMatchStores:c,__store:E,getRouteMatchStore:O,setMatches:A,setPending:ee,setCached:j};A(e.matches),a?.(k);function A(e){jn(e,o,_,n,i)}function ee(e){jn(e,s,v,n,i)}function j(e){jn(e,c,y,n,i)}return k}function An(e,t){let n=[];for(let r of t){let t=e.get(r);t&&n.push(t.get())}return n}function jn(e,t,n,r,i){let a=e.map(e=>e.id),o=new Set(a);i(()=>{for(let e of t.keys())o.has(e)||t.delete(e);for(let n of e){let e=t.get(n.id);if(!e){let e=r(n);e.routeId=n.routeId,t.set(n.id,e);continue}e.routeId=n.routeId,e.get()!==n&&e.set(n)}ot(n.get(),a)||n.set(a)})}var Mn=`__TSR_index`,Nn=`popstate`,Pn=`beforeunload`;function Fn(e){let t=e.getLocation(),n=new Set,r=r=>{t=e.getLocation(),n.forEach(e=>e({location:t,action:r}))},i=n=>{e.notifyOnIndexChange??!0?r(n):t=e.getLocation()},a=async({task:n,navigateOpts:r,...i})=>{if(r?.ignoreBlocker??!1){n();return}let a=e.getBlockers?.()??[],o=i.type===`PUSH`||i.type===`REPLACE`;if(typeof document<`u`&&a.length&&o)for(let n of a){let r=zn(i.path,i.state);if(await n.blockerFn({currentLocation:t,nextLocation:r,action:i.type})){e.onBlocked?.();return}}n()};return{get location(){return t},get length(){return e.getLength()},subscribers:n,subscribe:e=>(n.add(e),()=>{n.delete(e)}),push:(n,i,o)=>{let s=t.state[Mn];i=In(s+1,i),a({task:()=>{e.pushState(n,i),r({type:`PUSH`})},navigateOpts:o,type:`PUSH`,path:n,state:i})},replace:(n,i,o)=>{let s=t.state[Mn];i=In(s,i),a({task:()=>{e.replaceState(n,i),r({type:`REPLACE`})},navigateOpts:o,type:`REPLACE`,path:n,state:i})},go:(t,n)=>{a({task:()=>{e.go(t),i({type:`GO`,index:t})},navigateOpts:n,type:`GO`})},back:t=>{a({task:()=>{e.back(t?.ignoreBlocker??!1),i({type:`BACK`})},navigateOpts:t,type:`BACK`})},forward:t=>{a({task:()=>{e.forward(t?.ignoreBlocker??!1),i({type:`FORWARD`})},navigateOpts:t,type:`FORWARD`})},canGoBack:()=>t.state[Mn]!==0,createHref:t=>e.createHref(t),block:t=>{if(!e.setBlockers)return()=>{};let n=e.getBlockers?.()??[];return e.setBlockers([...n,t]),()=>{let n=e.getBlockers?.()??[];e.setBlockers?.(n.filter(e=>e!==t))}},flush:()=>e.flush?.(),destroy:()=>e.destroy?.(),notify:r}}function In(e,t){t||={};let n=Bn();return{...t,key:n,__TSR_key:n,[Mn]:e}}function Ln(e){let t=e?.window??(typeof document<`u`?window:void 0),n=t.history.pushState,r=t.history.replaceState,i=[],a=()=>i,o=e=>i=e,s=e?.createHref??(e=>e),c=e?.parseLocation??(()=>zn(`${t.location.pathname}${t.location.search}${t.location.hash}`,t.history.state));if(!t.history.state?.__TSR_key&&!t.history.state?.key){let e=Bn();t.history.replaceState({[Mn]:0,key:e,__TSR_key:e},``)}let l=c(),u,d=!1,f=!1,p=!1,m=!1,h=()=>l,g,_,v=()=>{g&&(C._ignoreSubscribers=!0,(g.isPush?t.history.pushState:t.history.replaceState)(g.state,``,g.href),C._ignoreSubscribers=!1,g=void 0,_=void 0,u=void 0)},y=(e,t,n)=>{let r=s(t);_||(u=l),l=zn(t,n),g={href:r,state:n,isPush:g?.isPush||e===`push`},_||=Promise.resolve().then(()=>v())},b=e=>{l=c(),C.notify({type:e})},x=async()=>{if(f){f=!1;return}let e=c(),n=e.state[Mn]-l.state[Mn],r=n===1,i=n===-1,o=!r&&!i||d;d=!1;let s=o?`GO`:i?`BACK`:`FORWARD`,u=o?{type:`GO`,index:n}:{type:i?`BACK`:`FORWARD`};if(p)p=!1;else{let n=a();if(typeof document<`u`&&n.length){for(let r of n)if(await r.blockerFn({currentLocation:l,nextLocation:e,action:s})){f=!0,t.history.go(1),C.notify(u);return}}}l=c(),C.notify(u)},S=e=>{if(m){m=!1;return}let t=!1,n=a();if(typeof document<`u`&&n.length)for(let e of n){let n=e.enableBeforeUnload??!0;if(n===!0){t=!0;break}if(typeof n==`function`&&n()===!0){t=!0;break}}if(t)return e.preventDefault(),e.returnValue=``},C=Fn({getLocation:h,getLength:()=>t.history.length,pushState:(e,t)=>y(`push`,e,t),replaceState:(e,t)=>y(`replace`,e,t),back:e=>(e&&(p=!0),m=!0,t.history.back()),forward:e=>{e&&(p=!0),m=!0,t.history.forward()},go:e=>{d=!0,t.history.go(e)},createHref:e=>s(e),flush:v,destroy:()=>{t.history.pushState=n,t.history.replaceState=r,t.removeEventListener(Pn,S,{capture:!0}),t.removeEventListener(Nn,x)},onBlocked:()=>{u&&l!==u&&(l=u)},getBlockers:a,setBlockers:o,notifyOnIndexChange:!1});return t.addEventListener(Pn,S,{capture:!0}),t.addEventListener(Nn,x),t.history.pushState=function(...e){let r=n.apply(t.history,e);return C._ignoreSubscribers||b(`PUSH`),r},t.history.replaceState=function(...e){let n=r.apply(t.history,e);return C._ignoreSubscribers||b(`REPLACE`),n},C}function Rn(e){let t=e.replace(/[\x00-\x1f\x7f]/g,``);return t.startsWith(`//`)&&(t=`/`+t.replace(/^\/+/,``)),t}function zn(e,t){let n=Rn(e),r=n.indexOf(`#`),i=n.indexOf(`?`),a=Bn();return{href:n,pathname:n.substring(0,r>0?i>0?Math.min(r,i):r:i>0?i:n.length),hash:r>-1?n.substring(r):``,search:i>-1?n.slice(i,r===-1?void 0:r):``,state:t||{[Mn]:0,key:a,__TSR_key:a}}}function Bn(){return(Math.random()+1).toString(36).substring(7)}function Vn(e,t){let n=t,r=e;return{fromLocation:n,toLocation:r,pathChanged:n?.pathname!==r.pathname,hrefChanged:n?.href!==r.href,hashChanged:n?.hash!==r.hash}}var Hn=new WeakMap,Un=class{constructor(e,t){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this.resetNextScroll=!0,this.shouldViewTransition=void 0,this.isViewTransitionTypesSupported=void 0,this.subscribers=new Set,this.isScrollRestoring=!1,this.isScrollRestorationSetup=!1,this.routeBranchCache=new WeakMap,this.startTransition=e=>e(),this.update=e=>{let t=this.options,n=this.basepath??t?.basepath??`/`,r=this.basepath===void 0,i=t?.rewrite;if(this.options={...t,...e},this.isServer=this.options.isServer??typeof document>`u`,this.protocolAllowlist=new Set(this.options.protocolAllowlist),this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=Vt(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.history=this.options.history?this.options.history:Ln()),this.origin=this.options.origin,this.origin||=window?.origin&&window.origin!==`null`?window.origin:`http://localhost`,this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let e;this.resolvePathCache=ct(1e3),e=this.buildRouteTree(),this.setRoutes(e)}if(!this.stores&&this.latestLocation){let e=this.getStoreConfig(this);this.batch=e.batch,this.stores=kn(Kn(this.latestLocation),e),fr(this)}let a=!1,o=this.options.basepath??`/`,s=this.options.rewrite;if(r||n!==o||i!==s){this.basepath=o;let e=[],t=Lt(o);t&&t!==`/`&&e.push(En({basepath:o})),s&&e.push(s),this.rewrite=e.length===0?void 0:e.length===1?e[0]:Tn(e),this.history&&this.updateLatestLocation(),a=!0}a&&this.stores&&this.stores.location.set(this.latestLocation),typeof window<`u`&&`CSS`in window&&typeof window.CSS?.supports==`function`&&(this.isViewTransitionTypesSupported=window.CSS.supports(`selector(:active-view-transition-type(a))`))},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{let e=Ct(this.routeTree,this.options.caseSensitive,(e,t)=>{e.init({originalIndex:t})});return this.options.routeMasks&&vt(this.options.routeMasks,e.processedTree),e},this.subscribe=(e,t)=>{let n={eventType:e,fn:t};return this.subscribers.add(n),()=>{this.subscribers.delete(n)}},this.emit=e=>{this.subscribers.forEach(t=>{t.eventType===e.type&&t.fn(e)})},this.parseLocation=(e,t)=>{let n=({pathname:e,search:n,hash:r,href:i,state:a})=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(e)){let i=this.options.parseSearch(n),o=this.options.stringifySearch(i);return{href:e+o+r,publicHref:e+o+r,pathname:it(e).path,external:!1,searchStr:o,search:Ke(t?.search,i),hash:it(r.slice(1)).path,state:qe(t?.state,a)}}let o=new URL(i,this.origin),s=Dn(this.rewrite,o),c=this.options.parseSearch(s.search),l=this.options.stringifySearch(c);return s.search=l,{href:s.href.replace(s.origin,``),publicHref:i,pathname:it(s.pathname).path,external:!!this.rewrite&&s.origin!==this.origin,searchStr:l,search:Ke(t?.search,c),hash:it(s.hash.slice(1)).path,state:qe(t?.state,a)}},r=n(e),{__tempLocation:i,__tempKey:a}=r.state;if(i&&(!a||a===this.tempLocationKey)){let e=n(i);return e.state.key=r.state.key,e.state.__TSR_key=r.state.__TSR_key,delete e.state.__tempLocation,{...e,maskedLocation:r}}return r},this.resolvePathWithBase=(e,t)=>Bt({base:e,to:t.includes(`//`)?Pt(t):t,trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(e,t,n)=>typeof e==`string`?this.matchRoutesInternal({pathname:e,search:t},n):this.matchRoutesInternal(e,t),this.getMatchedRoutes=e=>Jn({pathname:e,routesById:this.routesById,processedTree:this.processedTree}),this.cancelMatch=e=>{let t=this.getMatch(e);t&&(t.abortController.abort(),clearTimeout(t._nonReactive.pendingTimeout),t._nonReactive.pendingTimeout=void 0)},this.cancelMatches=()=>{this.stores.pendingIds.get().forEach(e=>{this.cancelMatch(e)}),this.stores.matchesId.get().forEach(e=>{if(this.stores.pendingMatchStores.has(e))return;let t=this.stores.matchStores.get(e)?.get();t&&(t.status===`pending`||t.isFetching===`loader`)&&this.cancelMatch(e)})},this.buildLocation=e=>{let t=(t={})=>{let n=t._fromLocation||this.pendingBuiltLocation||this.latestLocation,r=this.matchRoutesLightweight(n);t.from;let i=t.unsafeRelative===`path`?n.pathname:t.from??r.fullPath,a=t.to?`${t.to}`:void 0,o=r.search,s=Object.assign(Object.create(null),r.params),c=a?.charCodeAt(0)===47?`/`:this.resolvePathWithBase(i,`.`),l=a?this.resolvePathWithBase(c,a):c,u=t.params===!1||t.params===null?Object.create(null):(t.params??!0)===!0?s:Object.assign(s,Ve(t.params,s)),d=this.routesByPath[It(l)],f;if(d)f=this.getRouteBranch(d);else if(l.includes(`$`))f=[];else{let e=this.getMatchedRoutes(l);f=e.matchedRoutes,this.options.notFoundRoute&&(!e.foundRoute||e.foundRoute.path!==`/`&&e.routeParams[`**`])&&(f=[...f,this.options.notFoundRoute])}if(f.length&&We(u))for(let e of f){let t=e.options.params?.stringify??e.options.stringifyParams;if(t)try{Object.assign(u,t(u))}catch{}}let p=e.leaveParams?l:it(Ut({path:l,params:u,decoder:this.pathParamsDecoder,server:this.isServer}).interpolatedPath).path,m=o;if(e._includeValidateSearch&&this.options.search?.strict){let e={};f.forEach(t=>{if(t.options.validateSearch)try{Object.assign(e,qn(t.options.validateSearch,{...e,...m}))}catch{}}),m=e}m=Yn({search:m,dest:t,destRoutes:f,_includeValidateSearch:e._includeValidateSearch}),m=Ke(o,m);let h=this.options.stringifySearch(m),g=t.hash===!0?n.hash:t.hash?Ve(t.hash,n.hash):void 0,_=g?`#${g}`:``,v=t.state===!0?n.state:t.state?Ve(t.state,n.state):{};v=qe(n.state,v);let y=`${p}${h}${_}`,b,x,S=!1;if(this.rewrite){let e=new URL(y,this.origin),t=On(this.rewrite,e);b=e.href.replace(e.origin,``),t.origin===this.origin?x=t.pathname+t.search+t.hash:(x=t.href,S=!0)}else b=at(y),x=b;return{publicHref:x,href:b,pathname:p,search:m,searchStr:h,state:v,hash:g??``,external:S,unmaskOnReload:t.unmaskOnReload}},n=(n={},r)=>{let i=t(n),a=r?t(r):void 0;if(!a){let n=Object.create(null);if(this.options.routeMasks){let o=yt(i.pathname,this.processedTree);if(o){Object.assign(n,o.rawParams);let{from:i,params:s,...c}=o.route,l=s===!1||s===null?Object.create(null):(s??!0)===!0?n:Object.assign(n,Ve(s,n));r={from:e.from,...c,params:l},a=t(r)}}}return a&&(i.maskedLocation=a),i};return e.mask?n(e,{from:e.from,...e.mask}):n(e)},this.commitLocation=async({viewTransition:e,ignoreBlocker:t,...n})=>{let r,i=()=>{let e=[`key`,`__TSR_key`,`__TSR_index`,`__hashScrollIntoViewOptions`];e.forEach(e=>{n.state[e]=this.latestLocation.state[e]});let t=Ze(n.state,this.latestLocation.state);return e.forEach(e=>{delete n.state[e]}),t},a=It(this.latestLocation.href)===It(n.href),o=this.commitLocationPromise;if(this.commitLocationPromise=Qe(()=>{o?.resolve(),o=void 0}),a&&i())this.load();else{let{maskedLocation:i,hashScrollIntoView:a,...o}=n;i&&(o={...i,state:{...i.state,__tempKey:void 0,__tempLocation:{...o,search:o.searchStr,state:{...o.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(o.unmaskOnReload??this.options.unmaskOnReload??!1)&&(o.state.__tempKey=this.tempLocationKey)),o.state.__hashScrollIntoViewOptions=a??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=e,r=n.replace?`REPLACE`:`PUSH`,this.history[r===`REPLACE`?`replace`:`push`](o.publicHref,o.state,{ignoreBlocker:t})}return this.resetNextScroll=n.resetScroll??!0,this.history.subscribers.size||this.load(r?{action:{type:r}}:void 0),this.commitLocationPromise},this.buildAndCommitLocation=({replace:e,resetScroll:t,hashScrollIntoView:n,viewTransition:r,ignoreBlocker:i,href:a,...o}={})=>{if(a){let t=this.history.location.state.__TSR_index,n=zn(a,{__TSR_index:e?t:t+1}),r=new URL(n.pathname,this.origin);o.to=Dn(this.rewrite,r).pathname,o.search=this.options.parseSearch(n.search),o.hash=n.hash.slice(1)}let s=this.buildLocation({...o,_includeValidateSearch:!0});this.pendingBuiltLocation=s;let c=this.commitLocation({...s,viewTransition:r,replace:e,resetScroll:t,hashScrollIntoView:n,ignoreBlocker:i});return Promise.resolve().then(()=>{this.pendingBuiltLocation===s&&(this.pendingBuiltLocation=void 0)}),c},this.navigate=async({to:e,reloadDocument:t,href:n,publicHref:r,...i})=>{let a=!1;if(n)try{new URL(`${n}`),a=!0}catch{}if(a&&!t&&(t=!0),t){if(e!==void 0||!n){let t=this.buildLocation({to:e,...i});n??=t.publicHref,r??=t.publicHref}let t=!a&&r?r:n;if(rt(t,this.protocolAllowlist))return Promise.resolve();if(!i.ignoreBlocker){let e=this.history.getBlockers?.()??[];for(let t of e)if(t?.blockerFn&&await t.blockerFn({currentLocation:this.latestLocation,nextLocation:this.latestLocation,action:`PUSH`}))return Promise.resolve()}return i.replace?window.location.replace(t):window.location.href=t,Promise.resolve()}return this.buildAndCommitLocation({...i,href:n,to:e,_isNavigate:!0})},this.beforeLoad=()=>{this.cancelMatches(),this.updateLatestLocation();let e=this.matchRoutes(this.latestLocation),t=this.stores.cachedMatches.get().filter(t=>!e.some(e=>e.id===t.id));this.batch(()=>{this.stores.status.set(`pending`),this.stores.statusCode.set(200),this.stores.isLoading.set(!0),this.stores.location.set(this.latestLocation),this.stores.setPending(e),this.stores.setCached(t)})},this.load=async e=>{let t=e?.action?.type,n,r,i,a=this.stores.resolvedLocation.get()??this.stores.location.get();for(i=new Promise(o=>{this.startTransition(async()=>{try{this.beforeLoad(),t?Hn.set(this.latestLocation,t):Hn.delete(this.latestLocation);let n=this.latestLocation,r=Vn(n,this.stores.resolvedLocation.get());this.stores.redirect.get()||this.emit({type:`onBeforeNavigate`,...r}),this.emit({type:`onBeforeLoad`,...r}),await bn({router:this,sync:e?.sync,forceStaleReload:a.href===n.href,matches:this.stores.pendingMatches.get(),location:n,updateMatch:this.updateMatch,onReady:async()=>{this.startTransition(()=>{this.startViewTransition(async()=>{let e=null,t=null,n=null,r=null;this.batch(()=>{let i=this.stores.pendingMatches.get(),a=i.length,o=this.stores.matches.get();e=a?o.filter(e=>!this.stores.pendingMatchStores.has(e.id)):null;let s=new Set;for(let e of this.stores.pendingMatchStores.values())e.routeId&&s.add(e.routeId);let c=new Set;for(let e of this.stores.matchStores.values())e.routeId&&c.add(e.routeId);t=a?o.filter(e=>!s.has(e.routeId)):null,n=a?i.filter(e=>!c.has(e.routeId)):null,r=a?i.filter(e=>c.has(e.routeId)):o,this.stores.isLoading.set(!1),this.stores.loadedAt.set(Date.now()),a&&(this.stores.setMatches(i),this.stores.setPending([]),this.stores.setCached([...this.stores.cachedMatches.get(),...e.filter(e=>e.status!==`error`&&e.status!==`notFound`&&e.status!==`redirected`)]),this.clearExpiredCache())});for(let[e,i]of[[t,`onLeave`],[n,`onEnter`],[r,`onStay`]])if(e)for(let t of e)this.looseRoutesById[t.routeId].options[i]?.(t)})})}})}catch(e){tn(e)?(n=e,this.navigate({...n.options,replace:!0,ignoreBlocker:!0})):Gt(e)&&(r=e);let t=n?n.status:r?404:this.stores.matches.get().some(e=>e.status===`error`)?500:200;this.batch(()=>{this.stores.statusCode.set(t),this.stores.redirect.set(n)})}this.latestLoadPromise===i&&(this.commitLocationPromise?.resolve(),this.latestLoadPromise=void 0,this.commitLocationPromise=void 0),o()})}),this.latestLoadPromise=i,await i;this.latestLoadPromise&&i!==this.latestLoadPromise;)await this.latestLoadPromise;let o;this.hasNotFoundMatch()?o=404:this.stores.matches.get().some(e=>e.status===`error`)&&(o=500),o!==void 0&&this.stores.statusCode.set(o)},this.startViewTransition=e=>{let t=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,t&&typeof document<`u`&&`startViewTransition`in document&&typeof document.startViewTransition==`function`){let n;if(typeof t==`object`&&this.isViewTransitionTypesSupported){let r=this.latestLocation,i=this.stores.resolvedLocation.get(),a=typeof t.types==`function`?t.types(Vn(r,i)):t.types;if(a===!1){e();return}n={update:e,types:a}}else n=e;document.startViewTransition(n)}else e()},this.updateMatch=(e,t)=>{this.startTransition(()=>{let n=this.stores.pendingMatchStores.get(e);if(n){n.set(t);return}let r=this.stores.matchStores.get(e);if(r){r.set(t);return}let i=this.stores.cachedMatchStores.get(e);if(i){let n=t(i.get());n.status===`redirected`?this.stores.cachedMatchStores.delete(e)&&this.stores.cachedIds.set(t=>t.filter(t=>t!==e)):i.set(n)}})},this.getMatch=e=>this.stores.cachedMatchStores.get(e)?.get()??this.stores.pendingMatchStores.get(e)?.get()??this.stores.matchStores.get(e)?.get(),this.invalidate=e=>{let t=t=>e?.filter?.(t)??!0?{...t,invalid:!0,...e?.forcePending||t.status===`error`||t.status===`notFound`?{status:`pending`,error:void 0}:void 0}:t;return this.batch(()=>{this.stores.setMatches(this.stores.matches.get().map(t)),this.stores.setCached(this.stores.cachedMatches.get().map(t)),this.stores.setPending(this.stores.pendingMatches.get().map(t))}),this.shouldViewTransition=!1,this.load({sync:e?.sync})},this.getParsedLocationHref=e=>e.publicHref||`/`,this.resolveRedirect=e=>{let t=e.headers.get(`Location`);if(!e.options.href||e.options._builtLocation){let t=e.options._builtLocation??this.buildLocation(e.options),n=this.getParsedLocationHref(t);e.options.href=n,e.headers.set(`Location`,n)}else if(t)try{let n=new URL(t);if(this.origin&&n.origin===this.origin){let t=n.pathname+n.search+n.hash;e.options.href=t,e.headers.set(`Location`,t)}}catch{}if(e.options.href&&!e.options._builtLocation&&rt(e.options.href,this.protocolAllowlist))throw Error(`Redirect blocked: unsafe protocol`);return e.headers.get(`Location`)||e.headers.set(`Location`,e.options.href),e},this.clearCache=e=>{let t=e?.filter;t===void 0?this.stores.setCached([]):this.stores.setCached(this.stores.cachedMatches.get().filter(e=>!t(e)))},this.clearExpiredCache=()=>{let e=Date.now();this.clearCache({filter:t=>{let n=this.looseRoutesById[t.routeId];if(!n.options.loader)return!0;let r=(t.preload?n.options.preloadGcTime??this.options.defaultPreloadGcTime:n.options.gcTime??this.options.defaultGcTime)??3e5;return t.status===`error`||e-t.updatedAt>=r}})},this.loadRouteChunk=Sn,this.preloadRoute=async e=>{let t=e._builtLocation??this.buildLocation(e),n=this.matchRoutes(t,{throwOnError:!0,preload:!0,dest:e}),r=new Set([...this.stores.matchesId.get(),...this.stores.pendingIds.get()]),i=new Set([...r,...this.stores.cachedIds.get()]),a=n.filter(e=>!i.has(e.id));if(a.length){let e=this.stores.cachedMatches.get();this.stores.setCached([...e,...a])}try{return n=await bn({router:this,matches:n,location:t,preload:!0,updateMatch:(e,t)=>{r.has(e)?n=n.map(n=>n.id===e?t(n):n):this.updateMatch(e,t)}}),n}catch(e){if(tn(e))return e.options.reloadDocument?void 0:await this.preloadRoute({...e.options,_fromLocation:t});Gt(e)||console.error(e);return}},this.matchRoute=(e,t)=>{let n={...e,to:e.to?this.resolvePathWithBase(e.from||``,e.to):void 0,params:e.params||{},leaveParams:!0},r=this.buildLocation(n);if(t?.pending&&this.stores.status.get()!==`pending`)return!1;let i=(t?.pending===void 0?!this.stores.isLoading.get():t.pending)?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),a=bt(r.pathname,t?.caseSensitive??!1,t?.fuzzy??!1,i.pathname,this.processedTree);return!a||e.params&&!Ze(a.rawParams,e.params,{partial:!0})?!1:t?.includeSearch??!0?Ze(i.search,r.search,{partial:!0})?a.rawParams:!1:a.rawParams},this.hasNotFoundMatch=()=>this.stores.matches.get().some(e=>e.status===`notFound`||e.globalNotFound),this.getStoreConfig=t,this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...e,caseSensitive:e.caseSensitive??!1,notFoundMode:e.notFoundMode??`fuzzy`,stringifySearch:e.stringifySearch??Xt,parseSearch:e.parseSearch??Yt,protocolAllowlist:e.protocolAllowlist??nt}),typeof document<`u`&&(self.__TSR_ROUTER__=this)}isShell(){return!!this.options.isShell}isPrerendering(){return!!this.options.isPrerendering}get state(){return this.stores.__store.get()}setRoutes({routesById:e,routesByPath:t,processedTree:n}){this.routesById=e,this.routesByPath=t,this.processedTree=n;let r=this.options.notFoundRoute;r&&(r.init({originalIndex:99999999999}),this.routesById[r.id]=r)}getRouteBranch(e){let t=this.routeBranchCache.get(e);return t||(t=Et(e),this.routeBranchCache.set(e,t)),t}get looseRoutesById(){return this.routesById}getParentContext(e){return e?.id?e.context??this.options.context??void 0:this.options.context??void 0}matchRoutesInternal(e,t){let n=this.getMatchedRoutes(e.pathname),{foundRoute:r,routeParams:i}=n,{matchedRoutes:a}=n,o=!1;(r?r.path!==`/`&&i[`**`]:It(e.pathname))&&(this.options.notFoundRoute?a=[...a,this.options.notFoundRoute]:o=!0);let s=o?Zn(this.options.notFoundMode,a):void 0,c=Array(a.length),l=new Map;for(let e of this.stores.matchStores.values())e.routeId&&l.set(e.routeId,e.get());for(let n=0;nthis.navigate({...t,_fromLocation:e}),buildLocation:this.buildLocation,cause:n.cause,abortController:n.abortController,preload:!!n.preload,matches:c,routeId:r.id};n.__routeContext=r.options.context(t)??void 0}n.context={...a,...n.__routeContext,...n.__beforeLoadContext}}}return c}matchRoutesLightweight(e){let{matchedRoutes:t,routeParams:n}=this.getMatchedRoutes(e.pathname),r=ze(t),i={...e.search};for(let e of t)try{Object.assign(i,qn(e.options.validateSearch,i))}catch{}let a=ze(this.stores.matchesId.get()),o=a&&this.stores.matchStores.get(a)?.get(),s=o&&o.routeId===r.id&&o.pathname===e.pathname,c;if(s)c=o.params;else{let e=Object.assign(Object.create(null),n);for(let n of t)try{Qn(n,e)}catch{}c=e}return{matchedRoutes:t,fullPath:r.fullPath,search:i,params:c}}},Wn=class extends Error{},Gn=class extends Error{};function Kn(e){return{loadedAt:0,isLoading:!1,isTransitioning:!1,status:`idle`,resolvedLocation:void 0,location:e,matches:[],statusCode:200}}function qn(e,t){if(e==null)return{};if(`~standard`in e){let n=e[`~standard`].validate(t);if(n instanceof Promise)throw new Wn(`Async validation not supported`);if(n.issues)throw new Wn(JSON.stringify(n.issues,void 0,2),{cause:n});return n.value}return`parse`in e?e.parse(t):typeof e==`function`?e(t):{}}function Jn({pathname:e,routesById:t,processedTree:n}){let r=Object.create(null),i=It(e),a,o=xt(i,n,!0);return o&&(a=o.route,Object.assign(r,o.rawParams)),{matchedRoutes:o?.branch||[t.__root__],routeParams:r,foundRoute:a}}function Yn({search:e,dest:t,destRoutes:n,_includeValidateSearch:r}){return Xn(n)(e,t,r??!1)}function Xn(e){let t={dest:null,_includeValidateSearch:!1,middlewares:[]};for(let n of e)`search`in n.options?n.options.search?.middlewares&&t.middlewares.push(...n.options.search.middlewares):(n.options.preSearchFilters||n.options.postSearchFilters)&&t.middlewares.push(({search:e,next:t})=>{let r=e;`preSearchFilters`in n.options&&n.options.preSearchFilters&&(r=n.options.preSearchFilters.reduce((e,t)=>t(e),e));let i=t(r);return`postSearchFilters`in n.options&&n.options.postSearchFilters?n.options.postSearchFilters.reduce((e,t)=>t(e),i):i}),n.options.validateSearch&&t.middlewares.push(({search:e,next:r})=>{let i=r(e);if(!t._includeValidateSearch)return i;try{return{...i,...qn(n.options.validateSearch,i)??void 0}}catch{return i}});t.middlewares.push(({search:e})=>{let n=t.dest;return n.search?n.search===!0?e:Ve(n.search,e):{}});let n=(e,t,r)=>{if(e>=r.length)return t;let i=r[e];return i({search:t,next:t=>n(e+1,t,r)})};return function(e,r,i){return t.dest=r,t._includeValidateSearch=i,n(0,e,t.middlewares)}}function Zn(e,t){if(e!==`root`)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.children)return n.id}return $t}function Qn(e,t){let n=e.options.params?.parse??e.options.parseParams;if(n){let e=n(t);if(e===!1)throw Error(`Route params.parse returned false for a matched route`);Object.assign(t,e)}}function $n(){try{return sessionStorage}catch{return}}var er=`tsr-scroll-restoration-v1_3`,tr=$n();function nr(){try{return JSON.parse(tr?.getItem(`tsr-scroll-restoration-v1_3`)||`{}`)}catch{return{}}}function rr(){try{tr?.setItem(er,JSON.stringify(ir))}catch{}}var ir=nr(),ar=`data-scroll-restoration-id`,or=e=>e.state.__TSR_key||e.href;function sr(e){let t=e.getAttribute(ar);if(t)return`[${ar}="${t}"]`;let n=``,r=e,i;for(;i=r.parentNode;){let e=1,t=r;for(;t=t.previousElementSibling;)e++;let a=`${r.localName}:nth-child(${e})`;n=n?`${a} > ${n}`:a,r=i}return n}var cr=!1,lr=`window`;function ur(e){try{return typeof e==`function`?e():document.querySelector(e)}catch{}}function dr(e){let t=[];for(let n of e){if(n===lr)continue;let e=ur(n);e&&t.push(e)}return t}function fr(e,t){if((t??e.options.scrollRestoration)&&(e.isScrollRestoring=!0),e.isScrollRestorationSetup)return;e.isScrollRestorationSetup=!0,cr=!1;let n=e.options.getScrollRestorationKey||or,r=new Map,i=(e,t,n)=>{let i=r.get(e)||{};i.scrollX=t,i.scrollY=n,r.set(e,i)};history.scrollRestoration=`manual`;let a=t=>{if(!(cr||!e.isScrollRestoring)){if(t.target===document)i(lr,scrollX,scrollY);else{let e=t.target;i(e,e.scrollLeft,e.scrollTop)}}},o=t=>{if(!e.isScrollRestoring)return;let n=ir[t]||={};for(let[e,t]of r)e===lr?n[lr]=t:e.isConnected&&(n[sr(e)]=t)};document.addEventListener(`scroll`,a,!0),e.subscribe(`onBeforeLoad`,e=>{e.fromLocation&&o(n(e.fromLocation)),r.clear()}),addEventListener(`pagehide`,()=>{o(n(e.stores.resolvedLocation.get()??e.stores.location.get())),rr()}),e.subscribe(`onRendered`,t=>{let i=e.options.scrollRestorationBehavior,a=e.options.scrollToTopSelectors,o=e.resetNextScroll,s;if(r.clear(),o||(e.resetNextScroll=!0),typeof e.options.scrollRestoration==`function`&&!e.options.scrollRestoration({location:e.latestLocation}))return;let c=n(t.toLocation),l=t.fromLocation&&n(t.fromLocation);if(e.isScrollRestoring&&l&&l!==c){let e=ir[l];if(e){let t=ir[c];for(let n in e){if(n===lr){if(o)continue}else{let e=ur(n);if(!e||o&&a&&(s??=dr(a),s.includes(e)))continue}t||=ir[c]={},t[n]??=e[n]}}}cr=!0;try{let n=t.toLocation.hash,r=t.toLocation.state.__hashScrollIntoViewOptions??!0,l=!1;if(o){let o=Hn.get(t.toLocation),u=n&&r&&(o===`PUSH`||o===`REPLACE`),d=e.isScrollRestoring?ir[c]:void 0;if(d)for(let e in d){let{scrollX:t,scrollY:n}=d[e];if(e===lr){if(u)continue;scrollTo({top:n,left:t,behavior:i}),l=!0}else{let r=ur(e);r&&(r.scrollLeft=t,r.scrollTop=n)}}if(!l&&!n){let e={top:0,left:0,behavior:i};if(scrollTo(e),a){s??=dr(a);for(let t of s)t.scrollTo(e)}}}!l&&n&&r&&document.getElementById(n)?.scrollIntoView(r)}finally{cr=!1}})}var pr=`Error preloading route! ☝️`,mr=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e.originalIndex;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=$t:this.parentRoute||st();let r=n?$t:t?.path;r&&r!==`/`&&(r=Ft(r));let i=t?.id||r,a=n?$t:Nt([this.parentRoute.id===`__root__`?``:this.parentRoute.id,i]);r===`__root__`&&(r=`/`),a!==`__root__`&&(a=Nt([`/`,a]));let o=a===`__root__`?`/`:Nt([this.parentRoute.fullPath,r]);this._path=r,this._id=a,this._fullPath=o,this._to=It(o)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>en({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},hr=class extends mr{constructor(e){super(e)}};function gr(e){let t=e.errorComponent??vr;return(0,z.jsx)(_r,{getResetKey:e.getResetKey,onCatch:e.onCatch,children:({error:n,reset:r})=>n?R.createElement(t,{error:n,reset:r}):e.children})}var _r=class extends R.Component{constructor(...e){super(...e),this.state={error:null}}static getDerivedStateFromProps(e,t){let n=e.getResetKey();return t.error&&t.resetKey!==n?{resetKey:n,error:null}:{resetKey:n}}static getDerivedStateFromError(e){return{error:e}}reset(){this.setState({error:null})}componentDidCatch(e,t){this.props.onCatch&&this.props.onCatch(e,t)}render(){return this.props.children({error:this.state.error,reset:()=>{this.reset()}})}};function vr({error:e}){let[t,n]=R.useState(!1);return(0,z.jsxs)(`div`,{style:{padding:`.5rem`,maxWidth:`100%`},children:[(0,z.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`.5rem`},children:[(0,z.jsx)(`strong`,{style:{fontSize:`1rem`},children:`Something went wrong!`}),(0,z.jsx)(`button`,{style:{appearance:`none`,fontSize:`.6em`,border:`1px solid currentColor`,padding:`.1rem .2rem`,fontWeight:`bold`,borderRadius:`.25rem`},onClick:()=>n(e=>!e),children:t?`Hide Error`:`Show Error`})]}),(0,z.jsx)(`div`,{style:{height:`.25rem`}}),t?(0,z.jsx)(`div`,{children:(0,z.jsx)(`pre`,{style:{fontSize:`.7em`,border:`1px solid red`,borderRadius:`.25rem`,padding:`.3rem`,color:`red`,overflow:`auto`},children:e.message?(0,z.jsx)(`code`,{children:e.message}):null})}):null]})}function yr({children:e,fallback:t=null}){return br()?(0,z.jsx)(R.Fragment,{children:e}):(0,z.jsx)(R.Fragment,{children:t})}function br(){return R.useSyncExternalStore(xr,()=>!0,()=>!1)}function xr(){return()=>{}}var Sr=R.createContext(null);function Cr(e){return R.useContext(Sr)}var wr=R.createContext(void 0),Tr=R.createContext(void 0),Er=(e=>(e[e.None=0]=`None`,e[e.Mutable=1]=`Mutable`,e[e.Watching=2]=`Watching`,e[e.RecursedCheck=4]=`RecursedCheck`,e[e.Recursed=8]=`Recursed`,e[e.Dirty=16]=`Dirty`,e[e.Pending=32]=`Pending`,e))(Er||{});function Dr({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(!0)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(!0)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function Or(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var kr=[],Ar=0,{link:jr,unlink:Mr,propagate:Nr,checkDirty:Pr,shallowPropagate:Fr}=Dr({update(e){return e._update()},notify(e){kr[Lr++]=e,e.flags&=~Er.Watching},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=Er.Mutable|Er.Dirty,Vr(e))}}),Ir=0,Lr=0,Rr,zr=0;function Br(e){try{++zr,e()}finally{--zr||Hr()}}function Vr(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Mr(n,e)}function Hr(){if(!(zr>0)){for(;Ir{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=Rr,o=t?.compare??Object.is;if(n)Rr=i,++Ar,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=Er.Mutable|Er.RecursedCheck);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{Rr=a,n&&(i.flags&=~Er.RecursedCheck),Vr(i)}}};return n?(i.flags=Er.Mutable|Er.Dirty,i.get=function(){let e=i.flags;if(e&Er.Dirty||e&Er.Pending&&Pr(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Fr(e)}}else e&Er.Pending&&(i.flags=e&~Er.Pending);return Rr!==void 0&&jr(i,Rr,Ar),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(Nr(e),Fr(e),Hr())}},i}function Wr(e){let t=()=>{let t=Rr;Rr=n,++Ar,n.depsTail=void 0,n.flags=Er.Watching|Er.RecursedCheck;try{return e()}finally{Rr=t,n.flags&=~Er.RecursedCheck,Vr(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:Er.Watching|Er.RecursedCheck,notify(){let e=this.flags;e&Er.Dirty||e&Er.Pending&&Pr(this.deps,this)?t():this.flags=Er.Watching},stop(){this.flags=Er.None,this.depsTail=void 0,Vr(this)}};return t(),n}var Gr=o((e=>{var t=f();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})),Kr=o(((e,t)=>{t.exports=Gr()})),qr=o((e=>{var t=f(),n=Kr();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useSyncExternalStore,o=t.useRef,s=t.useEffect,c=t.useMemo,l=t.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,u){var d=o(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=c(function(){function e(e){if(!a){if(a=!0,o=e,e=r(e),u!==void 0&&f.hasValue){var t=f.value;if(u(t,e))return s=t}return s=e}if(t=s,i(o,e))return t;var n=r(e);return u!==void 0&&u(t,n)?(o=e,t):(o=e,s=n)}var a=!1,o,s,c=n===void 0?null:n;return[function(){return e(t())},c===null?void 0:function(){return e(c())}]},[t,n,r,u]);var p=a(e,d[0],d[1]);return s(function(){f.hasValue=!0,f.value=p},[p]),l(p),p}})),Jr=o(((e,t)=>{t.exports=qr()}))();function Yr(e,t){return e===t}function Xr(e,t,n=Yr){let r=(0,R.useCallback)(t=>{if(!e)return()=>{};let{unsubscribe:n}=e.subscribe(t);return n},[e]),i=(0,R.useCallback)(()=>e?.get(),[e]);return(0,Jr.useSyncExternalStoreWithSelector)(r,i,i,t,n)}var Zr={get:()=>void 0,subscribe:()=>({unsubscribe:()=>{}})};function Qr(e){let t=Cr(),n=R.useContext(e.from?Tr:wr),r=e.from??n,i=r?e.from?t.stores.getRouteMatchStore(r):t.stores.matchStores.get(r):void 0,a=R.useRef(void 0);return Xr(i??Zr,n=>{if((e.shouldThrow??!0)&&!n&&st(),n===void 0)return;let r=e.select?e.select(n):n;if(e.structuralSharing??t.options.defaultStructuralSharing){let e=qe(a.current,r);return a.current=e,e}return r})}function $r(e){return Qr({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function ei(e){let{select:t,...n}=e;return Qr({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function ti(e){return Qr({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function ni(e){return Qr({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}function ri(e){let t=Cr();return R.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}function ii(e){let t=Cr(),n=ri(),r=R.useRef(null);return Ie(()=>{r.current!==e&&(n(e),r.current=e)},[t,e,n]),null}function ai(e){return Qr({...e,select:t=>e.select?e.select(t.context):t.context})}var oi=m();function si(e,t){let n=Cr(),r=B(t),{activeProps:i,inactiveProps:a,activeOptions:o,to:s,preload:c,preloadDelay:l,preloadIntentProximity:u,hashScrollIntoView:d,replace:f,startTransition:p,resetScroll:m,viewTransition:h,children:g,target:_,disabled:v,style:y,className:b,onClick:x,onBlur:S,onFocus:C,onMouseEnter:w,onMouseLeave:T,onTouchStart:E,ignoreBlocker:D,params:O,search:k,hash:A,state:ee,mask:j,reloadDocument:M,unsafeRelative:te,from:ne,_fromLocation:N,...P}=e,re=br(),ie=R.useMemo(()=>e,[n,e.from,e._fromLocation,e.hash,e.to,e.search,e.params,e.state,e.mask,e.unsafeRelative]),ae=Xr(n.stores.location,e=>e,(e,t)=>e.href===t.href),F=R.useMemo(()=>{let e={_fromLocation:ae,...ie};return n.buildLocation(e)},[n,ae,ie]),oe=F.maskedLocation?F.maskedLocation.publicHref:F.publicHref,I=F.maskedLocation?F.maskedLocation.external:F.external,se=R.useMemo(()=>gi(oe,I,n.history,v),[v,I,oe,n.history]),L=R.useMemo(()=>{if(se?.external)return rt(se.href,n.protocolAllowlist)?void 0:se.href;if(!_i(s)&&typeof s==`string`&&s.indexOf(`:`)!==-1)try{return new URL(s),rt(s,n.protocolAllowlist)?void 0:s}catch{}},[s,se,n.protocolAllowlist]),ce=R.useMemo(()=>{if(L)return!1;if(o?.exact){if(!zt(ae.pathname,F.pathname,n.basepath))return!1}else{let e=Rt(ae.pathname,n.basepath),t=Rt(F.pathname,n.basepath);if(!(e.startsWith(t)&&(e.length===t.length||e[t.length]===`/`)))return!1}return(o?.includeSearch??!0)&&!Ze(ae.search,F.search,{partial:!o?.exact,ignoreUndefined:!o?.explicitUndefined})?!1:!o?.includeHash||re&&ae.hash===F.hash},[o?.exact,o?.explicitUndefined,o?.includeHash,o?.includeSearch,ae,L,re,F.hash,F.pathname,F.search,n.basepath]),le=ce?Ve(i,{})??li:ci,ue=ce?ci:Ve(a,{})??ci,de=[b,le.className,ue.className].filter(Boolean).join(` `),fe=(y||le.style||ue.style)&&{...y,...le.style,...ue.style},[pe,me]=R.useState(!1),he=R.useRef(!1),ge=e.reloadDocument||L?!1:c??n.options.defaultPreload,_e=l??n.options.defaultPreloadDelay??0,ve=R.useCallback(()=>{n.preloadRoute({...ie,_builtLocation:F}).catch(e=>{console.warn(e),console.warn(pr)})},[n,ie,F]);Re(r,R.useCallback(e=>{e?.isIntersecting&&ve()},[ve]),mi,{disabled:!!v||ge!==`viewport`}),R.useEffect(()=>{he.current||!v&&ge===`render`&&(ve(),he.current=!0)},[v,ve,ge]);let ye=e=>{let t=e.currentTarget.getAttribute(`target`),r=_===void 0?t:_;if(!v&&!yi(e)&&!e.defaultPrevented&&(!r||r===`_self`)&&e.button===0){e.preventDefault(),(0,oi.flushSync)(()=>{me(!0)});let t=n.subscribe(`onResolved`,()=>{t(),me(!1)});n.navigate({...ie,replace:f,resetScroll:m,hashScrollIntoView:d,startTransition:p,viewTransition:h,ignoreBlocker:D})}};if(L)return{...P,ref:r,href:L,...g&&{children:g},..._&&{target:_},...v&&{disabled:v},...y&&{style:y},...b&&{className:b},...x&&{onClick:x},...S&&{onBlur:S},...C&&{onFocus:C},...w&&{onMouseEnter:w},...T&&{onMouseLeave:T},...E&&{onTouchStart:E}};let be=e=>{if(v||ge!==`intent`)return;if(!_e){ve();return}let t=e.currentTarget;if(pi.has(t))return;let n=setTimeout(()=>{pi.delete(t),ve()},_e);pi.set(t,n)},xe=e=>{v||ge!==`intent`||ve()},Se=e=>{if(v||!ge||!_e)return;let t=e.currentTarget,n=pi.get(t);n&&(clearTimeout(n),pi.delete(t))};return{...P,...le,...ue,href:se?.href,ref:r,onClick:hi([x,ye]),onBlur:hi([S,Se]),onFocus:hi([C,be]),onMouseEnter:hi([w,be]),onMouseLeave:hi([T,Se]),onTouchStart:hi([E,xe]),disabled:!!v,target:_,...fe&&{style:fe},...de&&{className:de},...v&&ui,...ce&&di,...re&&pe&&fi}}var ci={},li={className:`active`},ui={role:`link`,"aria-disabled":!0},di={"data-status":`active`,"aria-current":`page`},fi={"data-transitioning":`transitioning`},pi=new WeakMap,mi={rootMargin:`100px`},hi=e=>t=>{for(let n of e)if(n){if(t.defaultPrevented)return;n(t)}};function gi(e,t,n,r){if(!r)return t?{href:e,external:!0}:{href:n.createHref(e)||`/`,external:!1}}function _i(e){if(typeof e!=`string`)return!1;let t=e.charCodeAt(0);return t===47?e.charCodeAt(1)!==47:t===46}var vi=R.forwardRef((e,t)=>{let{_asChild:n,...r}=e,{type:i,...a}=si(r,t),o=typeof r.children==`function`?r.children({isActive:a[`data-status`]===`active`}):r.children;if(!n){let{disabled:e,...t}=a;return R.createElement(`a`,t,o)}return R.createElement(n,a,o)});function yi(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}var bi=class extends mr{constructor(e){super(e),this.useMatch=e=>Qr({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>ai({...e,from:this.id}),this.useSearch=e=>ni({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>ti({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>ei({...e,from:this.id}),this.useLoaderData=e=>$r({...e,from:this.id}),this.useNavigate=()=>ri({from:this.fullPath}),this.Link=R.forwardRef((e,t)=>(0,z.jsx)(vi,{ref:t,from:this.fullPath,...e}))}};function xi(e){return new bi(e)}var Si=class extends hr{constructor(e){super(e),this.useMatch=e=>Qr({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>ai({...e,from:this.id}),this.useSearch=e=>ni({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>ti({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>ei({...e,from:this.id}),this.useLoaderData=e=>$r({...e,from:this.id}),this.useNavigate=()=>ri({from:this.fullPath}),this.Link=R.forwardRef((e,t)=>(0,z.jsx)(vi,{ref:t,from:this.fullPath,...e}))}};function Ci(e){return new Si(e)}function wi(e){let t=Cr(),n=`not-found-${Xr(t.stores.location,e=>e.pathname)}-${Xr(t.stores.status,e=>e)}`;return(0,z.jsx)(gr,{getResetKey:()=>n,onCatch:(t,n)=>{if(Gt(t))e.onCatch?.(t,n);else throw t},errorComponent:({error:t})=>{if(Gt(t))return e.fallback?.(t);throw t},children:e.children})}function Ti(){return(0,z.jsx)(`p`,{children:`Not Found`})}function Ei(e){return(0,z.jsx)(z.Fragment,{children:e.children})}function Di(e,t,n){return t.options.notFoundComponent?(0,z.jsx)(t.options.notFoundComponent,{...n}):e.options.defaultNotFoundComponent?(0,z.jsx)(e.options.defaultNotFoundComponent,{...n}):(0,z.jsx)(Ti,{})}var Oi=R.memo(function({matchId:e}){let t=Cr(),n=t.stores.matchStores.get(e);n||st();let r=Xr(t.stores.loadedAt,e=>e),i=Xr(n,e=>e);return(0,z.jsx)(ki,{router:t,matchId:e,resetKey:r,matchState:R.useMemo(()=>{let e=i.routeId,n=t.routesById[e].parentRoute?.id;return{routeId:e,ssr:i.ssr,_displayPending:i._displayPending,parentRouteId:n}},[i._displayPending,i.routeId,i.ssr,t.routesById])})});function ki({router:e,matchId:t,resetKey:n,matchState:r}){let i=e.routesById[r.routeId],a=i.options.pendingComponent??e.options.defaultPendingComponent,o=a?(0,z.jsx)(a,{}):null,s=i.options.errorComponent??e.options.defaultErrorComponent,c=i.options.onCatch??e.options.defaultOnCatch,l=i.isRoot?i.options.notFoundComponent??e.options.notFoundRoute?.options.component:i.options.notFoundComponent,u=r.ssr===!1||r.ssr===`data-only`,d=(!i.isRoot||i.options.wrapInSuspense||u)&&(i.options.wrapInSuspense??a??(i.options.errorComponent?.preload||u))?R.Suspense:Ei,f=s?gr:Ei,p=l?wi:Ei;return(0,z.jsxs)(i.isRoot?i.options.shellComponent??Ei:Ei,{children:[(0,z.jsx)(wr.Provider,{value:t,children:(0,z.jsx)(d,{fallback:o,children:(0,z.jsx)(f,{getResetKey:()=>n,errorComponent:s||vr,onCatch:(e,t)=>{if(Gt(e))throw e.routeId??=r.routeId,e;c?.(e,t)},children:(0,z.jsx)(p,{fallback:e=>{if(e.routeId??=r.routeId,!l||e.routeId&&e.routeId!==r.routeId||!e.routeId&&!i.isRoot)throw e;return R.createElement(l,e)},children:u||r._displayPending?(0,z.jsx)(yr,{fallback:o,children:(0,z.jsx)(ji,{matchId:t})}):(0,z.jsx)(ji,{matchId:t})})})})}),r.parentRouteId===`__root__`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Ai,{resetKey:n}),(e.options.scrollRestoration,null)]}):null]})}function Ai({resetKey:e}){let t=Cr(),n=R.useRef(void 0);return Ie(()=>{let e=t.latestLocation.href;(n.current===void 0||n.current!==e)&&(t.emit({type:`onRendered`,...Vn(t.stores.location.get(),t.stores.resolvedLocation.get())}),n.current=e)},[t.latestLocation.state.__TSR_key,e,t]),null}var ji=R.memo(function({matchId:e}){let t=Cr(),n=(e,n)=>t.getMatch(e.id)?._nonReactive[n]??e._nonReactive[n],r=t.stores.matchStores.get(e);r||st();let i=Xr(r,e=>e),a=i.routeId,o=t.routesById[a],s=R.useMemo(()=>{let e=(t.routesById[a].options.remountDeps??t.options.defaultRemountDeps)?.({routeId:a,loaderDeps:i.loaderDeps,params:i._strictParams,search:i._strictSearch});return e?JSON.stringify(e):void 0},[a,i.loaderDeps,i._strictParams,i._strictSearch,t.options.defaultRemountDeps,t.routesById]),c=R.useMemo(()=>{let e=o.options.component??t.options.defaultComponent;return e?(0,z.jsx)(e,{},s):(0,z.jsx)(Mi,{})},[s,o.options.component,t.options.defaultComponent]);if(i._displayPending)throw n(i,`displayPendingPromise`);if(i._forcePending)throw n(i,`minPendingPromise`);if(i.status===`pending`){let e=o.options.pendingMinMs??t.options.defaultPendingMinMs;if(e){let n=t.getMatch(i.id);if(n&&!n._nonReactive.minPendingPromise){let t=Qe();n._nonReactive.minPendingPromise=t,setTimeout(()=>{t.resolve(),n._nonReactive.minPendingPromise=void 0},e)}}throw n(i,`loadPromise`)}if(i.status===`notFound`)return Gt(i.error)||st(),Di(t,o,i.error);if(i.status===`redirected`)throw tn(i.error)||st(),n(i,`loadPromise`);if(i.status===`error`)throw i.error;return c}),Mi=R.memo(function(){let e=Cr(),t=R.useContext(wr),n,r=!1,i;{let a=t?e.stores.matchStores.get(t):void 0;[n,r]=Xr(a,e=>[e?.routeId,e?.globalNotFound??!1]),i=Xr(e.stores.matchesId,e=>e[e.findIndex(e=>e===t)+1])}let a=n?e.routesById[n]:void 0,o=e.options.defaultPendingComponent?(0,z.jsx)(e.options.defaultPendingComponent,{}):null;if(r)return a||st(),Di(e,a,void 0);if(!i)return null;let s=(0,z.jsx)(Oi,{matchId:i});return n===`__root__`?(0,z.jsx)(R.Suspense,{fallback:o,children:s}):s});function Ni(){let e=Cr(),t=R.useRef({router:e,mounted:!1}),[n,r]=R.useState(!1),i=Xr(e.stores.isLoading,e=>e),a=Xr(e.stores.hasPending,e=>e),o=Le(i),s=i||n||a,c=Le(s),l=i||a,u=Le(l);return e.startTransition=e=>{r(!0),R.startTransition(()=>{e(),r(!1)})},R.useEffect(()=>{let t=e.history.subscribe(e.load),n=e.buildLocation({to:e.latestLocation.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});return It(e.latestLocation.publicHref)!==It(n.publicHref)&&e.commitLocation({...n,replace:!0}),()=>{t()}},[e,e.history]),Ie(()=>{typeof window<`u`&&e.ssr||t.current.router===e&&t.current.mounted||(t.current={router:e,mounted:!0},(async()=>{try{await e.load()}catch(e){console.error(e)}})())},[e]),Ie(()=>{o&&!i&&e.emit({type:`onLoad`,...Vn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[o,e,i]),Ie(()=>{u&&!l&&e.emit({type:`onBeforeRouteMount`,...Vn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[l,u,e]),Ie(()=>{if(c&&!s){let t=Vn(e.stores.location.get(),e.stores.resolvedLocation.get());e.emit({type:`onResolved`,...t}),Br(()=>{e.stores.status.set(`idle`),e.stores.resolvedLocation.set(e.stores.location.get())})}},[s,c,e]),null}function Pi(){let e=Cr(),t=e.routesById.__root__.options.pendingComponent??e.options.defaultPendingComponent,n=t?(0,z.jsx)(t,{}):null,r=(0,z.jsxs)(typeof document<`u`&&e.ssr?Ei:R.Suspense,{fallback:n,children:[(0,z.jsx)(Ni,{}),(0,z.jsx)(Fi,{})]});return e.options.InnerWrap?(0,z.jsx)(e.options.InnerWrap,{children:r}):r}function Fi(){let e=Cr(),t=Xr(e.stores.firstId,e=>e),n=Xr(e.stores.loadedAt,e=>e),r=t?(0,z.jsx)(Oi,{matchId:t}):null;return(0,z.jsx)(wr.Provider,{value:t,children:e.options.disableGlobalCatchBoundary?r:(0,z.jsx)(gr,{getResetKey:()=>n,errorComponent:vr,onCatch:void 0,children:r})})}var Ii=e=>({createMutableStore:Ur,createReadonlyStore:Ur,batch:Br}),Li=e=>new Ri(e),Ri=class extends Un{constructor(e){super(e,Ii)}};function zi({router:e,children:t,...n}){We(n)&&e.update({...e.options,...n,context:{...e.options.context,...n.context}});let r=(0,z.jsx)(Sr.Provider,{value:e,children:t});return e.options.Wrap?(0,z.jsx)(e.options.Wrap,{children:r}):r}function Bi({router:e,...t}){return(0,z.jsx)(zi,{router:e,...t,children:(0,z.jsx)(Pi,{})})}var Vi=g(),Hi=(0,R.createContext)(null),Ui=`loopx-pw-locale`,Wi={en:{"acceptance.connected":`Connected`,"acceptance.mapped":`Project mapped`,"acceptance.refreshed":`State refreshed`,"acceptance.inspected":`Adapter inspected`,"acceptance.recorded":`Run recorded`,"acceptance.judged":`Feedback recorded`,"acceptance.approved":`Approval recorded`,"acceptance.ready":`Controller readiness recorded`,"acceptance.attentionSource":`Current status`,"acceptance.visionSource":`Agent acceptance criteria`,"acceptance.todoSource":`Task state`,"acceptance.runSource":`Fresh run evidence`,"acceptance.title":`Acceptance observations`,"acceptance.unavailable":`Acceptance observations are unavailable. Goal completion is unknown.`,"acceptance.partial":`Partial observations only. Completed tasks and an empty gap list do not prove Goal acceptance.`,"acceptance.gaps":`Evidence still required`,"acceptance.reasonUnknown":`Reason not provided by the source`,"acceptance.unknown":`Unknown`,"acceptance.required":`Required evidence or condition`,"acceptance.observed":`Observed at`,"acceptance.noGaps":`No gaps in the available observations. Full acceptance has not been assessed.`,"acceptance.guards":`Pending gates`,"acceptance.noGuards":`No pending gates in the available observations.`,"acceptance.scope":`Decision scope`,"acceptance.next":`Next action from current status`,"acceptance.historical_progress":`Recorded progress`,"acceptance.historical":`Historical lifecycle observations do not grant permission or certify acceptance.`,"acceptance.missing":`Sources not available:`,"acceptance.truncated":`Only the first 12 observations are shown.`,"common.actions":`Actions`,"common.agent":`Agent`,"common.allMessages":`All messages`,"common.cancel":`Cancel`,"common.close":`Close`,"common.closeActionReceipt":`Close action receipt`,"common.confirm":`Confirm`,"common.export":`Export`,"common.failed":`Failed`,"common.goal":`Goal`,"common.loading":`Loading…`,"common.none":`None`,"common.off":`Off`,"common.on":`On`,"common.open":`Open`,"common.owner":`Owner`,"common.readOnly":`Read only`,"common.recently":`Just now`,"common.status":`Status`,"common.task":`Task`,"common.you":`You`,"common.waiting":`Waiting`,"composer.addImage":`Add image`,"composer.agentProgress":`Ask Agent for a progress report`,"composer.blockers":`Ask what blocks`,"composer.agentProgressPrompt":`Give me a progress report for this Goal: completed, running, blocked, and next steps.`,"composer.attachImageHint":`Choose, paste, or drag an image`,"composer.clarifyDefer":`Deferring a Todo requires a deterministic resume condition. Add todo_done:, pr_merged:[owner/repo]#, capacity_available:, or resume_at:.`,"composer.clarifySingleAction":`This message contains multiple operations that may change state. Describe one operation at a time so each confirmation preview can be reviewed separately.`,"composer.createGoal":`Create Goal`,"composer.createGoalDraft":`Goal draft`,"composer.createGoalDraftDescription":`Complete the draft and send it. LoopX will show a confirmation preview first.`,"composer.createGoalDraftLead":`Create a long-term Goal:`,"composer.createGoalTemplate":`Create a long-term Goal: -Objective: -Completion criteria: -Execution boundary (optional): -Related repository (optional): -Notification method (optional):`,"composer.createGoalHint":`Insert a Goal template to review before creation`,"composer.evidence":`Check what is proven`,"composer.globalProgress":`Summarize all Goal progress`,"composer.globalProgressPrompt":`Summarize the latest progress and blockers for all active Goals.`,"composer.globalTasks":`Ask about global priorities`,"composer.globalTasksPrompt":`Which Goals need me, and what should I handle first?`,"composer.goalMessageHint":`Your message is delivered to {agent} in this Goal session.`,"composer.goalRunningHint":`{count} conversations are running in this Goal · your message goes to the current {agent} conversation`,"composer.goalPlaceholder":`Ask or guide {goal}…`,"composer.imageAnalysisPrompt":`Analyze these images in the context of the current Goal and tell me the next step.`,"composer.imageCountError":`You can add up to {count} images.`,"composer.imagePicker":`Image file picker`,"composer.imageReadError":`Could not read image {name}.`,"composer.imageReadGenericError":`Could not read the image.`,"composer.imageSizeError":`Each image must be {size} MB or smaller.`,"composer.imageTypeError":`PNG, JPEG, WebP, and GIF images are supported.`,"composer.imagesPending":`Images to send`,"composer.managerMessageHint":`Your message goes to the LoopX Manager across Goals for global questions or Goal creation.`,"composer.managerPlaceholder":`Ask the LoopX Manager, or describe a new Goal…`,"composer.monitor":`Configure scheduled check`,"composer.monitorGoalQuestion":`Which Goal should receive the scheduled check?`,"composer.monitorTemplate":`Add a scheduled check for the current Goal: -Check target: -Frequency (supports 30 minutes / 2 hours / daily): Every 2 hours -Stop condition: Goal completes`,"composer.monitorShortcutTemplate":`Add a scheduled check for the current Goal: -Check target: {target} -Frequency: Every 2 hours -Stop condition: Goal completes`,"composer.monitorTemplateWithoutGoal":`Configure a scheduled check: -Goal: -Check target: -Frequency: Every 2 hours -Stop condition: Goal completes`,"composer.heartbeatGoalQuestion":`Which Goal should receive the Heartbeat?`,"composer.heartbeatTemplate":`Set a Heartbeat for the current Goal: -Frequency: Daily -Stop condition: Goal completes -Notification: Only notify me when needed`,"composer.heartbeatTemplateWithoutGoal":`Set up a Heartbeat: -Goal: -Frequency: Daily -Stop condition: Goal completes -Notification: Only notify me when needed`,"composer.nextAction":`Ask what’s next`,"composer.nextActionPrompt":`What should I do next?`,"composer.send":`Send`,"composer.sendMessage":`Send a message to LoopX`,"composer.sendMessageHint":`Send message`,"composer.sentImageAlt":`Remove image {name}`,"conversation.agentPending":`Working…`,"conversation.close":`Close conversation receipt`,"conversation.convertHint":`Turn the Agent’s latest reply into a Task draft`,"conversation.full":`View full conversation`,"conversation.receipt":`Conversation receipt`,"conversation.replying":`Replying`,"conversation.title":`Manager conversation`,"conversation.toTask":`Convert to Task`,"digest.away":`Runs since your previous visit`,"digest.completed":`new completions`,"digest.failed":`new failed/interrupted runs`,"digest.needsYou":`currently need confirmation`,"feedback.applying":`Running: {title}`,"feedback.cancelFailed":`Cancel failed: {error}`,"feedback.completed":`Completed: {title}`,"feedback.executionFailed":`Execution failed: {error}`,"feedback.gateRequired":`Your confirmation is required: {summary}`,"feedback.notCompleted":`Not completed: {status}`,"feedback.goalRefreshFailed":`The Goal opened, but its latest state could not be refreshed. Use Refresh to try again.`,"feedback.preparingPreview":`Preparing confirmation preview: {title}`,"feedback.previewFailed":`Could not prepare the confirmation preview: {error}`,"feedback.sendFailed":`Send failed: {error}`,"feedback.sendGenericError":`Could not send the message. Try again later.`,"feedback.stale":`State changed, so nothing was applied. Generate a new confirmation preview.`,"feedback.taskDraftCreated":`Created a Task draft from the reply. Edit and send it to review the confirmation preview.`,"goal.defaultTitle":`New personal Goal`,"goal.initialTodo":`Work toward the completion criteria: {criteria}`,"goal.objectiveBoundary":`Execution boundary: {boundary}`,"goal.objectiveCompletion":`Completion criteria: {criteria}`,"drawer.advancedDiagnostics":`Advanced diagnostics`,"drawer.agentWorking":`Agent is continuing; the record updates automatically.`,"drawer.analysis":`Analyzing`,"drawer.apply":`Confirm and apply`,"drawer.applying":`Applying…`,"drawer.attentionBlocking":`Blocking an Agent`,"drawer.attentionWaiting":`Waiting for your decision`,"drawer.autoNotify":`Human-gate auto notifications`,"drawer.branch":`Branch`,"drawer.closeDetail":`Close details and return to {context}`,"drawer.connected":`Connected`,"drawer.correctionDescription":`The message keeps the current Goal, Todo, and Agent Session context.`,"drawer.correctionLabel":`Guide {agent}`,"drawer.correctionPlaceholder":`For example: focus on permission risks first and do not commit yet…`,"drawer.correctionSend":`Send guidance`,"drawer.correctionTextarea":`Enter guidance for Goal {goal}, Agent {agent}, Run {run}`,"drawer.copyRepository":`Copy repository identity`,"drawer.copyRepositoryDone":`Repository identity copied`,"drawer.copyRepositoryError":`Copy failed. Check browser clipboard permission.`,"drawer.copyRepositorySuccess":`Copied. You can paste it into another tool.`,"drawer.cost":`Cost 24h / 7d`,"drawer.costShort":`Cost`,"drawer.durationShort":`Duration`,"drawer.period24h":`24h`,"drawer.period7d":`7d`,"drawer.tokens":`Tokens 24h / 7d`,"drawer.tokensShort":`tokens`,"drawer.usageNotMeasured":`Not measured`,"drawer.currentGoal":`Current Goal`,"attentionDetail.title":`Request details`,"attentionDetail.request":`What is requested`,"attentionDetail.decision":`Decision requested`,"attentionDetail.unknownRequest":`Not specified; review the source before deciding`,"attentionDetail.open":`Open in current projection`,"attentionDetail.closed":`Closed`,"attentionDetail.deferred":`Deferred`,"attentionDetail.superseded":`Replaced`,"attentionDetail.unknown":`Status not provided`,"attentionDetail.unavailable":`The source has not confirmed this item; refresh before acting`,"attentionDetail.unknownReason":`The source has not provided a reason.`,"attentionDetail.targetTodo":`Linked Todo to unblock`,"attentionDetail.targetAgent":`Agent named by the request`,"attentionDetail.scope":`Declared decision scope`,"attentionDetail.notProvided":`Not provided`,"attentionDetail.replacement":`Replacement Todo`,"attentionDetail.openReplacement":`Open replacement`,"attentionDetail.boundary":`Reading this detail does not resolve a gate or grant authority. Available decisions require a fresh preview.`,"drawer.decisionDefaultEvidence":`No additional public-safe evidence is attached. The next step will still show a Preview first.`,"drawer.decisionDefaultReason":`This decision affects the next step of the current Todo.`,"drawer.decisionDefer":`Decide later`,"drawer.decisionMore":`More decisions`,"drawer.decisionReject":`Reject`,"drawer.decisionReview":`Review impact and decide`,"drawer.dependencies":`Dependencies`,"drawer.detailsAndActions":`Details & actions`,"drawer.duration":`Duration 24h / 7d`,"drawer.evidence":`Evidence`,"drawer.executionHistory":`Execution history`,"drawer.executionRecord":`Run record`,"drawer.executionRecordAndResult":`Execution & result`,"drawer.explainDecision":`Explain this decision`,"drawer.gateApproveHint":`Run one command in the terminal to complete approval:`,"drawer.gateRejectHint":`Replace approve with reject at the end to decline. This notice disappears after the command runs.`,"drawer.gateRequiresHost":`Host confirmation required`,"drawer.gateRequiresHostDescription":`This page cannot approve this protected permission change. Nothing was written by your click.`,"drawer.goalAutoRun":`Automatic runs for this Goal`,"drawer.goalChanges":`Pending changes for this Goal`,"drawer.goalDetails":`Goal details`,"drawer.group":`Group`,"drawer.inspectorFull":`Switch to full screen`,"drawer.inspectorFullView":`Full-screen view`,"drawer.inspectorHalf":`Switch to half screen`,"drawer.inspectorHalfView":`Half-screen view`,"drawer.lastNotification":`Latest notification`,"drawer.larkConfigure":`Configure Lark connection`,"drawer.larkConnect":`Connect Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`Not configured`,"drawer.larkNotConfiguredDescription":`After setup, LoopX sends a Feishu notification when this Goal needs your confirmation.`,"drawer.managerChanges":`Pending Manager changes`,"drawer.moreActions":`More actions`,"drawer.moreRunActions":`More run actions`,"drawer.nextTransition":`Next transition`,"drawer.validationRevision":`Validation revision`,"drawer.validationDigest":`Validation declaration digest`,"drawer.validationRevisionActor":`Revised by`,"drawer.noExecutionHistory":`No execution history yet.`,"drawer.noRun":`Execution Session has not started`,"drawer.noRunDescription":`Run records will appear here after an Agent starts execution.`,"drawer.notAssigned":`Unassigned`,"drawer.notLinked":`Not linked`,"drawer.notSet":`Not set`,"drawer.outputDetails":`Output details`,"drawer.outputRecorded":`This output is recorded on the current Goal.`,"drawer.outputSafePreview":`Public-safe output preview`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`Outputs from this run`,"drawer.previewUnavailable":`No public-safe inline preview is available for this output.`,"drawer.priority":`Priority`,"drawer.progress":`Progress`,"drawer.proposalApplied":`Applied. LoopX state will refresh.`,"drawer.proposalApplyFailed":`Apply failed. No changes were written.`,"drawer.proposalApplyFailedHint":`Refresh the Goal state and regenerate. If it still fails, keep this page open and inspect advanced diagnostics.`,"drawer.proposalClose":`Close`,"drawer.proposalDefer":`Later`,"drawer.proposalDeferred":`Deferred. You can apply it later or regenerate it.`,"drawer.proposalEnterGoal":`Open new Goal`,"drawer.proposalExplainer":`After confirmation, LoopX applies this change and shows the write result. Closing or canceling changes nothing.`,"drawer.proposalRecheck":`Recheck against latest state`,"drawer.proposalRegenerate":`Retry with latest state`,"drawer.proposalRejected":`Rejected. This change will not be written.`,"drawer.proposalStale":`Source state changed. Recheck against the latest state.`,"drawer.proposalViewGoal":`View updated Goal`,"drawer.reassign":`Reassign to`,"drawer.reassignSummary":`Reassign: {task}`,"drawer.reason":`Reason`,"drawer.recoveryDescription":`Local history is preserved. Choose a recovery path.`,"drawer.recoveryFailed":`Upstream Session recovery failed`,"drawer.recoveryNewSession":`Start a new Session with context`,"drawer.recoveryRetry":`Retry recovery`,"drawer.repositoryRole":`Execution workspace`,"drawer.repository":`Repository`,"drawer.replyMode":`Reply mode`,"drawer.subagentApplied":`Applied and verified against the shared Goal state.`,"drawer.subagentAppliedRestart":`Applied and verified. The raised Codex child-agent limit takes effect in new Sessions.`,"drawer.subagentAppliedRefreshFailed":`Applied and verified. The status view could not refresh; retry the page refresh later.`,"drawer.subagentApplying":`Applying and verifying shared-state readback…`,"drawer.subagentApplyFailed":`Could not apply the sub-agent setting.`,"drawer.subagentChildLimit":`Current limit`,"drawer.subagentConfirmDisable":`Confirm turning off sub-agent execution`,"drawer.subagentConfirmEnable":`Confirm turning on sub-agent execution`,"drawer.subagentCurrentBoundary":`Current task-domain restriction`,"drawer.subagentDescription":`Allows the runtime to create temporary child agents for independent tasks only after Todo, quota, capability, and write-scope gates pass. It does not force parallel work or grant durable authority.`,"drawer.subagentDisable":`Preview turning off sub-agent execution`,"drawer.subagentDisableSummary":`New child-agent execution will be disabled for this Goal. Existing Todo ownership and execution records stay unchanged.`,"drawer.subagentDomainInvalid":`The selected task-domain restriction is invalid.`,"drawer.subagentDomainTodoCount":`{count} matching open Todos`,"drawer.subagentDomains":`Task-domain restriction (optional)`,"drawer.subagentDomainsEmpty":`No open advancement Todo declares task_domain. Leave this empty to keep child execution unrestricted by task domain.`,"drawer.subagentDomainsHint":`Leave every option clear to apply no task-domain filter. Selecting domains admits only matching typed Todos; all other execution gates still apply.`,"drawer.subagentDomainsUnrestricted":`No task-domain restriction`,"drawer.subagentEnable":`Preview turning on sub-agent execution`,"drawer.subagentLabel":`Per-Goal execution boundary`,"drawer.subagentModel":`Child model`,"drawer.subagentEffort":`Child reasoning effort`,"drawer.subagentModelDefault":`Host default`,"drawer.subagentLunaPreset":`Use Luna / max`,"drawer.subagentClearModel":`Clear model preference`,"drawer.subagentModelHint":`Use Preview configuration update to save this preference. It can be saved while execution is off; host support is checked at launch.`,"drawer.subagentModelRequired":`Choose a child model before setting reasoning effort.`,"drawer.subagentExecutionConfig":`Delegation bindings`,"drawer.subagentExecutionConfigHint":`Optional repo-relative ignored JSON under .loopx/config/. Planning sees only authorized route status; the file remains the execution-grant owner.`,"drawer.subagentExecutionConfigNone":`Not configured`,"drawer.subagentMaxChildren":`Maximum child agents`,"drawer.subagentHostCapacityImplicit":`implicit default`,"drawer.subagentHostCapacityRaise":`Confirming also raises the Codex child-agent limit to at least {required} (currently {configured}). Existing higher values are preserved; new Sessions are required.`,"drawer.subagentHostCapacityReady":`Codex child-agent capacity ({configured}) already satisfies this Goal ({required}).`,"drawer.subagentNoChange":`The current Goal already matches this setting; nothing was written.`,"drawer.subagentPending":`Pending confirmation`,"drawer.subagentPreviewBoundary":`Preview configuration update`,"drawer.subagentPreviewFailed":`Could not create the sub-agent setting preview.`,"drawer.subagentPreviewing":`Checking the latest Goal state…`,"drawer.subagentPreviewReady":`Preview locked. Confirm to apply this Goal setting.`,"drawer.subagentPreviewSummary":`Allow up to {count} child agents. Task-domain restriction: {domains}.`,"drawer.subagentRemoteReadOnly":`This source is read only. Open the Goal on its host to change the setting.`,"drawer.subagentTitle":`Adaptive sub-agent execution`,"drawer.remoteDetailsDescription":`SSH sources expose public-safe status only and do not read connection settings from the source host.`,"drawer.remoteDetailsUnavailable":`Remote details are not projected`,"drawer.resumeNo":`No`,"drawer.resumeYes":`Yes`,"drawer.runDetails":`Execution Session`,"drawer.runInterrupt":`Interrupt this run`,"drawer.runLatest":`View latest execution`,"drawer.runNewSession":`Start new Session`,"drawer.runCloseSession":`Close Session`,"drawer.runRecordEmpty":`No run record yet. The Agent has not started this execution. Check waiting conditions or resume the Session under Details & actions.`,"drawer.runRecordProjected":`No step-by-step record is available. LoopX read {completed}/{total} projected steps{outputs}; inspect the Session under Details & actions.`,"drawer.runRecordProjectedOutputs":` and {count} outputs`,"drawer.runRoleAssistant":`Completed`,"drawer.runRoleSystem":`Needs review`,"drawer.runRoleUser":`Task received`,"drawer.runView":`Session views`,"drawer.scheduleAdd":`Add scheduled check`,"drawer.scheduleDefaultNotification":`Notify only when you are needed`,"drawer.scheduleDefaultStop":`Goal completes or owner stops it`,"drawer.scheduleDefaultTarget":`Wake according to this Goal’s LoopX schedule.`,"drawer.scheduleEdit":`Change to every 2 hours`,"drawer.scheduleLast":`Last run`,"drawer.scheduleLocalTimezone":`Local timezone`,"drawer.scheduleNext":`Next run`,"drawer.scheduleNeverRun":`Not run yet`,"drawer.scheduleNotification":`Notification`,"drawer.schedulePause":`Pause`,"drawer.schedulePending":`Waiting for schedule`,"drawer.scheduleResume":`Resume`,"drawer.scheduleRunNow":`Run now`,"drawer.scheduleStop":`Stop {kind}`,"drawer.scheduleStopCondition":`Stop condition`,"drawer.scheduleTimezone":`Timezone`,"drawer.sessionRecoverable":`Resumable`,"drawer.sessionStatus":`Session status`,"drawer.setupHeartbeat":`Set up Heartbeat`,"drawer.taskActions":`Pending Todo actions`,"drawer.taskAdvancement":`Advancement task`,"drawer.taskBlock":`Mark blocked`,"drawer.taskComplete":`Mark complete`,"drawer.taskCompletedNote":`This task is retained as a read-only record.`,"drawer.taskCompletedTitle":`Task completed`,"drawer.taskDefer":`Defer`,"drawer.taskDeferCondition":`Todo defer resume condition`,"drawer.taskDeferInvalid":`Unsupported condition format; use one of the deterministic conditions below.`,"drawer.taskDeferPlaceholder":`For example, resume_at:2026-09-14T09:00:00+08:00`,"drawer.taskDeferReview":`Review defer`,"drawer.taskDeferSupported":`Supports todo_done, pr_merged, capacity_available, and timezone-aware resume_at conditions.`,"drawer.taskPriority":`Priority`,"drawer.taskPriorityChoose":`Choose priority`,"drawer.taskPriorityClear":`No priority`,"drawer.taskDeferUntil":`Defer until`,"drawer.taskDetails":`Todo details`,"drawer.taskInfo":`Task information`,"drawer.taskManage":`Manage task`,"drawer.taskNextCompleted":`Create a follow-up task`,"drawer.taskNextOpen":`Advance or update status`,"drawer.taskOrdinary":`Task`,"drawer.taskStatusBlocked":`Blocked`,"drawer.taskStatusDeferred":`Deferred`,"drawer.resumeWhen":`Resume condition`,"drawer.resumeState":`Resume state`,"drawer.resumePending":`Waiting for condition`,"drawer.resumeReady":`Ready to resume`,"drawer.resumeReceipt":`Resume receipt`,"drawer.taskNextDeferred":`Wait for the resume condition, then reassess`,"drawer.taskNextResumeReady":`Resume condition met; awaiting lifecycle replan`,"drawer.taskStatusCompleted":`Completed`,"drawer.taskStatusOpen":`Ready`,"drawer.taskSuccessor":`Create follow-up Todo`,"drawer.taskSuccessorNote":`Owner marked this blocked while waiting for more context.`,"drawer.taskSuccessorSummary":`Create follow-up Todo: {task}`,"drawer.taskSuccessorText":`Follow-up work for {task}`,"drawer.taskType":`Task type`,"drawer.topic":`Topic`,"drawer.trigger":`Trigger`,"drawer.titleAttention":`Needs you`,"drawer.titleOutput":`Output details`,"drawer.titleProposalApplied":`Execution result`,"drawer.titleProposalConfirm":`Confirm execution`,"drawer.titleSchedule":`Scheduled check`,"drawer.unconfigured":`Not configured`,"drawer.workspaceCandidates":`Available workspaces`,"files.emptySummary":`Public-safe output`,"files.empty":`No files, outputs, or verified reports yet.`,"files.loadingReports":`Loading verified milestone reports…`,"files.reportDelta":`+{added} added · {changed} changed`,"files.reportAdded":`added`,"files.reportChanged":`changed`,"files.reportGeneration":`Generation`,"files.reportLoadFailed":`Could not load verified reports`,"files.reportPublication":`Publication`,"files.title":`Files & Outputs`,"files.verifiedReport":`Verified milestone report`,"header.agentUnavailable":`Unavailable`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} work Agents`,"header.overview":`Overview`,"header.chat":`Chat`,"header.files":`Files`,"header.goalCapabilities":`Capability settings`,"header.goalCapabilitiesDescription":`Manage overrides and inherited machine defaults.`,"header.goalDetails":`Goal details`,"header.goalDetailsDescription":`Review status, usage, repository, notifications, and sessions.`,"header.goalSettings":`Goal settings`,"header.goalSettingsDescription":`Configure this Goal’s capabilities`,"header.goalNavigation":`Goal navigation`,"header.goalView":`Goal view`,"header.live":`Live`,"header.manager":`LoopX Manager`,"header.managerDescription":`Your personal workspace across Goals`,"header.managerRuntime":`{profile} · {sandbox}`,"header.managerRuntimeFallback":`Configuration invalid; fell back to {profile} · {sandbox}. Repair it in Machine capabilities.`,"header.managerExecutorKindIndividual":`individual CLI login`,"header.managerExecutorKindManaged":`operator credential`,"header.managerExecutorKindRegistered":`registered endpoint`,"header.managerExecutionUnavailable":`Selected {executor} cannot start here; this channel does not fall back to an individual CLI login.`,"header.managerExecutionUnavailableCredential":`Selected {executor} needs the operator credential {credential} before this channel can start it.`,"header.managerExecutionUnavailableRuntime":`Selected {executor} cannot start here because its runtime is not installed on this machine.`,"header.managerExecutionUnavailableEffort":`Selected {executor} rejected the configured reasoning effort; set a supported effort and reload.`,"header.managerExecutionUnavailableOutputBudget":`Selected {executor} has an invalid per-request output-token limit; set a positive integer and reload.`,"header.managerEndpointStewardDefault":`Runs {executor}, the steward channel's shipped default. Select an executor explicitly to move it.`,"header.managerOutputTokenBudget":`{tokens} tok/request`,"header.managerAllocation":`Selection: {policy} · {reason}`,"header.managerSelectionPreferred":`preferred`,"header.managerSelectionPinned":`pinned`,"header.managerSelectionFlexible":`flexible pool`,"header.managerAllocationUser":`explicit user choice`,"header.managerAllocationPinned":`pinned by machine configuration`,"header.managerAllocationFallback":`primary unavailable; used an eligible fallback`,"header.managerAllocationUnavailable":`no eligible route is currently available`,"header.managerAllocationPrimary":`primary route is available`,"header.managerAllocationProductDefault":`product default`,"header.managerAllocationService":`service environment override`,"header.managerAllocationConfigured":`configured route`,"header.managerOverview":`Overview`,"header.managerView":`Manager view`,"header.openGoalNavigation":`Open Goal navigation`,"header.readOnlySourceDescription":`{source} is displayed read-only through an SSH tunnel`,"header.refresh":`Refresh status`,"header.refreshDone":`Updated just now`,"header.refreshFailed":`Refresh failed`,"header.refreshing":`Refreshing`,"header.selectAgent":`Select Agent`,"header.selectChatRuntime":`Select chat runtime`,"header.tasks":`Tasks`,"header.themeBrutal":`Switch to brutal theme`,"header.themePaper":`Switch to default theme`,"home.blockingSummary":`{count} are blocking an Agent.`,"home.completedGoals":`Completed Goals`,"home.empty":`Nothing here`,"startup.goalLoading":`Loading status…`,"startup.goalError":`Could not load status`,"startup.progress":`{loaded} of {total} active Goals loaded`,"startup.partial":`Goal states are updating. Counts are incomplete.`,"startup.independent":`Other Goals remain available while this Goal loads.`,"startup.error.timeout":`The request timed out. Retry when the local service is ready.`,"startup.error.network":`The connection was interrupted. Retry to reconnect.`,"startup.error.service":`The Goal status could not be read. Retry later; if the problem continues, check the status source.`,"startup.error.access":`The status source cannot access files or runtime directories required for this Goal. Check the permissions of the account running that source, then retry.`,"startup.error.revision":`The Goal directory changed during loading. Refresh to synchronize.`,"startup.error.scope":`This Goal is no longer available in the selected source. Refresh the directory.`,"startup.error.invalid":`The status response could not be read. Refresh or check for a LoopX update.`,"startup.retry":`Retry`,"startup.retryFailed":`Retry failed Goals`,"startup.failedCount":`{count} Goals could not be loaded. Ready Goals remain available.`,"home.greeting":`Hi, I’m your LoopX Manager`,"home.history":`History`,"home.lane.needsYou":`Needs you`,"home.lane.needsYouDescription":`Waiting for your decision, authorization, or context`,"home.lane.observing":`Observing`,"home.lane.observingDescription":`Monitoring continuously and notifying you when something changes`,"home.lane.running":`Running`,"home.lane.runningDescription":`Agents are making progress and reporting back`,"home.lane.scheduled":`Scheduled`,"home.lane.scheduledDescription":`Queued until its time or prerequisite arrives`,"home.noActivity":`No activity yet`,"home.noFirstActivity":`Waiting for first activity`,"home.noCompletedGoals":`No completed Goals yet`,"home.preservedState":`State is preserved and can be resumed`,"home.stopped":`Stopped`,"home.systemHealth":`System health: {summary}`,"home.taskCount":`{count} Tasks`,"home.todayAt":`Today {time}`,"home.waitingCount":`You have {count} items to handle.`,"home.workspace":`Goal workspace`,"lark.allMessages":`All messages in this topic`,"lark.allTopicMessages":`All topic messages`,"lark.agentIngress":`Agent ingress`,"lark.agentAppPermissions":`Every selected Agent needs a Lark App that is ready for group mentions and replies.`,"lark.agentApps":`Lark App per Agent`,"lark.agentAppsDescription":`The default App is preselected. Assign a different compatible App when an Agent needs its own bot identity.`,"lark.agentAppSelection":`Lark App for {agent}`,"lark.appCreated":`App created`,"lark.appCreateFailed":`Creation failed`,"lark.appLoading":`Loading available Lark Apps…`,"lark.appPermissions":`This App can send connection messages, but lacks the bot permissions required to receive group mentions or reply automatically. Enable im:message.group_at_msg:readonly, im:message.send_as_bot, and the im.message.receive_v1 event, publish a new version, then refresh.`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`Auto reply unavailable`,"lark.autoReplyReady":`Auto reply ready`,"lark.bindGoal":`Bind to Goal`,"lark.cancel":`Cancel`,"lark.cardinality":`One Lark App · many Goals · one isolated route per Agent`,"lark.capture":`Capture`,"lark.captureAddressed":`Only messages that mention or reply to the App`,"lark.captureAll":`All messages in this Goal topic`,"lark.captureScope":`Capture scope`,"lark.captureScopeDescription":`Controls which Topic messages enter LoopX without expanding Agent permissions.`,"lark.closeConnection":`Close connection dialog`,"lark.closeCreate":`Close create dialog`,"lark.closeSettings":`Close Lark settings`,"lark.connect":`Connect`,"lark.connectAllAgents":`Connect every registered Agent`,"lark.connectAllAgentsAction":`Connect {count} Agents`,"lark.connectAllAgentsDescription":`Create {count} isolated Agent Topics in one guided action. Send requests inside the matching Topic; each Agent keeps its own route and inbox.`,"lark.connectApp":`Connect Lark App`,"lark.connection":`Connection`,"lark.connections":`Connections`,"lark.configuration":`Lark configuration`,"lark.continueFeishu":`Continue in Feishu`,"lark.createAutomatically":`Create Goal topic automatically`,"lark.createAutomaticallyDescription":`A dedicated, Agent-labelled Topic will be created for every selected Agent.`,"lark.defaultAgentAppDescription":`Used to find the target group and as the default for every selected Agent. Per-Agent choices below override it.`,"lark.description":`Manage reusable Lark Apps and connect group chats to Goals through dedicated topics.`,"lark.editConnection":`Edit Lark Connection`,"lark.goalConnections":`{count} Goal connections`,"lark.goalTopicConnections":`Lark Goal Topic connections`,"lark.groupChat":`Group chat`,"lark.groupEmpty":`This bot has not joined a group that can be connected. Add it to a Feishu group first, then return to refresh or search.`,"lark.groupLoading":`Reading groups joined by this bot…`,"lark.groupSearch":`Search groups joined by this bot`,"lark.historyPermission":`Group-history permission (separate capability)`,"lark.health.contextCaptured":`Group context captured`,"lark.health.contextCapturedDetail":`The message is retained as non-authoritative context. It did not start or steer a Manager turn; send a direct @ mention or verified reply when action is required.`,"lark.health.eventProcessed":`{events} events processed, {replies} replies sent.`,"lark.health.eventUnverified":`Event subscription needs verification`,"lark.health.eventUnverifiedDetail":`The provider listener is ready, but no event has arrived. Enable im.message.receive_v1 and group mention permissions, publish a new version, then send a new @ mention inside this Agent Topic. Group-level messages fail closed when multiple Agent routes exist.`,"lark.health.ignoredSelf":`The bot’s own message was ignored to prevent duplicate replies.`,"lark.health.invalidRouting":`Invalid routing configuration`,"lark.health.invalidRoutingDetail":`The connection was safely disabled. Select a processing mode again and save.`,"lark.health.lastStatus":`Latest event status: {status}`,"lark.health.listening":`Listening`,"lark.health.messageContextPermission":`Message permission required`,"lark.health.messageContextPermissionDetail":`A message event arrived, but group context could not be read. Publish and authorize group message read access for this App.`,"lark.health.notAddressed":`Latest message did not directly @ the bot`,"lark.health.notAddressedDetail":`Listening is healthy. This connection only responds to direct @ mentions or replies to the bot.`,"lark.health.notStarted":`Listener not started`,"lark.health.notStartedDetail":`Refresh the connection or restart LoopX, then try again.`,"lark.health.processingFailed":`Message processing failed`,"lark.health.processingFailedDetail":`The message event arrived, but Agent processing failed. Review local diagnostics and retry.`,"lark.health.queued":`Queued in the Agent inbox`,"lark.health.queuedDetail":`The message will be processed asynchronously by {agent} without starting a general Chat Session.`,"lark.health.sourceDisconnected":`Event connection disconnected`,"lark.health.sourceDisconnectedDetail":`The event consumer exited unexpectedly. Check that the app profile uses Feishu for Feishu apps or Lark for international Lark, then inspect connection and subscription errors. LoopX is retrying; successful history queries do not prove live delivery.`,"lark.health.retrying":`Retrying listener`,"lark.health.retryingDetail":`Event listening was interrupted and LoopX is retrying automatically.`,"lark.health.routeAmbiguous":`Message matches multiple Goals`,"lark.health.routeAmbiguousDetail":`The same bot and group have multiple full-group capture connections. Use a separate bot for each Agent or keep only one full-group connection.`,"lark.health.routeMismatch":`Message did not match this Goal Topic`,"lark.health.routeMismatchDetail":`The event came from another group or Topic. Reconnect this Goal to the correct group, then send a new @ mention.`,"lark.health.routeUnavailable":`Message cannot be routed to the Goal`,"lark.health.routeUnavailableDetail":`Connection data is incomplete. Reconnect this Goal, then send a new @ mention.`,"lark.health.starting":`Starting`,"lark.health.startingDetail":`LoopX is starting message event listening for this App.`,"lark.health.unavailable":`Auto reply unavailable`,"lark.health.waiting":`Waiting`,"lark.incomingMessages":`Incoming messages`,"lark.ingressAsync":`Async inbox`,"lark.ingressAsyncDescription":`Write to the Agent private inbox for a later explicit drain.`,"lark.editPreservesIdentity":`Saving preserves this App, group and Topic. Old connections upgrade to the Agent inbox by default.`,"lark.conversationKind":`Connection purpose`,"lark.managerConversation":`Manager · live conversation`,"lark.workerConversation":`Worker Agent · background tasks`,"lark.managerConversationDescription":`The built-in manager responds as you chat and delegates long-running work to background Agents. Group and private conversations keep separate histories.`,"lark.ingressLegacy":`Upgrade available`,"lark.ingressLegacyDescription":`Save this connection to upgrade to the Agent inbox. Existing messages remain in the same Topic.`,"lark.ingressQueue":`Queuing`,"lark.ingressQueueDescription":`Enter the same Agent Session's bounded FIFO queue and run after the current Turn.`,"lark.ingressSteering":`Steering`,"lark.ingressSteeringDescription":`Deliver to the active Turn and reject safely when no exact active Turn exists.`,"lark.loading":`Loading Lark configuration…`,"lark.management":`Lark management`,"lark.openEventSettings":`Open Feishu event settings`,"lark.mentions":`Mentions`,"lark.mentionsOnly":`Mentions only`,"lark.needsMessagePermissions":`Needs message permissions`,"lark.needsSetup":`Needs setup`,"lark.newApp":`New Lark App`,"lark.noAgentConfigured":`No Agent configured`,"lark.noConnections":`No matching connections.`,"lark.noProfiles":`No lark-cli App profiles are available yet.`,"lark.profileName":`Profile name`,"lark.profileValidation":`Profile can contain only letters, numbers, periods, underscores, and hyphens.`,"lark.processing":`Processing`,"lark.region":`Region`,"lark.registerAnother":`+ Register another Lark App — Create through Feishu`,"lark.reopenFeishu":`Reopen Feishu`,"lark.settingsConfigure":`Configure {goal}`,"lark.settingsDisconnect":`Disconnect {goal}`,"lark.replyMode":`Reply mode`,"lark.replyModeDescription":`Replies are limited to the source Topic to prevent cross-group or cross-Goal delivery.`,"lark.reusableApps":`{count} reusable Apps`,"lark.reusableWorkspaceApp":`Reusable workspace App`,"lark.routesUnverified":`{count} Lark routes pending verification`,"lark.saveConnection":`Save connection`,"lark.searchConnections":`Search Lark connections`,"lark.searchPlaceholder":`Search Apps, groups, Goals, or topics`,"lark.setupCopy":`LoopX opens the official Feishu creation page through lark-cli. App credentials stay in the system Keychain; LoopX stores only the profile reference.`,"lark.someoneMentions":`Someone mentions the Agent`,"lark.targetAgent":`Target Agent`,"lark.targetAgentDescription":`Choose a registered Agent in this Goal. This connection delivers to one Agent; it does not broadcast or grant permissions. Steering and Queuing require that Agent's exact active Session.`,"lark.agentUnavailable":`{agent} · no longer available`,"lark.selectRegisteredAgent":`Select an available registered Agent before connecting. The previous Agent will not be replaced automatically.`,"lark.topicPreview":`Topic preview`,"lark.topicReply":`Topic reply`,"lark.trigger":`Trigger`,"lark.waitingFeishu":`Waiting for Feishu`,"lark.waitingFeishuDescription":`Complete Feishu authorization in the new window. This page updates automatically when it is ready.`,"lark.waitingLink":`Generating the official Feishu creation link…`,"lark.error.appCreate":`Lark App creation failed`,"lark.error.appRequired":`Select a Lark App profile.`,"lark.error.bind":`Connection failed`,"lark.error.bindPreview":`Connection preview failed`,"lark.error.configuration":`Could not load Lark configuration`,"lark.error.groupLookup":`Could not read groups joined by this bot. Check the bot status and try again.`,"lark.error.groupLoad":`Could not load group chats`,"lark.error.invalidApp":`The Lark App profile is unavailable or has not completed authorization.`,"lark.error.messagePermissions":`This App lacks the bot permissions required for automatic replies. Enable im:message.group_at_msg:readonly and im:message:send_as_bot, publish a new version, then refresh.`,"lark.error.provider":`The Feishu API call failed without a verified receipt. Try again later.`,"lark.error.setupPoll":`Could not read creation status`,"lark.error.setupStart":`Could not start Lark App creation`,"lark.error.cliExecutable":`The configured lark-cli was found but cannot run. Check the installation or launch arguments.`,"lark.error.cliMissing":`lark-cli was not found. Install lark-cli and restart LoopX.`,"lark.error.cliStart":`lark-cli failed to start. Check the installation and restart LoopX.`,"lark.error.disconnect":`Disconnect failed`,"notifications.autoNotify":`Send automatically when your confirmation is required`,"notifications.bind":`Bind notification group`,"notifications.bindConfirm":`Bind “{goal}” to “{target}”. LoopX will verify that the bot is in the group and send a confirmation message.`,"notifications.bindFailed":`Binding failed`,"notifications.bound":`Bound`,"notifications.confirmBind":`Confirm binding`,"notifications.description":`Send Goal changes that need your confirmation to a Feishu group. Bindings and automatic delivery use the existing channel.`,"notifications.disabled":`Disabled`,"notifications.group":`Notification group: {target}`,"notifications.loadFailed":`Could not load notification groups`,"notifications.noTargets":`No notification groups are available. Group delivery uses a private bot identity; configure one from the terminal first:`,"notifications.notBound":`Not bound`,"notifications.recent":`Latest {time}`,"notifications.sentCount":`{count} sent`,"notifications.settings":`Goal notification bindings`,"notifications.setupFailed":`Could not update settings`,"notifications.title":`Feishu group notifications`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`Frequency`,"proposal.field.completionCriteria":`Completion criteria`,"proposal.field.executionBoundary":`Execution boundary`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`Initial tasks`,"proposal.field.objective":`Objective`,"proposal.field.operation":`Operation`,"proposal.field.operationState":`Operation state`,"proposal.field.resultDelivery":`Result delivery`,"proposal.field.confirmationBoundary":`Confirmation boundary`,"proposal.field.expiresAt":`Expires at`,"proposal.field.permission":`Permission`,"proposal.field.reason":`Reason`,"proposal.field.stopCondition":`Stop condition`,"proposal.field.target":`Check target`,"proposal.field.timezone":`Timezone`,"proposal.field.title":`Title`,"proposal.field.workspace":`Execution workspace`,"actionReview.targetChanged":`The preview target does not match the requested Goal and operation. Generate a new preview.`,"actionReview.ready_stop":`Pausing is reversible. This validated preview can apply directly; completion still requires verified readback.`,"actionReview.resume_review":`Review before restoring automatic scheduling. Quota, gates and Todo constraints still apply.`,"actionReview.delete_review":`Review removal of this stopped Goal from the registries. Project files and history are preserved.`,"actionReview.action_review":`Review the target and impact before applying this proposal.`,"actionReview.protected_action":`This action needs explicit review. Confirmation cannot replace required authority.`,"actionReview.unknown_permission":`The permission classification is not recognized. Recheck the proposal before continuing.`,"actionReview.unknown_action":`This lifecycle operation is not recognized. Recheck the proposal before continuing.`,"actionReview.incomplete_proposal":`The preview is missing validation or an available apply transition. Generate a new preview.`,"actionReview.authority_gate":`A gate prevents execution. Resolve its requirements, then recheck the proposal.`,"actionReview.stale_proposal":`The source state changed. Generate a new preview; the previous decision no longer applies.`,"actionReview.apply_pending":`Execution is in progress. Wait for its result before retrying.`,"actionReview.readback_verified":`The action completed and its resulting state was verified.`,"actionReview.readback_unverified":`The action returned without verified readback. Completion is not confirmed; recheck the state.`,"actionReview.operation_group_confirmation":`This exact request can only be confirmed on its original card in the bound Feishu group. The Dashboard does not expose a local execution control.`,"actionReview.operation_result_delivery_pending":`The operation outcome was recorded, but the original group result card has not passed readback verification yet.`,"drawer.recoverEditResult":`Recover operation result`,"drawer.retryOriginal":`Retry original operation`,"actionReview.canonical_update_retry":`The edit is not yet verified. Retry this operation to recover its result.`,"actionReview.canonical_update_projection_pending":`The operation was committed; display delivery is pending. Retry this operation to restore the current view.`,"actionReview.apply_failed":`Execution did not complete. Check the failure and regenerate the preview before retrying.`,"actionReview.inactive_proposal":`This proposal is no longer ready to execute. Recheck it before continuing.`,"proposal.gate.default":`Host confirmation required`,"proposal.impact.goalCreate":`After confirmation, LoopX will create the Goal and its initial Todo, then let the selected Agent start the first run.`,"proposal.impact.lifecycleDelete":`After confirmation, this stopped Goal is removed from the source and global registries. Project files, history state, and backups are preserved.`,"proposal.impact.lifecycleResume":`After confirmation, the Goal becomes eligible for automatic scheduling and returns to Active Goals. Actual execution still follows quota, Gate, and Todo constraints.`,"proposal.impact.lifecycleStop":`After confirmation, automatic progress stops and the Goal moves to the collapsed Stopped list. History, Todos, and evidence remain available for resuming.`,"proposal.impact.protected":`This action must be completed through the protected LoopX write service.`,"proposal.impact.operation":`The exact terms are read-only here. Confirm or reject the same immutable request in the bound Feishu group; confirmation consumes one canonical claim.`,"proposal.primary.apply":`Confirm and apply`,"proposal.primary.goalCreate":`Create Goal and start first run`,"proposal.primary.lifecycleDelete":`Delete Goal`,"proposal.primary.lifecycleResume":`Resume Goal`,"proposal.primary.lifecycleStop":`Stop Goal`,"proposal.primary.todoStart":`Create task and start execution`,"proposal.primary.operationGroup":`Confirm in Feishu group`,"proposal.primary.operationResultPending":`Result card delivery pending`,"proposal.primary.operationResultVerified":`Verified result`,"proposal.resultDelivery.verified":`Verified in the original group card`,"proposal.resultDelivery.pending":`Pending verified return to the original group card`,"proposal.summary.goalCreate":`Create Goal: {title}`,"proposal.summary.heartbeat":`Set a Heartbeat for the current Goal`,"proposal.summary.lifecycleDelete":`Delete Goal: {title}`,"proposal.summary.lifecycleResume":`Resume Goal: {title}`,"proposal.summary.lifecycleStop":`Stop Goal: {title}`,"proposal.summary.monitor":`Create a scheduled check for the current Goal: {target}`,"proposal.teamPlan.gapReason.capabilityNotGranted":`Required capability not granted`,"proposal.teamPlan.gapReason.audienceNotAuthorized":`Required access not authorized`,"proposal.teamPlan.pending":`Pending`,"proposal.teamPlan.assignedHint":`Assignment recorded. See the Goal for execution progress.`,"proposal.teamPlan.recoveredHint":`No new tasks created. See the Goal for current progress.`,"proposal.teamPlan.originalPlan":`View original plan`,"proposal.teamPlan.viewResult":`View result`,"proposal.teamPlan.openGoal":`Open Goal`,"proposal.teamPlan.resultTitle":`Assignment result`,"proposal.teamPlan.retry":`Retry assignment`,"proposal.teamPlan.retryHint":`Retry this assignment to recover its result without duplicating tasks.`,"proposal.summary.teamPlan":`Assign {count} tasks for {goal}`,"proposal.impact.teamPlan":`Confirm to assign the ready tasks. Unavailable assignments stay pending.`,"proposal.primary.teamPlan":`Confirm assignment`,"proposal.field.laneGaps":`Unstaffed lanes`,"proposal.field.quotaEnvelope":`Quota envelope`,"proposal.teamPlan.acceptanceShort":`acceptance reference`,"proposal.teamPlan.advisory":`planning context; not enforced by this confirmation`,"proposal.teamPlan.appliedPartially":`{created} assigned · {gaps} pending`,"proposal.teamPlan.appliedAlreadyPresent":`Original assignment recovered`,"proposal.teamPlan.applied":`{count} tasks assigned`,"proposal.teamPlan.gapLane":`unstaffed`,"proposal.teamPlan.laneUnstaffed":`staffing gap, no first Todo`,"proposal.teamPlan.gapReason.agentNotRegistered":`the Agent is not registered for this Goal`,"proposal.teamPlan.gapReason.actionKindNotSupported":`this host does not ship that action kind`,"proposal.workspace.current":`Current local workspace (no Repository bound)`,"proposal.workspace.named":`{workspace} (execution environment only; does not bind a repository)`,"proposal.workspaceGate.agentImpact":`Bind an Agent identity, then recheck the original action. No Goal has been written.`,"proposal.workspaceGate.agentTitle":`Bind an Agent first`,"proposal.workspaceGate.defaultSummary":`Select the Goal workspace.`,"proposal.workspaceGate.selectionImpact":`After selecting a workspace, LoopX will show the confirmation preview again. The selection itself does not write state.`,"proposal.workspaceGate.selectionTitle":`Select Goal workspace`,"projection.agentAdvancingGoal":`Agent is advancing the current Goal`,"projection.agentIdle":`Nothing needs your attention`,"projection.agentNeedsDecision":`Agent is waiting for your decision`,"projection.agentPreparingNextStep":`Agent is preparing the next step`,"projection.agentStopped":`Stopped by you; history, Todos, and evidence are preserved`,"projection.agentWaitingExternal":`Waiting for an external condition`,"projection.confirmAgentDecision":`Confirm the permission or decision the Agent needs next`,"projection.events24h":`{count} events in the last 24 hours`,"projection.firstReadOnlyAdapterCheck":`Run the first read-only adapter check and save progress`,"projection.goalVerified":`Goal state, Todos, and registration information verified`,"projection.latestRun":`Latest run`,"projection.latestValidation":`Latest validation`,"projection.nextUpdatePending":`Waiting for LoopX to update the next step`,"projection.publicSafeProjection":`Public-safe status projection`,"projection.refreshState":`Refresh LoopX status and confirm the current progress is still valid`,"projection.runEvidenceAvailable":`Run evidence is available`,"projection.runRecorded":`The latest LoopX run is recorded`,"projection.statusRefreshNeeded":`LoopX status needs to be refreshed`,"projection.todoStatusUpdated":`Todo status updated; confirming the next step`,"projection.validationRecorded":`The latest validation is recorded`,"runs.completed":`Completed`,"runs.failed":`Needs review`,"runs.interrupted":`Interrupted`,"runs.queued":`Scheduled`,"runs.ready":`Ready`,"runs.resumeFailed":`Recovery failed`,"runs.running":`Running`,"runs.unknown":`Unknown`,"runs.waiting":`Waiting`,"schedule.active":`Running`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`Scheduled & continuous task`,"schedule.paused":`Paused`,"schedule.summary":`Continuously checked under LoopX scheduling constraints`,"schedule.defaultTarget":`Check the current Goal for blockers, progress, and new outputs`,"schedule.unsupportedCalendar":`Scheduled checks do not currently support an exact weekday or time. Use a fixed interval such as “Every 30 minutes,” “Every 2 hours,” or “Daily.” The draft was preserved and no confirmation preview was created.`,"source.add":`Add source`,"source.addConfigured":`Add read-only source`,"source.addMethod":`Source setup method`,"source.addSsh":`Add SSH source`,"source.closeForm":`Close source form`,"source.configured":`Configured SSH`,"source.configuredCount":`Local SSH Hosts · {count}`,"source.configuredGroup":`Configured SSH Hosts · {count} (select to add)`,"source.connected":`Connected`,"source.connecting":`Connecting`,"source.controlPlane":`Control plane source`,"source.copy":`Copy`,"source.copyCommand":`Copy SSH tunnel command`,"source.copyError":`Could not copy the command. Copy it manually below.`,"source.copied":`Copied`,"source.description":`All explicit Hosts are loaded, including Include files. Wildcards are not listed. Run the command first; LoopX never reads SSH keys or configuration details.`,"source.host":`Local SSH Host`,"source.hostEmpty":`No explicit SSH Hosts are available in ~/.ssh/config.`,"source.hostLoadError":`Could not read local SSH Hosts.`,"source.hostPlaceholder":`Enter or search for a Host`,"source.invalid":`The SSH source settings are invalid.`,"source.loadingHosts":`Loading…`,"source.localInteractive":`Local interactive`,"source.localPort":`Local port`,"source.manual":`Manual URL`,"source.manualDescription":`Remote sources always remain read-only projections and never inherit local write permissions.`,"source.name":`Name`,"source.namePlaceholder":`Remote development machine`,"source.notAvailable":`Unavailable`,"source.readOnly":`SSH tunnel · read only`,"source.readOnlyNoticeDescription":`You can view Goals, Tasks, evidence, and run status. Writes, guidance, and Agent sessions remain on the source host.`,"source.readOnlyNoticeTitle":`Remote read-only projection`,"source.readOnlyWriteError":`Remote SSH tunnel sources are read-only projections and cannot perform control-plane writes.`,"source.refreshHosts":`Reload SSH Hosts`,"source.remove":`Remove source {source}`,"source.removeCurrent":`Remove current source`,"source.select":`Select control plane source`,"source.selectHost":`Select a configured SSH Host.`,"source.statusUrl":`Local forwarded URL`,"source.tunnelCommandPending":`Select a Host to generate the tunnel command`,"machine.absent":`Not configured`,"machine.action.create":`Create machine policy`,"machine.action.delete":`Remove machine policy`,"machine.action.unchanged":`No write required`,"machine.action.update":`Update machine policy`,"machine.applied":`Machine policy applied and read back successfully.`,"machine.applyError":`Machine policy could not be applied.`,"machine.applyPreview":`Apply reviewed preview`,"machine.changedNamespaces":`Changed namespaces`,"machine.capabilityCatalog":`Machine capability catalog`,"machine.capabilityEmpty":`No machine-configurable capabilities are registered.`,"machine.configured":`Configured`,"machine.confirmRollback":`Confirm rollback`,"machine.currentRevision":`Current revision`,"machine.currentValue":`Current machine value`,"machine.description":`Browse the same capability catalog as Goal settings. Configure supported machine defaults here; Goal-only capabilities are labeled explicitly.`,"capabilities.rawJson":`Advanced: raw JSON`,"machine.goalOnly":`This capability currently supports Goal configuration only. Open a Goal’s capability settings to configure it; no machine-wide default is applied.`,"machine.desiredRevision":`Desired revision`,"machine.editorUnavailable":`No editor is installed for this namespace`,"machine.editorUnavailableDescription":`The namespace remains visible in the registry. Install or upgrade its Dashboard editor before changing it.`,"machine.editorMode":`Editor mode`,"machine.liveDefault":`Live default; Goal override wins`,"machine.liveDefaultDescription":`Goals without an explicit override read the current machine policy at the capability’s next decision point. Changes and removal affect those existing Goals immediately; an explicit Goal override stays pinned.`,"machine.credentialTitle":`Operator model credential`,"machine.credentialDescription":`The key and endpoint the steward channel and the managed host authenticate with on this machine. The key is stored in its own owner-only file, never in the machine configuration that is projected here, and it is never read back — only its fingerprint is.`,"machine.credentialApiKey":`API key`,"machine.credentialApiKeyPlaceholder":`Paste a key to store it; leave blank to keep the stored one`,"machine.credentialBaseUrl":`Endpoint base URL`,"machine.credentialBaseUrlPlaceholder":`https://endpoint.example/v1 (blank keeps the endpoint default)`,"machine.credentialStore":`Store credential`,"machine.credentialClearKey":`Clear stored key`,"machine.credentialClearUrl":`Clear stored endpoint`,"machine.credentialConfigured":`configured`,"machine.credentialAbsent":`not configured`,"machine.credentialInvalid":`unreadable — repair required`,"machine.credentialSourceMachine":`this machine's stored credential`,"machine.credentialSourceEnvironment":`the service environment`,"machine.credentialSourceUnset":`no source`,"machine.credentialFingerprint":`fingerprint`,"machine.credentialStored":`Credential stored. The next turn uses it; no restart is needed.`,"machine.credentialCleared":`Stored credential cleared.`,"machine.credentialError":`The credential could not be stored.`,"machine.credentialBoundary":`Storing a credential grants no authority: it does not select an executor, model, or reasoning effort.`,"machine.genericNamespaceDescription":`Edit this registered namespace as JSON. LoopX validates it with the capability-owned schema before previewing any write.`,"machine.jsonConfiguration":`Namespace configuration (JSON)`,"machine.jsonConfigurationHelp":`Only this namespace is updated. Other machine configuration is preserved, and Apply remains locked to the reviewed preview revision.`,"machine.jsonEditor":`JSON`,"machine.editJson":`Edit JSON`,"capabilities.jsonConfiguration":`Goal configuration (JSON)`,"capabilities.jsonHelp":`Edit registered fields for this Goal. Changes require a new preview before applying.`,"capabilities.jsonInvalid":`Enter a valid JSON object using only registered editable fields.`,"machine.backToForm":`Back to form`,"machine.jsonInvalid":`Enter one valid JSON object before previewing changes.`,"machine.loadError":`Machine configuration could not be loaded.`,"machine.invalidStoredConfiguration":`Stored machine configuration needs repair`,"machine.invalidStoredConfigurationDescription":`Stored values are hidden because they no longer match the installed contract. Review the affected capability, then Preview and Apply its replacement; unrelated namespaces remain unchanged.`,"machine.machinePolicy":`Machine policy`,"machine.namespaceCount":`Registered namespaces`,"machine.namespaces":`Configuration namespaces`,"machine.periodicReport":`Periodic reports`,"machine.periodicReportDescription":`Default report policy for every Goal without an explicit override. Goal scheduling and delivery consume the effective configuration.`,"machine.periodicReportActivation":`Enabled means automatic delivery at validated stage boundaries`,"machine.periodicReportActivationDescription":`This is not a weekly timer. When LoopX validates a Goal stage completion, an Agent prepares and freezes the report, then automatically delivers it through the configured Goal Channel. The enabled subscription is standing delivery authority; failures and route drift stop closed for repair.`,"machine.changeQualityActivation":`Qualification is a quality gate, not new authority`,"machine.changeQualityActivationDescription":`Goals that inherit this policy qualify their exact final diff. safe_fix allows at most one bounded fix pass inside existing write authority; this setting never grants file, permission, or merge authority.`,"machine.replanCadenceActivation":`Review cadence changes timing, not execution authority`,"machine.replanCadenceActivationDescription":`Goals without an explicit override read this threshold before the next review decision. It does not create Turns, spend quota, or grant authority.`,"machine.preview":`Review exact machine change`,"machine.previewChanges":`Preview changes`,"machine.previewError":`A machine-policy preview could not be created.`,"machine.previewLocked":`Apply is locked to this exact revision. If machine state changes, LoopX requires a new preview.`,"machine.previewRollback":`Preview rollback`,"machine.previewRemoval":`Preview removal`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`A capability-owned preset, such as weekly-progress.`,"machine.registry":`Typed registry`,"machine.requiredFields":`Enable requires a profile preset, Goal Channel route, and valid timezone.`,"machine.revision":`Machine revision`,"machine.revisionLockedReady":`All changes require a preview and apply only while that exact machine revision remains current.`,"machine.rollbackAvailable":`Rollback is available for the last apply`,"machine.rollbackDescription":`Preview the stored prior revision before restoring it.`,"machine.rollbackError":`The rollback could not be completed.`,"machine.rollbackPreviewDescription":`The prior revision is ready to restore. Confirm to apply this rollback.`,"machine.rolledBack":`The prior machine policy was restored and verified.`,"machine.removed":`Machine policy removed and the resulting configuration read back successfully.`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`Use a public route alias; credentials and provider identifiers never enter this form.`,"machine.timezone":`Timezone`,"machine.timezoneHelp":`Use an IANA timezone, for example Asia/Shanghai.`,"machine.title":`Machine configuration`,"machine.unchanged":`Machine policy already matches this preview; nothing was written.`,"machine.visualEditor":`Guided`,"capabilities.atomicOverride":`Goal override is atomic`,"capabilities.atomicOverrideDescription":`A complete Goal value wins over the machine default. LoopX never mixes individual fields across scopes.`,"capabilities.applyFailed":`Goal capability changes were not applied.`,"capabilities.applyPreview":`Apply preview`,"capabilities.catalog":`Goal capability catalog`,"capabilities.chooseGoal":`Choose a Goal before inspecting its capabilities.`,"capabilities.defaultValue":`Declared default`,"capabilities.description":`Inspect the capabilities available to this Goal and the exact scope of each setting.`,"capabilities.editorPrepared":`Typed editor contract available`,"capabilities.effectiveSource":`Effective source`,"capabilities.empty":`No capability descriptors are available for this Goal.`,"capabilities.fields":`Registered fields`,"capabilities.goalPolicy":`Goal capability policy`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`Current Goal value`,"capabilities.loadFailed":`Could not load Goal capabilities`,"capabilities.larkInboxNotificationDescription":`This switch controls automatic group messages for human gates. Incoming Lark events remain available when it is off.`,"capabilities.larkInboxNotificationSetting":`Human-gate group notifications`,"capabilities.loading":`Loading Goal capabilities…`,"capabilities.machineOnly":`This capability is configured only at machine scope.`,"capabilities.machineValue":`Live machine default`,"capabilities.machineScope":`Machine`,"capabilities.previewOnly":`Inspection is live. Goal writes remain unavailable until the revision-locked preview and apply path is connected.`,"capabilities.preview":`Revision-locked preview`,"capabilities.previewChanges":`Preview changes`,"capabilities.restoreInheritance":`Restore machine-default inheritance`,"capabilities.previewFailed":`Could not preview Goal capability changes.`,"capabilities.previewLocked":`Apply will re-check this exact plan revision and reject stale changes.`,"capabilities.partialWrite":`Goal value saved; shared projection needs reconciliation`,"capabilities.partialWriteDescription":`The source Goal configuration was written and read back. Its shared runtime projection did not synchronize, so do not submit the change again.`,"capabilities.hostCapacityPartialWrite":`Goal value saved; Codex host capacity still needs alignment`,"capabilities.hostCapacityPartialWriteDescription":`The Goal configuration and shared projection were verified, but the Codex host limit was not updated. Refresh the preview after repairing the host configuration; do not resubmit the Goal change.`,"capabilities.refreshSource":`Refresh source value`,"capabilities.readOnly":`Read-only capability`,"capabilities.revisionLockedReady":`Changes require a preview and are applied only when its exact revision is still current.`,"capabilities.retry":`Retry`,"capabilities.source.capability_default":`Capability default`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`Live machine default`,"capabilities.source.not_configured":`Not configured`,"capabilities.title":`Goal capabilities`,"settings.close":`Close settings`,"settings.appearance":`Appearance`,"settings.appearanceDescription":`Manage workspace display preferences in this browser.`,"settings.appearanceTabDescription":`Theme and display preferences`,"settings.capabilitiesTabDescription":`Capability overrides for this Goal`,"settings.back":`Back to workspace`,"settings.categories":`Settings categories`,"settings.description":`Manage workspace preferences and integrations.`,"settings.eyebrow":`Workspace preferences`,"settings.general":`General`,"settings.goalConnections":`Goal connections`,"settings.language":`Language`,"settings.modelProvider":`Model provider`,"settings.globalCapabilities":`Global capabilities`,"settings.languageDescription":`Choose the language used by the LoopX desktop workspace.`,"settings.languageEnglishDescription":`Use English for navigation, settings, and workspace controls.`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`Use Simplified Chinese for navigation, settings, and workspace controls.`,"settings.languageSimplifiedChinese":`Simplified Chinese`,"settings.languageStoredLocally":`This preference is stored only on this device.`,"settings.languageTabDescription":`Interface language for this device`,"settings.larkTabDescription":`Apps, group chats, and Goal Topic connections`,"settings.machineTabDescription":`Typed defaults shared by capabilities on this machine`,"settings.notifications":`Notifications`,"settings.open":`Settings`,"settings.themeDefault":`Paper`,"settings.themeDefaultDescription":`Calm and lightweight for long-running work.`,"settings.themeDescription":`Choose the workspace visual style. This preference is stored in the current browser.`,"settings.themeHighContrast":`High contrast`,"settings.themeHighContrastDescription":`Stronger borders and more prominent state blocks.`,"settings.themeLoopx":`LoopX standard`,"settings.themeLoopxDescription":`Precise monochrome surfaces, Geist type, and quiet hairline structure.`,"settings.title":`Settings`,"settings.workspaceDisplay":`Workspace display`,"settings.workspaceTheme":`Workspace theme`,"session.closeRecord":`Exit run record`,"session.details":`Session details`,"session.record":`Execution Session · Run record`,"session.recordDescription":`The timeline now shows messages and Turn records from this Session.`,"sidebar.createGoal":`Create Goal`,"sidebar.delete":`Delete`,"sidebar.deleteGoal":`Delete Goal`,"sidebar.manager":`LoopX Manager`,"sidebar.notifications":`Settings`,"sidebar.owner":`Personal workspace`,"sidebar.product":`Personal Agent workspace`,"sidebar.resume":`Resume`,"sidebar.resumeGoal":`Resume Goal`,"sidebar.stop":`Stop`,"tasks.historyLoading":`Loading history…`,"tasks.historyError":`History could not be loaded.`,"tasks.historyExpired":`History snapshot expired. Reload to continue.`,"tasks.historyRetry":`Reload`,"tasks.historyEnd":`End of completed history`,"tasks.historyMore":`Load more`,"tasks.historyLocalOnly":`Open this machine’s Dashboard to browse full history.`,"sidebar.sortGoals":`Reorder Goals`,"sidebar.dragGoal":`Drag to reorder, or use Reorder Goals`,"sidebar.moveUp":`Move {goal} up`,"sidebar.moveDown":`Move {goal} down`,"sidebar.goalMoved":`{goal} moved to position {position}`,"sidebar.orderNotSaved":`Order changed for this visit; browser storage is unavailable.`,"sidebar.stopGoal":`Stop Goal`,"sidebar.stopped":`Stopped`,"sidebar.stoppedLoading":`Loading stopped Goals`,"sidebar.stoppedLoadFailed":`Stopped Goals could not be loaded. Active Goals remain available.`,"sidebar.retryStopped":`Retry`,"state.completed":`Completed`,"state.needsRepair":`Needs repair`,"state.needsYou":`Needs you`,"state.quiet":`Quiet`,"state.running":`Running`,"state.stopped":`Stopped`,"state.waiting":`Waiting`,"tasks.blocked":`Blocked`,"tasks.agentLane":`Work Agent`,"tasks.agentLaneDescription":`Filter this Goal's projected work lanes`,"tasks.agentLaneFilter":`Filter by work Agent`,"tasks.allAgentLanes":`All Agents ({count})`,"tasks.chatAgentReplied":`New conversation reply`,"tasks.chatPending":`Conversation in progress`,"tasks.chatReturn":`Collaboration receipt`,"tasks.chatPendingDescription":`Processing. Tasks update only after a task operation is confirmed.`,"tasks.chatRecent":`Recent conversation`,"tasks.chatUnchangedDescription":`This conversation did not directly change Tasks. Convert the reply to a Task draft and confirm it when execution is needed.`,"tasks.chatViewReply":`View reply`,"tasks.convertToTask":`Draft a Task`,"tasks.completed":`Completed`,"runs.discoveryPartial":`Some execution details are unavailable. Reconnecting; task summaries are not live execution status.`,"runs.discoveryOffline":`Execution service unavailable. Reconnecting; retained task summaries may be stale.`,"files.openConversation":`Go to conversation`,"files.exportSummary":`Export summary`,"tasks.viewDescription":`Decisions first, then work and recent completions`,"tasks.viewLabel":`Task view`,"tasks.listView":`List`,"tasks.boardView":`Board`,"tasks.completedSummary":`{count} tasks completed. Recent details are projected by the control plane when needed.`,"tasks.emptyCompleted":`No completed tasks yet.`,"tasks.emptyConfirm":`No tasks waiting for confirmation.`,"tasks.emptyRunning":`No queued or running tasks.`,"tasks.emptySchedules":`No scheduled tasks.`,"tasks.emptyGoal":`This Goal has no tasks yet. Describe the next step below and LoopX will show a confirmation preview first.`,"tasks.markComplete":`Mark complete: {name}`,"tasks.moreActions":`More actions: {name}`,"tasks.openExecution":`View execution: {name}`,"tasks.pending":`Pending`,"tasks.pendingAndRunning":`Queued / Running`,"tasks.scheduled":`Scheduled & continuous`,"tasks.sessionError":`Session issue`,"tasks.waiting":`Queued`,"tasks.waitingAge":`Waiting {age}`,"tasks.viewExecution":`View execution`,"tasks.viewResult":`View result`,"time.days":`{count} days`,"time.hours":`{count} hours`,"timeline.emptyGoal":`This Goal has no new activity`,"timeline.emptyGoalDescription":`Ask for progress or send new guidance.`,"timeline.emptyWorkspace":`Your workspace is quiet today`,"timeline.emptyWorkspaceDescription":`Describe a Goal to the LoopX Manager, or ask what deserves attention today.`,"timeline.gateHistory":`{count} historical Gates`,"timeline.pending":`Working…`,"returnDelivery.queued":`Return queued`,"returnDelivery.verifying":`Verifying delivery without resending`,"returnDelivery.delivered":`Delivered to the original audience`,"returnDelivery.reconciled":`Delivery verified after recovery`,"returnDelivery.unverified":`Delivery remains explicitly unverified`,"timeline.runCompleted":`{run}: completed`,"timeline.review":`Review`,"timeline.reviewAndConfirm":`Review and confirm`,"timeline.waitingConfirmation":`Needs your confirmation`},"zh-CN":{"acceptance.connected":`已连接`,"acceptance.mapped":`已建立项目映射`,"acceptance.refreshed":`已刷新状态`,"acceptance.inspected":`已检查适配器`,"acceptance.recorded":`已记录执行`,"acceptance.judged":`已记录反馈`,"acceptance.approved":`已记录批准`,"acceptance.ready":`已记录控制器就绪`,"acceptance.attentionSource":`当前状态`,"acceptance.visionSource":`Agent 验收条件`,"acceptance.todoSource":`任务状态`,"acceptance.runSource":`最新执行证据`,"acceptance.title":`验收观察`,"acceptance.unavailable":`验收观测不可用,Goal 是否达成仍未知。`,"acceptance.partial":`当前仅有部分观测。任务完成或缺口列表为空,都不能证明 Goal 已通过验收。`,"acceptance.gaps":`仍需补充的证据`,"acceptance.reasonUnknown":`来源未提供原因`,"acceptance.unknown":`未知`,"acceptance.required":`所需证据或条件`,"acceptance.observed":`观测时间`,"acceptance.noGaps":`现有观测中没有缺口,尚未评估完整验收条件。`,"acceptance.guards":`待处理的门禁决策`,"acceptance.noGuards":`现有观测中没有待处理的门禁决策。`,"acceptance.scope":`决策范围`,"acceptance.next":`当前状态给出的下一步`,"acceptance.historical_progress":`已记录的历史进展`,"acceptance.historical":`历史生命周期记录不授予权限,也不代表通过验收。`,"acceptance.missing":`未获取的来源:`,"acceptance.truncated":`仅展示前 12 条观测。`,"common.actions":`操作`,"common.agent":`Agent`,"common.allMessages":`所有消息`,"common.cancel":`取消`,"common.close":`关闭`,"common.closeActionReceipt":`关闭操作回执`,"common.confirm":`确认`,"common.export":`导出`,"common.failed":`失败`,"common.goal":`Goal`,"common.loading":`加载中…`,"common.none":`无`,"common.off":`关闭`,"common.on":`开启`,"common.open":`打开`,"common.owner":`Owner`,"common.readOnly":`只读`,"common.recently":`刚刚`,"common.status":`状态`,"common.task":`Task`,"common.you":`你`,"common.waiting":`等待中`,"composer.addImage":`添加图片`,"composer.agentProgress":`向 Agent 获取进度报告`,"composer.agentProgressPrompt":`请给我一份当前 Goal 的进度报告:已完成、执行中、阻塞和下一步。`,"composer.blockers":`看阻塞`,"composer.attachImageHint":`选择、粘贴或拖入图片`,"composer.clarifyDefer":`暂缓 Todo 需要可自动判断的恢复条件。请补充 todo_done:、pr_merged:[owner/repo]#、capacity_available: 或 resume_at:<带时区 RFC3339 时间>。`,"composer.clarifySingleAction":`这句话包含多个可能修改状态的操作。请一次描述一项操作,我会逐项展示确认预览。`,"composer.evidence":`查证据`,"composer.createGoal":`创建新 Goal`,"composer.createGoalDraft":`Goal 草稿`,"composer.createGoalDraftDescription":`补充内容后发送,LoopX 会先展示待确认操作。`,"composer.createGoalDraftLead":`我想创建一个长期 Goal:`,"composer.createGoalTemplate":`我想创建一个长期 Goal: -目标: -完成标准: -执行边界(可选): -关联仓库(可选): -通知方式(可选):`,"composer.createGoalHint":`填入 Goal 模板草稿,检查后再创建`,"composer.globalProgress":`汇总所有 Goal 进展`,"composer.globalProgressPrompt":`请帮我汇总所有活跃 Goal 的最新进展与阻塞。`,"composer.globalTasks":`询问全局待办`,"composer.globalTasksPrompt":`有哪些 Goal 正在等我?我现在该优先处理什么?`,"composer.goalMessageHint":`你的消息由 {agent} 在本 Goal 的会话中接收`,"composer.goalRunningHint":`本项目有 {count} 段会话正在运行 · 消息发往当前 {agent} 对话`,"composer.goalPlaceholder":`询问或纠偏 {goal}…`,"composer.imageAnalysisPrompt":`请结合这些图片分析当前 Goal,并告诉我下一步。`,"composer.imageCountError":`最多添加 {count} 张图片。`,"composer.imagePicker":`图片文件选择器`,"composer.imageReadError":`无法读取图片 {name}`,"composer.imageReadGenericError":`图片读取失败。`,"composer.imageSizeError":`单张图片不能超过 {size}MB。`,"composer.imageTypeError":`支持 PNG、JPEG、WebP 和 GIF 图片。`,"composer.imagesPending":`待发送图片`,"composer.managerMessageHint":`你的消息由 LoopX 管家跨 Goal 接收,支持全局询问与创建 Goal`,"composer.managerPlaceholder":`问问 LoopX 管家,或描述一个新 Goal…`,"composer.monitor":`配置定时检查`,"composer.monitorGoalQuestion":`为哪个 Goal 添加定时检查?`,"composer.monitorTemplate":`为当前 Goal 添加定时检查: -检查内容: -频率(支持 30 分钟 / 2 小时 / 每天):每 2 小时 -停止条件:Goal 完成`,"composer.monitorShortcutTemplate":`为当前 Goal 添加定时检查: -检查内容:{target} -频率:每 2 小时 -停止条件:Goal 完成`,"composer.monitorTemplateWithoutGoal":`配置定时检查: -Goal: -检查内容: -频率:每 2 小时 -停止条件:Goal 完成`,"composer.heartbeatGoalQuestion":`为哪个 Goal 设置 Heartbeat?`,"composer.heartbeatTemplate":`为当前 Goal 设置 Heartbeat: -频率:每天 -停止条件:Goal 完成 -通知:仅在需要我时`,"composer.heartbeatTemplateWithoutGoal":`设置 Heartbeat: -Goal: -频率:每天 -停止条件:Goal 完成 -通知:仅在需要我时`,"composer.nextAction":`询问下一步`,"composer.nextActionPrompt":`我现在该做什么?`,"composer.send":`发送`,"composer.sendMessage":`向 LoopX 发送消息`,"composer.sendMessageHint":`发送消息`,"composer.sentImageAlt":`移除图片 {name}`,"conversation.agentPending":`正在整理…`,"conversation.close":`关闭对话回执`,"conversation.convertHint":`将 Agent 最新回复转为 Task 草稿`,"conversation.full":`查看完整对话`,"conversation.receipt":`对话回执`,"conversation.replying":`正在回复`,"conversation.title":`管家对话`,"conversation.toTask":`转为 Task`,"digest.away":`自上次访问以来的运行记录`,"digest.completed":`新增完成运行`,"digest.failed":`新增失败或中断`,"digest.needsYou":`当前待确认`,"feedback.applying":`正在执行:{title}`,"feedback.cancelFailed":`取消失败:{error}`,"feedback.completed":`已完成:{title}`,"feedback.executionFailed":`执行失败:{error}`,"feedback.gateRequired":`需要你确认:{summary}`,"feedback.notCompleted":`操作未完成:{status}`,"feedback.goalRefreshFailed":`已打开 Goal,但暂时无法刷新最新状态。请点击刷新重试。`,"feedback.preparingPreview":`正在准备确认预览:{title}`,"feedback.previewFailed":`无法准备确认预览:{error}`,"feedback.sendFailed":`发送失败:{error}`,"feedback.sendGenericError":`消息发送失败,请稍后重试。`,"feedback.stale":`状态已变化,操作未执行,请重新生成确认预览。`,"feedback.taskDraftCreated":`已根据回复生成 Task 草稿。编辑后发送,LoopX 会先展示确认预览。`,"goal.defaultTitle":`新的个人 Goal`,"goal.initialTodo":`按完成标准推进:{criteria}`,"goal.objectiveBoundary":`执行边界:{boundary}`,"goal.objectiveCompletion":`完成标准:{criteria}`,"drawer.advancedDiagnostics":`高级诊断`,"drawer.agentWorking":`Agent 正在继续执行,记录会自动更新。`,"drawer.analysis":`正在分析`,"drawer.apply":`确认并应用`,"drawer.applying":`正在应用…`,"drawer.attentionBlocking":`正在阻塞 Agent`,"drawer.attentionWaiting":`等待你的决定`,"drawer.autoNotify":`Human-gate 自动通知`,"drawer.branch":`分支`,"drawer.closeDetail":`关闭详情:返回{context}`,"drawer.connected":`已连接`,"drawer.correctionDescription":`消息会沿用当前 Goal、Todo 与 Agent Session 上下文。`,"drawer.correctionLabel":`与 {agent} 纠偏`,"drawer.correctionPlaceholder":`例如:先关注权限风险,暂时不要提交…`,"drawer.correctionSend":`发送纠偏`,"drawer.correctionTextarea":`输入纠偏信息:Goal {goal},Agent {agent},Run {run}`,"drawer.copyRepository":`复制仓库标识`,"drawer.copyRepositoryDone":`已复制仓库标识`,"drawer.copyRepositoryError":`复制失败,请检查浏览器剪贴板权限。`,"drawer.copyRepositorySuccess":`已复制,可粘贴到其他工具。`,"drawer.cost":`成本 24h / 7d`,"drawer.costShort":`成本`,"drawer.durationShort":`时长`,"drawer.period24h":`24 小时`,"drawer.period7d":`7 天`,"drawer.tokens":`Token 24 小时 / 7 天`,"drawer.tokensShort":`Token`,"drawer.usageNotMeasured":`未采集`,"drawer.currentGoal":`当前 Goal`,"attentionDetail.title":`事项说明`,"attentionDetail.request":`需要你做什么`,"attentionDetail.decision":`需要作出决定`,"attentionDetail.unknownRequest":`来源未明确,请先查看来源再判断`,"attentionDetail.open":`当前投影中待处理`,"attentionDetail.closed":`已关闭`,"attentionDetail.deferred":`已推迟`,"attentionDetail.superseded":`已被替代`,"attentionDetail.unknown":`来源未提供状态`,"attentionDetail.unavailable":`来源尚未确认当前事项,请刷新后再操作`,"attentionDetail.unknownReason":`来源尚未提供原因。`,"attentionDetail.targetTodo":`关联的待解锁 Todo`,"attentionDetail.targetAgent":`事项指定的 Agent`,"attentionDetail.scope":`声明的决策范围`,"attentionDetail.notProvided":`来源未提供`,"attentionDetail.replacement":`替代 Todo`,"attentionDetail.openReplacement":`打开替代事项`,"attentionDetail.boundary":`阅读详情不会关闭 gate 或授予权限;作出决定前仍需新的操作预览。`,"drawer.decisionDefaultEvidence":`当前状态没有附加公开安全证据;下一步仍会先展示 Preview。`,"drawer.decisionDefaultReason":`该决定会影响当前 Todo 的下一步执行。`,"drawer.decisionDefer":`稍后决定`,"drawer.decisionMore":`更多决定`,"drawer.decisionReject":`拒绝`,"drawer.decisionReview":`查看影响并决定`,"drawer.dependencies":`依赖`,"drawer.detailsAndActions":`详情与操作`,"drawer.duration":`运行时长 24h / 7d`,"drawer.evidence":`证据`,"drawer.executionHistory":`执行历史`,"drawer.executionRecord":`运行记录`,"drawer.executionRecordAndResult":`执行过程与结果`,"drawer.explainDecision":`解释此决定`,"drawer.gateApproveHint":`在终端执行一条命令即可完成审批:`,"drawer.gateRejectHint":`不同意就把末尾的 approve 换成 reject。执行后这条提醒会自动消失。`,"drawer.gateRequiresHost":`需要宿主确认`,"drawer.gateRequiresHostDescription":`页面无权直接批准这类权限变更,你的点击没有写入任何内容。`,"drawer.goalAutoRun":`当前 Goal 的自动运行`,"drawer.goalChanges":`当前 Goal 的待确认变更`,"drawer.goalDetails":`Goal 详情`,"drawer.group":`群聊`,"drawer.inspectorFull":`切换到全屏`,"drawer.inspectorFullView":`全屏查看`,"drawer.inspectorHalf":`切换到半屏`,"drawer.inspectorHalfView":`半屏查看`,"drawer.lastNotification":`最近通知`,"drawer.larkConfigure":`管理 Lark connection`,"drawer.larkConnect":`连接 Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`未配置`,"drawer.larkNotConfiguredDescription":`配置后,当这个 Goal 出现需要你确认的变更时,会自动发飞书通知。`,"drawer.managerChanges":`管家待确认变更`,"drawer.moreActions":`更多操作`,"drawer.moreRunActions":`更多运行操作`,"drawer.nextTransition":`下一转换`,"drawer.validationRevision":`验证声明修订`,"drawer.validationDigest":`验证声明摘要`,"drawer.validationRevisionActor":`修订者`,"drawer.noExecutionHistory":`暂无执行记录。`,"drawer.noRun":`尚未启动执行 Session`,"drawer.noRunDescription":`Agent 开始执行后,运行记录会稳定显示在这里。`,"drawer.notAssigned":`未分配`,"drawer.notLinked":`未关联`,"drawer.notSet":`未设置`,"drawer.outputDetails":`产出详情`,"drawer.outputRecorded":`该产出已记录到当前 Goal。`,"drawer.outputSafePreview":`公开安全产出预览`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`本次运行产出`,"drawer.previewUnavailable":`此产出没有可用的公开安全内联预览。`,"drawer.priority":`优先级`,"drawer.progress":`进度`,"drawer.proposalApplied":`已应用,LoopX 状态将刷新。`,"drawer.proposalApplyFailed":`应用失败,没有写入任何变更。`,"drawer.proposalApplyFailedHint":`请刷新 Goal 状态后重新生成;若仍失败,可保留此页并查看高级诊断。`,"drawer.proposalClose":`关闭`,"drawer.proposalDefer":`稍后`,"drawer.proposalDeferred":`已暂缓,可稍后继续应用或重新生成。`,"drawer.proposalEnterGoal":`进入新 Goal`,"drawer.proposalExplainer":`确认后,LoopX 会执行这项变更并显示写入结果。关闭或取消不会修改任何状态。`,"drawer.proposalRecheck":`按最新状态重新检查`,"drawer.proposalRegenerate":`基于最新状态重试`,"drawer.proposalRejected":`已拒绝,这项变更不会写入。`,"drawer.proposalStale":`来源状态已变化,请按最新状态重新检查。`,"drawer.proposalViewGoal":`查看更新后的 Goal`,"drawer.reassign":`改派给`,"drawer.reassignSummary":`重新分配:{task}`,"drawer.reason":`原因`,"drawer.recoveryDescription":`本地历史已经保留,请选择恢复路径。`,"drawer.recoveryFailed":`上游 Session 恢复失败`,"drawer.recoveryNewSession":`携带上下文开始新 Session`,"drawer.recoveryRetry":`重试恢复`,"drawer.repositoryRole":`执行工作区`,"drawer.repository":`仓库`,"drawer.replyMode":`回复方式`,"drawer.subagentApplied":`已写入,并通过共享 Goal 状态读回校验。`,"drawer.subagentAppliedRestart":`已写入并完成读回校验;提升后的 Codex 子 Agent 上限将在新 Session 中生效。`,"drawer.subagentAppliedRefreshFailed":`已写入并通过共享 Goal 状态读回;状态投影刷新失败,可稍后手动刷新。`,"drawer.subagentApplying":`正在写入并校验共享状态读回…`,"drawer.subagentApplyFailed":`子代理设置写入失败。`,"drawer.subagentChildLimit":`当前上限`,"drawer.subagentConfirmDisable":`确认关闭子代理执行`,"drawer.subagentConfirmEnable":`确认开启子代理执行`,"drawer.subagentCurrentBoundary":`当前任务领域限制`,"drawer.subagentDescription":`仅在 Todo、配额、能力和写入范围门禁全部通过后,允许运行时为相互独立的任务临时创建子代理;不会强制并行,也不会授予持久权限。`,"drawer.subagentDisable":`预览关闭子代理执行`,"drawer.subagentDisableSummary":`这个 Goal 将不再创建新的子代理;现有 Todo 归属和执行记录不受影响。`,"drawer.subagentDomainInvalid":`所选任务领域限制无效。`,"drawer.subagentDomainTodoCount":`匹配 {count} 个开放 Todo`,"drawer.subagentDomains":`任务领域限制(可选)`,"drawer.subagentDomainsEmpty":`当前没有开放的 advancement Todo 声明 task_domain;保持为空即可不按任务领域限制子代理执行。`,"drawer.subagentDomainsHint":`全部不选表示不按任务领域过滤;选择后只放行匹配且已声明领域的 Todo,其他执行门禁始终生效。`,"drawer.subagentDomainsUnrestricted":`不限制任务领域`,"drawer.subagentEnable":`预览开启子代理执行`,"drawer.subagentLabel":`Per-Goal 执行边界`,"drawer.subagentModel":`子 Agent 模型`,"drawer.subagentEffort":`子 Agent 推理档位`,"drawer.subagentModelDefault":`宿主默认`,"drawer.subagentLunaPreset":`使用 Luna / max`,"drawer.subagentClearModel":`清除模型偏好`,"drawer.subagentModelHint":`填写后通过“预览配置调整”保存,执行关闭时也可保存偏好;启动时须核验宿主支持情况。`,"drawer.subagentModelRequired":`设置推理档位前请先指定子 Agent 模型。`,"drawer.subagentExecutionConfig":`委托执行绑定`,"drawer.subagentExecutionConfigHint":`可选;填写 .loopx/config/ 下仓库相对、已忽略的 JSON。规划只读取已授权路由状态,执行授权仍由该文件持有。`,"drawer.subagentExecutionConfigNone":`未配置`,"drawer.subagentMaxChildren":`最多子代理数`,"drawer.subagentHostCapacityImplicit":`隐式默认值`,"drawer.subagentHostCapacityRaise":`确认后还会把 Codex 子 Agent 上限从当前 {configured} 提升到至少 {required};已有更高值不会降低,并需新建 Session 生效。`,"drawer.subagentHostCapacityReady":`Codex 子 Agent 容量({configured})已满足该 Goal({required})。`,"drawer.subagentNoChange":`当前 Goal 已是这个设置,没有写入任何内容。`,"drawer.subagentPending":`待确认`,"drawer.subagentPreviewBoundary":`预览配置调整`,"drawer.subagentPreviewFailed":`无法生成子代理设置预览。`,"drawer.subagentPreviewing":`正在核对最新 Goal 状态…`,"drawer.subagentPreviewReady":`预览已锁定,确认后才会写入这个 Goal。`,"drawer.subagentPreviewSummary":`最多允许创建 {count} 个子代理;任务领域限制:{domains}。`,"drawer.subagentRemoteReadOnly":`当前来源只读,请在 Goal 所在主机上修改。`,"drawer.subagentTitle":`自适应子代理执行`,"drawer.remoteDetailsDescription":`SSH 来源只展示公开安全状态,不读取来源主机上的连接配置。`,"drawer.remoteDetailsUnavailable":`远端详情未投影`,"drawer.resumeNo":`否`,"drawer.resumeYes":`是`,"drawer.runDetails":`执行 Session`,"drawer.runInterrupt":`中断本次运行`,"drawer.runLatest":`查看最近执行过程`,"drawer.runNewSession":`开始新 Session`,"drawer.runCloseSession":`关闭 Session`,"drawer.runRecordEmpty":`还没有运行记录。Agent 尚未开始这次执行;请在“详情与操作”查看等待条件或恢复 Session。`,"drawer.runRecordProjected":`当前没有可展示的逐步运行记录。LoopX 已读取到 {completed}/{total} 的投影进度{outputs};请在“详情与操作”检查 Session 状态。`,"drawer.runRecordProjectedOutputs":`和 {count} 项产出`,"drawer.runRoleAssistant":`已完成`,"drawer.runRoleSystem":`需检查`,"drawer.runRoleUser":`收到任务`,"drawer.runView":`Session 视图`,"drawer.scheduleAdd":`添加定时检查`,"drawer.scheduleDefaultNotification":`仅在需要你时通知`,"drawer.scheduleDefaultStop":`Goal 完成或 owner 停止`,"drawer.scheduleDefaultTarget":`由 LoopX 调度器按 Goal 配置唤醒。`,"drawer.scheduleEdit":`改为每 2 小时`,"drawer.scheduleLast":`上次执行`,"drawer.scheduleLocalTimezone":`本地时区`,"drawer.scheduleNext":`下次执行`,"drawer.scheduleNeverRun":`尚未执行`,"drawer.scheduleNotification":`通知`,"drawer.schedulePause":`暂停`,"drawer.schedulePending":`等待调度`,"drawer.scheduleResume":`恢复`,"drawer.scheduleRunNow":`立即运行`,"drawer.scheduleStop":`停止{kind}`,"drawer.scheduleStopCondition":`停止条件`,"drawer.scheduleTimezone":`时区`,"drawer.sessionRecoverable":`可恢复`,"drawer.sessionStatus":`会话状态`,"drawer.setupHeartbeat":`设置 Heartbeat`,"drawer.taskActions":`Todo 待确认操作`,"drawer.taskAdvancement":`推进任务`,"drawer.taskBlock":`标记阻塞`,"drawer.taskComplete":`标记完成`,"drawer.taskCompletedNote":`该任务保留为只读记录。`,"drawer.taskCompletedTitle":`任务已完成`,"drawer.taskDefer":`暂缓`,"drawer.taskDeferCondition":`Todo 暂缓恢复条件`,"drawer.taskDeferInvalid":`条件格式不受支持;请使用下列可判定条件。`,"drawer.taskDeferPlaceholder":`例如 resume_at:2026-09-14T09:00:00+08:00`,"drawer.taskDeferReview":`检查暂缓`,"drawer.taskDeferSupported":`支持 todo_done、pr_merged、capacity_available 与带时区的 resume_at 条件。`,"drawer.taskPriority":`优先级`,"drawer.taskPriorityChoose":`选择优先级`,"drawer.taskPriorityClear":`不设优先级`,"drawer.taskDeferUntil":`暂缓至`,"drawer.taskDetails":`Todo 详情`,"drawer.taskInfo":`任务信息`,"drawer.taskManage":`管理任务`,"drawer.taskNextCompleted":`可创建后续任务`,"drawer.taskNextOpen":`推进或更新状态`,"drawer.taskOrdinary":`普通任务`,"drawer.taskStatusBlocked":`受阻`,"drawer.taskStatusDeferred":`已延期`,"drawer.resumeWhen":`恢复条件`,"drawer.resumeState":`恢复状态`,"drawer.resumePending":`等待条件满足`,"drawer.resumeReady":`可恢复`,"drawer.resumeReceipt":`恢复回执`,"drawer.taskNextDeferred":`等待恢复条件满足后重新评估`,"drawer.taskNextResumeReady":`恢复条件已满足,等待生命周期重新规划`,"drawer.taskStatusCompleted":`已完成`,"drawer.taskStatusOpen":`待执行`,"drawer.taskSuccessor":`创建后续 Todo`,"drawer.taskSuccessorNote":`Owner 标记为阻塞,等待补充上下文。`,"drawer.taskSuccessorSummary":`创建后续 Todo:{task}`,"drawer.taskSuccessorText":`{task} 的后续工作`,"drawer.taskType":`任务类型`,"drawer.topic":`Topic`,"drawer.trigger":`触发方式`,"drawer.titleAttention":`需要你`,"drawer.titleOutput":`产出详情`,"drawer.titleProposalApplied":`执行结果`,"drawer.titleProposalConfirm":`确认执行`,"drawer.titleSchedule":`定时检查`,"drawer.unconfigured":`未配置`,"drawer.workspaceCandidates":`可选择的工作区`,"files.emptySummary":`公开安全产出`,"files.empty":`还没有文件、产出或已验证的阶段周报。`,"files.loadingReports":`正在加载已验证的阶段周报…`,"files.reportDelta":`+{added} 新增 · {changed} 变化`,"files.reportAdded":`新增`,"files.reportChanged":`变化`,"files.reportGeneration":`生成批次`,"files.reportLoadFailed":`无法加载已验证周报`,"files.reportPublication":`发布批次`,"files.title":`Files & Outputs`,"files.verifiedReport":`已验证阶段周报`,"header.agentUnavailable":`不可用`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} 个工作 Agent`,"header.overview":`概览`,"header.chat":`对话`,"header.files":`成果`,"header.goalCapabilities":`能力配置`,"header.goalCapabilitiesDescription":`管理 Goal override 与继承的本机默认值。`,"header.goalDetails":`Goal 详情`,"header.goalDetailsDescription":`查看状态、用量、仓库、通知与 Session。`,"header.goalSettings":`Goal 设置`,"header.goalSettingsDescription":`配置此 Goal 的能力`,"header.goalNavigation":`Goal 导航`,"header.goalView":`Goal 视图`,"header.live":`实时`,"header.manager":`LoopX 管家`,"header.managerDescription":`跨 Goal 的个人工作入口`,"header.managerRuntime":`{profile} · {sandbox}`,"header.managerRuntimeFallback":`配置无效,已回退到 {profile} · {sandbox};请在机器能力设置中修复。`,"header.managerExecutorKindIndividual":`个人 CLI 登录`,"header.managerExecutorKindManaged":`operator 凭据`,"header.managerExecutorKindRegistered":`注册端点`,"header.managerExecutionUnavailable":`所选执行器 {executor} 无法在本机启动;该通道不会回落到个人 CLI 登录。`,"header.managerExecutionUnavailableCredential":`所选执行器 {executor} 需要 operator 凭据 {credential},配置后该通道才能启动它。`,"header.managerExecutionUnavailableRuntime":`所选执行器 {executor} 无法在本机启动:本机未安装其 runtime。`,"header.managerExecutionUnavailableEffort":`所选执行器 {executor} 拒绝了当前配置的推理档位;请改为受支持的档位后刷新。`,"header.managerExecutionUnavailableOutputBudget":`所选执行器 {executor} 的每请求输出 token 上限无效;请设置为正整数后刷新。`,"header.managerEndpointStewardDefault":`当前运行 {executor},管家通道的出货默认值;如需改指请显式选择执行器。`,"header.managerOutputTokenBudget":`每次请求 {tokens} token`,"header.managerAllocation":`选择:{policy} · {reason}`,"header.managerSelectionPreferred":`偏好`,"header.managerSelectionPinned":`锁定`,"header.managerSelectionFlexible":`灵活资源池`,"header.managerAllocationUser":`用户明确选择`,"header.managerAllocationPinned":`由本机配置锁定`,"header.managerAllocationFallback":`首选不可用,使用池内合格替代`,"header.managerAllocationUnavailable":`当前没有可用的合格路径`,"header.managerAllocationPrimary":`首选路径可用`,"header.managerAllocationProductDefault":`产品默认路径`,"header.managerAllocationService":`服务环境覆盖`,"header.managerAllocationConfigured":`按已配置路径`,"header.managerOverview":`总览`,"header.managerView":`管家视图`,"header.openGoalNavigation":`打开 Goal 导航`,"header.readOnlySourceDescription":`{source} 通过 SSH 隧道只读展示`,"header.refresh":`刷新状态`,"header.refreshDone":`刚刚更新`,"header.refreshFailed":`刷新失败`,"header.refreshing":`刷新中`,"header.selectAgent":`选择 Agent`,"header.selectChatRuntime":`选择聊天 Runtime`,"header.tasks":`任务`,"header.themeBrutal":`切换到野兽主题`,"header.themePaper":`切换到默认主题`,"home.blockingSummary":`其中 {count} 项正在阻塞 Agent。`,"home.completedGoals":`已完成的 Goal`,"home.empty":`当前没有`,"startup.goalLoading":`正在加载状态…`,"startup.goalError":`状态加载失败`,"startup.progress":`已加载 {loaded} / {total} 个活跃 Goal`,"startup.partial":`Goal 状态正在逐个更新,当前统计尚不完整。`,"startup.independent":`此 Goal 的加载不会阻塞其他 Goal,你可以先查看已加载的内容。`,"startup.error.timeout":`读取超时,可在本地服务就绪后重试。`,"startup.error.network":`连接中断,请重试以重新连接。`,"startup.error.service":`Goal 状态读取失败。请稍后重试;若问题持续,请检查状态来源。`,"startup.error.access":`状态来源无法访问此 Goal 所需的文件或运行时目录。请检查该来源运行账户的访问权限,修复后重试。`,"startup.error.revision":`加载期间 Goal 目录发生变化,请刷新以同步。`,"startup.error.scope":`该 Goal 已不在当前来源中,请刷新目录。`,"startup.error.invalid":`无法解析状态响应,请刷新或检查 LoopX 更新。`,"startup.retry":`重试`,"startup.retryFailed":`重试失败的 Goal`,"startup.failedCount":`{count} 个 Goal 加载失败,已加载的 Goal 可继续使用。`,"home.greeting":`你好,我是 LoopX 管家`,"home.history":`历史`,"home.lane.needsYou":`需要你`,"home.lane.needsYouDescription":`等待你的决定、授权或补充信息`,"home.lane.observing":`观察中`,"home.lane.observingDescription":`持续监控,出现变化时再提醒你`,"home.lane.running":`执行中`,"home.lane.runningDescription":`Agent 正在推进并持续回传进展`,"home.lane.scheduled":`已安排`,"home.lane.scheduledDescription":`已经安排,等待时间或前置条件`,"home.noActivity":`尚无活动`,"home.noFirstActivity":`等待首次活动`,"home.noCompletedGoals":`还没有已完成的 Goal`,"home.preservedState":`保留状态,可随时恢复`,"home.stopped":`已停止`,"home.systemHealth":`系统健康:{summary}`,"home.taskCount":`{count} 个 Task`,"home.todayAt":`今天 {time}`,"home.waitingCount":`你有 {count} 项需要处理。`,"home.workspace":`Goal 工作区`,"lark.allMessages":`此 Topic 中的所有消息`,"lark.allTopicMessages":`所有 Topic 消息`,"lark.agentIngress":`Agent 入站方式`,"lark.agentAppPermissions":`每个选中的 Agent 都需要一个已具备群聊提及和回复能力的 Lark App。`,"lark.agentApps":`每个 Agent 的 Lark App`,"lark.agentAppsDescription":`默认使用上方 App;需要独立机器人身份时,可为 Agent 选择另一个兼容 App。`,"lark.agentAppSelection":`{agent} 的 Lark App`,"lark.appCreated":`App 已创建`,"lark.appCreateFailed":`创建失败`,"lark.appLoading":`正在加载可用的 Lark Apps…`,"lark.appPermissions":`该 App 能发送建联消息,但缺少接收群聊 @ 消息或自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly、im:message.send_as_bot 和事件 im.message.receive_v1,发布新版后刷新。`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`自动回复暂不可用`,"lark.autoReplyReady":`自动回复可用`,"lark.bindGoal":`绑定到 Goal`,"lark.cancel":`取消`,"lark.cardinality":`一个 Lark App · 多个 Goal · 每个 Agent 一条隔离路由`,"lark.capture":`接收范围`,"lark.captureAddressed":`仅接收提及 App 或回复 App 的消息`,"lark.captureAll":`接收此 Goal Topic 中的所有消息`,"lark.captureScope":`接收范围`,"lark.captureScopeDescription":`决定哪些 Topic 消息会进入 LoopX;不会扩大 Agent 权限。`,"lark.closeConnection":`关闭连接弹窗`,"lark.closeCreate":`关闭创建弹窗`,"lark.closeSettings":`关闭 Lark 设置`,"lark.connect":`连接`,"lark.connectAllAgents":`连接全部已注册 Agent`,"lark.connectAllAgentsAction":`一键连接 {count} 个 Agent`,"lark.connectAllAgentsDescription":`一次引导创建 {count} 个隔离的 Agent Topic;请在对应 Topic 内发送请求,每个 Agent 保留独立路由和收件箱。`,"lark.connectApp":`连接 Lark App`,"lark.connection":`连接`,"lark.connections":`连接`,"lark.configuration":`Lark 配置`,"lark.continueFeishu":`在飞书中继续`,"lark.createAutomatically":`自动创建 Goal Topic`,"lark.createAutomaticallyDescription":`将为每个选中的 Agent 创建带 Agent 标识的专属 Topic。`,"lark.defaultAgentAppDescription":`用于查找目标群聊,并作为所有选中 Agent 的默认 App;下方的逐 Agent 选择可覆盖它。`,"lark.description":`管理可复用的 Lark App,并用独立 Topic 将群聊连接到 Goal。`,"lark.editConnection":`编辑 Lark 连接`,"lark.goalConnections":`{count} 个 Goal 连接`,"lark.goalTopicConnections":`Lark Goal Topic 连接`,"lark.groupChat":`群聊`,"lark.groupEmpty":`该机器人尚未加入可连接的群。请先在飞书群设置中添加这个机器人,再回来刷新或搜索。`,"lark.groupLoading":`正在读取该机器人已加入的群…`,"lark.groupSearch":`搜索该机器人已加入的群`,"lark.historyPermission":`历史补读权限(独立能力)`,"lark.health.contextCaptured":`已捕获群聊上下文`,"lark.health.contextCapturedDetail":`该消息仅作为非权威上下文保留,不会启动或引导管家 Turn;需要执行时请直接 @ 机器人或回复机器人的消息。`,"lark.health.eventProcessed":`已处理 {events} 条事件,成功回复 {replies} 条。`,"lark.health.eventUnverified":`事件订阅待验证`,"lark.health.eventUnverifiedDetail":`Provider listener 已就绪,但尚未收到消息事件。请启用 im.message.receive_v1、开通群聊 @ 消息权限并发布新版,然后在这个 Agent Topic 内发送新的 @ 消息;存在多条 Agent 路由时,群顶层消息会 fail closed。`,"lark.health.ignoredSelf":`已忽略机器人自身发送的消息,避免重复回复。`,"lark.health.invalidRouting":`路由配置无效`,"lark.health.invalidRoutingDetail":`连接已安全停用,请重新选择处理方式并保存。`,"lark.health.lastStatus":`最近事件状态:{status}`,"lark.health.listening":`监听中`,"lark.health.messageContextPermission":`消息权限不足`,"lark.health.messageContextPermissionDetail":`已收到消息事件,但无法读取群消息上下文。请发布并授权该 App 的群消息读取权限。`,"lark.health.notAddressed":`最近消息未直接 @ 机器人`,"lark.health.notAddressedDetail":`监听正常;当前连接只响应直接 @ 机器人或对机器人的回复。`,"lark.health.notStarted":`监听未启动`,"lark.health.notStartedDetail":`请刷新连接或重新启动 LoopX 后再试。`,"lark.health.processingFailed":`消息处理失败`,"lark.health.processingFailedDetail":`已收到消息事件,但 Agent 处理失败。请查看本地诊断后重试。`,"lark.health.queued":`已进入 Agent 收件箱`,"lark.health.queuedDetail":`消息由 {agent} 异步处理,不会启动通用 Chat Session。`,"lark.health.sourceDisconnected":`实时消息连接断开`,"lark.health.sourceDisconnectedDetail":`消息监听进程意外退出。请核对应用档案的平台:飞书应用选飞书,国际版 Lark 应用选 Lark,再检查连接及订阅错误。LoopX 正在重试;历史消息能读取,不代表能实时收消息。`,"lark.health.retrying":`监听重试中`,"lark.health.retryingDetail":`事件监听暂时中断,LoopX 正在自动重试。`,"lark.health.routeAmbiguous":`消息匹配多个 Goal`,"lark.health.routeAmbiguousDetail":`同一 Bot 和群聊存在多个完整群捕获连接。请让每个 Agent 使用独立 Bot,或只保留一个完整群连接。`,"lark.health.routeMismatch":`消息未匹配当前 Goal Topic`,"lark.health.routeMismatchDetail":`事件来自其他群聊或 Topic。请重新选择群聊并连接该 Goal,然后发送一条新的 @ 消息。`,"lark.health.routeUnavailable":`消息无法路由到 Goal`,"lark.health.routeUnavailableDetail":`当前连接信息不完整。请重新连接该 Goal 后再发送一条新的 @ 消息。`,"lark.health.starting":`正在启动`,"lark.health.startingDetail":`LoopX 正在启动该 App 的消息事件监听。`,"lark.health.unavailable":`自动回复不可用`,"lark.health.waiting":`等待处理`,"lark.incomingMessages":`接收消息`,"lark.ingressAsync":`异步收件箱`,"lark.ingressAsyncDescription":`写入 Agent 私有收件箱,等待后续显式处理。`,"lark.editPreservesIdentity":`保存会保留此 App、群和 Topic;旧连接默认升级为 Agent 异步收件箱。`,"lark.conversationKind":`连接用途`,"lark.managerConversation":`管家 · 同步对话`,"lark.workerConversation":`工作 Agent · 后台任务`,"lark.managerConversationDescription":`内置管家即时回应对话,长任务交给后台 Agent。群聊与私聊分别保存上下文。`,"lark.ingressLegacy":`待升级`,"lark.ingressLegacyDescription":`保存连接即可升级为 Agent 异步收件箱,已有消息保留在原 Topic 中。`,"lark.ingressQueue":`排队`,"lark.ingressQueueDescription":`进入同一 Agent Session 的有界 FIFO 队列,当前 Turn 完成后处理。`,"lark.ingressSteering":`实时引导`,"lark.ingressSteeringDescription":`投到当前活跃 Turn;没有精确活跃 Turn 时安全拒绝。`,"lark.loading":`加载 Lark 配置…`,"lark.management":`Lark 管理`,"lark.openEventSettings":`查看飞书事件配置`,"lark.mentions":`提及机器人`,"lark.mentionsOnly":`仅提及消息`,"lark.needsMessagePermissions":`需要消息权限`,"lark.needsSetup":`需要设置`,"lark.newApp":`新建 Lark App`,"lark.noAgentConfigured":`未配置 Agent`,"lark.noConnections":`暂无匹配的连接。`,"lark.noProfiles":`还没有可用的 lark-cli App profile。`,"lark.profileName":`Profile 名称`,"lark.profileValidation":`Profile 只能包含字母、数字、点、下划线和连字符。`,"lark.processing":`处理方式`,"lark.region":`区域`,"lark.registerAnother":`+ 注册另一个 Lark App — 通过飞书创建`,"lark.reopenFeishu":`重新打开飞书`,"lark.settingsConfigure":`配置 {goal}`,"lark.settingsDisconnect":`解绑 {goal}`,"lark.replyMode":`回复方式`,"lark.replyModeDescription":`当前只支持在来源 Topic 内回复,避免跨群或跨 Goal 投递。`,"lark.reusableApps":`{count} 个可复用 App`,"lark.reusableWorkspaceApp":`可复用工作区 App`,"lark.routesUnverified":`{count} 条 Lark 路由尚未验证`,"lark.saveConnection":`保存连接`,"lark.searchConnections":`搜索 Lark 连接`,"lark.searchPlaceholder":`搜索 App、群、Goal 或 Topic`,"lark.setupCopy":`LoopX 将通过 lark-cli 打开飞书官方创建页面。应用凭证保存在系统 Keychain,LoopX 只保留 profile 引用。`,"lark.someoneMentions":`有人提及 Agent`,"lark.targetAgent":`目标 Agent`,"lark.targetAgentDescription":`选择该 Goal 内已注册的 Agent。此连接只投递给一个 Agent,不广播、不授予新权限。实时引导与排队需要该 Agent 的精确活跃 Session。`,"lark.agentUnavailable":`{agent} · 已不可用`,"lark.selectRegisteredAgent":`请先选择可用的已注册 Agent;不会自动替换原先的接收者。`,"lark.topicPreview":`Topic 预览`,"lark.topicReply":`Topic 回复`,"lark.trigger":`触发方式`,"lark.waitingFeishu":`等待飞书完成创建`,"lark.waitingFeishuDescription":`请在新窗口中完成飞书授权,完成后会自动回到这里。`,"lark.waitingLink":`正在生成飞书官方创建链接…`,"lark.error.appCreate":`Lark App 创建失败`,"lark.error.appRequired":`请选择一个 Lark App profile。`,"lark.error.bind":`绑定失败`,"lark.error.bindPreview":`绑定预览失败`,"lark.error.configuration":`Lark 配置加载失败`,"lark.error.groupLookup":`无法读取该机器人已加入的群。请检查机器人状态后重试。`,"lark.error.groupLoad":`群聊加载失败`,"lark.error.invalidApp":`Lark App profile 不可用或尚未完成授权。`,"lark.error.messagePermissions":`该 App 缺少自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly 和 im:message:send_as_bot,发布新版后回来刷新重试。`,"lark.error.provider":`飞书 API 调用失败,且没有生成已验证回执。请稍后重试。`,"lark.error.setupPoll":`创建状态查询失败`,"lark.error.setupStart":`无法启动 Lark App 创建流程`,"lark.error.cliExecutable":`已找到配置的 lark-cli,但当前无法执行。请检查安装或启动参数。`,"lark.error.cliMissing":`未发现 lark-cli。请先安装 lark-cli,然后重新启动 LoopX。`,"lark.error.cliStart":`lark-cli 启动失败。请检查安装状态,然后重新启动 LoopX。`,"lark.error.disconnect":`解绑失败`,"notifications.autoNotify":`需要你确认时自动推送到群里`,"notifications.bind":`绑定到通知群`,"notifications.bindConfirm":`将把「{goal}」绑定到通知群「{target}」,绑定时会验证机器人在群内并发送一条确认消息。`,"notifications.bindFailed":`绑定失败`,"notifications.bound":`已绑定`,"notifications.confirmBind":`确认绑定`,"notifications.description":`把 Goal 里需要你确认的变更推送到飞书群。绑定和开关在这里完成,推送逻辑沿用现有通道。`,"notifications.disabled":`已停用`,"notifications.group":`通知群:{target}`,"notifications.loadFailed":`通知群列表加载失败`,"notifications.noTargets":`还没有可用的通知群。通知群涉及机器人私有身份,请先在终端配置一次:`,"notifications.notBound":`未绑定`,"notifications.recent":`最近 {time}`,"notifications.sentCount":`已发送 {count} 条`,"notifications.settings":`Goal 通知绑定`,"notifications.setupFailed":`设置失败`,"notifications.title":`飞书群通知`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`频率`,"proposal.field.completionCriteria":`完成标准`,"proposal.field.executionBoundary":`执行边界`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`首个任务`,"proposal.field.objective":`目标`,"proposal.field.operation":`操作`,"proposal.field.operationState":`操作状态`,"proposal.field.resultDelivery":`结果回传`,"proposal.field.confirmationBoundary":`确认边界`,"proposal.field.expiresAt":`过期时间`,"proposal.field.permission":`权限`,"proposal.field.reason":`原因`,"proposal.field.stopCondition":`停止条件`,"proposal.field.target":`检查内容`,"proposal.field.timezone":`时区`,"proposal.field.title":`标题`,"proposal.field.workspace":`执行工作区`,"actionReview.targetChanged":`预览目标与请求的 Goal 或操作不一致,请重新生成预览。`,"actionReview.ready_stop":`暂停可恢复。此预览已通过检查,可直接执行;完成仍需要读回验证。`,"actionReview.resume_review":`恢复自动调度前需要确认。实际执行仍受额度、Gate 和 Todo 约束。`,"actionReview.delete_review":`请确认从注册表移除这个已停止 Goal。项目文件与历史记录会保留。`,"actionReview.action_review":`执行前请检查此提案的目标与影响。`,"actionReview.protected_action":`此操作需要明确审阅。确认不能替代所需授权。`,"actionReview.unknown_permission":`无法识别权限分类。请重新检查提案后再继续。`,"actionReview.unknown_action":`无法识别此生命周期操作。请重新检查提案后再继续。`,"actionReview.incomplete_proposal":`预览缺少验证信息或可执行转换。请重新生成预览。`,"actionReview.authority_gate":`Gate 阻止执行。请满足其要求后重新检查提案。`,"actionReview.stale_proposal":`来源状态已变化。请重新生成预览,原决定不再适用。`,"actionReview.apply_pending":`正在执行,请等待读回结果后再重试。`,"actionReview.readback_verified":`操作已完成,结果状态已通过读回验证。`,"actionReview.readback_unverified":`操作返回但未通过读回验证。尚不能确认完成,请重新检查状态。`,"actionReview.operation_group_confirmation":`这份精确请求只能在已绑定飞书群的原始卡片确认;Dashboard 不提供本地执行入口。`,"actionReview.operation_result_delivery_pending":`操作结果已经记录,但原群结果卡尚未通过回读核验。`,"drawer.recoverEditResult":`恢复操作结果`,"drawer.retryOriginal":`重试原操作`,"actionReview.canonical_update_retry":`编辑结果尚未确认。重试此操作以恢复原结果。`,"actionReview.canonical_update_projection_pending":`操作已提交,展示尚未同步。重试此操作以恢复当前视图。`,"actionReview.apply_failed":`执行未完成。请检查失败原因并重新生成预览后再试。`,"actionReview.inactive_proposal":`此提案当前不可执行。请重新检查后再继续。`,"proposal.gate.default":`需要宿主确认`,"proposal.impact.goalCreate":`确认后会创建 Goal 和首个 Todo,并让选定 Agent 开始首轮推进。`,"proposal.impact.lifecycleDelete":`确认后会从 source registry 和 global registry 移除这个已停止 Goal;项目文件、历史状态文件和备份不会被删除。`,"proposal.impact.lifecycleResume":`确认后会恢复 Goal 的自动调度资格并移回 Active Goals;实际执行仍受 quota、Gate 和 Todo 约束。`,"proposal.impact.lifecycleStop":`确认后会停止自动推进,并将 Goal 移入折叠的「已停止」列表;历史、Todo 和证据都会保留,可随时恢复。`,"proposal.impact.protected":`该操作需要通过受保护的 LoopX 写入服务完成。`,"proposal.impact.operation":`这里仅展示同一份不可变条款。请在已绑定的飞书群确认或拒绝;确认只会消费一个规范 claim。`,"proposal.primary.apply":`确认并应用`,"proposal.primary.goalCreate":`创建 Goal 并开始首轮`,"proposal.primary.lifecycleDelete":`删除 Goal`,"proposal.primary.lifecycleResume":`恢复 Goal`,"proposal.primary.lifecycleStop":`停止 Goal`,"proposal.primary.todoStart":`创建任务并开始执行`,"proposal.primary.operationGroup":`前往飞书群确认`,"proposal.primary.operationResultPending":`结果卡回传待恢复`,"proposal.primary.operationResultVerified":`结果已核验`,"proposal.resultDelivery.verified":`已在原群卡片完成回读核验`,"proposal.resultDelivery.pending":`等待回传并核验原群卡片`,"proposal.summary.goalCreate":`创建 Goal:{title}`,"proposal.summary.heartbeat":`为当前 Goal 设置 Heartbeat`,"proposal.summary.lifecycleDelete":`删除 Goal:{title}`,"proposal.summary.lifecycleResume":`恢复 Goal:{title}`,"proposal.summary.lifecycleStop":`停止 Goal:{title}`,"proposal.summary.monitor":`为当前 Goal 创建定时检查:{target}`,"proposal.teamPlan.gapReason.capabilityNotGranted":`尚未授予所需能力`,"proposal.teamPlan.gapReason.audienceNotAuthorized":`尚未获得所需访问权限`,"proposal.teamPlan.pending":`待安排`,"proposal.teamPlan.assignedHint":`分配已记录,执行进度请查看目标。`,"proposal.teamPlan.recoveredHint":`未新增任务,当前进度请查看目标。`,"proposal.teamPlan.originalPlan":`查看原计划`,"proposal.teamPlan.viewResult":`查看结果`,"proposal.teamPlan.openGoal":`打开目标`,"proposal.teamPlan.resultTitle":`分配结果`,"proposal.teamPlan.retry":`重试分配`,"proposal.teamPlan.retryHint":`重试会恢复本次分配结果,不会重复创建任务。`,"proposal.summary.teamPlan":`为 {goal} 分配 {count} 项任务`,"proposal.impact.teamPlan":`确认后分配可安排的任务,其余保留为待安排。`,"proposal.primary.teamPlan":`确认分配`,"proposal.field.laneGaps":`未配齐的 lane`,"proposal.field.quotaEnvelope":`配额包络`,"proposal.teamPlan.acceptanceShort":`验收参考`,"proposal.teamPlan.advisory":`计划参考;本次确认不执行该约束`,"proposal.teamPlan.appliedPartially":`已分配 {created} 项,{gaps} 项待安排`,"proposal.teamPlan.appliedAlreadyPresent":`已恢复原分配结果`,"proposal.teamPlan.applied":`已分配 {count} 项任务`,"proposal.teamPlan.gapLane":`待安排`,"proposal.teamPlan.laneUnstaffed":`待安排,尚无任务`,"proposal.teamPlan.gapReason.agentNotRegistered":`尚未加入此目标`,"proposal.teamPlan.gapReason.actionKindNotSupported":`当前环境不支持此任务类型`,"proposal.workspace.current":`当前本地工作区(未绑定 Repository)`,"proposal.workspace.named":`{workspace}(仅提供执行环境,不会自动关联仓库)`,"proposal.workspaceGate.agentImpact":`先完成 Agent 身份绑定,再重新检查原操作;当前没有写入 Goal。`,"proposal.workspaceGate.agentTitle":`先绑定 Agent`,"proposal.workspaceGate.defaultSummary":`请选择 Goal 所属工作区。`,"proposal.workspaceGate.selectionImpact":`选择工作区后会重新展示待确认操作,选择本身不会写入状态。`,"proposal.workspaceGate.selectionTitle":`选择 Goal 工作区`,"projection.agentAdvancingGoal":`Agent 正在推进当前 Goal`,"projection.agentIdle":`暂无需要你处理`,"projection.agentNeedsDecision":`Agent 等待你的决定`,"projection.agentPreparingNextStep":`Agent 正在整理下一步`,"projection.agentStopped":`已由你停止;历史、Todo 和证据仍保留`,"projection.agentWaitingExternal":`正在等待外部条件`,"projection.confirmAgentDecision":`请确认 Agent 下一步需要的权限或决策`,"projection.events24h":`24 小时内 {count} 个事件`,"projection.firstReadOnlyAdapterCheck":`执行首次只读适配检查并保存进度`,"projection.goalVerified":`Goal 状态、Todo 与注册信息已验证`,"projection.latestRun":`最近运行`,"projection.latestValidation":`最近验证`,"projection.nextUpdatePending":`等待 LoopX 更新下一步`,"projection.publicSafeProjection":`公开安全状态投影`,"projection.refreshState":`刷新 LoopX 状态,确认当前进度仍然有效`,"projection.runEvidenceAvailable":`存在可查看的运行证据`,"projection.runRecorded":`最近一次 LoopX 运行已经记录`,"projection.statusRefreshNeeded":`LoopX 状态需要刷新`,"projection.todoStatusUpdated":`Todo 状态已经更新,正在确认下一步`,"projection.validationRecorded":`最近验证已经记录`,"runs.completed":`已完成`,"runs.failed":`需检查`,"runs.interrupted":`已中断`,"runs.queued":`已安排`,"runs.ready":`可继续`,"runs.resumeFailed":`恢复失败`,"runs.running":`执行中`,"runs.unknown":`状态未知`,"runs.waiting":`等待条件`,"schedule.active":`执行中`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`定时与持续任务`,"schedule.paused":`已暂停`,"schedule.summary":`按 LoopX 调度约束持续检查`,"schedule.defaultTarget":`检查当前 Goal 的阻塞、进度与新产出`,"schedule.unsupportedCalendar":`当前定时检查不支持精确到星期或时刻的日历计划。请改用固定间隔,例如“每 30 分钟”“每 2 小时”或“每天”;草稿已保留,没有生成待确认操作。`,"source.add":`添加来源`,"source.addConfigured":`添加只读来源`,"source.addMethod":`来源添加方式`,"source.addSsh":`添加 SSH 隧道来源`,"source.closeForm":`关闭来源表单`,"source.configured":`已配置 SSH`,"source.configuredCount":`本机 SSH Host · {count} 个`,"source.configuredGroup":`已配置 SSH Host · {count}(点击快速添加)`,"source.connected":`已连接`,"source.connecting":`连接中`,"source.controlPlane":`控制面来源`,"source.copy":`复制`,"source.copyCommand":`复制 SSH 隧道命令`,"source.copyError":`无法复制命令,请手动复制下方命令。`,"source.copied":`已复制`,"source.description":`已读取全部显式 Host(含 Include);通配规则不会作为具体来源。先运行命令,LoopX 不读取密钥或配置细节。`,"source.host":`本机 SSH Host`,"source.hostEmpty":`~/.ssh/config 中没有可直接选择的显式 Host。`,"source.hostLoadError":`无法读取本机 SSH Host。`,"source.hostPlaceholder":`输入或搜索 Host`,"source.invalid":`SSH 来源参数无效。`,"source.loadingHosts":`正在读取…`,"source.localInteractive":`本机交互`,"source.localPort":`本地端口`,"source.manual":`手动 URL`,"source.manualDescription":`远端来源始终按只读投影处理,不继承本机写权限。`,"source.name":`名称`,"source.namePlaceholder":`远程开发机`,"source.notAvailable":`不可用`,"source.readOnly":`SSH 隧道 · 只读`,"source.readOnlyNoticeDescription":`你可以查看 Goal、Task、证据与运行状态;写入、纠偏和 Agent 会话仍留在来源主机。`,"source.readOnlyNoticeTitle":`远端只读投影`,"source.readOnlyWriteError":`远端 SSH 隧道来源是只读投影,不能执行控制面写入。`,"source.refreshHosts":`重新读取 SSH Host`,"source.remove":`移除来源 {source}`,"source.removeCurrent":`移除当前来源`,"source.select":`选择控制面来源`,"source.selectHost":`请选择已配置的 SSH Host。`,"source.statusUrl":`本地转发 URL`,"source.tunnelCommandPending":`选择 Host 后生成隧道命令`,"machine.absent":`尚未配置`,"machine.action.create":`创建机器策略`,"machine.action.delete":`移除机器策略`,"machine.action.unchanged":`无需写入`,"machine.action.update":`更新机器策略`,"machine.applied":`机器策略已应用,并通过回读校验。`,"machine.applyError":`无法应用机器策略。`,"machine.applyPreview":`应用已审阅预览`,"machine.changedNamespaces":`变更的 Namespace`,"machine.capabilityCatalog":`机器能力目录`,"machine.capabilityEmpty":`当前没有注册可在机器作用域配置的能力。`,"machine.configured":`已配置`,"machine.confirmRollback":`确认回滚`,"machine.currentRevision":`当前 Revision`,"machine.currentValue":`当前机器值`,"machine.description":`与 Goal 设置共用能力目录。在这里管理受支持的机器默认值;仅支持 Goal 配置的能力会明确标注。`,"capabilities.rawJson":`高级:原始 JSON`,"machine.goalOnly":`此能力目前仅支持 Goal 级配置。请打开具体 Goal 的能力设置进行配置;这里不会设置机器级默认值。`,"machine.desiredRevision":`目标 Revision`,"machine.editorUnavailable":`当前版本未安装此 Namespace 的编辑器`,"machine.editorUnavailableDescription":`它仍会显示在 Registry 中;安装或升级对应的 Dashboard 编辑器后才能修改。`,"machine.editorMode":`编辑模式`,"machine.liveDefault":`实时默认值;Goal 显式覆盖优先`,"machine.liveDefaultDescription":`没有显式覆盖的 Goal 会在该能力下一次决策时读取当前机器策略。修改或移除策略会立即影响这些已有 Goal;显式 Goal 覆盖保持固定。`,"machine.credentialTitle":`操作者模型凭据`,"machine.credentialDescription":`管家通道与托管宿主在本机认证用的 key 与 endpoint。key 单独存放于仅属主可读的文件,不会进入这里展示的机器配置,也不会被回读——回读的是它的指纹。`,"machine.credentialApiKey":`API key`,"machine.credentialApiKeyPlaceholder":`粘贴 key 以保存;留空则保留已存的 key`,"machine.credentialBaseUrl":`Endpoint base URL`,"machine.credentialBaseUrlPlaceholder":`https://endpoint.example/v1(留空则使用 endpoint 默认值)`,"machine.credentialStore":`保存凭据`,"machine.credentialClearKey":`清除已存 key`,"machine.credentialClearUrl":`清除已存 endpoint`,"machine.credentialConfigured":`已配置`,"machine.credentialAbsent":`未配置`,"machine.credentialInvalid":`无法读取——需要修复`,"machine.credentialSourceMachine":`本机已存凭据`,"machine.credentialSourceEnvironment":`服务环境变量`,"machine.credentialSourceUnset":`无来源`,"machine.credentialFingerprint":`指纹`,"machine.credentialStored":`凭据已保存。下一轮即生效,无需重启。`,"machine.credentialCleared":`已清除本机存储的凭据。`,"machine.credentialError":`凭据保存失败。`,"machine.credentialBoundary":`保存凭据不授予任何权限:它不会选择执行器、模型或推理强度。`,"machine.genericNamespaceDescription":`使用 JSON 编辑这个已注册 Namespace。LoopX 会先按 capability 自己拥有的 schema 校验,再允许预览写入。`,"machine.jsonConfiguration":`Namespace 配置(JSON)`,"machine.jsonConfigurationHelp":`只更新当前 Namespace;其他机器配置会保留,Apply 仍锁定到已审阅的 Preview Revision。`,"machine.jsonEditor":`JSON`,"machine.editJson":`编辑 JSON`,"capabilities.jsonConfiguration":`Goal 配置(JSON)`,"capabilities.jsonHelp":`仅编辑当前 Goal 的已注册字段。修改后需重新预览才能应用。`,"capabilities.jsonInvalid":`请输入合法的 JSON 对象,且仅包含已注册的可编辑字段。`,"machine.backToForm":`返回表单`,"machine.jsonInvalid":`请先填写一个合法的 JSON object,再预览变更。`,"machine.loadError":`无法读取机器配置。`,"machine.invalidStoredConfiguration":`已保存的机器配置需要修复`,"machine.invalidStoredConfigurationDescription":`已保存值不再符合当前契约,因此不会在这里显示。请检查已定位的能力,并通过“预览”和“应用”替换它;无关 namespace 保持不变。`,"machine.machinePolicy":`机器策略`,"machine.namespaceCount":`已注册 Namespace`,"machine.namespaces":`配置 Namespace`,"machine.periodicReport":`周期报告`,"machine.periodicReportDescription":`为所有未显式覆盖的 Goal 提供默认报告策略;Goal 调度与发送消费解析后的有效配置。`,"machine.periodicReportActivation":`开启后将在已验证的阶段节点自动投递`,"machine.periodicReportActivationDescription":`这不是每周定时器。当 LoopX 验证 Goal 已完成一个阶段时,Agent 会生成并冻结报告,随后通过配置的 Goal Channel 自动发送。启用此订阅即授予持续投递权;发送失败或路由漂移会 fail closed 并进入修复。`,"machine.changeQualityActivation":`质量验证是质量门禁,不是新增授权`,"machine.changeQualityActivationDescription":`继承该策略的 Goal 会验证最终精确 diff。safe_fix 只允许在既有写入权限内执行至多一次有界修复;此设置不会授予文件、权限或合并权。`,"machine.replanCadenceActivation":`复核周期只改变时机,不改变执行权限`,"machine.replanCadenceActivationDescription":`没有显式覆盖的 Goal 会在下一次复核决策前读取此阈值;它不会创建 Turn、消耗配额或授予权限。`,"machine.preview":`审阅机器配置变更`,"machine.previewChanges":`预览变更`,"machine.previewError":`无法生成机器策略预览。`,"machine.previewLocked":`应用操作锁定到当前 Revision;若机器状态变化,LoopX 会要求重新预览。`,"machine.previewRollback":`预览回滚`,"machine.previewRemoval":`预览移除`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`由 capability 管理的 preset,例如 weekly-progress。`,"machine.registry":`Typed Registry`,"machine.requiredFields":`开启后必须填写 profile preset、Goal Channel route 与有效时区。`,"machine.revision":`机器 Revision`,"machine.revisionLockedReady":`所有变更必须先预览;只有对应的机器 Revision 仍然有效时才会应用。`,"machine.rollbackAvailable":`可回滚上一次应用`,"machine.rollbackDescription":`先预览已保存的前一 Revision,再决定是否恢复。`,"machine.rollbackError":`无法完成回滚。`,"machine.rollbackPreviewDescription":`前一 Revision 已准备恢复,请确认执行本次回滚。`,"machine.rolledBack":`已恢复前一版机器策略,并通过校验。`,"machine.removed":`机器策略已移除,并通过回读校验。`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`只填写公开 route alias;凭据与 provider identifier 不会进入此表单。`,"machine.timezone":`时区`,"machine.timezoneHelp":`填写 IANA 时区,例如 Asia/Shanghai。`,"machine.title":`机器配置`,"machine.unchanged":`机器策略已与预览一致,本次没有写入。`,"machine.visualEditor":`引导式`,"capabilities.atomicOverride":`Goal override 按完整配置生效`,"capabilities.atomicOverrideDescription":`Goal 的完整配置优先于机器默认值;LoopX 不会在两个作用域之间逐字段拼接。`,"capabilities.applyFailed":`Goal 能力变更未写入。`,"capabilities.applyPreview":`应用此预览`,"capabilities.catalog":`Goal 能力目录`,"capabilities.chooseGoal":`请先选择一个 Goal,再查看它的能力配置。`,"capabilities.defaultValue":`声明的默认值`,"capabilities.description":`查看当前 Goal 可用的能力,以及每项配置的准确作用域。`,"capabilities.editorPrepared":`已注册 typed editor contract`,"capabilities.effectiveSource":`当前生效来源`,"capabilities.empty":`当前 Goal 没有可用的能力描述。`,"capabilities.fields":`已注册字段`,"capabilities.goalPolicy":`Goal 能力策略`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`当前 Goal 值`,"capabilities.loadFailed":`无法加载 Goal 能力`,"capabilities.larkInboxNotificationDescription":`此开关只控制遇到人工 Gate 时是否自动发群消息;关闭后仍会保留飞书事件收件箱能力。`,"capabilities.larkInboxNotificationSetting":`Gate 群通知`,"capabilities.loading":`正在加载 Goal 能力…`,"capabilities.machineOnly":`此能力只能在机器作用域配置。`,"capabilities.machineValue":`实时机器默认值`,"capabilities.machineScope":`机器`,"capabilities.previewOnly":`当前读取结果来自真实配置;在 revision-locked preview/apply 路径接通前,Dashboard 不会提供 Goal 写入控件。`,"capabilities.preview":`锁定 revision 的变更预览`,"capabilities.previewChanges":`预览变更`,"capabilities.restoreInheritance":`恢复继承机器默认值`,"capabilities.previewFailed":`无法预览 Goal 能力变更。`,"capabilities.previewLocked":`应用时会重新校验这一个 plan revision;过期变更将被拒绝。`,"capabilities.partialWrite":`Goal 值已保存;共享投影仍需修复`,"capabilities.partialWriteDescription":`源 Goal 配置已经写入并回读,但共享 runtime 投影尚未同步;请勿重复提交本次变更。`,"capabilities.hostCapacityPartialWrite":`Goal 值已保存;Codex 宿主容量仍待对齐`,"capabilities.hostCapacityPartialWriteDescription":`Goal 配置与共享投影均已校验,但 Codex 宿主上限尚未更新。修复宿主配置后请重新预览容量对齐,不要重复提交 Goal 变更。`,"capabilities.refreshSource":`刷新源配置`,"capabilities.readOnly":`只读能力`,"capabilities.revisionLockedReady":`所有变更必须先预览;只有对应的精确 revision 仍然有效时才会写入。`,"capabilities.retry":`重试`,"capabilities.source.capability_default":`能力默认值`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`实时机器默认值`,"capabilities.source.not_configured":`未配置`,"capabilities.title":`Goal 能力`,"settings.close":`关闭设置`,"settings.appearance":`外观`,"settings.appearanceDescription":`管理当前浏览器里的工作区显示偏好。`,"settings.appearanceTabDescription":`主题和显示偏好`,"settings.capabilitiesTabDescription":`当前 Goal 的能力覆盖配置`,"settings.back":`返回工作区`,"settings.categories":`设置分类`,"settings.description":`管理工作区偏好与集成。`,"settings.eyebrow":`工作区偏好`,"settings.general":`通用`,"settings.goalConnections":`Goal 连接`,"settings.language":`语言`,"settings.modelProvider":`模型 Provider 配置`,"settings.globalCapabilities":`全局能力配置`,"settings.languageDescription":`选择 LoopX Desktop 工作区使用的界面语言。`,"settings.languageEnglishDescription":`使用英文显示导航、设置和工作区控件。`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`使用简体中文显示导航、设置和工作区控件。`,"settings.languageSimplifiedChinese":`简体中文`,"settings.languageStoredLocally":`此偏好仅保存在当前设备。`,"settings.languageTabDescription":`当前设备的界面语言`,"settings.larkTabDescription":`App、群聊和 Goal Topic 连接`,"settings.machineTabDescription":`本机各 Capability 共享的 typed defaults`,"settings.notifications":`通知`,"settings.open":`设置`,"settings.themeDefault":`纸张`,"settings.themeDefaultDescription":`安静、轻量,适合长期查看。`,"settings.themeDescription":`选择工作区的视觉风格。设置会保存在当前浏览器本地。`,"settings.themeHighContrast":`高对比`,"settings.themeHighContrastDescription":`更强边框和更醒目的状态块。`,"settings.themeLoopx":`LoopX 标准`,"settings.themeLoopxDescription":`精确的黑白界面、Geist 字体与安静的细线结构。`,"settings.title":`设置`,"settings.workspaceDisplay":`工作区显示`,"settings.workspaceTheme":`工作区主题`,"session.closeRecord":`退出运行记录`,"session.details":`Session 详情`,"session.record":`执行 Session · 运行记录`,"session.recordDescription":`当前时间线已切换到这次 Session 的消息与 Turn 记录。`,"sidebar.createGoal":`创建 Goal`,"sidebar.delete":`删除`,"sidebar.deleteGoal":`删除 Goal`,"sidebar.manager":`LoopX 管家`,"sidebar.notifications":`设置`,"sidebar.owner":`个人工作区`,"sidebar.product":`个人 Agent 工作区`,"sidebar.resume":`恢复`,"sidebar.resumeGoal":`恢复 Goal`,"sidebar.stop":`停止`,"tasks.historyLoading":`正在加载历史…`,"tasks.historyError":`历史加载失败,已显示的内容仍可查看。`,"tasks.historyExpired":`历史快照已过期,重新加载后可继续查看。`,"tasks.historyRetry":`重新加载`,"tasks.historyEnd":`已显示全部完成记录`,"tasks.historyMore":`加载更多`,"tasks.historyLocalOnly":`请打开这台机器的 Dashboard 查看完整历史。`,"sidebar.sortGoals":`调整 Goal 顺序`,"sidebar.dragGoal":`拖拽调整顺序,或使用列表排序按钮`,"sidebar.moveUp":`上移 {goal}`,"sidebar.moveDown":`下移 {goal}`,"sidebar.goalMoved":`{goal} 已移至第 {position} 位`,"sidebar.orderNotSaved":`顺序已在本次页面生效;浏览器存储不可用,无法保存。`,"sidebar.stopGoal":`停止 Goal`,"sidebar.stopped":`已停止`,"sidebar.stoppedLoading":`正在加载已停止 Goal`,"sidebar.stoppedLoadFailed":`已停止 Goal 加载失败,其他 Goal 仍可使用。`,"sidebar.retryStopped":`重试`,"state.completed":`已完成`,"state.needsRepair":`需修复`,"state.needsYou":`等你`,"state.quiet":`安静运行`,"state.running":`推进中`,"state.stopped":`已停止`,"state.waiting":`等待条件`,"tasks.blocked":`受阻`,"tasks.agentLane":`工作 Agent`,"tasks.agentLaneDescription":`筛选这个 Goal 下的工作泳道`,"tasks.agentLaneFilter":`按工作 Agent 筛选`,"tasks.allAgentLanes":`全部 Agent({count})`,"tasks.chatAgentReplied":`对话有新回复`,"tasks.chatPending":`对话处理中`,"tasks.chatReturn":`协作回执`,"tasks.chatPendingDescription":`正在处理;只有经过确认的任务操作才会更新 Tasks。`,"tasks.chatRecent":`最近对话`,"tasks.chatUnchangedDescription":`本次对话没有直接修改 Tasks。需要执行时,可先转成 Task 草稿并确认。`,"tasks.chatViewReply":`查看回复`,"tasks.convertToTask":`转为任务草稿`,"tasks.completed":`已完成`,"runs.discoveryPartial":`部分执行详情暂不可用,正在重连;任务摘要不代表实时执行状态。`,"runs.discoveryOffline":`执行服务暂不可用,正在重连;保留的任务摘要可能已过时。`,"files.openConversation":`前往会话`,"files.exportSummary":`导出摘要`,"tasks.viewDescription":`先处理待确认,再查看工作与完成记录`,"tasks.viewLabel":`任务视图`,"tasks.listView":`列表`,"tasks.boardView":`看板`,"tasks.completedSummary":`已完成 {count} 项,近期完成明细由控制面按需投影。`,"tasks.emptyCompleted":`还没有完成的任务。`,"tasks.emptyConfirm":`没有待确认的任务。`,"tasks.emptyRunning":`没有待执行或进行中的任务。`,"tasks.emptySchedules":`没有定时任务。`,"tasks.emptyGoal":`这个 Goal 还没有任务。用下面的输入框描述下一步,LoopX 会先展示待确认操作。`,"tasks.markComplete":`标记完成:{name}`,"tasks.moreActions":`更多操作:{name}`,"tasks.openExecution":`查看执行过程:{name}`,"tasks.pending":`待处理`,"tasks.pendingAndRunning":`待执行 / 进行中`,"tasks.scheduled":`定时与持续`,"tasks.sessionError":`Session 异常`,"tasks.waiting":`待执行`,"tasks.waitingAge":`已等待 {age}`,"tasks.viewExecution":`查看执行过程`,"tasks.viewResult":`查看结果`,"time.days":`{count} 天`,"time.hours":`{count} 小时`,"timeline.emptyGoal":`这个 Goal 还没有新动态`,"timeline.emptyGoalDescription":`你可以直接询问进度或下发新的纠偏信息。`,"timeline.emptyWorkspace":`今天的工作区很安静`,"timeline.emptyWorkspaceDescription":`向 LoopX 管家描述一个 Goal,或询问今天最值得关注的事情。`,"timeline.gateHistory":`{count} 项历史 Gate`,"timeline.pending":`正在整理…`,"returnDelivery.queued":`结论等待回传`,"returnDelivery.verifying":`正在核验送达,不会重复发送`,"returnDelivery.delivered":`已送达原受众`,"returnDelivery.reconciled":`恢复后已核验送达`,"returnDelivery.unverified":`送达仍明确未核验`,"timeline.runCompleted":`{run}:已完成`,"timeline.review":`查看处理方式`,"timeline.reviewAndConfirm":`查看并确认`,"timeline.waitingConfirmation":`待你确认`}};function Gi(e,t){return t?Object.entries(t).reduce((e,[t,n])=>e.replaceAll(`{${t}}`,String(n)),e):e}function Ki(){try{return window.localStorage.getItem(`loopx-pw-locale`)===`en`?`en`:`zh-CN`}catch{return`zh-CN`}}function qi({children:e}){let[t,n]=(0,R.useState)(Ki);function r(e){n(e);try{window.localStorage.setItem(Ui,e)}catch{}}(0,R.useEffect)(()=>{document.documentElement.lang=t},[t]);let i=(0,R.useMemo)(()=>({locale:t,setLocale:r,t:(e,n)=>Gi(Wi[t][e],n)}),[t]);return(0,z.jsx)(Hi.Provider,{value:i,children:e})}function Ji(){let e=(0,R.useContext)(Hi);if(!e)throw Error(`useWorkspaceI18n must be used within WorkspaceI18nProvider`);return e}function Yi(e,t){let n={安静运行:`state.quiet`,等你:`state.needsYou`,等待条件:`state.waiting`,推进中:`state.running`,需修复:`state.needsRepair`,已完成:`state.completed`,已停止:`state.stopped`}[e];return n?Wi[t][n]:e}function Xi(e,t){let n={busy:`runs.running`,completed:`runs.completed`,failed:`runs.failed`,queued:`runs.queued`,ready:`runs.ready`,resume_failed:`runs.resumeFailed`,running:`runs.running`,waiting:`runs.waiting`};return e?n[e]?t(n[e]):e:t(`runs.unknown`)}function Zi(e,t){if(!e)return null;let n=new Date(e).getTime();if(Number.isNaN(n))return null;let r=Date.now()-n;if(r<36e5)return null;let i=Math.floor(r/864e5);return i>=1?t(`time.days`,{count:i}):t(`time.hours`,{count:Math.floor(r/36e5)})}var Qi;function H(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;en?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}var $i=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},ea=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Qi=globalThis).__zod_globalConfig??(Qi.__zod_globalConfig={});var ta=globalThis.__zod_globalConfig;function na(e){return e&&Object.assign(ta,e),ta}function ra(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function ia(e,t){return typeof t==`bigint`?t.toString():t}function aa(e){return{get value(){{let t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function oa(e){return e==null}function sa(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function ca(e,t){let n=e/t,r=Math.round(n),i=2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r){};function ga(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var _a=aa(()=>{if(ta.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function va(e){if(ga(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return ga(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function ya(e){return va(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var ba=new Set([`string`,`number`,`symbol`]);function xa(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Sa(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function U(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function Ca(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var wa={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Ta(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return da(this,`shape`,e),e},checks:[]}))}function Ea(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return da(this,`shape`,r),r},checks:[]}))}function Da(e,t){if(!va(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function Oa(e,t){if(!va(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function ka(e,t){if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return da(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function Aa(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return da(this,`shape`,i),i},checks:[]}))}function ja(e,t,n){return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return da(this,`shape`,i),i}}))}function Ma(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function Fa(e){return typeof e==`string`?e:e?.message}function Ia(e,t,n){let r=e.message?e.message:Fa(e.inst?._zod.def?.error?.(e))??Fa(t?.error?.(e))??Fa(n.customError?.(e))??Fa(n.localeError?.(e))??`Invalid input`,{inst:i,continue:a,input:o,...s}=e;return s.path??=[],s.message=r,t?.reportInput&&(s.input=o),s}function La(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function Ra(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}var za=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,ia,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},Ba=H(`$ZodError`,za),Va=H(`$ZodError`,za,{Parent:Error});function Ha(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Ua(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i(t,n,r,i)=>{let a=r?{...r,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new $i;if(o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ga=e=>async(t,n,r,i)=>{let a=r?{...r,async:!0}:{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ka=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new $i;return a.issues.length?{success:!1,error:new(e??Ba)(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},qa=Ka(Va),Ja=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},Ya=Ja(Va),Xa=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Wa(e)(t,n,i)},Za=e=>(t,n,r)=>Wa(e)(t,n,r),Qa=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ga(e)(t,n,i)},$a=e=>async(t,n,r)=>Ga(e)(t,n,r),eo=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ka(e)(t,n,i)},to=e=>(t,n,r)=>Ka(e)(t,n,r),no=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ja(e)(t,n,i)},ro=e=>async(t,n,r)=>Ja(e)(t,n,r),io=/^[cC][0-9a-z]{6,}$/,ao=/^[0-9a-z]+$/,oo=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,so=/^[0-9a-vA-V]{20}$/,co=/^[A-Za-z0-9]{27}$/,lo=/^[a-zA-Z0-9_-]{21}$/,uo=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,fo=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,po=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,mo=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,ho=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function go(){return new RegExp(ho,`u`)}var _o=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,vo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,yo=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,bo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,xo=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,So=/^[A-Za-z0-9_-]*$/,Co=/^https?$/,wo=/^\+[1-9]\d{6,14}$/,To=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,Eo=RegExp(`^${To}$`);function Do(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Oo(e){return RegExp(`^${Do(e)}$`)}function ko(e){let t=Do({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${To}T(?:${r})$`)}var Ao=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},jo=/^-?\d+$/,Mo=/^-?\d+(?:\.\d+)?$/,No=/^(?:true|false)$/i,Po=/^null$/i,Fo=/^[^A-Z]*$/,Io=/^[^a-z]*$/,Lo=H(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Ro={number:`number`,bigint:`bigint`,object:`date`},zo=H(`$ZodCheckLessThan`,(e,t)=>{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value{(t.inclusive?r.value<=t.value:r.value{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Vo=H(`$ZodCheckMultipleOf`,(e,t)=>{Lo.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):ca(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Ho=H(`$ZodCheckNumberFormat`,(e,t)=>{Lo.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=wa[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=jo)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}sa&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),Uo=H(`$ZodCheckMaxLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum{let r=n.value;if(r.length<=t.maximum)return;let i=La(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Wo=H(`$ZodCheckMinLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=La(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Go=H(`$ZodCheckLengthEquals`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=La(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Ko=H(`$ZodCheckStringFormat`,(e,t)=>{var n,r;Lo.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),qo=H(`$ZodCheckRegex`,(e,t)=>{Ko.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Jo=H(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Fo,Ko.init(e,t)}),Yo=H(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=Io,Ko.init(e,t)}),Xo=H(`$ZodCheckIncludes`,(e,t)=>{Lo.init(e,t);let n=xa(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),Zo=H(`$ZodCheckStartsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`^${xa(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),Qo=H(`$ZodCheckEndsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`.*${xa(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),$o=H(`$ZodCheckOverwrite`,(e,t)=>{Lo.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),es=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(` -`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.args,n=[...(this?.content??[``]).map(e=>` ${e}`)];return new e(...t,n.join(` -`))}},ts={major:4,minor:4,patch:3},ns=H(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=ts;let r=[...e._zod.def.checks??[]];e._zod.traits.has(`$ZodCheck`)&&r.unshift(e);for(let t of r)for(let n of t._zod.onattach)n(e);if(r.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(e,t,n)=>{let r=Ma(e),i;for(let a of t){if(a._zod.def.when){if(Na(e)||!a._zod.def.when(e))continue}else if(r)continue;let t=e.issues.length,o=a._zod.check(e);if(o instanceof Promise&&n?.async===!1)throw new $i;if(i||o instanceof Promise)i=(i??Promise.resolve()).then(async()=>{await o,e.issues.length!==t&&(r||=Ma(e,t))});else{if(e.issues.length===t)continue;r||=Ma(e,t)}}return i?i.then(()=>e):e},n=(n,i,a)=>{if(Ma(n))return n.aborted=!0,n;let o=t(i,r,a);if(o instanceof Promise){if(a.async===!1)throw new $i;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(i,a)=>{if(a.skipChecks)return e._zod.parse(i,a);if(a.direction===`backward`){let t=e._zod.parse({value:i.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,i,a)):n(t,i,a)}let o=e._zod.parse(i,a);if(o instanceof Promise){if(a.async===!1)throw new $i;return o.then(e=>t(e,r,a))}return t(o,r,a)}}ua(e,`~standard`,()=>({validate:t=>{try{let n=qa(e,t);return n.success?{value:n.data}:{issues:n.error?.issues}}catch{return Ya(e,t).then(e=>e.success?{value:e.data}:{issues:e.error?.issues})}},vendor:`zod`,version:1}))}),rs=H(`$ZodString`,(e,t)=>{ns.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??Ao(e._zod.bag),e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),is=H(`$ZodStringFormat`,(e,t)=>{Ko.init(e,t),rs.init(e,t)}),as=H(`$ZodGUID`,(e,t)=>{t.pattern??=fo,is.init(e,t)}),os=H(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=po(e)}else t.pattern??=po();is.init(e,t)}),ss=H(`$ZodEmail`,(e,t)=>{t.pattern??=mo,is.init(e,t)}),cs=H(`$ZodURL`,(e,t)=>{is.init(e,t),e._zod.check=n=>{try{let r=n.value.trim();if(!t.normalize&&t.protocol?.source===Co.source&&!/^https?:\/\//i.test(r)){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}let i=new URL(r);t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(i.hostname)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(i.protocol.endsWith(`:`)?i.protocol.slice(0,-1):i.protocol)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort})),n.value=t.normalize?i.href:r;return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),ls=H(`$ZodEmoji`,(e,t)=>{t.pattern??=go(),is.init(e,t)}),us=H(`$ZodNanoID`,(e,t)=>{t.pattern??=lo,is.init(e,t)}),ds=H(`$ZodCUID`,(e,t)=>{t.pattern??=io,is.init(e,t)}),fs=H(`$ZodCUID2`,(e,t)=>{t.pattern??=ao,is.init(e,t)}),ps=H(`$ZodULID`,(e,t)=>{t.pattern??=oo,is.init(e,t)}),ms=H(`$ZodXID`,(e,t)=>{t.pattern??=so,is.init(e,t)}),hs=H(`$ZodKSUID`,(e,t)=>{t.pattern??=co,is.init(e,t)}),gs=H(`$ZodISODateTime`,(e,t)=>{t.pattern??=ko(t),is.init(e,t)}),_s=H(`$ZodISODate`,(e,t)=>{t.pattern??=Eo,is.init(e,t)}),vs=H(`$ZodISOTime`,(e,t)=>{t.pattern??=Oo(t),is.init(e,t)}),ys=H(`$ZodISODuration`,(e,t)=>{t.pattern??=uo,is.init(e,t)}),bs=H(`$ZodIPv4`,(e,t)=>{t.pattern??=_o,is.init(e,t),e._zod.bag.format=`ipv4`}),xs=H(`$ZodIPv6`,(e,t)=>{t.pattern??=vo,is.init(e,t),e._zod.bag.format=`ipv6`,e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}}),Ss=H(`$ZodCIDRv4`,(e,t)=>{t.pattern??=yo,is.init(e,t)}),Cs=H(`$ZodCIDRv6`,(e,t)=>{t.pattern??=bo,is.init(e,t),e._zod.check=n=>{let r=n.value.split(`/`);try{if(r.length!==2)throw Error();let[e,t]=r;if(!t)throw Error();let n=Number(t);if(`${n}`!==t||n<0||n>128)throw Error();new URL(`http://[${e}]`)}catch{n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}}});function ws(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var Ts=H(`$ZodBase64`,(e,t)=>{t.pattern??=xo,is.init(e,t),e._zod.bag.contentEncoding=`base64`,e._zod.check=n=>{ws(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}});function Es(e){if(!So.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return ws(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var Ds=H(`$ZodBase64URL`,(e,t)=>{t.pattern??=So,is.init(e,t),e._zod.bag.contentEncoding=`base64url`,e._zod.check=n=>{Es(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),Os=H(`$ZodE164`,(e,t)=>{t.pattern??=wo,is.init(e,t)});function ks(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var As=H(`$ZodJWT`,(e,t)=>{is.init(e,t),e._zod.check=n=>{ks(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),js=H(`$ZodNumber`,(e,t)=>{ns.init(e,t),e._zod.pattern=e._zod.bag.pattern??Mo,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:`Infinity`:void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),Ms=H(`$ZodNumberFormat`,(e,t)=>{Ho.init(e,t),js.init(e,t)}),Ns=H(`$ZodBoolean`,(e,t)=>{ns.init(e,t),e._zod.pattern=No,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),Ps=H(`$ZodNull`,(e,t)=>{ns.init(e,t),e._zod.pattern=Po,e._zod.values=new Set([null]),e._zod.parse=(t,n)=>{let r=t.value;return r===null||t.issues.push({expected:`null`,code:`invalid_type`,input:r,inst:e}),t}}),Fs=H(`$ZodUnknown`,(e,t)=>{ns.init(e,t),e._zod.parse=e=>e}),Is=H(`$ZodNever`,(e,t)=>{ns.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function Ls(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}var Rs=H(`$ZodArray`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!Array.isArray(i))return n.issues.push({expected:`array`,code:`invalid_type`,input:i,inst:e}),n;n.value=Array(i.length);let a=[];for(let e=0;eLs(t,n,e))):Ls(s,n,e)}return a.length?Promise.all(a).then(()=>n):n}});function zs(e,t,n,r,i,a){let o=n in r;if(e.issues.length){if(i&&a&&!o)return;t.issues.push(...Pa(n,e.issues))}if(!o&&!i){e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]});return}e.value===void 0?o&&(t.value[n]=void 0):t.value[n]=e.value}function Bs(e){let t=Object.keys(e.shape);for(let n of t)if(!e.shape?.[n]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${n}": expected a Zod schema`);let n=Ca(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(n)}}function Vs(e,t,n,r,i,a){let o=[],s=i.keySet,c=i.catchall._zod,l=c.def.type,u=c.optin===`optional`,d=c.optout===`optional`;for(let i in t){if(i===`__proto__`||s.has(i))continue;if(l===`never`){o.push(i);continue}let a=c.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>zs(e,n,i,t,u,d))):zs(a,n,i,t,u,d)}return o.length&&n.issues.push({code:`unrecognized_keys`,keys:o,input:t,inst:a}),e.length?Promise.all(e).then(()=>n):n}var Hs=H(`$ZodObject`,(e,t)=>{if(ns.init(e,t),!Object.getOwnPropertyDescriptor(t,`shape`)?.get){let e=t.shape;Object.defineProperty(t,"shape",{get:()=>{let n={...e};return Object.defineProperty(t,"shape",{value:n}),n}})}let n=aa(()=>Bs(t));ua(e._zod,`propValues`,()=>{let e=t.shape,n={};for(let t in e){let r=e[t]._zod;if(r.values){n[t]??(n[t]=new Set);for(let e of r.values)n[t].add(e)}}return n});let r=ga,i=t.catchall,a;e._zod.parse=(t,o)=>{a??=n.value;let s=t.value;if(!r(s))return t.issues.push({expected:`object`,code:`invalid_type`,input:s,inst:e}),t;t.value={};let c=[],l=a.shape;for(let e of a.keys){let n=l[e],r=n._zod.optin===`optional`,i=n._zod.optout===`optional`,a=n._zod.run({value:s[e],issues:[]},o);a instanceof Promise?c.push(a.then(n=>zs(n,t,e,s,r,i))):zs(a,t,e,s,r,i)}return i?Vs(c,s,t,o,n.value,e):c.length?Promise.all(c).then(()=>t):t}}),Us=H(`$ZodObjectJIT`,(e,t)=>{Hs.init(e,t);let n=e._zod.parse,r=aa(()=>Bs(t)),i=e=>{let t=new es([`shape`,`payload`,`ctx`]),n=r.value,i=e=>{let t=pa(e);return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`};t.write(`const input = payload.value;`);let a=Object.create(null),o=0;for(let e of n.keys)a[e]=`key_${o++}`;t.write(`const newResult = {};`);for(let r of n.keys){let n=a[r],o=pa(r),s=e[r],c=s?._zod?.optin===`optional`,l=s?._zod?.optout===`optional`;t.write(`const ${n} = ${i(r)};`),c&&l?t.write(` - if (${n}.issues.length) { - if (${o} in input) { - payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ - ...iss, - path: iss.path ? [${o}, ...iss.path] : [${o}] - }))); - } - } - - if (${n}.value === undefined) { - if (${o} in input) { - newResult[${o}] = undefined; - } - } else { - newResult[${o}] = ${n}.value; - } - - `):c?t.write(` - if (${n}.issues.length) { - payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ - ...iss, - path: iss.path ? [${o}, ...iss.path] : [${o}] - }))); - } - - if (${n}.value === undefined) { - if (${o} in input) { - newResult[${o}] = undefined; - } - } else { - newResult[${o}] = ${n}.value; - } - - `):t.write(` - const ${n}_present = ${o} in input; - if (${n}.issues.length) { - payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ - ...iss, - path: iss.path ? [${o}, ...iss.path] : [${o}] - }))); - } - if (!${n}_present && !${n}.issues.length) { - payload.issues.push({ - code: "invalid_type", - expected: "nonoptional", - input: undefined, - path: [${o}] - }); - } - - if (${n}_present) { - if (${n}.value === undefined) { - newResult[${o}] = undefined; - } else { - newResult[${o}] = ${n}.value; - } - } - - `)}t.write(`payload.value = newResult;`),t.write(`return payload;`);let s=t.compile();return(t,n)=>s(e,t,n)},a,o=ga,s=!ta.jitless,c=s&&_a.value,l=t.catchall,u;e._zod.parse=(d,f)=>{u??=r.value;let p=d.value;return o(p)?s&&c&&f?.async===!1&&f.jitless!==!0?(a||=i(t.shape),d=a(d,f),l?Vs([],p,d,f,u,e):d):n(d,f):(d.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),d)}});function Ws(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!Ma(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>Ia(e,r,na())))}),t)}var Gs=H(`$ZodUnion`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.options.some(e=>e._zod.optin===`optional`)?`optional`:void 0),ua(e._zod,`optout`,()=>t.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),ua(e._zod,`values`,()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),ua(e._zod,`pattern`,()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>sa(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>Ws(t,r,e,i)):Ws(o,r,e,i)}}),Ks=H(`$ZodDiscriminatedUnion`,(e,t)=>{t.inclusive=!1,Gs.init(e,t);let n=e._zod.parse;ua(e._zod,`propValues`,()=>{let e={};for(let n of t.options){let r=n._zod.propValues;if(!r||Object.keys(r).length===0)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(n)}"`);for(let[t,n]of Object.entries(r)){e[t]||(e[t]=new Set);for(let r of n)e[t].add(r)}}return e});let r=aa(()=>{let e=t.options,n=new Map;for(let r of e){let e=r._zod.propValues?.[t.discriminator];if(!e||e.size===0)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(r)}"`);for(let t of e){if(n.has(t))throw Error(`Duplicate discriminator value "${String(t)}"`);n.set(t,r)}}return n});e._zod.parse=(i,a)=>{let o=i.value;if(!ga(o))return i.issues.push({code:`invalid_type`,expected:`object`,input:o,inst:e}),i;let s=r.value.get(o?.[t.discriminator]);return s?s._zod.run(i,a):t.unionFallback||a.direction===`backward`?n(i,a):(i.issues.push({code:`invalid_union`,errors:[],note:`No matching discriminator`,discriminator:t.discriminator,options:Array.from(r.value.keys()),input:o,path:[t.discriminator],inst:e}),i)}}),qs=H(`$ZodIntersection`,(e,t)=>{ns.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>Ys(e,t,n)):Ys(e,i,a)}});function Js(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(va(e)&&va(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=Js(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;re.l&&e.r).map(([e])=>e);if(a.length&&i&&e.issues.push({...i,keys:a}),Ma(e))return e;let o=Js(t.value,n.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return e.value=o.data,e}var Xs=H(`$ZodTuple`,(e,t)=>{ns.init(e,t);let n=t.items;e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({input:a,inst:e,expected:`tuple`,code:`invalid_type`}),r;r.value=[];let o=[],s=Zs(n,`optin`),c=Zs(n,`optout`);if(!t.rest){if(a.lengthn.length&&r.issues.push({code:`too_big`,maximum:n.length,inclusive:!0,input:a,inst:e,origin:`array`})}let l=Array(n.length);for(let e=0;e{l[e]=t})):l[e]=t}if(t.rest){let e=n.length-1,s=a.slice(n.length);for(let n of s){e++;let a=t.rest._zod.run({value:n,issues:[]},i);a instanceof Promise?o.push(a.then(t=>Qs(t,r,e))):Qs(a,r,e)}}return o.length?Promise.all(o).then(()=>$s(l,r,n,a,c)):$s(l,r,n,a,c)}});function Zs(e,t){for(let n=e.length-1;n>=0;n--)if(e[n]._zod[t]!==`optional`)return n+1;return 0}function Qs(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}function $s(e,t,n,r,i){for(let a=0;a=i){t.value.length=a;break}t.issues.push(...Pa(a,n.issues))}t.value[a]=n.value}for(let e=t.value.length-1;e>=r.length&&n[e]._zod.optout===`optional`&&t.value[e]===void 0;e--)t.value.length=e;return t}var ec=H(`$ZodRecord`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!va(i))return n.issues.push({expected:`record`,code:`invalid_type`,input:i,inst:e}),n;let a=[],o=t.keyType._zod.values;if(o){n.value={};let s=new Set;for(let c of o)if(typeof c==`string`||typeof c==`number`||typeof c==`symbol`){s.add(typeof c==`number`?c.toString():c);let o=t.keyType._zod.run({value:c,issues:[]},r);if(o instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(o.issues.length){n.issues.push({code:`invalid_key`,origin:`record`,issues:o.issues.map(e=>Ia(e,r,na())),input:c,path:[c],inst:e});continue}let l=o.value,u=t.valueType._zod.run({value:i[c],issues:[]},r);u instanceof Promise?a.push(u.then(e=>{e.issues.length&&n.issues.push(...Pa(c,e.issues)),n.value[l]=e.value})):(u.issues.length&&n.issues.push(...Pa(c,u.issues)),n.value[l]=u.value)}let c;for(let e in i)s.has(e)||(c??=[],c.push(e));c&&c.length>0&&n.issues.push({code:`unrecognized_keys`,input:i,inst:e,keys:c})}else{n.value={};for(let o of Reflect.ownKeys(i)){if(o===`__proto__`||!Object.prototype.propertyIsEnumerable.call(i,o))continue;let s=t.keyType._zod.run({value:o,issues:[]},r);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof o==`string`&&Mo.test(o)&&s.issues.length){let e=t.keyType._zod.run({value:Number(o),issues:[]},r);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(s=e)}if(s.issues.length){t.mode===`loose`?n.value[o]=i[o]:n.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>Ia(e,r,na())),input:o,path:[o],inst:e});continue}let c=t.valueType._zod.run({value:i[o],issues:[]},r);c instanceof Promise?a.push(c.then(e=>{e.issues.length&&n.issues.push(...Pa(o,e.issues)),n.value[s.value]=e.value})):(c.issues.length&&n.issues.push(...Pa(o,c.issues)),n.value[s.value]=c.value)}}return a.length?Promise.all(a).then(()=>n):n}}),tc=H(`$ZodEnum`,(e,t)=>{ns.init(e,t);let n=ra(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>ba.has(typeof e)).map(e=>typeof e==`string`?xa(e):e.toString()).join(`|`)})$`),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),nc=H(`$ZodLiteral`,(e,t)=>{if(ns.init(e,t),t.values.length===0)throw Error(`Cannot create literal schema with no valid values`);let n=new Set(t.values);e._zod.values=n,e._zod.pattern=RegExp(`^(${t.values.map(e=>typeof e==`string`?xa(e):e?xa(e.toString()):String(e)).join(`|`)})$`),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),rc=H(`$ZodTransform`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n.fallback=!0,n));if(i instanceof Promise)throw new $i;return n.value=i,n.fallback=!0,n}});function ic(e,t){return t===void 0&&(e.issues.length||e.fallback)?{issues:[],value:void 0}:e}var ac=H(`$ZodOptional`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.optout=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(t.innerType._zod.optin===`optional`){let r=e.value,i=t.innerType._zod.run(e,n);return i instanceof Promise?i.then(e=>ic(e,r)):ic(i,r)}return e.value===void 0?e:t.innerType._zod.run(e,n)}}),oc=H(`$ZodExactOptional`,(e,t)=>{ac.init(e,t),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`pattern`,()=>t.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),sc=H(`$ZodNullable`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.innerType._zod.optin),ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)}|null)$`):void 0}),ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),cc=H(`$ZodDefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>lc(e,t)):lc(r,t)}});function lc(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var uc=H(`$ZodPrefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),dc=H(`$ZodNonOptional`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>fc(t,e)):fc(i,e)}});function fc(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}var pc=H(`$ZodCatch`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)}}),mc=H(`$ZodPipe`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>t.in._zod.values),ua(e._zod,`optin`,()=>t.in._zod.optin),ua(e._zod,`optout`,()=>t.out._zod.optout),ua(e._zod,`propValues`,()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>hc(e,t.in,n)):hc(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>hc(e,t.out,n)):hc(r,t.out,n)}});function hc(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues,fallback:e.fallback},n)}var gc=H(`$ZodReadonly`,(e,t)=>{ns.init(e,t),ua(e._zod,`propValues`,()=>t.innerType._zod.propValues),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`optin`,()=>t.innerType?._zod?.optin),ua(e._zod,`optout`,()=>t.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(_c):_c(r)}});function _c(e){return e.value=Object.freeze(e.value),e}var vc=H(`$ZodCustom`,(e,t)=>{Lo.init(e,t),ns.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>yc(t,n,r,e));yc(i,n,r,e)}});function yc(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(Ra(e))}}var bc,xc=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function Sc(){return new xc}(bc=globalThis).__zod_globalRegistry??(bc.__zod_globalRegistry=Sc());var Cc=globalThis.__zod_globalRegistry;function wc(e,t){return new e({type:`string`,...U(t)})}function Tc(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...U(t)})}function Ec(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...U(t)})}function Dc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...U(t)})}function Oc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...U(t)})}function kc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...U(t)})}function Ac(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...U(t)})}function jc(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...U(t)})}function Mc(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...U(t)})}function Nc(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...U(t)})}function Pc(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...U(t)})}function Fc(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...U(t)})}function Ic(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...U(t)})}function Lc(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...U(t)})}function Rc(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...U(t)})}function zc(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...U(t)})}function Bc(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...U(t)})}function Vc(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...U(t)})}function Hc(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...U(t)})}function Uc(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...U(t)})}function Wc(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...U(t)})}function Gc(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...U(t)})}function Kc(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...U(t)})}function qc(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...U(t)})}function Jc(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...U(t)})}function Yc(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...U(t)})}function Xc(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...U(t)})}function Zc(e,t){return new e({type:`number`,checks:[],...U(t)})}function Qc(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...U(t)})}function $c(e,t){return new e({type:`boolean`,...U(t)})}function el(e,t){return new e({type:`null`,...U(t)})}function tl(e){return new e({type:`unknown`})}function nl(e,t){return new e({type:`never`,...U(t)})}function rl(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!1})}function il(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!0})}function al(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!1})}function ol(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!0})}function sl(e,t){return new Vo({check:`multiple_of`,...U(t),value:e})}function cl(e,t){return new Uo({check:`max_length`,...U(t),maximum:e})}function ll(e,t){return new Wo({check:`min_length`,...U(t),minimum:e})}function ul(e,t){return new Go({check:`length_equals`,...U(t),length:e})}function dl(e,t){return new qo({check:`string_format`,format:`regex`,...U(t),pattern:e})}function fl(e){return new Jo({check:`string_format`,format:`lowercase`,...U(e)})}function pl(e){return new Yo({check:`string_format`,format:`uppercase`,...U(e)})}function ml(e,t){return new Xo({check:`string_format`,format:`includes`,...U(t),includes:e})}function hl(e,t){return new Zo({check:`string_format`,format:`starts_with`,...U(t),prefix:e})}function gl(e,t){return new Qo({check:`string_format`,format:`ends_with`,...U(t),suffix:e})}function _l(e){return new $o({check:`overwrite`,tx:e})}function vl(e){return _l(t=>t.normalize(e))}function yl(){return _l(e=>e.trim())}function bl(){return _l(e=>e.toLowerCase())}function xl(){return _l(e=>e.toUpperCase())}function Sl(){return _l(e=>ma(e))}function Cl(e,t,n){return new e({type:`array`,element:t,...U(n)})}function wl(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...U(n)})}function Tl(e,t){let n=El(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(Ra(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,r.input??=t.value,r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(Ra(r))}},e(t.value,t)),t);return n}function El(e,t){let n=new Lo({check:`custom`,...U(t)});return n._zod.check=e,n}function Dl(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??Cc,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,external:e?.external??void 0}}function Ol(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o);let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,Ol(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Object.assign(o.schema,c),t.io===`input`&&jl(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function kl(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${a}`}}if(t[1]===n)return{ref:`#`};let i=`#/${r}/`,a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+a}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/ - -Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function Al(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,o[e.defId]=e.def)}e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Nl(t,`input`,e.processors),output:Nl(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function jl(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return jl(r.element,n);if(r.type===`set`)return jl(r.valueType,n);if(r.type===`lazy`)return jl(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`)return jl(r.innerType,n);if(r.type===`intersection`)return jl(r.left,n)||jl(r.right,n);if(r.type===`record`||r.type===`map`)return jl(r.keyType,n)||jl(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:jl(r.in,n)||jl(r.out,n);if(r.type===`object`){for(let e in r.shape)if(jl(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(jl(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(jl(e,n))return!0;return!!(r.rest&&jl(r.rest,n))}return!1}var Ml=(e,t={})=>n=>{let r=Dl({...n,processors:t});return Ol(e,r),kl(r,e),Al(r,e)},Nl=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=Dl({...i??{},target:a,io:t,processors:n});return Ol(e,o),kl(o,e),Al(o,e)},Pl={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Fl=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Pl[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Il=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;i.type=typeof s==`string`&&s.includes(`int`)?`integer`:`number`;let d=typeof u==`number`&&u>=(a??-1/0),f=typeof l==`number`&&l<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;d?p?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l:typeof o==`number`&&(i.maximum=o),typeof c==`number`&&(i.multipleOf=c)},Ll=(e,t,n,r)=>{n.type=`boolean`},Rl=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},zl=(e,t,n,r)=>{n.not={}},Bl=(e,t,n,r)=>{let i=e._zod.def,a=ra(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Vl=(e,t,n,r)=>{let i=e._zod.def,a=[];for(let e of i.values)if(e===void 0){if(t.unrepresentable===`throw`)throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof e==`bigint`){if(t.unrepresentable===`throw`)throw Error(`BigInt literals cannot be represented in JSON Schema`);a.push(Number(e))}else a.push(e);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},Hl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},Ul=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},Wl=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=Ol(a.element,t,{...r,path:[...r.path,`items`]})},Gl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=Ol(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=Ol(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Kl=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>Ol(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},ql=(e,t,n,r)=>{let i=e._zod.def,a=Ol(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=Ol(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},Jl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>Ol(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?Ol(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null;t.target===`draft-2020-12`?(i.prefixItems=c,l&&(i.items=l)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),i.minItems=c.length,l||(i.maxItems=c.length)):(i.items=c,l&&(i.additionalItems=l));let{minimum:u,maximum:d}=e._zod.bag;typeof u==`number`&&(i.minItems=u),typeof d==`number`&&(i.maxItems=d)},Yl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=o._zod.bag?.patterns;if(a.mode===`loose`&&s&&s.size>0){let e=Ol(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)i.patternProperties[t.source]=e}else(t.target===`draft-07`||t.target===`draft-2020-12`)&&(i.propertyNames=Ol(a.keyType,t,{...r,path:[...r.path,`propertyNames`]})),i.additionalProperties=Ol(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]});let c=o._zod.values;if(c){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e)}},Xl=(e,t,n,r)=>{let i=e._zod.def,a=Ol(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Zl=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Ql=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},$l=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},eu=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},tu=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;Ol(o,t,r);let s=t.seen.get(e);s.ref=o},nu=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},ru=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},iu=H(`ZodISODateTime`,(e,t)=>{gs.init(e,t),Mu.init(e,t)});function au(e){return qc(iu,e)}var ou=H(`ZodISODate`,(e,t)=>{_s.init(e,t),Mu.init(e,t)});function su(e){return Jc(ou,e)}var cu=H(`ZodISOTime`,(e,t)=>{vs.init(e,t),Mu.init(e,t)});function lu(e){return Yc(cu,e)}var uu=H(`ZodISODuration`,(e,t)=>{ys.init(e,t),Mu.init(e,t)});function du(e){return Xc(uu,e)}var fu=(e,t)=>{Ba.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>Ua(e,t)},flatten:{value:t=>Ha(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,ia,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,ia,2)}},isEmpty:{get(){return e.issues.length===0}}})},pu=H(`ZodError`,fu),mu=H(`ZodError`,fu,{Parent:Error}),hu=Wa(mu),gu=Ga(mu),_u=Ka(mu),vu=Ja(mu),yu=Xa(mu),bu=Za(mu),xu=Qa(mu),Su=$a(mu),Cu=eo(mu),wu=to(mu),Tu=no(mu),Eu=ro(mu),Du=new WeakMap;function Ou(e,t,n){let r=Object.getPrototypeOf(e),i=Du.get(r);if(i||(i=new Set,Du.set(r,i)),!i.has(t)){i.add(t);for(let e in n){let t=n[e];Object.defineProperty(r,e,{configurable:!0,enumerable:!1,get(){let n=t.bind(this);return Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:n}),n},set(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:t})}})}}}var ku=H(`ZodType`,(e,t)=>(ns.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:Nl(e,`input`),output:Nl(e,`output`)}}),e.toJSONSchema=Ml(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{value:t}),e.parse=(t,n)=>hu(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>_u(e,t,n),e.parseAsync=async(t,n)=>gu(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>vu(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>yu(e,t,n),e.decode=(t,n)=>bu(e,t,n),e.encodeAsync=async(t,n)=>xu(e,t,n),e.decodeAsync=async(t,n)=>Su(e,t,n),e.safeEncode=(t,n)=>Cu(e,t,n),e.safeDecode=(t,n)=>wu(e,t,n),e.safeEncodeAsync=async(t,n)=>Tu(e,t,n),e.safeDecodeAsync=async(t,n)=>Eu(e,t,n),Ou(e,`ZodType`,{check(...e){let t=this.def;return this.clone(fa(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Sa(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Ud(e,t))},superRefine(e,t){return this.check(Wd(e,t))},overwrite(e){return this.check(_l(e))},optional(){return Td(this)},exactOptional(){return Dd(this)},nullable(){return kd(this)},nullish(){return Td(kd(this))},nonoptional(e){return Fd(this,e)},array(){return q(this)},or(e){return dd([this,e])},and(e){return hd(this,e)},transform(e){return zd(this,Cd(e))},default(e){return jd(this,e)},prefault(e){return Nd(this,e)},catch(e){return Ld(this,e)},pipe(e){return zd(this,e)},readonly(){return Vd(this)},describe(e){let t=this.clone();return Cc.add(t,{description:e}),t},meta(...e){if(e.length===0)return Cc.get(this);let t=this.clone();return Cc.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e){return e(this)}}),Object.defineProperty(e,"description",{get(){return Cc.get(e)?.description},configurable:!0}),e)),Au=H(`_ZodString`,(e,t)=>{rs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fl(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,Ou(e,`_ZodString`,{regex(...e){return this.check(dl(...e))},includes(...e){return this.check(ml(...e))},startsWith(...e){return this.check(hl(...e))},endsWith(...e){return this.check(gl(...e))},min(...e){return this.check(ll(...e))},max(...e){return this.check(cl(...e))},length(...e){return this.check(ul(...e))},nonempty(...e){return this.check(ll(1,...e))},lowercase(e){return this.check(fl(e))},uppercase(e){return this.check(pl(e))},trim(){return this.check(yl())},normalize(...e){return this.check(vl(...e))},toLowerCase(){return this.check(bl())},toUpperCase(){return this.check(xl())},slugify(){return this.check(Sl())}})}),ju=H(`ZodString`,(e,t)=>{rs.init(e,t),Au.init(e,t),e.email=t=>e.check(Tc(Nu,t)),e.url=t=>e.check(jc(Iu,t)),e.jwt=t=>e.check(Kc(Zu,t)),e.emoji=t=>e.check(Mc(Lu,t)),e.guid=t=>e.check(Ec(Pu,t)),e.uuid=t=>e.check(Dc(Fu,t)),e.uuidv4=t=>e.check(Oc(Fu,t)),e.uuidv6=t=>e.check(kc(Fu,t)),e.uuidv7=t=>e.check(Ac(Fu,t)),e.nanoid=t=>e.check(Nc(Ru,t)),e.guid=t=>e.check(Ec(Pu,t)),e.cuid=t=>e.check(Pc(zu,t)),e.cuid2=t=>e.check(Fc(Bu,t)),e.ulid=t=>e.check(Ic(Vu,t)),e.base64=t=>e.check(Uc(Ju,t)),e.base64url=t=>e.check(Wc(Yu,t)),e.xid=t=>e.check(Lc(Hu,t)),e.ksuid=t=>e.check(Rc(Uu,t)),e.ipv4=t=>e.check(zc(Wu,t)),e.ipv6=t=>e.check(Bc(Gu,t)),e.cidrv4=t=>e.check(Vc(Ku,t)),e.cidrv6=t=>e.check(Hc(qu,t)),e.e164=t=>e.check(Gc(Xu,t)),e.datetime=t=>e.check(au(t)),e.date=t=>e.check(su(t)),e.time=t=>e.check(lu(t)),e.duration=t=>e.check(du(t))});function W(e){return wc(ju,e)}var Mu=H(`ZodStringFormat`,(e,t)=>{is.init(e,t),Au.init(e,t)}),Nu=H(`ZodEmail`,(e,t)=>{ss.init(e,t),Mu.init(e,t)}),Pu=H(`ZodGUID`,(e,t)=>{as.init(e,t),Mu.init(e,t)}),Fu=H(`ZodUUID`,(e,t)=>{os.init(e,t),Mu.init(e,t)}),Iu=H(`ZodURL`,(e,t)=>{cs.init(e,t),Mu.init(e,t)}),Lu=H(`ZodEmoji`,(e,t)=>{ls.init(e,t),Mu.init(e,t)}),Ru=H(`ZodNanoID`,(e,t)=>{us.init(e,t),Mu.init(e,t)}),zu=H(`ZodCUID`,(e,t)=>{ds.init(e,t),Mu.init(e,t)}),Bu=H(`ZodCUID2`,(e,t)=>{fs.init(e,t),Mu.init(e,t)}),Vu=H(`ZodULID`,(e,t)=>{ps.init(e,t),Mu.init(e,t)}),Hu=H(`ZodXID`,(e,t)=>{ms.init(e,t),Mu.init(e,t)}),Uu=H(`ZodKSUID`,(e,t)=>{hs.init(e,t),Mu.init(e,t)}),Wu=H(`ZodIPv4`,(e,t)=>{bs.init(e,t),Mu.init(e,t)}),Gu=H(`ZodIPv6`,(e,t)=>{xs.init(e,t),Mu.init(e,t)}),Ku=H(`ZodCIDRv4`,(e,t)=>{Ss.init(e,t),Mu.init(e,t)}),qu=H(`ZodCIDRv6`,(e,t)=>{Cs.init(e,t),Mu.init(e,t)}),Ju=H(`ZodBase64`,(e,t)=>{Ts.init(e,t),Mu.init(e,t)}),Yu=H(`ZodBase64URL`,(e,t)=>{Ds.init(e,t),Mu.init(e,t)}),Xu=H(`ZodE164`,(e,t)=>{Os.init(e,t),Mu.init(e,t)}),Zu=H(`ZodJWT`,(e,t)=>{As.init(e,t),Mu.init(e,t)}),Qu=H(`ZodNumber`,(e,t)=>{js.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Il(e,t,n,r),Ou(e,`ZodNumber`,{gt(e,t){return this.check(al(e,t))},gte(e,t){return this.check(ol(e,t))},min(e,t){return this.check(ol(e,t))},lt(e,t){return this.check(rl(e,t))},lte(e,t){return this.check(il(e,t))},max(e,t){return this.check(il(e,t))},int(e){return this.check(ed(e))},safe(e){return this.check(ed(e))},positive(e){return this.check(al(0,e))},nonnegative(e){return this.check(ol(0,e))},negative(e){return this.check(rl(0,e))},nonpositive(e){return this.check(il(0,e))},multipleOf(e,t){return this.check(sl(e,t))},step(e,t){return this.check(sl(e,t))},finite(){return this}});let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function G(e){return Zc(Qu,e)}var $u=H(`ZodNumberFormat`,(e,t)=>{Ms.init(e,t),Qu.init(e,t)});function ed(e){return Qc($u,e)}var td=H(`ZodBoolean`,(e,t)=>{Ns.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ll(e,t,n,r)});function K(e){return $c(td,e)}var nd=H(`ZodNull`,(e,t)=>{Ps.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rl(e,t,n,r)});function rd(e){return el(nd,e)}var id=H(`ZodUnknown`,(e,t)=>{Fs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function ad(){return tl(id)}var od=H(`ZodNever`,(e,t)=>{Is.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zl(e,t,n,r)});function sd(e){return nl(od,e)}var cd=H(`ZodArray`,(e,t)=>{Rs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wl(e,t,n,r),e.element=t.element,Ou(e,`ZodArray`,{min(e,t){return this.check(ll(e,t))},nonempty(e){return this.check(ll(1,e))},max(e,t){return this.check(cl(e,t))},length(e,t){return this.check(ul(e,t))},unwrap(){return this.element}})});function q(e,t){return Cl(cd,e,t)}var ld=H(`ZodObject`,(e,t)=>{Us.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gl(e,t,n,r),ua(e,`shape`,()=>t.shape),Ou(e,`ZodObject`,{keyof(){return Y(Object.keys(this._zod.def.shape))},catchall(e){return this.clone({...this._zod.def,catchall:e})},passthrough(){return this.clone({...this._zod.def,catchall:ad()})},loose(){return this.clone({...this._zod.def,catchall:ad()})},strict(){return this.clone({...this._zod.def,catchall:sd()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(e){return Da(this,e)},safeExtend(e){return Oa(this,e)},merge(e){return ka(this,e)},pick(e){return Ta(this,e)},omit(e){return Ea(this,e)},partial(...e){return Aa(wd,this,e[0])},required(...e){return ja(Pd,this,e[0])}})});function J(e,t){return new ld({type:`object`,shape:e??{},...U(t)})}var ud=H(`ZodUnion`,(e,t)=>{Gs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Kl(e,t,n,r),e.options=t.options});function dd(e,t){return new ud({type:`union`,options:e,...U(t)})}var fd=H(`ZodDiscriminatedUnion`,(e,t)=>{ud.init(e,t),Ks.init(e,t)});function pd(e,t,n){return new fd({type:`union`,options:t,discriminator:e,...U(n)})}var md=H(`ZodIntersection`,(e,t)=>{qs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ql(e,t,n,r)});function hd(e,t){return new md({type:`intersection`,left:e,right:t})}var gd=H(`ZodTuple`,(e,t)=>{Xs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jl(e,t,n,r),e.rest=t=>e.clone({...e._zod.def,rest:t})});function _d(e,t,n){let r=t instanceof ns;return new gd({type:`tuple`,items:e,rest:r?t:null,...U(r?n:t)})}var vd=H(`ZodRecord`,(e,t)=>{ec.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Yl(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function yd(e,t,n){return!t||!t._zod?new vd({type:`record`,keyType:W(),valueType:e,...U(t)}):new vd({type:`record`,keyType:e,valueType:t,...U(n)})}var bd=H(`ZodEnum`,(e,t)=>{tc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bl(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new bd({...t,checks:[],...U(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new bd({...t,checks:[],...U(r),entries:i})}});function Y(e,t){return new bd({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...U(t)})}var xd=H(`ZodLiteral`,(e,t)=>{nc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vl(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function X(e,t){return new xd({type:`literal`,values:Array.isArray(e)?e:[e],...U(t)})}var Sd=H(`ZodTransform`,(e,t)=>{rc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ul(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Ra(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(Ra(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n.fallback=!0,n)):(n.value=i,n.fallback=!0,n)}});function Cd(e){return new Sd({type:`transform`,transform:e})}var wd=H(`ZodOptional`,(e,t)=>{ac.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ru(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Td(e){return new wd({type:`optional`,innerType:e})}var Ed=H(`ZodExactOptional`,(e,t)=>{oc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ru(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Dd(e){return new Ed({type:`optional`,innerType:e})}var Od=H(`ZodNullable`,(e,t)=>{sc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function kd(e){return new Od({type:`nullable`,innerType:e})}var Ad=H(`ZodDefault`,(e,t)=>{cc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ql(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function jd(e,t){return new Ad({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var Md=H(`ZodPrefault`,(e,t)=>{uc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$l(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Nd(e,t){return new Md({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var Pd=H(`ZodNonOptional`,(e,t)=>{dc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Fd(e,t){return new Pd({type:`nonoptional`,innerType:e,...U(t)})}var Id=H(`ZodCatch`,(e,t)=>{pc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Ld(e,t){return new Id({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}var Rd=H(`ZodPipe`,(e,t)=>{mc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>tu(e,t,n,r),e.in=t.in,e.out=t.out});function zd(e,t){return new Rd({type:`pipe`,in:e,out:t})}var Bd=H(`ZodReadonly`,(e,t)=>{gc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Vd(e){return new Bd({type:`readonly`,innerType:e})}var Hd=H(`ZodCustom`,(e,t)=>{vc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hl(e,t,n,r)});function Ud(e,t={}){return wl(Hd,e,t)}function Wd(e,t){return Tl(e,t)}function Gd(e){return{blockingTodoCount:e.blockingTodoCount,goalNotifications:e.goalNotifications,goals:e.goals,openUserTodoCount:e.openUserTodoCount,systemHealth:e.systemHealth,attentionHistory:e.attentionHistory,userTodos:e.userTodos,workers:e.workers}}function Kd(e,t){return e.goals.find(e=>e.goalId===t)?.title??t}function qd(e){return[`推进中`,`需修复`,`等待条件`].includes(e.state)}function Jd(e){return e.activationState===`stopped`||e.state===`已停止`?`stopped`:e.state===`已完成`?`history`:e.needsYou||e.state===`等你`?`needs_you`:e.state===`推进中`||e.state===`需修复`?`running`:e.state===`安静运行`?`observing`:`scheduled`}function Yd(e){let t=e;return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function Xd(e){return`$${e.toFixed(2)}`}function Zd(e){let t=e;return t>=36e5?`${(t/36e5).toFixed(1)}h`:t>=6e4?`${(t/6e4).toFixed(1)}m`:t>=1e3?`${Math.round(t/1e3)}s`:`${t}ms`}function Qd(e,t,n){return e==null?t:n(e)}function $d(e,t=132){let n=(e??``).replace(/\s+/g,` `).trim();return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}var ef=e=>typeof e==`string`&&e.trim()?e.trim():null;function tf(e){let t=e.decision_scope&&typeof e.decision_scope==`object`&&!Array.isArray(e.decision_scope)?e.decision_scope:{},n=ef(t.kind),r=ef(t.granularity),i=ef(t.scope_key),a=ef(e.superseded_by);return{interaction:e.task_class===`user_gate`?`decision`:`unknown`,lifecycle:a?`superseded`:e.status===`deferred`?`deferred`:e.done===!0||[`done`,`completed`,`closed`,`archived`].includes(String(e.status))?`closed`:e.status===`open`||e.status===`blocked`?`open`:`unknown`,reason:ef(e.note),evidence:ef(e.evidence),blocksAgent:ef(e.blocks_agent),unblocksTodoId:ef(e.unblocks_todo_id),decisionScope:n&&r&&i?{kind:n,granularity:r,scopeKey:i}:null,supersededBy:a}}function nf(e,t,n,r){return{...e,sourceId:t,goalTitle:r??e.goalTitle,details:n?e.details:{...e.details??tf({}),lifecycle:`unavailable`}}}function rf(e,t){return t.find(t=>t.sourceId===e.sourceId&&t.goalId===e.goalId&&t.todoId===e.todoId)||{...e,details:{...e.details??tf({}),lifecycle:`unavailable`}}}function af(e,t){let n=e.details?.supersededBy;if(!(!n||n===e.todoId||e.details?.lifecycle===`unavailable`))return t.find(t=>t.sourceId===e.sourceId&&t.goalId===e.goalId&&t.todoId===n)}function of(e){return![`closed`,`deferred`,`superseded`,`unavailable`].includes(e.details?.lifecycle??`unknown`)}var sf={ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,goal_count:1,run_count:8440,status_contract:{schema_version:2,minimum_dashboard_schema_version:2,producer:`loopx status`,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`},usage_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471166+00:00`,sample_run_count:20,proxy_note:`run-history proxy; excludes token counts and raw thread logs`,totals:{runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9},goals:[{goal_id:`loopx-meta`,runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9,project_share_24h:1}]},event_ledger_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.360662+00:00`,sample_run_count:20,proxy_note:`append-only run-history projection; compact event-class counts only`,event_classes:[`accounting`,`decision`,`evidence`,`state`,`work`],totals:{events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9}},goals:[{goal_id:`loopx-meta`,events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9},latest_event_class:`accounting`,latest_event_at:`2026-07-06T14:37:32+08:00`}]},promotion_readiness_summary:{available:!0,source:`run_history_full_scan`,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.408527+00:00`,sample_run_count:0,proxy_note:`canary promotion-readiness projection from append-only run history; exact evidence stays in run artifacts`},promotion_gate:{ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,gate:`promotion_readiness`,gate_state:`ready`,can_promote:!0,should_warn:!1,non_blocking:!0,recommended_action:`promotion readiness is fresh`,readiness:{available:!0,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,runtime_root:`$HOME/.codex/loopx`,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.471087+00:00`}},decision_freshness_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471133+00:00`,sample_run_count:20,window_days:7,proxy_note:`checkpointed decision freshness projection; rebase old decisions at the decision point before reuse`,summary:{decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0},items:[]},todo_index:JSON.parse(`{"schema_version":"todo_index_v0","source":"live_loopx_status_public_slice","total_count":12,"current_projected_count":12,"rollout_event_count":94,"item_limit":12,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}`),agent_management_projection:{schema_version:`agent_management_projection_v0`,mode:`read_only`,goal_id:`loopx-meta`,generated_at:`2026-07-06T06:49:06Z`,style_hint:null,truth_contract:{todo_is_runtime_work_item:!0,projection_is_writable:!1,introduces_task_runtime:!1,write_api:!1},source_summary:{registered_agent_count:4,projected_agent_count:4,todo_source:`live_loopx_status_public_slice`,public_safe_export:!0},agents:[{agent_id:`codex-main-control`,agent_model:`peer_v1`,profile_role:`release-validation`,state:`blocked`,next_action:`Continue projected todo todo_2bf560b48a0c.`,last_activity_at:`2026-06-29T00:49:36+08:00`,evidence_refs:[`todo:todo_e72afc24f04a:evidence`],goal_ids:[`loopx-meta`],stale_claim_hint:{state:`activity_missing`,claimed_by:`codex-main-control`,reason:`claimed open todo has no projected activity timestamp`,recommended_operator_action:`inspect evidence before considering reassignment`},current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_2bf560b48a0c`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0`,title:`Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harn…`,task_class:`blocker`,action_kind:`legacy_open_pr_rename_blocker`,claimed_by:`codex-main-control`}},{agent_id:`codex-product-capability`,agent_model:`peer_v1`,profile_role:`product-validation`,state:`monitoring`,next_action:`Continue projected todo todo_ded745761822.`,last_activity_at:`2026-07-06T06:29:53Z`,evidence_refs:[`todo:todo_ded745761822:evidence`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_ded745761822`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0-LOCAL`,title:`Public-safe redacted live LoopX text; inspect local status for the full row.`,task_class:`continuous_monitor`,action_kind:`Public-safe redacted live LoopX text; inspect local status for the full row.`,claimed_by:`codex-product-capability`,updated_at:`2026-07-04T20:22:45+08:00`}},{agent_id:`codex-side-bypass`,agent_model:`peer_v1`,profile_role:`implementation-validation`,state:`waiting`,next_action:`Inspect status projection before taking work.`,last_activity_at:`2026-07-06T06:32:16Z`,evidence_refs:[`rollout_event:todo_complete:todo_22c946938115`],goal_ids:[`loopx-meta`]},{agent_id:`codex-value-explorer`,agent_model:`peer_v1`,profile_role:`value-exploration`,state:`monitoring`,next_action:`Continue projected todo todo_584f55f8f3b4.`,last_activity_at:`2026-07-06T09:39:59+08:00`,evidence_refs:[`rollout_event:todo_update:todo_584f55f8f3b4`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_584f55f8f3b4`,goal_id:`loopx-meta`,role:`agent`,status:`open`,title:`todo add recorded for todo_584f55f8f3b4`}}]},contract:{ok:!0,summary:{errors:0,warnings:1,checks:6},errors:[],warnings:["loopx-meta: duplicate index rows raw=8444 unique=8440 unexpected=3 artifact_identity_collisions=2 artifact_collision_rows=3 reward_overlays=1; inspect with `loopx history --goal-id loopx-meta inspect-index-duplicates`; artifact identity collisions need review…"],checks:[`registry goals checked: 12`,`registry boundary: shared_local_registry push_allowed=False tracked=False ignored=False`,`user-gate scopes checked: 6 open multi-agent gates`,`runtime root resolved: $HOME/.codex/loopx`,`run-history goals=28 runs=10210`,`public boundary scan clean: 1218 files`]},global_registry:{available:!0,ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,current_registry:`$HOME/.codex/loopx/registry.global.json`,current_registry_is_global:!0,global_goal_count:12,current_goal_count:12,source_registry_count:7,summary:{high:0,action:8,info:0,checks:2,findings:8},findings:[{kind:`source_registry_missing`,severity:`action`,message:"`cc-test` source registry is missing",recommended_action:"reconnect `cc-test` from its project or archive it if the project is obsolete",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-test` active state file is missing",recommended_action:"repair `cc-test` state_file or reconnect the project",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp` source registry is missing",recommended_action:"reconnect `cc-tmp` from its project or archive it if the project is obsolete",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp` active state file is missing",recommended_action:"repair `cc-tmp` state_file or reconnect the project",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` source registry is missing",recommended_action:"reconnect `cc-tmp-xdrchpuaul` from its project or archive it if the project is obsolete",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` active state file is missing",recommended_action:"repair `cc-tmp-xdrchpuaul` state_file or reconnect the project",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` source registry is missing",recommended_action:"reconnect `loopx-auto-research-e2e-probe-20260628-2225-goal` from its project or archive it if the project is obsolete",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` active state file is missing",recommended_action:"repair `loopx-auto-research-e2e-probe-20260628-2225-goal` state_file or reconnect the project",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`}],checks:[`global registry goals checked: 12`,`global source registries checked: 7`]},attention_queue:JSON.parse(`{"available":true,"item_count":1,"needs_user_or_controller":0,"needs_controller":0,"needs_codex":1,"watching_external_evidence":0,"items":[{"goal_id":"loopx-meta","status":"skillsbench_codex_cli_goal_tail4_keepalive_relaunched","lifecycle_phase":"adapter_inspected","lifecycle_flags":["adapter_inspected"],"waiting_on":"codex","severity":"action","recommended_action":"Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…","source":"latest_run","quota":{"compute":1.0,"window_hours":24,"slot_minutes":1,"allowed_slots":1440,"spent_slots":97,"state":"eligible","reason":"1 compute quota; eligible for the next automatic agent turn"},"agent_todos":{"source_section":"Agent Todo","total_count":12,"open_count":12,"done_count":0,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}}]}`),run_history:{available:!0,goal_count:1,run_count:5,goals:[{id:`loopx-meta`,domain:`loopx-platform`,status:`active-read-only`,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`],registry_member:!0,legacy_runtime_goal:!1,adapter_kind:`harness_self_improvement`,adapter_status:`connected-read-only`,index_exists:!0,raw_index_records:8444,unique_runs:8440,quota:{compute:1,window_hours:24,slot_minutes:1,allowed_slots:1440,spent_slots:97,state:`waiting`,reason:`no active Codex-ready work is currently selected`},latest_runs:[{generated_at:`2026-07-06T14:37:32+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-value-explorer`,recommended_action:`审阅 PR #1524 的 Agent Management 面板视觉方向:workspace hint 与 stale claim hint 是否符合预期;确认后允许 codex-value-explorer 自合并。`,health_check:`quota safe-bypass operator gate; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:55+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-main-control`,recommended_action:`[P1] Repair SkillsBench post-run debug gate consistency for countable codex-cli-goal official-zero runs: when attempt_accounting is countable and case_closeout_complete=true, do not project first_blocker=loopx_closeout_…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:54+08:00`,goal_id:`loopx-meta`,classification:`skillsbench_codex_cli_goal_tail4_keepalive_relaunched`,agent_id:`codex-main-control`,progress_scope:`goal`,delivery_batch_scale:`single_surface`,delivery_outcome:`outcome_progress`,recommended_action:`Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 10`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:34+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-side-bypass`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:32:57+08:00`,goal_id:`loopx-meta`,classification:`auto_research_successor_link_fix_merged`,agent_id:`codex-side-bypass`,progress_scope:`agent_lane`,delivery_batch_scale:`implementation`,delivery_outcome:`outcome_progress`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 0`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]}]}]}},cf=W().nullable(),lf=pd(`enabled`,[J({enabled:X(!1)}),J({enabled:X(!0),revision:G().int().positive(),digest:W().min(1),objective:W(),non_goals:q(W()),held_todo_ids:q(W()),status:Y([`unverified`,`stale`,`failed`,`partial`,`accepted`,`held`]),criteria:q(J({id:W(),description:W()})),tasks:q(J({todo_id:W(),state:Y([`ready`,`unbound`,`stale`]),criterion_ids:q(W()),reason:W().optional(),reason_code:W().optional(),applicable:K().optional()})),verification:J({operation_id:W(),contract_revision:G().int().positive(),contract_digest:W(),todo_id:W().nullable(),results:q(J({criterion_id:W(),passed:K(),exit_code:G().int().nullable()}))}).nullable()})]),uf=J({schema_version:X(`goal_acceptance_observation_projection_v0`),goal_id:W(),read_only:X(!0),acceptance_assessed:X(!1),coverage:Y([`partial`,`unavailable`]),missing_sources:q(W()),truncated:K(),historical_progress:q(J({kind:W(),observed_at:cf,source:W(),evidence_refs:q(W())})),acceptance_gaps:q(J({kind:W(),owner:cf,reason:cf,evidence_required:cf,observed_at:cf,source:W(),reason_code:W().optional(),resolution_hint:W().optional(),component_checks:J({checkpoint_satisfied:K(),checkpoint_fresh:K(),path_outcome_valid:K(),evidence_refs_present:K(),final_outcome_claim_present:K(),no_reported_outcome_gap:K()}).optional()})),guards:q(J({kind:W(),todo_id:cf,blocks_agent:cf,owner:cf,reason:cf,evidence_required:cf,decision_scope:cf})),next_action:cf,next_action_source:cf,goal_acceptance_contract:lf.optional()}),df=dd([W(),G(),K(),rd()]),ff=yd(W(),df),pf=J({todo_id:W().optional(),priority:W().optional(),status:W(),title:W(),claimed_by:W().optional(),task_class:W().optional(),action_kind:W().optional()}),mf=J({gate_id:W(),kind:W(),status:W(),blocks:q(W()).optional()}),hf=J({todo_id:W().optional(),owner_agent:W().optional(),status:W().optional(),lease_until:W().optional(),write_scope:q(W()).optional()}),gf=J({generated_at:W().optional(),classification:W().optional(),summary:W().optional()}),_f=J({kind:W().optional().default(`warning`),message:dd([W(),q(W())]).optional().default(`compact source warning`)}).passthrough(),vf=J({schema_version:X(`goal_channel_projection_v0`),mode:X(`read_only`),goal_id:W(),display_name:W(),generated_at:W().optional().nullable(),latest_status:W(),waiting_on:W(),next_action:W(),source_refs:yd(W(),df),decision_frame:J({user_action_required:K(),agent_action_required:K(),quiet_noop_allowed:K()}),quota:ff,user_todos:q(pf).default([]),agent_todos:q(pf).default([]),open_gates:q(mf).default([]),active_leases:q(hf).default([]),artifacts:q(ff).default([]),recent_events:q(gf).default([]),source_warnings:q(_f).default([]),truth_contract:J({event_ledger_is_source_of_truth:K(),projection_is_writable:K(),recompute_rule:W(),write_authority:W()})}),yf=J({compute:G().optional().default(1),window_hours:G().optional().default(24),slot_minutes:G().optional().default(1),allowed_slots:G().optional().nullable(),spent_slots:G().optional().default(0),state:W().optional().nullable(),next_eligible_at:W().optional().nullable(),reason:W().optional().nullable(),blocked_action_scope:W().optional().nullable(),focus_wait:K().optional().nullable(),handoff_outcome_floor_block:K().optional().nullable(),safe_bypass_allowed:K().optional().default(!1),safe_bypass_kind:W().optional().nullable(),safe_bypass_policy:W().optional().nullable(),post_handoff_outcome_gap_streak:G().optional().nullable(),outcome_gap_threshold:G().optional().nullable(),must_advance:q(W()).optional().default([]),avoid:q(W()).optional().default([])}).transform(e=>{let t=Math.max(1,e.slot_minutes),n=Math.round(e.window_hours*60*e.compute/t);return{...e,slot_minutes:t,allowed_slots:e.allowed_slots??n}}),bf=J({self_repair:J({enabled:K().optional().default(!1),allow_health_blocker_repair:K().optional().default(!1),allow_waiting_projection_repair:K().optional().default(!1)}).optional().nullable()}).passthrough(),xf=J({model_config:J({model:W(),reasoning_effort:W().optional()}).optional(),execution_config:W().optional(),mode:W().optional().default(`default`),orchestration_mode:W().optional().nullable(),spawn_allowed:K().optional().default(!1),allowed:K().optional().nullable(),max_children:G().optional().default(0),allowed_domains:q(W()).optional().default([])}).passthrough(),Sf=J({label:W().optional().nullable(),path:W(),anchor:W().optional().nullable(),exists:K().optional().default(!1),resolved_path:W().optional().nullable()}),Cf=J({index:G(),done:K(),text:W(),schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),resume_when:W().optional().nullable(),resume_ready:K().optional().nullable(),resume_condition:yd(W(),ad()).optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),archive_state:W().optional().nullable(),source_section:W().optional().nullable(),task_class:W().optional().nullable(),task_domain:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_capabilities:q(W()).optional(),note:W().optional().nullable(),evidence:W().optional().nullable(),updated_at:W().optional().nullable(),completion_validation_required:K().optional().nullable(),completion_validation_sha256:W().optional().nullable(),completion_validation_revision:G().int().nonnegative().optional().nullable(),completion_validation_revision_history:q(J({revision:G().int().positive(),previous_declaration_sha256:W(),declaration_sha256:W(),actor_agent_id:W(),revised_at:W()}).passthrough()).optional().default([]),review_materials:q(Sf).optional().default([])}).passthrough(),wf=J({source_section:W().optional().nullable(),total_count:G().optional().default(0),open_count:G().optional().default(0),done_count:G().optional().default(0),advancement_done_count:G().optional(),items:q(Cf).optional().default([]),deferred_items:q(Cf).optional()}),Tf=Cf.extend({goal_id:W(),source:W().optional().nullable(),event_count:G().optional().default(0),event_kinds:q(W()).optional().default([]),latest_event_kind:W().optional().nullable(),latest_event_at:W().optional().nullable(),latest_event_status:W().optional().nullable(),agent_id:W().optional().nullable()}).passthrough(),Ef=J({schema_version:W().optional().nullable(),source:W().optional().nullable(),total_count:G().optional().default(0),current_projected_count:G().optional().default(0),rollout_event_count:G().optional().default(0),item_limit:G().optional().nullable(),items:q(Tf).optional().default([])}),Df=J({kind:W().optional().nullable(),label:W().optional().nullable(),path_safe:K().optional().default(!1),branch:W().optional().nullable(),write_scope:q(W()).optional().default([])}).passthrough(),Of=J({state:W().optional().nullable(),claimed_by:W().optional().nullable(),last_activity_at:W().optional().nullable(),threshold_hours:G().optional().nullable(),reason:W().optional().nullable(),recommended_operator_action:W().optional().nullable()}).passthrough(),kf=J({schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),goal_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),task_class:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_write_scopes:q(W()).optional().default([]),workspace_ref:Df.optional().nullable()}).passthrough(),Af=J({schema_version:W().optional().nullable(),from_agent:W().optional().nullable(),to_agent:W().optional().nullable(),intent:W().optional().nullable(),summary:W().optional().nullable(),blocker:W().optional().nullable(),suggested_next_action:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),updated_at:W().optional().nullable()}).passthrough(),jf=J({agent_id:W(),role:W().optional().nullable(),state:W().optional().nullable(),current_todo:kf.optional().nullable(),next_action:W().optional().nullable(),last_activity_at:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),handoff_refs:q(W()).optional().default([]),handoff_note:Af.optional().nullable(),workspace_ref:Df.optional().nullable(),stale_claim_hint:Of.optional().nullable(),blocked_on:kf.optional().nullable(),goal_ids:q(W()).optional().default([])}).passthrough(),Mf=J({schema_version:W().optional().nullable(),mode:W().optional().nullable(),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),style_hint:J({preferred:W().optional().nullable(),license_boundary:W().optional().nullable()}).optional().nullable(),truth_contract:J({todo_is_runtime_work_item:K().optional().default(!0),projection_is_writable:K().optional().default(!1),introduces_task_runtime:K().optional().default(!1),write_api:K().optional().default(!1)}).optional().nullable(),source_summary:J({registered_agent_count:G().optional().default(0),projected_agent_count:G().optional().default(0),todo_source:W().optional().nullable()}).optional().nullable(),agents:q(jf).optional().default([])}).passthrough(),Nf=J({goal_id:W(),configured:K().optional().default(!1),enabled:K().optional().default(!1),human_gate_auto_notify_enabled:K().optional().default(!1),target_ref:W().optional().nullable(),receipt_count:G().optional().default(0),last_notified_at:W().optional().nullable()}).passthrough(),Pf=J({schema_version:W().optional().nullable(),generated_at:W().optional().nullable(),goals:q(Nf).optional().default([])}).passthrough(),Ff=J({source_section:W().optional().nullable(),open:G().optional().default(0),done:G().optional().default(0),total:G().optional().default(0),advancement_done_count:G().optional(),next:W().optional().nullable(),next_index:G().optional().nullable(),items:q(Cf).optional().default([]),recent_completed_advancement_items:q(Cf).optional().default([])}),If=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),severity:W().optional().nullable(),index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),Lf=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(If).optional().default([])}),Rf=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),quota_state:W().optional().nullable(),priority:W().optional().nullable(),todo_index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),zf=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(Rf).optional().default([])}),Bf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),summary:W().optional().nullable()}),Vf=J({kind:W().optional().nullable(),source:W().optional().nullable(),severity:W().optional().nullable(),requires_refresh_state:K().optional().default(!1),reason:W().optional().nullable(),active_state_updated_at:W().optional().nullable(),latest_run_generated_at:W().optional().nullable(),latest_run_state_updated_at:W().optional().nullable(),latest_run_classification:W().optional().nullable(),recommended_action:W().optional().nullable()}),Hf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),health_check:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}),Uf=J({project_asset_backed:K().optional(),same_source_should_run:K().optional(),codex_ready:K().optional(),handoff_has_next_action:K().optional(),handoff_has_stop_condition:K().optional(),handoff_sanitized_surface:K().optional()}).catchall(K()),Wf=J({ready:K().optional().default(!1),codex_ready:K().optional().default(!1),source:W().optional().nullable(),quota_state:W().optional().nullable(),checks:Uf.optional().default({}),handoff_status:W().optional().nullable(),handoff_ready_at:W().optional().nullable(),handoff_ready_classification:W().optional().nullable(),post_handoff_run_seen:K().optional().default(!1),post_handoff_latest_run:Hf.optional().nullable(),post_handoff_recent_runs:q(Hf).optional().default([]),post_handoff_small_scale_streak:G().int().nonnegative().optional().default(0),post_handoff_outcome_gap_streak:G().int().nonnegative().optional().default(0),next_probe:W().optional().nullable()}),Gf=J({schema_version:W().optional().nullable(),kind:W().optional().nullable(),missing_roles:q(W()).optional().default([]),source:W().optional().nullable(),recommended_action:W().optional().nullable()}),Kf=J({owner:W(),gate:W(),next_action:W(),stop_condition:W(),user_todos:Ff.optional().nullable(),agent_todos:Ff.optional().nullable(),quota:yf.optional().nullable(),control_plane:bf.optional().nullable(),orchestration:xf.optional().nullable(),latest_validation:Bf.optional().nullable(),stale_latest_run_warning:Vf.optional().nullable(),todo_projection_gap:Gf.optional().nullable()}),qf=J({goal_id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),status:W(),waiting_on:W(),severity:W(),recommended_action:W(),project_asset:Kf.optional().nullable(),handoff_readiness:Wf.optional().nullable(),source:W().optional(),operator_question:W().optional().nullable(),agent_command:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),controller_stage:W().optional().nullable(),missing_gates:q(W()).optional().default([]),next_handoff_condition:W().optional().nullable(),quota:yf.optional().nullable(),control_plane:bf.optional().nullable(),user_todos:wf.optional().nullable(),agent_todos:wf.optional().nullable(),stale_latest_run_warning:Vf.optional().nullable(),dependency_blockers:Lf.optional().nullable(),todo_state_file:W().optional().nullable(),goal_channel_projection:vf.optional().nullable()}),Jf=J({recorded_at:W().optional().nullable(),decision:W().optional().nullable(),reward:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable()}),Yf=J({recorded_at:W().optional().nullable(),gate:W().optional().nullable(),decision:W().optional().nullable(),operator_question:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable(),agent_command:W().optional().nullable()}),Xf=J({version:W().optional().nullable(),goal_id:W().optional().nullable(),run_id:W().optional().nullable(),gate_id:W().optional().nullable(),created_state_ref:W().optional().nullable(),created_policy_version:W().optional().nullable(),interrupt_payload:J({question:W().optional().nullable(),choices:q(W()).optional().default([])}).optional().nullable(),allowed_decisions:q(W()).optional().default([]),operator_decision:W().optional().nullable(),latest_state_ref:W().optional().nullable(),freshness_check:W().optional().nullable(),precondition_check:W().optional().nullable(),migration_or_rebase_result:W().optional().nullable(),resulting_action:W().optional().nullable(),validation_after_resume:W().optional().nullable()}),Zf=J({id:W().optional().nullable(),ok:K().optional().nullable(),review:W().optional().nullable()}),Qf=J({classification:W().optional().nullable(),read_only_observer_ready:K().optional().nullable(),decision_advisor_ready:K().optional().nullable(),write_controller_ready:K().optional().nullable(),missing_gates:q(W()).optional().default([]),review_judgment:W().optional().nullable(),next_handoff_condition:W().optional().nullable(),gates:q(Zf).optional().default([])}),$f=J({declared:K().optional().default(!1),required:K().optional().default(!1),path:W().optional().nullable(),path_exists:K().optional().nullable(),read_status:W().optional().nullable(),default_entry_count:G().optional().default(0),default_entries_checked:G().optional().default(0),default_entries_present:G().optional().default(0),topic_authority_count:G().optional().default(0),project_material_count:G().optional().default(0),project_material_repository_count:G().optional().default(0),project_material_owner_review_required_count:G().optional().default(0),project_material_stale_count:G().optional().default(0),project_material_current_authority_count:G().optional().default(0),deprecated_source_count:G().optional().default(0),conflict_risk:W().optional().nullable()}),ep=J({adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_source_count:G().optional().nullable(),authority_registry_declared:K().optional().nullable(),authority_registry_path_exists:K().optional().nullable(),authority_registry_default_entry_count:G().optional().nullable(),authority_registry_default_entries_present:G().optional().nullable(),topic_authority_count:G().optional().nullable(),project_material_count:G().optional().nullable(),project_material_repository_count:G().optional().nullable(),project_material_owner_review_required_count:G().optional().nullable(),project_material_stale_count:G().optional().nullable(),project_material_current_authority_count:G().optional().nullable(),authority_registry_conflict_risk:W().optional().nullable(),guard_count:G().optional().nullable(),sections_found:G().optional().nullable(),sections_checked:G().optional().nullable(),files_present:G().optional().nullable(),files_checked:G().optional().nullable()}),tp=J({generated_at:W(),goal_id:W(),classification:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),recommended_action:W().optional().nullable(),health_check:W().optional().nullable(),active_task_count:G().optional().nullable(),active_priorities:yd(W(),ad()).optional().nullable(),cache_check:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),human_reward:Jf.optional().nullable(),operator_gate:Yf.optional().nullable(),operator_gate_resume_contract:Xf.optional().nullable(),controller_readiness:Qf.optional().nullable(),project_map:ep.optional().nullable()}),np=J({acceptance_observation:uf.optional().nullable().catch(null),id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),display_name:W().optional().nullable(),domain:W().optional().nullable(),status:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),registry_member:K().optional().default(!1),legacy_runtime_goal:K().optional().default(!1),adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_registry:$f.optional().nullable(),quota:yf.optional().nullable(),control_plane:bf.optional().nullable(),spawn_policy:xf.optional().nullable(),orchestration:xf.optional().nullable(),coordination:J({agent_model:W().optional().nullable(),registered_agents:q(W()).optional().default([])}).optional().nullable(),index_exists:K().optional().default(!1),raw_index_records:G().optional().default(0),unique_runs:G().optional().default(0),latest_runs:q(tp).optional().default([])}),rp=J({available:K(),goal_count:G().optional().default(0),run_count:G().optional().default(0),goals:q(np).optional().default([]),recent_runs:q(tp).optional().default([])}),ip=J({kind:W(),severity:W(),message:W(),recommended_action:W(),goal_id:W().optional().nullable(),path:W().optional().nullable(),goal_ids:q(W()).optional().default([])}),ap=J({available:K(),ok:K(),registry:W(),current_registry:W().optional().nullable(),current_registry_is_global:K().optional().default(!1),global_goal_count:G().optional().default(0),current_goal_count:G().optional().default(0),source_registry_count:G().optional().default(0),summary:J({high:G().optional().default(0),action:G().optional().default(0),info:G().optional().default(0),checks:G().optional().default(0),findings:G().optional().default(0)}),findings:q(ip).optional().default([]),checks:q(W()).optional().default([])}),op=J({runs_24h:G().optional().default(0),runs_7d:G().optional().default(0),quota_spend_slots_24h:G().optional().default(0),quota_spend_slots_7d:G().optional().default(0),automation_run_count_24h:G().optional().default(0),automation_run_count_7d:G().optional().default(0),progress_signal_run_count_24h:G().optional().default(0),progress_signal_run_count_7d:G().optional().default(0),input_tokens_24h:G().optional(),input_tokens_7d:G().optional(),output_tokens_24h:G().optional(),output_tokens_7d:G().optional(),cache_tokens_24h:G().optional(),cache_tokens_7d:G().optional(),cost_usd_24h:G().optional(),cost_usd_7d:G().optional(),duration_ms_24h:G().optional(),duration_ms_7d:G().optional()}),sp=op.extend({goal_id:W(),project_share_24h:G().optional().default(0)}),cp=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),totals:op.optional().default({runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0}),goals:q(sp).optional().default([])}).optional().nullable(),lp=J({accounting:G().optional().default(0),decision:G().optional().default(0),evidence:G().optional().default(0),state:G().optional().default(0),work:G().optional().default(0)}),up={accounting:0,decision:0,evidence:0,state:0,work:0},dp=J({events_24h:G().optional().default(0),events_7d:G().optional().default(0),by_class_24h:lp.optional().default(up),by_class_7d:lp.optional().default(up)}),fp=dp.extend({goal_id:W(),latest_event_class:W().optional().nullable(),latest_event_at:W().optional().nullable()}),pp={events_24h:0,events_7d:0,by_class_24h:up,by_class_7d:up},mp=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),event_classes:q(W()).optional().default([`accounting`,`decision`,`evidence`,`state`,`work`]),totals:dp.optional().default(pp),goals:q(fp).optional().default([])}).optional().nullable(),hp=J({available:K().optional().default(!1),source:W().optional().default(`run_history`),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),freshness_window_hours:G().optional().default(24),freshness_status:W().optional().nullable(),is_fresh:K().optional().default(!1),requires_readiness_run:K().optional().default(!0),age_seconds:G().optional().nullable(),age_hours:G().optional().nullable(),freshness_reference_time:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),reason:W().optional().nullable()}).optional().nullable(),gp=J({ok:K().optional().default(!0),registry:W().optional().nullable(),runtime_root:W().optional().nullable(),gate:W().optional().default(`promotion_readiness`),gate_state:W().optional().default(`warning`),can_promote:K().optional().default(!1),should_warn:K().optional().default(!0),non_blocking:K().optional().default(!0),recommended_action:W().optional().nullable(),warning_message:W().optional().nullable(),readiness:hp.default(null)}).optional().nullable(),_p=J({decision_count:G().optional().default(0),stale_count:G().optional().default(0),rebase_required_count:G().optional().default(0),fresh_count:G().optional().default(0)}),vp=J({goal_id:W(),decision_kind:W().optional().nullable(),decision_at:W().optional().nullable(),classification:W().optional().nullable(),age_days:G().optional().nullable(),stale_by_age:K().optional().default(!1),newer_event_count_7d:G().optional().default(0),newer_event_classes_7d:lp.optional().default(up),freshness_state:W().optional().nullable(),requires_decision_point_rebase:K().optional().default(!1),reason:W().optional().nullable()}),yp=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),window_days:G().optional().default(7),proxy_note:W().optional().nullable(),summary:_p.optional().default({decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0}),items:q(vp).optional().default([])}).optional().nullable(),bp=J({schema_version:G().optional().default(0),minimum_dashboard_schema_version:G().optional().default(2),producer:W().optional().nullable(),reload_hint:W().optional().nullable()}).optional().default({schema_version:0,minimum_dashboard_schema_version:2,producer:null,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`}),xp=J({schema_version:X(`loopx_goal_projection_scope_v0`),scope:Y([`all`,`active`,`stopped`]),complete:K(),projected_goal_count:G().int().nonnegative(),registry_goal_count:G().int().nonnegative(),registry_revision:W().optional().nullable()}),Sp=J({source:W().optional().default(`serve-status`),status_url:W().optional().nullable(),health_url:W().optional().nullable(),review_material_url:W().optional().nullable(),presentation_surfaces_url:W().optional().nullable(),presentation_detail_url:W().optional().nullable(),periodic_report_index_url:W().optional().nullable(),periodic_report_detail_url:W().optional().nullable(),ssh_hosts_url:W().optional().nullable(),reward_dry_run_url:W().optional().nullable(),reward_append_url:W().optional().nullable(),reward_write_enabled:K().optional().default(!1),configure_goal_dry_run_url:W().optional().nullable(),configure_goal_apply_url:W().optional().nullable(),control_plane_write_enabled:K().optional().default(!1)}).optional().nullable(),Cp=J({extension_id:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),extension_revision:W().min(1),payload_sha256:W().regex(/^[0-9a-f]{64}$/)}).strict(),wp=J({extension_id:W().min(1),extension_revision:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),surface_kind:W().regex(/^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/),title:W().min(1),view_schema:W().regex(/^[a-z][a-z0-9_]*_v\d+$/),visibility:Y([`public-safe`,`owner-only`]),goal_id:W().min(1).nullable(),generated_at:W().min(1).nullable(),review_due_at:W().min(1).nullable(),diagnostic:W().min(1).nullable(),empty_state_title:W().min(1),empty_state_detail:W().min(1)}),Tp=dd([wp.extend({state:Y([`ready`,`review_due`]),goal_id:W().min(1),generated_at:W().min(1),detail_ref:Cp}).strict(),wp.extend({state:X(`empty`),detail_ref:sd().optional()}).strict(),wp.extend({state:X(`invalid`),diagnostic:W().min(1),detail_ref:sd().optional()}).strict()]),Ep=J({schema_version:X(`extension_presentation_surfaces_v0`),count:G().int().nonnegative(),ready_count:G().int().nonnegative(),review_due_count:G().int().nonnegative(),empty_count:G().int().nonnegative(),invalid_count:G().int().nonnegative(),items:q(Tp)}).strict(),Dp={schema_version:`extension_presentation_surfaces_v0`,count:0,ready_count:0,review_due_count:0,empty_count:0,invalid_count:0,items:[]};J({ok:X(!0),presentation_surfaces:Ep}).strict();var Op=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/)}).strict(),kp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),detail_ref:Op}).strict(),Ap=J({schema_version:X(`periodic_report_workspace_index_v0`),count:G().int().nonnegative(),items:q(kp)}),jp=Ap.extend({returned_count:G().int().nonnegative(),total_count:G().int().nonnegative(),limit:G().int().nonnegative(),offset:G().int().nonnegative(),truncated:K()}).strict(),Mp=Ap.strict().transform(e=>({...e,returned_count:e.count,total_count:e.count,limit:e.count,offset:0,truncated:!1})),Np=J({ok:X(!0),periodic_reports:dd([jp,Mp])}).strict(),Pp=J({schema_version:X(`periodic_report_workspace_projection_v0`),goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),generated_at:W().min(1),title:W().min(1),summary:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/),period_window:J({start_at:W().min(1),end_at:W().min(1)}).strict(),interaction:J({attention_kind:X(`progress`),interaction:X(`inform`),delivery:X(`surface`),form:X(`milestone_report`),writable:X(!1)}).strict(),delta:J({added_count:G().int().nonnegative(),changed_count:G().int().nonnegative(),item_count:G().int().positive(),items:q(J({fact_id:W().min(1),source_ref:W().min(1),title:W().min(1),summary:W().min(1),status:W().min(1),content_kind:W().min(1),change_kind:Y([`added`,`changed`]),previous_status:W().min(1).optional()}).strict())}).strict(),publication:J({publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),cursor_id:W().min(1)}).strict(),truth_contract:J({published_cursor_is_source_of_truth:X(!0),generation_receipt_is_delivery_receipt:X(!1),projection_is_writable:X(!1),browser_write_api:X(!1)}).strict()}).strict(),Fp=J({ok:X(!0),projection:Pp}).strict(),Ip=J({ok:K(),registry:W(),runtime_root:W(),goal_count:G(),run_count:G(),status_contract:bp,goal_projection:xp.optional().nullable().default(null),local_dashboard_api:Sp,contract:J({ok:K(),summary:J({errors:G(),warnings:G(),checks:G()}),errors:q(W()),warnings:q(W()),checks:q(W()).optional().default([])}),global_registry:ap.optional().default({available:!1,ok:!0,registry:``,current_registry:null,current_registry_is_global:!1,global_goal_count:0,current_goal_count:0,source_registry_count:0,summary:{high:0,action:0,info:0,checks:0,findings:0},findings:[],checks:[]}),attention_queue:J({available:K(),item_count:G(),needs_user_or_controller:G(),needs_controller:G().optional().default(0),needs_codex:G(),watching_external_evidence:G(),autonomous_backlog_candidates:zf.optional().nullable(),items:q(qf)}),run_history:rp.optional().default({available:!1,goal_count:0,run_count:0,goals:[],recent_runs:[]}),event_ledger_summary:mp.default(null),promotion_readiness_summary:hp.default(null),promotion_gate:gp.default(null),decision_freshness_summary:yp.default(null),usage_summary:cp.default(null),todo_index:Ef.optional().nullable().default(null),agent_management_projection:Mf.optional().nullable().default(null),goal_channel_notification_projection:Pf.optional().nullable().default(null),presentation_surfaces:Ep.optional().default(Dp)});J({ok:K(),dry_run:K().optional().default(!0),appended:K().optional().default(!1),goal_id:W().optional().nullable(),raw_index_records_before:G().optional().nullable(),preview_id:W().optional().nullable(),selected_run:J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}).optional().nullable(),human_reward:Jf.optional().nullable(),active_state_summary:W().optional().nullable(),project_agent_visibility:J({source_of_truth:W().optional().nullable(),history_command:W().optional().nullable(),active_state_role:W().optional().nullable(),review_packet_role:W().optional().nullable()}).optional().nullable(),error:W().optional().nullable()});function Lp(e,t,n){let r=e.run_history.goals.map(e=>e.id===t&&e.activation_state!==n?{...e,activation_state:n}:e),i=e.attention_queue.items.map(e=>e.goal_id===t&&e.activation_state!==n?{...e,activation_state:n}:e),a=r.some((t,n)=>t!==e.run_history.goals[n]),o=i.some((t,n)=>t!==e.attention_queue.items[n]);return!a&&!o?e:{...e,attention_queue:o?{...e.attention_queue,items:i}:e.attention_queue,run_history:a?{...e.run_history,goals:r}:e.run_history}}function Rp(e,t){let n=e.run_history.goals.filter(e=>e.id!==t),r=e.attention_queue.items.filter(e=>e.goal_id!==t);return n.length===e.run_history.goals.length&&r.length===e.attention_queue.items.length?e:{...e,attention_queue:{...e.attention_queue,items:r},run_history:{...e.run_history,goals:n}}}function zp(e){return Ip.parse(e)}function Bp(e){return e instanceof pu?e.issues.map(e=>`${e.path.join(`.`)||`root`}: ${e.message}`).join(`; `):e instanceof Error?e.message:String(e)}var Vp=zp(sf),Hp=J({ok:X(!0),schema_version:X(`loopx_workspace_directory_v1`),registry_revision:W(),goals:q(J({id:W(),display_name:W(),activation_state:Y([`active`,`stopped`]),registry_member:X(!0)}))});function Up(e,t,n={}){if(!e)return{};let r=new Set(n.invalidateGoalIds??[]),i=new Map(e.directory.goals.map(e=>[e.id,e]));return Object.fromEntries(t.goals.flatMap(t=>{let n=i.get(t.id),a=e.snapshots[t.id];return!n||!a||r.has(t.id)||n.display_name!==t.display_name||n.activation_state!==t.activation_state?[]:[[t.id,a]]}))}function Wp(e,t,n){let r=new URL(e,n);r.searchParams.delete(`goal_activation`),r.searchParams.delete(`goal_id`),r.searchParams.delete(`view`);for(let[e,n]of Object.entries(t))r.searchParams.set(e,n);return r.toString()}async function Gp(e,t){let n=await fetch(Wp(e,{view:`workspace-directory`},t),{cache:`no-store`,signal:AbortSignal.timeout(5e3)});if(!n.ok)return null;let r=Hp.safeParse(await n.json());return r.success?r.data:null}function Kp(e){return zp({ok:!0,registry:``,runtime_root:``,goal_count:e.goals.length,run_count:0,local_dashboard_api:{},contract:{ok:!0,summary:{errors:0,warnings:0,checks:0},errors:[],warnings:[]},attention_queue:{available:!1,item_count:0,needs_user_or_controller:0,needs_codex:0,watching_external_evidence:0,items:[]},run_history:{available:!1,goal_count:e.goals.length,run_count:0,goals:e.goals,recent_runs:[]}})}async function qp(e,t){if(!e.body)return`service`;let n=e.body.getReader(),r=()=>{n.cancel().catch(()=>{})};t.addEventListener(`abort`,r,{once:!0});let i=new Uint8Array(16384),a=0;try{for(t.throwIfAborted();;){let{done:e,value:r}=await n.read();if(t.throwIfAborted(),e)break;if(a+r.byteLength>i.byteLength)return`service`;i.set(r,a),a+=r.byteLength}let e=JSON.parse(new TextDecoder().decode(i.subarray(0,a)));return typeof e==`object`&&e&&!Array.isArray(e)&&`error_code`in e&&e.error_code===`workspace_status_access_denied`?`access`:`service`}catch{return t.throwIfAborted(),`service`}finally{t.removeEventListener(`abort`,r),r(),n.releaseLock()}}async function Jp(e,t,n,r,i,a,o){let s=[...n.goals],c=new Map;async function l(){for(;s.length&&i()&&!o?.aborted;){let l=s.findIndex(e=>e.id===a()),u=l>=0?l:s.findIndex(e=>e.activation_state===`active`);if(u<0)return;let d=s.splice(u,1)[0],f=(c.get(d.id)??0)+1;c.set(d.id,f);let p=new AbortController,m=!1,h=()=>p.abort();o?.addEventListener(`abort`,h,{once:!0});let g=setTimeout(()=>{m=!0,p.abort()},3e4),_=null;try{let a=await fetch(Wp(e,{goal_id:d.id},t),{cache:`no-store`,signal:p.signal});if(!a.ok)_=a.status===409?`revision`:a.status>=500?await qp(a,p.signal):`scope`,p.signal.throwIfAborted();else{let e=await a.json();if(e.workspace_registry_revision!==n.registry_revision)_=`revision`;else{let t=zp(e);!t.run_history.goals.some(e=>e.id===d.id)||t.run_history.goals.some(e=>e.id!==d.id)?_=`scope`:i()&&!o?.aborted&&r(d.id,t,null)}}}catch(e){_=m?`timeout`:e instanceof TypeError?`network`:`invalid`}finally{clearTimeout(g),o?.removeEventListener(`abort`,h)}if(!i()||o?.aborted)return;_&&[`timeout`,`network`,`service`].includes(_)&&f<3?(await new Promise(e=>setTimeout(e,f*1e3)),s.push(d)):_&&r(d.id,null,_)}}await Promise.all([l(),l()])}var Yp=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Xp=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),Zp=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),Qp=e=>{let t=Zp(e);return t.charAt(0).toUpperCase()+t.slice(1)},$p={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},em=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},tm=(0,R.createContext)({}),nm=()=>(0,R.useContext)(tm),rm=(0,R.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=nm()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,R.createElement)(`svg`,{ref:c,...$p,width:t??l??$p.width,height:t??l??$p.height,stroke:e??f,strokeWidth:m,className:Yp(`lucide`,p,i),...!a&&!em(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,R.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),Z=(e,t)=>{let n=(0,R.forwardRef)(({className:n,...r},i)=>(0,R.createElement)(rm,{ref:i,iconNode:t,className:Yp(`lucide-${Xp(Qp(e))}`,`lucide-${e}`,n),...r}));return n.displayName=Qp(e),n},im=Z(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),am=Z(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),om=Z(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),sm=Z(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),cm=Z(`arrow-up-down`,[[`path`,{d:`m21 16-4 4-4-4`,key:`f6ql7i`}],[`path`,{d:`M17 20V4`,key:`1ejh1v`}],[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}]]),lm=Z(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),um=Z(`badge-check`,[[`path`,{d:`M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z`,key:`3c2336`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),dm=Z(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),fm=Z(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),pm=Z(`braces`,[[`path`,{d:`M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1`,key:`ezmyqa`}],[`path`,{d:`M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1`,key:`e1hn23`}]]),mm=Z(`calendar-clock`,[[`path`,{d:`M16 14v2.2l1.6 1`,key:`fo4ql5`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5`,key:`1osxxc`}],[`path`,{d:`M3 10h5`,key:`r794hk`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`circle`,{cx:`16`,cy:`16`,r:`6`,key:`qoo3c4`}]]),hm=Z(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),gm=Z(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),_m=Z(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),vm=Z(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),ym=Z(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),bm=Z(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),xm=Z(`clipboard-check`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`m9 14 2 2 4-4`,key:`df797q`}]]),Sm=Z(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),Cm=Z(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),wm=Z(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),Tm=Z(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),Em=Z(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),Dm=Z(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),Om=Z(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),km=Z(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),Am=Z(`file-check-corner`,[[`path`,{d:`M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6`,key:`g5mvt7`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14 20 2 2 4-4`,key:`15kota`}]]),jm=Z(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),Mm=Z(`git-branch`,[[`path`,{d:`M15 6a9 9 0 0 0-9 9V3`,key:`1cii5b`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}]]),Nm=Z(`git-compare-arrows`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`M12 18H7a2 2 0 0 1-2-2V9`,key:`16sdep`}],[`path`,{d:`m9 15 3 3-3 3`,key:`1m3kbl`}]]),Pm=Z(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),Fm=Z(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),Im=Z(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),Lm=Z(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),Rm=Z(`list-plus`,[[`path`,{d:`M16 5H3`,key:`m91uny`}],[`path`,{d:`M11 12H3`,key:`51ecnj`}],[`path`,{d:`M16 19H3`,key:`zzsher`}],[`path`,{d:`M18 9v6`,key:`1twb98`}],[`path`,{d:`M21 12h-6`,key:`bt1uis`}]]),zm=Z(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),Bm=Z(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),Vm=Z(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),Hm=Z(`message-circle-question-mark`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Um=Z(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),Wm=Z(`minimize-2`,[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]),Gm=Z(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),Km=Z(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),qm=Z(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),Jm=Z(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),Ym=Z(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),Xm=Z(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Zm=Z(`radio`,[[`path`,{d:`M16.247 7.761a6 6 0 0 1 0 8.478`,key:`1fwjs5`}],[`path`,{d:`M19.075 4.933a10 10 0 0 1 0 14.134`,key:`ehdyv1`}],[`path`,{d:`M4.925 19.067a10 10 0 0 1 0-14.134`,key:`1q22gi`}],[`path`,{d:`M7.753 16.239a6 6 0 0 1 0-8.478`,key:`r2q7qm`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Qm=Z(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),$m=Z(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),eh=Z(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),th=Z(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),nh=Z(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),rh=Z(`server-cog`,[[`path`,{d:`m10.852 14.772-.383.923`,key:`11vil6`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`,key:`1v3clb`}],[`path`,{d:`m13.148 9.228.383-.923`,key:`t2zzyc`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`,key:`1bxfiv`}],[`path`,{d:`m14.772 10.852.923-.383`,key:`k9m8cz`}],[`path`,{d:`m14.772 13.148.923.383`,key:`1xvhww`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`,key:`tn8das`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`,key:`1g2pve`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`m9.228 10.852-.923-.383`,key:`1wtb30`}],[`path`,{d:`m9.228 13.148-.923.383`,key:`1a830x`}]]),ih=Z(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),ah=Z(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),oh=Z(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),sh=Z(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),ch=Z(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),lh=Z(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),uh=Z(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),dh=Z(`test-tube-diagonal`,[[`path`,{d:`M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01a2.83 2.83 0 0 1 0-4L17 3`,key:`1ub6xw`}],[`path`,{d:`m16 2 6 6`,key:`1gw87d`}],[`path`,{d:`M12 16H4`,key:`1cjfip`}]]),fh=Z(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),ph=Z(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),mh=Z(`unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),hh=Z(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),gh=Z(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);function _h(e){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(e)||e.startsWith(`//`)}function vh(e){return[`localhost`,`127.0.0.1`,`::1`,`[::1]`].includes(e)}function yh(e,t,n){let r=e.trim();if(!r)return{error:`status URL is empty`};let i;try{i=new URL(r,t)}catch{return{error:`status URL is invalid`}}let a=!_h(r),o=vh(i.hostname);return!a&&!o?{error:`${n} must be relative or loopback`}:{source:{isLoopback:o,isRelative:a,url:r}}}function bh(e,t){return yh(e,t,`statusUrl`)}function xh(e,t){let n=yh(e,t,`Ops statusUrl`);return n.error?{error:`${n.error}; use showcase mode for public links.`}:n}function Sh(e,t,n){let r=new URL(e,n);return r.searchParams.set(`goal_activation`,t),r.toString()}function Ch(e,t){if(!t||!e.isLoopback)return null;try{let n=new URL(e.url,window.location.href),r=new URL(t,n.origin);return vh(r.hostname)?r.toString():null}catch{return null}}function wh(e,t){return{detailUrl:Ch(t,e.local_dashboard_api?.periodic_report_detail_url),indexUrl:Ch(t,e.local_dashboard_api?.periodic_report_index_url)}}async function Th(e,t){let n=new URL(e);n.searchParams.set(`goal_id`,t),n.searchParams.set(`limit`,`100`),n.searchParams.set(`offset`,`0`);let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published reports`);return Np.parse(await r.json()).periodic_reports}async function Eh(e,t){let n=new URL(e);Object.entries(t).forEach(([e,t])=>n.searchParams.set(e,t));let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published report detail`);return Fp.parse(await r.json()).projection}function Dh(e,t,n){let r=e.find(e=>e.agentId===t&&e.available)??e.find(e=>e.agentId===n&&e.available)??e.find(e=>e.available);if(!r)throw Error(`Chat requires at least one available route`);return r}function Oh(e){return e.kind===`todo`}var kh=[{id:`next`,label:`找下一步`,prompt:`结合当前 Goal,告诉我现在最值得推进的一个动作,并说明理由。`},{id:`gate`,label:`看阻塞`,prompt:`当前 Goal 有哪些 Gate 或阻塞?哪些需要我决定?`},{id:`evidence`,label:`查证据`,prompt:`检查当前 Goal 的 Evidence,告诉我哪些结论已经有依据,哪些还需要验证。`}];function Ah(e){return!!(e&&typeof e==`object`&&e.session_invalidated===!0)}var jh=``.replace(/\/+$/,``);function Mh(e){return!jh||/^https?:\/\//.test(e)?e:new URL(e,`${jh}/`).toString()}var Nh=J({todo_id:W().nullable(),role:W().nullable(),status:W(),priority:W().nullable(),text:W(),action_kind:W().nullable(),task_class:W().nullable(),claimed_by:W().nullable(),evidence:W().nullable()}),Ph=J({goal_id:W(),title:W(),objective:W(),status:W(),waiting_on:W().nullable(),severity:W().nullable(),gate:W(),next_action:W(),top_todo:Nh.nullable(),todos:q(Nh),evidence:q(W()),quota:J({state:W().nullable(),spent_slots:G().nullable(),allowed_slots:G().nullable(),reason:W().nullable()})});J({ok:K(),schema_version:X(`loopx_chat_status_v0`),selected_goal_id:W().nullable(),goal_count:G(),goals:q(Ph)});var Fh=J({schema_version:W(),executor_endpoint:W(),executor_endpoint_source:W(),executor_endpoint_default_reason:W().optional(),executor_kind:W(),model:W(),model_source:W(),selection_policy:Y([`preferred`,`pinned`,`flexible`]).default(`preferred`),allocation_reason:W().default(``),configured_endpoint:W().nullable().optional(),eligible_endpoints:q(W()).default([]),allocation_configuration_revision:W().default(``),credential_env_var:W(),operator_credential_configured:K(),output_token_budget:J({schema_version:X(`dsh_output_token_budget_v0`),scope:X(`per_model_request`),max_tokens:G().int().positive().nullable(),valid:K(),source:Y([`product_default`,`explicit_argument`]),final_response_reserve_supported:K(),hard_tool_budget_supported:K()}).nullable().optional(),available:K().nullable(),unavailable_reason:W().nullable()}),Ih=J({ok:X(!0),schema_version:Y([`loopx_chat_capabilities_v0`,`loopx_chat_capabilities_v1`]),agent_backend:W(),sandbox:W(),approval_policy:W(),todo_write:W(),goal_subagent_configuration:W().optional(),goal_id:W().nullable(),manager:J({scope:X(`owner_global`),model:W(),reasoning_effort:W(),channel_binding:Fh.optional(),runtime:J({schema_version:X(`manager_runtime_effective_profile_v0`),runtime_profile:Y([`restricted`,`trusted_owner`]),source:W(),configuration_revision:W(),standing_grant:W(),sandbox:W(),approval_policy:W(),tool_classes:q(W()),status:W(),repair:W().optional()})}).optional(),streaming:K().optional(),resume:K().optional(),interrupt:K().optional(),typed_actions:K().optional(),action_kinds:q(W()).optional(),adapters:q(J({agent_id:W(),display_name:W(),adapter_kind:W(),available:K(),streaming:K(),resume:K(),interrupt:K(),location:W().optional(),source:W().optional(),tool_calls:K().optional(),trust_scope:W().optional()})).optional(),lark_cli:J({available:K(),source:W(),version:W().nullable(),error_code:W().nullable()}).optional()}),Lh=J({kind:X(`todo`),text:W(),priority:Y([`P0`,`P1`,`P2`]),rationale:W()}),Rh=pd(`kind`,[Lh,J({kind:X(`steward_team_plan_preview`),preview:yd(W(),ad())})]),zh=J({operation:Y([`merge`,`release`,`deploy`,`delete`,`payment`]),target:W().min(1).max(160),summary:W().max(300)}),Bh=J({schema_version:X(`loopx_chat_agent_response_v0`),message:W(),proposals:q(Rh),protected_action:zh.nullable().optional().default(null),gate:J({kind:W(),summary:W(),next_action:W()}).nullable()}),Vh=J({closed:X(!0),ok:X(!0),session_id:W().min(1)});J({dry_run:X(!0),ok:X(!0),preview_id:W().min(1),todo:J({goal_id:W().min(1),text:W(),todo_id:W().optional()})});var Hh=J({schema_version:X(`loopx_chat_todo_receipt_v0`),receipt_id:W().min(1),preview_id:W().min(1),goal_id:W().min(1),todo_id:W().min(1),status:X(`applied`),outcome:Y([`todo_added`,`todo_already_exists`]),already_exists:K(),preview_revision:W().nullable()});J({applied:X(!0),ok:X(!0),receipt:Hh,todo:J({text:W(),todo_id:W()})});var Uh=J({model_config:J({model:W(),reasoning_effort:W().optional()}).optional(),execution_config:W().optional(),mode:W(),spawn_allowed:K(),max_children:G().int().nonnegative(),allowed_domains:q(W()).optional().default([])}).passthrough(),Wh=J({alignment_requested:K(),configured_children:G().int().positive().nullable(),counts_main_thread:X(!1),new_session_required:K().optional().default(!1),required_children:G().int().nonnegative(),status:Y([`already_sufficient`,`apply_failed`,`explicit_shortfall`,`explicit_sufficient`,`implicit_default_unknown`,`not_requested`,`not_required`,`updated`]),write_required:K(),written:K().optional().default(!1)}).passthrough(),Gh=J({ok:X(!0),dry_run:K(),execute:K(),written:K(),changed:K(),goal_id:W().min(1),changed_fields:q(W()),before:J({orchestration:Uh}).passthrough(),after:J({orchestration:Uh}).passthrough(),preview_id:W().min(1),feature_summary:J({multi_subagent:Y([`off`,`enabled`])}).passthrough(),goal_configuration_changed:K(),codex_host_capacity:Wh,global_sync:J({required:K(),executed:K(),readback:J({status:W(),verified:K()}).passthrough()}).passthrough()}),Kh=J({id:W().min(1),outcome:Y([`approved`,`rejected`,`cancelled`]),projectionVerified:K().nullable(),proposal:Lh,receipt:Hh.nullable()}).superRefine((e,t)=>{e.outcome===`approved`&&!e.receipt&&t.addIssue({code:`custom`,message:`approved decision history requires a Todo receipt`,path:[`receipt`]}),e.outcome!==`approved`&&e.receipt&&t.addIssue({code:`custom`,message:`zero-write decision history must not include a Todo receipt`,path:[`receipt`]})});J({schema_version:X(`loopx_chat_decision_history_v0`),goal_id:W().min(1),decisions:q(Kh).max(24)});var qh=class extends Error{payload;constructor(e,t){super(e),this.payload=t}},Jh=Y([`goal.create`,`goal.update`,`goal.lifecycle`,`todo.create`,`todo.update`,`agent.bind`,`heartbeat.bind`,`monitor.create`,`monitor.update`,`gate.resolve`,`run.correct`,`operation.execute`,`team.plan`]),Yh=J({schema_version:X(`loopx_operation_envelope_v0`),lifecycle_state:Y([`prepared`,`awaiting_confirmation`,`claimed`,`outcome_observed`]),operation_id:W().min(1),confirmation_digest:W().min(1),payload_digest:W().min(1),projection_digest:W().min(1),expires_at:W().min(1),delivery:yd(W(),ad()).nullable(),confirmation:yd(W(),ad()).nullable(),claim:yd(W(),ad()).nullable(),outcome:yd(W(),ad()).nullable(),result_delivery:yd(W(),ad()).nullable().optional()}).passthrough(),Xh=J({schema_version:X(`loopx_chat_action_proposal_v1`),proposal_id:W().min(1),action_kind:Jh,summary:W().min(1),normalized_parameters:yd(W(),ad()),context:yd(W(),ad()),expected_state_fingerprint:W().min(1),permission_classification:W().min(1),validation_evidence:q(W().refine(e=>e.trim().length>0,`Validation evidence must be non-blank text`)),available_transitions:q(Y([`apply`,`cancel`,`regenerate`,`reject`,`defer`])),status:Y([`preview_ready`,`applying`,`gated`,`failed`,`rejected`,`deferred`,`cancelled`,`stale`,`applied`]),receipt:yd(W(),ad()).nullable(),stale:yd(W(),ad()).nullable(),gate:yd(W(),ad()).nullable().optional(),error:yd(W(),ad()).nullable().optional(),checkpoint:yd(W(),ad()).nullable().optional(),failure:yd(W(),ad()).nullable().optional(),canonical_update_basis:J({schema_version:Y([`loopx_chat_canonical_update_basis_v0`,`loopx_chat_canonical_terminal_basis_v0`]),provider_revision:W().min(1),source_authority:Y([`file_v0`,`sqlite_v0`]),registry_sha256:W().regex(/^[a-f0-9]{64}$/)}).optional(),regenerated_from:W().nullable().optional(),operation:Yh.nullable().optional(),created_at:W(),updated_at:W()}),Zh=J({ok:X(!0),proposal:Xh});async function Qh(e){let t=await ig(`/api/actions/preview`,{method:`POST`,body:JSON.stringify({action_kind:e.actionKind,context:e.context,idempotency_key:e.idempotencyKey,normalized_parameters:e.normalizedParameters,summary:e.summary})});return Zh.parse(t).proposal}var $h=J({ok:X(!0),schema_version:X(`loopx_chat_action_list_v1`),proposals:q(Xh)});async function eg(e={}){let t=new URLSearchParams;e.contextKind&&t.set(`context_kind`,e.contextKind),e.goalId&&t.set(`goal_id`,e.goalId);let n=t.size>0?`?${t.toString()}`:``;return $h.parse(await ig(`/api/actions${n}`)).proposals}async function tg(e){let t=await ig(`/api/actions/${encodeURIComponent(e)}/apply`,{method:`POST`,body:`{}`});return J({ok:X(!0),proposal:Xh,turn:yd(W(),ad()).nullable().optional()}).parse(t)}async function ng(e){return Zh.parse(await ig(`/api/actions/${encodeURIComponent(e)}/cancel`,{method:`POST`,body:`{}`})).proposal}async function rg(e,t){return Zh.parse(await ig(`/api/actions/${encodeURIComponent(e)}/${t}`,{method:`POST`,body:`{}`})).proposal}async function ig(e,t){let n;try{n=await fetch(Mh(e),{cache:`no-store`,...t,headers:{"Content-Type":`application/json`,...t?.headers}})}catch{throw new qh(`无法连接 LoopX Chat 服务。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`,{error_code:`chat_api_unavailable`})}let r=await n.text(),i=null;if(r.trim())try{i=JSON.parse(r)}catch{i=null}let a=i&&typeof i==`object`&&!Array.isArray(i)?i:{};if(!n.ok){let e=(a.proposal&&typeof a.proposal==`object`?a.proposal:null)?.status===`stale`?`来源状态已变化,请重新生成预览。`:null,t=n.status>=500?`LoopX Chat 服务暂时不可用(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`:`LoopX Chat 请求失败(HTTP ${n.status})。`;throw new qh(e??String(a.error||t),Object.keys(a).length?a:{error_code:`chat_api_unavailable`,http_status:n.status})}if(i===null)throw new qh(`LoopX Chat 服务返回了无法识别的响应(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务来自同一版本。`,{error_code:`invalid_chat_api_response`,http_status:n.status});return i}async function ag(){return Ih.parse(await ig(`/api/chat/capabilities`))}async function og(e){return ig(`/api/chat/projection-messages`,{method:`POST`,body:JSON.stringify({answer:e.answer,context_kind:e.contextKind,goal_id:e.goalId,question:e.question})})}async function sg(e,t,n=`resume_latest`,r=`goal`){return ig(`/api/chat/sessions`,{method:`POST`,body:JSON.stringify({goal_id:e,agent_id:t,mode:n,context_kind:r})})}async function cg(e){return ig(`/api/chat/sessions/${e}`)}async function lg(e){let t=new URLSearchParams;return e.agentId&&t.set(`agent_id`,e.agentId),e.channelId&&t.set(`channel_id`,e.channelId),e.goalId&&t.set(`goal_id`,e.goalId),ig(`/api/chat/sessions?${t.toString()}`)}function ug(e){let t=new Map;for(let n of e)for(let e of n.messages)t.set(e.message_id,e);return[...t.values()].sort((e,t)=>e.created_at.localeCompare(t.created_at)||e.message_id.localeCompare(t.message_id))}async function dg(e){let t=await lg(e),n=await Promise.all(t.sessions.map(e=>cg(e.session_id)));return{messages:ug(n),sessions:t.sessions,snapshots:n}}async function fg(e,t,n,r=[]){return ig(`/api/chat/sessions/${e}/turns`,{method:`POST`,body:JSON.stringify({message:t,client_turn_id:n,...r.length?{attachments:r.map(e=>({data_url:e.dataUrl,id:e.id,mime_type:e.mimeType,name:e.name,size:e.size}))}:{}})})}function pg(e){let t=e.split(` -`).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(` -`);if(!t)return null;try{let e=JSON.parse(t);return!e.kind||!e.payload||typeof e.payload!=`object`?null:{event_id:String(e.event_id??``),sequence:Number(e.sequence??0),kind:String(e.kind),created_at:String(e.created_at??``),payload:e.payload}}catch{return null}}async function mg(e,t,n){let r=``,i=0,a=!1;for(;!a&&i<4;){let o=typeof window>`u`?`http://127.0.0.1`:window.location.origin,s=new URL(Mh(e),o);r&&s.searchParams.set(`after`,r);try{let e=await fetch(s,{cache:`no-store`,headers:{Accept:`text/event-stream`},signal:n});if(!e.ok||!e.body)throw new qh(`SSE HTTP ${e.status}`,{status:e.status});let o=e.body.getReader(),c=new TextDecoder,l=``;for(;;){let{done:e,value:n}=await o.read();l+=c.decode(n,{stream:!e}).replaceAll(`\r -`,` -`);let i=l.indexOf(` - -`);for(;i>=0;){let e=l.slice(0,i);l=l.slice(i+2);let n=pg(e);n&&(n.event_id&&(r=n.event_id),t(n),a=[`turn.completed`,`turn.interrupted`,`turn.failed`].includes(n.kind)),i=l.indexOf(` - -`)}if(e||a)break}i=a?i:i+1}catch(e){if(n?.aborted||(i+=1,i>=4))throw e;await new Promise(e=>globalThis.setTimeout(e,250*2**(i-1)))}}if(!a)throw new qh(`Agent 事件流连接已断开。`,{reconnect_attempts:i})}async function hg(e,t){return ig(`/api/chat/sessions/${e}/turns/${t}/interrupt`,{method:`POST`,body:`{}`})}function gg(e){return ig(`/api/chat/sessions/${e}/loopx`)}function _g(e,t){return ig(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`read`,operation_id:t})})}function vg(e,t){return e.status===`unavailable`?t?`无法核验`:`Unavailable`:e.status===`accepted`?t?`已通过当前验收`:`Currently accepted`:e.status===`rejected`?t?`未通过验收`:`Rejected`:e.recovery_required?t?`需要恢复原执行`:`Original execution needs recovery`:e.status===`running`&&e.worker_active?t?`执行中`:`Executing`:e.status===`turn_returned`&&e.worker_active?t?`正在验收`:`Validating`:[`prepared`,`running`,`turn_returned`].includes(e.status)?t?`已派发,等待执行回读`:`Dispatched; awaiting execution readback`:t?`状态未知`:`Unknown state`}function yg(e,t){return ig(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`operations`,limit:10,...t?{cursor:t}:{}})})}function bg(e,t){return ig(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`inspect`,binding_id:t})})}function xg(e,t,n,r=crypto.randomUUID()){return ig(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:t,operation_id:r,...n?{settings:n}:{}})})}function Sg(e,t,n,r=crypto.randomUUID()){return ig(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`message`,operation_id:r,message:t,delivery_mode:n})})}async function Cg(e,t,n={}){let r=await fg(e,t,n.clientTurnId??crypto.randomUUID(),n.attachments);return n.onPhase?.(`turn.accepted`,r.turn_id),wg(e,r.turn_id,r.events_url,n)}async function wg(e,t,n,r={}){let i=null,a={failure:null,interrupted:null};try{await mg(n,e=>{r.onPhase?.(e.kind,t),(e.kind===`answer.delta`||e.kind===`assistant.delta`)&&r.onDelta?.(String(e.payload.text??``)),e.kind===`agent.phase`&&r.onActivity?.(String(e.payload.label??`Agent 正在处理`)),e.kind===`turn.completed`&&(i=e.payload.response),e.kind===`turn.failed`&&(a.failure=e.payload),e.kind===`turn.interrupted`&&(a.interrupted=e.payload)},r.signal)}catch(i){throw i instanceof qh&&!r.signal?.aborted?new qh(i.message,{...i.payload,events_url:n,reconnectable:!0,session_id:e,turn_id:t}):i}if(a.failure)throw new qh(String(a.failure.message||`Agent 回合失败。`),a.failure);if(a.interrupted)throw new qh(`Agent 回合已中断。`,{...a.interrupted,error_code:`turn_interrupted`,session_id:e,turn_id:t});return{response:Bh.parse(i),sessionId:e,turnId:t}}async function Tg(e,t,n={}){return wg(e,t,`/api/chat/sessions/${e}/turns/${t}/events`,n)}async function Eg(e){let t=Vh.parse(await ig(`/api/chat/sessions/${e}`,{keepalive:!0,method:`DELETE`}));if(t.session_id!==e)throw new qh(`Agent 会话关闭回执与本次请求不一致。`,{session_id:t.session_id});return t}async function Dg(e){return ig(`/api/chat/sessions/${e}/resume`,{method:`POST`,body:`{}`})}function Og(e){return{goal_id:e.goalId,enabled:e.enabled,align_codex_host_capacity:e.alignCodexHostCapacity??!1,...e.modelConfig===void 0?{}:{model_config:e.modelConfig},...e.executionConfig===void 0?{}:{execution_config:e.executionConfig},...e.enabled?{max_children:e.maxChildren,allowed_domains:e.allowedDomains}:{}}}function kg(e,t){let n=e.after.orchestration,r=[...new Set(t.allowedDomains)],i=e.feature_summary.multi_subagent===`enabled`,a=e.goal_id===t.goalId&&i===t.enabled&&(t.modelConfig===void 0||JSON.stringify(n.model_config??null)===JSON.stringify(t.modelConfig))&&(t.executionConfig===void 0||(n.execution_config??``)===t.executionConfig)&&(t.enabled?n.max_children===t.maxChildren&&JSON.stringify(n.allowed_domains)===JSON.stringify(r):n.spawn_allowed===!1&&n.max_children===0),o=!t.alignCodexHostCapacity||!t.enabled||e.codex_host_capacity.required_children===t.maxChildren;if(!a||!o)throw new qh(`Goal 子代理配置回执与本次请求不一致,界面已停止更新。`,{after:e.after,goal_id:e.goal_id});return e}async function Ag(e){let t=Gh.parse(await ig(`/api/chat/goal-subagents/dry-run`,{method:`POST`,body:JSON.stringify(Og(e))}));if(!t.dry_run||t.execute||t.written)throw new qh(`Goal 子代理预览返回了非预览回执,已停止进入确认状态。`,{result:t});return kg(t,e)}async function jg(e,t){let n=Gh.parse(await ig(`/api/chat/goal-subagents/apply`,{method:`POST`,body:JSON.stringify({...Og(e),preview_id:t})}));if(n.preview_id!==t||n.dry_run||!n.execute)throw new qh(`Goal 子代理写入回执与本次确认不一致,界面已停止更新。`,{result:n});if(n.changed&&(!n.written||n.goal_configuration_changed&&(!n.global_sync.executed||!n.global_sync.readback.verified)||e.alignCodexHostCapacity&&n.codex_host_capacity.write_required&&!n.codex_host_capacity.written))throw new qh(`Goal 子代理设置未通过共享状态读回验证。`,{result:n});return kg(n,e)}var Mg=J({ok:X(!0),targets:q(J({enabled:K(),provider:W(),target_name:W()}))});async function Ng(){return Mg.parse(await ig(`/api/chat/goal-channel/targets`)).targets}var Pg=J({ok:K(),blocker:W().optional(),public_summary:W().optional(),status:W().optional()});async function Fg(e){return Pg.parse(await ig(`/api/chat/goal-channel/setup`,{method:`POST`,body:JSON.stringify({execute:e.execute,goal_id:e.goalId,target:e.target})}))}async function Ig(e){return Pg.parse(await ig(`/api/chat/goal-channel/configure`,{method:`POST`,body:JSON.stringify({auto_notify_human_gates:e.autoNotify,goal_id:e.goalId})}))}var Lg=J({schema_version:X(`periodic_report_schedule_v0`),schedule_id:W(),rrule:W(),timezone:W()});J({schema_version:X(`periodic_report_machine_defaults_v0`),enabled:K(),inheritance:X(`live_machine_default`),profile_preset:W().optional(),route_ref:W().optional(),timezone:W(),schedule:Lg.nullable().optional()});var Rg=J({schema_version:X(`loopx_machine_configuration_v0`),namespaces:yd(W(),yd(W(),ad()))}),zg=J({namespace:W(),title:W(),description:W(),schema_versions:q(W()).min(1),configuration_template:yd(W(),ad()),template_status:Y([`ready`,`schema_only`])}),Bg=J({schema_version:X(`machine_configuration_catalog_v0`),namespaces:q(zg)}),Vg=J({key:W(),label:W(),description:W(),input_kind:Y([`boolean`,`number`,`select`,`string_list`,`text`,`periodic_report_schedule`]),nullable:K().optional(),required:K(),minimum:G().int().optional(),maximum:G().int().optional(),options:q(W()).optional()}),Hg=J({schema_version:X(`capability_configuration_editor_v0`),editable:K(),supported_scopes:q(Y([`goal`,`machine`])),writable_scopes:q(Y([`goal`,`machine`])),fields:q(Vg),read_only_reason:W().optional()}),Ug=J({schema_version:X(`capability_configuration_catalog_v0`),capabilities:q(J({capability_id:W(),display_name:W(),description:W(),available_scopes:q(Y([`goal`,`machine`])),machine_namespace:W().optional(),goal_feature_id:W().optional(),effective_value_policy:X(`goal_override_over_live_machine_default`).optional(),availability:W().optional(),default:yd(W(),ad()).optional(),current:yd(W(),ad()).optional(),machine_current:yd(W(),ad()).optional(),effective_configuration:J({schema_version:X(`capability_configuration_resolution_v0`),capability_id:W(),source:Y([`goal_override`,`machine_default`,`capability_default`,`not_configured`]),configuration:yd(W(),ad()).nullable(),inherited:K(),goal_override_present:K(),machine_default_present:K(),effective_revision:W()}).optional(),documentation:yd(W(),ad()).optional(),context_contribution:J({supported_phases:q(Y([`before_plan`,`before_delegate`,`after_delegate_result`])),target:X(`coordinator`),activation:X(`with_capability`),receipt_required:X(!0)}).optional(),configuration_editor:Hg}))}),Wg=J({ok:X(!0),schema_version:X(`goal_configuration_inspection_v0`),status:X(`configured`),goal_id:W(),revision:W(),available_capabilities:q(W()),capability_catalog:Ug}),Gg=J({ok:X(!0),goal_id:W(),capability_id:W(),changed_fields:q(W()),goal_configuration:yd(W(),ad()).nullable(),capability_catalog:Ug,codex_host_capacity:Wh.optional()}),Kg=Gg.extend({schema_version:X(`goal_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),base_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative()}),qg=dd([Gg.extend({schema_version:X(`goal_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),applied_revision:W(),readback_verified:X(!0)}),J({ok:X(!1),schema_version:X(`goal_configuration_transaction_v0`),status:X(`partial_write`),goal_id:W(),capability_id:W(),plan_revision:W(),applied_revision:W().nullable(),source_written:X(!0),shared_sync_pending:K(),host_capacity_pending:K().optional().default(!1),readback_verified:K(),changed_fields:q(W()),goal_configuration:yd(W(),ad()).nullable(),capability_catalog:Ug,error:W(),recommended_action:W(),codex_host_capacity:Wh.optional()})]),Jg=J({ok:X(!0),available_namespaces:q(W()),namespace_catalog:Bg.optional().default({schema_version:`machine_configuration_catalog_v0`,namespaces:[]}),capability_catalog:Ug,changed_namespaces:q(W()).optional().default([]),invalid_namespaces:q(W()).optional().default([]),machine_configuration:Rg.nullable().optional()}),Yg=Jg.extend({schema_version:X(`machine_configuration_inspection_v0`),status:Y([`configured`,`absent`,`invalid`]),revision:W()}),Xg=Jg.extend({schema_version:X(`machine_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative(),machine_configuration:Rg.nullable()}),Zg=Jg.extend({schema_version:X(`machine_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),transaction_id:W().nullable(),readback_verified:X(!0),rollback_available:K(),applied_revision:W().optional(),prior_revision:W().optional()}),Qg=Jg.extend({schema_version:X(`machine_configuration_rollback_plan_v0`),status:X(`preview`),action:Y([`delete`,`restore`,`unchanged`,`blocked`]),reason:W(),transaction_id:W(),plan_revision:W(),rollback_allowed:K(),writes_required:G().int().nonnegative()}),$g=Jg.extend({schema_version:X(`machine_configuration_rollback_receipt_v0`),status:Y([`rolled_back`,`unchanged`]),transaction_id:W(),plan_revision:W(),rollback_id:W().nullable(),readback_verified:X(!0)}),e_=J({configured:K(),source:Y([`machine_store`,`service_environment`,`unset`]),env_var:W().optional(),fingerprint:W().nullable().optional(),value:W().nullable().optional(),blocked_by:W().optional()}),t_=J({ok:X(!0),schema_version:X(`operator_provider_credential_projection_v0`),action:W().optional(),store_ref:W(),store_revision:W(),record_present:K(),status:Y([`configured`,`absent`,`invalid`]),repair:W(),provider_key:e_,base_url:e_});async function n_(){return t_.parse(await ig(`/api/chat/operator-credential`))}async function r_(e){return t_.parse(await ig(`/api/chat/operator-credential`,{method:`POST`,body:JSON.stringify(e)}))}async function i_(){return Yg.parse(await ig(`/api/chat/machine-configuration`))}async function a_(e){let t=new URLSearchParams({goal_id:e});return Wg.parse(await ig(`/api/chat/goal-configuration?${t.toString()}`))}async function o_(e,t,n){return Kg.parse(await ig(`/api/chat/goal-configuration/preview`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n})}))}async function s_(e,t,n,r){return qg.parse(await ig(`/api/chat/goal-configuration/apply`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n,expected_plan_revision:r})}))}async function c_(e,t){return Xg.parse(await ig(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,namespace_configuration:t})}))}async function l_(e,t,n){return Zg.parse(await ig(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:n,namespace:e,namespace_configuration:t})}))}async function u_(e){return Xg.parse(await ig(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,operation:`remove`})}))}async function d_(e,t){return Zg.parse(await ig(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:t,namespace:e,operation:`remove`})}))}async function f_(e){return Qg.parse(await ig(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!1,transaction_id:e})}))}async function p_(e,t){return $g.parse(await ig(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!0,expected_plan_revision:t,transaction_id:e})}))}var m_=J({ok:X(!0),goals:q(J({goal_id:W(),repository:J({branch:W(),identity:W(),label:W(),read_only:X(!0)})}))});async function h_(){return m_.parse(await ig(`/api/chat/goals/contexts`)).goals}var g_=J({ok:X(!0),apps:q(J({active:K(),app_ref:W(),brand:W(),health_error_code:W().nullable().default(null),label:W(),ready:K(),reply_ready:K().default(!1)}))});async function __(){return g_.parse(await ig(`/api/chat/lark/apps`)).apps}var v_=J({ok:X(!0),app_ref:W(),error:W().nullable(),setup_id:W(),status:Y([`starting`,`waiting_for_feishu`,`ready`,`failed`,`cancelled`]),verification_url:W().url().nullable()});async function y_(e){return v_.parse(await ig(`/api/chat/lark/app-setups`,{method:`POST`,body:JSON.stringify({app_ref:e.appRef,brand:e.brand})}))}async function b_(e){return v_.parse(await ig(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`))}async function x_(e){return v_.parse(await ig(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`,{method:`DELETE`}))}var S_=[`invalid_event`,`binding_unavailable`,`chat_mismatch`,`topic_mismatch`,`route_ambiguous`,`self_message`,`invalid_routing_state`,`not_addressed`],C_=J({ok:X(!0),chats:q(J({chat_id:W(),chat_name:W()}))});async function w_(e,t){let n=new URLSearchParams({app_ref:e});return t&&n.set(`query`,t),C_.parse(await ig(`/api/chat/lark/chats?${n.toString()}`)).chats}var T_=J({ok:X(!0),connections:q(J({conversation_kind:Y([`goal`,`manager`]).default(`goal`),agent_id:W().nullable().default(null),connection_id:W(),app_label:W(),app_ref:W(),capture_scope:Y([`addressed_only`,`configured_chat_all`]).default(`addressed_only`),chat_name:W(),enabled:K(),goal_id:W(),goal_title:W(),health_error_code:W().nullable().default(null),history_permission_guidance:J({action:X(`enable_application_scopes_and_publish`),api_document_url:W().url(),capability:X(`group_history_pagination`),identity:X(`bot`),required_scopes:_d([X(`im:message.group_msg`),X(`im:message.group_msg.include_bot:read`)]),schema_version:X(`lark_bot_group_history_permission_guidance_v0`)}).nullable().default(null),incoming_mode:Y([`mentions`,`all`]),ingress_mode:Y([`live_steering`,`session_queue`,`async_inbox`,`direct_session`]).default(`async_inbox`),event_count:G().int().nonnegative().default(0),last_event_reason:Y(S_).nullable().default(null).catch(null),last_event_status:W().nullable().default(null),listener_error_code:W().nullable().default(null),listener_status:Y([`starting`,`listening`,`retrying`,`stopped`]).nullable().default(null),replied_count:G().int().nonnegative().default(0),reply_ready:K().default(!1),reply_mode:X(`topic_reply`),session_bound:K().default(!1),target_ref:W(),topic_name:W(),topic_setup_required:K()}))});async function E_(){return T_.parse(await ig(`/api/chat/lark/connections`)).connections}async function D_(e){return Pg.parse(await ig(`/api/chat/lark/connections`,{method:`POST`,body:JSON.stringify({...e.agentBindings?{agent_bindings:e.agentBindings.map(e=>({agent_id:e.agentId,app_ref:e.appRef}))}:{},...e.agentId?{agent_id:e.agentId}:{},...e.appRef?{app_ref:e.appRef}:{},...e.connectionId?{connection_id:e.connectionId}:{},conversation_kind:e.conversationKind??`goal`,capture_scope:e.captureScope,chat_id:e.chatId,chat_name:e.chatName,execute:e.execute,goal_id:e.goalId,incoming_mode:e.incomingMode,ingress_mode:e.ingressMode,reply_mode:e.replyMode})}))}async function O_(e,t){let n=new URLSearchParams({goal_id:e,connection_id:t});return Pg.parse(await ig(`/api/chat/lark/connections?${n.toString()}`,{method:`DELETE`}))}function k_(e){return{loadedUrl:null,projectionRevision:0,requestedUrl:e,selectionRevision:0,requestGeneration:0}}function A_(e,t){return e.selectionRevision+=1,e.requestedUrl=t,e.selectionRevision}function j_(e,t,n){if(n.background)return e.requestedUrl!==null||e.loadedUrl!==t?null:(e.requestGeneration+=1,{background:!0,projectionRevision:e.projectionRevision,selectionRevision:e.selectionRevision,url:t,generation:e.requestGeneration});let r=n.selectionRevision??e.selectionRevision+1;return n.selectionRevision!==void 0&&e.selectionRevision!==r?null:(e.selectionRevision=r,e.projectionRevision+=1,e.requestedUrl=t,e.requestGeneration+=1,{background:!1,projectionRevision:e.projectionRevision,selectionRevision:r,url:t,generation:e.requestGeneration})}function M_(e,t){return t.generation===e.requestGeneration&&e.projectionRevision===t.projectionRevision&&e.selectionRevision===t.selectionRevision}function N_(e,t){return M_(e,t)&&(!t.background||e.requestedUrl===null&&e.loadedUrl===t.url)}function P_(e,t,n){return t.get(e)===n}function F_(e,t,n,r){return e.filter(e=>P_(r(e),n,t))}function I_(e,t,n){let r=new Set,i=[];for(let a of[...e,...t]){let e=n(a);e==null||r.has(e)||(r.add(e),i.push(a))}return i}var L_=[`runs_24h`,`runs_7d`,`quota_spend_slots_24h`,`quota_spend_slots_7d`,`automation_run_count_24h`,`automation_run_count_7d`,`progress_signal_run_count_24h`,`progress_signal_run_count_7d`],R_=[`input_tokens_24h`,`input_tokens_7d`,`output_tokens_24h`,`output_tokens_7d`,`cache_tokens_24h`,`cache_tokens_7d`,`cost_usd_24h`,`cost_usd_7d`,`duration_ms_24h`,`duration_ms_7d`],z_=[`accounting`,`decision`,`evidence`,`state`,`work`],B_={accounting:0,decision:0,evidence:0,state:0,work:0},V_={runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0};function H_(e,t){let n={...e};for(let r of L_)n[r]=(Number(e[r])||0)+(Number(t[r])||0);for(let r of R_)(e[r]!==void 0||t[r]!==void 0)&&(n[r]=(e[r]??0)+(t[r]??0));return n}function U_(e,t){return!e.length||t<=0?e:e.map(e=>({...e,project_share_24h:Math.round((Number(e.runs_24h)||0)/t*1e3)/1e3}))}function W_(e,t){let n={...e};for(let r of z_)n[r]=(e[r]??0)+(t[r]??0);return n}function G_(e){let t={events_24h:0,events_7d:0,by_class_24h:{...B_},by_class_7d:{...B_}};for(let n of e)t.events_24h+=n.events_24h,t.events_7d+=n.events_7d,t.by_class_24h=W_(t.by_class_24h,n.by_class_24h),t.by_class_7d=W_(t.by_class_7d,n.by_class_7d);return t}function K_(e,t,n){if(!e&&!t)return null;let r=F_(e?.goals??[],`active`,n,e=>e.goal_id),i=F_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=I_(r,i,e=>e.goal_id),o=G_(r),s=G_(i),c={events_24h:o.events_24h+s.events_24h,events_7d:o.events_7d+s.events_7d,by_class_24h:W_(o.by_class_24h,s.by_class_24h),by_class_7d:W_(o.by_class_7d,s.by_class_7d)};return{...e??t,goals:a,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:c}}function q_(e,t,n){if(!e&&!t)return null;let r=I_([...F_(e?.items??[],`active`,n,e=>e.goal_id),...F_(t?.items??[],`stopped`,n,e=>e.goal_id)],[],e=>`${e.goal_id}:${e.decision_kind??``}:${e.decision_at??``}`),i={decision_count:(e?.summary.decision_count??0)+(t?.summary.decision_count??0),stale_count:r.filter(e=>e.stale_by_age).length,rebase_required_count:(e?.summary.rebase_required_count??0)+(t?.summary.rebase_required_count??0),fresh_count:(e?.summary.fresh_count??0)+(t?.summary.fresh_count??0)};return{...e??t,items:r,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),summary:i}}function J_(e,t){return I_([...e,...t].sort((e,t)=>t.generated_at.localeCompare(e.generated_at)),[],e=>`${e.goal_id}:${e.generated_at}:${e.classification??``}`)}function Y_(e,t,n){let r=I_(F_(e.items,`active`,n,e=>e.goal_id),F_(t.items,`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e,item_count:r.length,items:r,needs_controller:r.filter(e=>e.waiting_on===`controller`).length,needs_codex:r.filter(e=>e.waiting_on===`codex`).length,needs_user_or_controller:r.filter(e=>[`user_or_controller`,`controller`].includes(e.waiting_on)).length,watching_external_evidence:r.filter(e=>e.waiting_on===`external_evidence`).length}}function X_(e){let t=e.todo_id?.trim()||``;return t?`${e.goal_id}:${t}`:`${e.goal_id}:synthetic:${e.role??``}:${e.index??``}:${e.text??``}`}function Z_(e){let t={...V_};for(let n of e){for(let e of L_)t[e]+=Number(n[e])||0;for(let e of R_)n[e]!==void 0&&(t[e]=(t[e]??0)+n[e])}return t}function Q_(e,t,n){if(!e&&!t)return null;let r=F_(e?.items??[],`active`,n,e=>e.goal_id),i=F_(t?.items??[],`stopped`,n,e=>e.goal_id),a=I_(r,i,X_);return{...e??t,current_projected_count:r.length+i.length,items:a,rollout_event_count:a.reduce((e,t)=>e+(t.event_count??0),0),total_count:a.length}}function $_(e,t,n){if(!e&&!t)return null;let r=F_(e?.goals??[],`active`,n,e=>e.goal_id),i=F_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=I_(r,i,e=>e.goal_id),o=H_(Z_(r),Z_(i));return{...e??t,goals:U_(a,Number(o.runs_24h)||0),sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:o}}function ev(e,t,n){if(!e&&!t)return null;let r=(e?.agents??[]).filter(e=>e.goal_ids.some(e=>P_(e,n,`active`))||(e.current_todo?.goal_id?P_(e.current_todo.goal_id,n,`active`):!1)),i=(t?.agents??[]).filter(e=>e.goal_ids.some(e=>P_(e,n,`stopped`))||(e.current_todo?.goal_id?P_(e.current_todo.goal_id,n,`stopped`):!1)),a=I_(r,i,e=>e.agent_id).map(e=>{let t=i.find(t=>t.agent_id===e.agent_id);return t?{...e,goal_ids:Array.from(new Set([...e.goal_ids??[],...t.goal_ids]))}:e});return{...e??t,agents:a,source_summary:(e??t)?.source_summary?{...(e??t).source_summary,projected_agent_count:a.length,registered_agent_count:new Set(a.map(e=>e.agent_id)).size}:(e??t)?.source_summary}}function tv(e,t,n){if(!e&&!t)return null;let r=I_(F_(e?.goals??[],`active`,n,e=>e.goal_id),F_(t?.goals??[],`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e??t,goals:r}}function nv(e,t){let n=t.goal_projection?.scope;if(n!==`active`&&n!==`stopped`)return t;let r=n,i=t.run_history.goals,a=e.run_history.goals,o=I_(r===`active`?i:a.filter(e=>e.activation_state!==`stopped`),r===`stopped`?i:a.filter(e=>e.activation_state===`stopped`),e=>e.id),s=new Map(o.map(e=>[e.id,e.activation_state])),c=r===`active`?t:e,l=r===`stopped`?t:e,u=e.goal_projection?.registry_revision??null,d=t.goal_projection?.registry_revision??null,f=u===null||d===null||u===d;return{...e,agent_management_projection:ev(c.agent_management_projection,l.agent_management_projection,s),attention_queue:Y_(c.attention_queue,l.attention_queue,s),decision_freshness_summary:q_(c.decision_freshness_summary,l.decision_freshness_summary,s),event_ledger_summary:K_(c.event_ledger_summary,l.event_ledger_summary,s),goal_channel_notification_projection:tv(c.goal_channel_notification_projection,l.goal_channel_notification_projection,s),goal_projection:{schema_version:`loopx_goal_projection_scope_v0`,...t.goal_projection,complete:f,projected_goal_count:o.length,registry_goal_count:t.goal_projection?.registry_goal_count??0,scope:`all`},run_history:{...e.run_history,goal_count:o.length,goals:o,recent_runs:J_(c.run_history.recent_runs,l.run_history.recent_runs),run_count:c.run_history.run_count+l.run_history.run_count},todo_index:Q_(c.todo_index,l.todo_index,s),usage_summary:$_(c.usage_summary,l.usage_summary,s)}}function rv(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;ttypeof e==`boolean`?`${e}`:e===0?`0`:e,ov=iv,sv=(e,t)=>n=>{if(t?.variants==null)return ov(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=av(t)||av(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return ov(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},cv=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),uv=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),dv=`-`,fv=[],pv=`arbitrary..`,mv=e=>{let t=_v(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return gv(e);let n=e.split(dv);return hv(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?cv(i,t):t:i||fv}return n[e]||fv}}},hv=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=hv(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(dv):e.slice(t).join(dv),s=a.length;for(let e=0;ee.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?pv+r:void 0})(),_v=e=>{let{theme:t,classGroups:n}=e;return vv(n,t)},vv=(e,t)=>{let n=uv();for(let r in e){let i=e[r];yv(i,n,r,t)}return n},yv=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){xv(e,t,n);return}if(typeof e==`function`){Sv(e,t,n,r);return}Cv(e,t,n,r)},xv=(e,t,n)=>{let r=e===``?t:wv(t,e);r.classGroupId=n},Sv=(e,t,n,r)=>{if(Tv(e)){yv(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(lv(n,e))},Cv=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(dv),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,Ev=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},Dv=`!`,Ov=`:`,kv=[],Av=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),jv=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return Av(t,l,c,u)};if(t){let e=t+Ov,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):Av(kv,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},Mv=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},Nv=e=>({cache:Ev(e.cacheSize),parseClassName:jv(e),sortModifiers:Mv(e),postfixLookupClassGroupIds:Pv(e),...mv(e)}),Pv=e=>{let t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let e=0;e{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(Fv),l=``;for(let e=c.length-1;e>=0;--e){let t=c[e],{isExternal:u,modifiers:d,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:m}=n(t);if(u){l=t+(l.length>0?` `+l:l);continue}let h=!!m,g;if(h){g=r(p.substring(0,m));let e=g&&o[g]?r(p):void 0;e&&e!==g&&(g=e,h=!1)}else g=r(p);if(!g){if(!h){l=t+(l.length>0?` `+l:l);continue}if(g=r(p),!g){l=t+(l.length>0?` `+l:l);continue}h=!1}let _=d.length===0?``:d.length===1?d[0]:a(d).join(`:`),v=f?_+Dv:_,y=v+g;if(s.indexOf(y)>-1)continue;s.push(y);let b=i(g,h);for(let e=0;e0?` `+l:l)}return l},Lv=(...e)=>{let t=0,n,r,i=``;for(;t{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r{let n,r,i,a,o=o=>(n=Nv(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=Iv(e,n);return i(e,a),a};return a=o,(...e)=>a(Lv(...e))},Bv=[],Vv=e=>{let t=t=>t[e]||Bv;return t.isThemeGetter=!0,t},Hv=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Uv=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Wv=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,Gv=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Kv=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,qv=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Jv=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Yv=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Xv=e=>Wv.test(e),Zv=e=>!!e&&!Number.isNaN(Number(e)),Qv=e=>!!e&&Number.isInteger(Number(e)),$v=e=>e.endsWith(`%`)&&Zv(e.slice(0,-1)),ey=e=>Gv.test(e),ty=()=>!0,ny=e=>Kv.test(e)&&!qv.test(e),ry=()=>!1,iy=e=>Jv.test(e),ay=e=>Yv.test(e),oy=e=>!Q(e)&&!$(e),sy=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),cy=e=>Cy(e,Dy,ry),Q=e=>Hv.test(e),ly=e=>Cy(e,Oy,ny),uy=e=>Cy(e,ky,Zv),dy=e=>Cy(e,jy,ty),fy=e=>Cy(e,Ay,ry),py=e=>Cy(e,Ty,ry),my=e=>Cy(e,Ey,ay),hy=e=>Cy(e,My,iy),$=e=>Uv.test(e),gy=e=>wy(e,Oy),_y=e=>wy(e,Ay),vy=e=>wy(e,Ty),yy=e=>wy(e,Dy),by=e=>wy(e,Ey),xy=e=>wy(e,My,!0),Sy=e=>wy(e,jy,!0),Cy=(e,t,n)=>{let r=Hv.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},wy=(e,t,n=!1)=>{let r=Uv.exec(e);return r?r[1]?t(r[1]):n:!1},Ty=e=>e===`position`||e===`percentage`,Ey=e=>e===`image`||e===`url`,Dy=e=>e===`length`||e===`size`||e===`bg-size`,Oy=e=>e===`length`,ky=e=>e===`number`,Ay=e=>e===`family-name`,jy=e=>e===`number`||e===`weight`,My=e=>e===`shadow`,Ny=zv(()=>{let e=Vv(`color`),t=Vv(`font`),n=Vv(`text`),r=Vv(`font-weight`),i=Vv(`tracking`),a=Vv(`leading`),o=Vv(`breakpoint`),s=Vv(`container`),c=Vv(`spacing`),l=Vv(`radius`),u=Vv(`shadow`),d=Vv(`inset-shadow`),f=Vv(`text-shadow`),p=Vv(`drop-shadow`),m=Vv(`blur`),h=Vv(`perspective`),g=Vv(`aspect`),_=Vv(`ease`),v=Vv(`animate`),y=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],b=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],x=()=>[...b(),$,Q],S=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],C=()=>[`auto`,`contain`,`none`],w=()=>[$,Q,c],T=()=>[Xv,`full`,`auto`,...w()],E=()=>[Qv,`none`,`subgrid`,$,Q],D=()=>[`auto`,{span:[`full`,Qv,$,Q]},Qv,$,Q],O=()=>[Qv,`auto`,$,Q],k=()=>[`auto`,`min`,`max`,`fr`,$,Q],A=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],ee=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],j=()=>[`auto`,...w()],M=()=>[Xv,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],te=()=>[Xv,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...w()],ne=()=>[Xv,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...w()],N=()=>[e,$,Q],P=()=>[...b(),vy,py,{position:[$,Q]}],re=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ie=()=>[`auto`,`cover`,`contain`,yy,cy,{size:[$,Q]}],ae=()=>[$v,gy,ly],F=()=>[``,`none`,`full`,l,$,Q],oe=()=>[``,Zv,gy,ly],I=()=>[`solid`,`dashed`,`dotted`,`double`],se=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],L=()=>[Zv,$v,vy,py],ce=()=>[``,`none`,m,$,Q],le=()=>[`none`,Zv,$,Q],ue=()=>[`none`,Zv,$,Q],de=()=>[Zv,$,Q],fe=()=>[Xv,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[ey],breakpoint:[ey],color:[ty],container:[ey],"drop-shadow":[ey],ease:[`in`,`out`,`in-out`],font:[oy],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[ey],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[ey],shadow:[ey],spacing:[`px`,Zv],text:[ey],"text-shadow":[ey],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,Xv,Q,$,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,$,Q]}],"container-named":[sy],columns:[{columns:[Zv,Q,$,s]}],"break-after":[{"break-after":y()}],"break-before":[{"break-before":y()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:x()}],overflow:[{overflow:S()}],"overflow-x":[{"overflow-x":S()}],"overflow-y":[{"overflow-y":S()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:T()}],"inset-x":[{"inset-x":T()}],"inset-y":[{"inset-y":T()}],start:[{"inset-s":T(),start:T()}],end:[{"inset-e":T(),end:T()}],"inset-bs":[{"inset-bs":T()}],"inset-be":[{"inset-be":T()}],top:[{top:T()}],right:[{right:T()}],bottom:[{bottom:T()}],left:[{left:T()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[Qv,`auto`,$,Q]}],basis:[{basis:[Xv,`full`,`auto`,s,...w()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[Zv,Xv,`auto`,`initial`,`none`,Q]}],grow:[{grow:[``,Zv,$,Q]}],shrink:[{shrink:[``,Zv,$,Q]}],order:[{order:[Qv,`first`,`last`,`none`,$,Q]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:D()}],"col-start":[{"col-start":O()}],"col-end":[{"col-end":O()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:D()}],"row-start":[{"row-start":O()}],"row-end":[{"row-end":O()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":k()}],"auto-rows":[{"auto-rows":k()}],gap:[{gap:w()}],"gap-x":[{"gap-x":w()}],"gap-y":[{"gap-y":w()}],"justify-content":[{justify:[...A(),`normal`]}],"justify-items":[{"justify-items":[...ee(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...ee()]}],"align-content":[{content:[`normal`,...A()]}],"align-items":[{items:[...ee(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...ee(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":A()}],"place-items":[{"place-items":[...ee(),`baseline`]}],"place-self":[{"place-self":[`auto`,...ee()]}],p:[{p:w()}],px:[{px:w()}],py:[{py:w()}],ps:[{ps:w()}],pe:[{pe:w()}],pbs:[{pbs:w()}],pbe:[{pbe:w()}],pt:[{pt:w()}],pr:[{pr:w()}],pb:[{pb:w()}],pl:[{pl:w()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mbs:[{mbs:j()}],mbe:[{mbe:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":w()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":w()}],"space-y-reverse":[`space-y-reverse`],size:[{size:M()}],"inline-size":[{inline:[`auto`,...te()]}],"min-inline-size":[{"min-inline":[`auto`,...te()]}],"max-inline-size":[{"max-inline":[`none`,...te()]}],"block-size":[{block:[`auto`,...ne()]}],"min-block-size":[{"min-block":[`auto`,...ne()]}],"max-block-size":[{"max-block":[`none`,...ne()]}],w:[{w:[s,`screen`,...M()]}],"min-w":[{"min-w":[s,`screen`,`none`,...M()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...M()]}],h:[{h:[`screen`,`lh`,...M()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...M()]}],"max-h":[{"max-h":[`screen`,`lh`,...M()]}],"font-size":[{text:[`base`,n,gy,ly]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,Sy,dy]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,$v,Q]}],"font-family":[{font:[_y,fy,t]}],"font-features":[{"font-features":[Q]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,$,Q]}],"line-clamp":[{"line-clamp":[Zv,`none`,$,uy]}],leading:[{leading:[a,...w()]}],"list-image":[{"list-image":[`none`,$,Q]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,$,Q]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:N()}],"text-color":[{text:N()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...I(),`wavy`]}],"text-decoration-thickness":[{decoration:[Zv,`from-font`,`auto`,$,ly]}],"text-decoration-color":[{decoration:N()}],"underline-offset":[{"underline-offset":[Zv,`auto`,$,Q]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:w()}],"tab-size":[{tab:[Qv,$,Q]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,$,Q]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,$,Q]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:P()}],"bg-repeat":[{bg:re()}],"bg-size":[{bg:ie()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},Qv,$,Q],radial:[``,$,Q],conic:[Qv,$,Q]},by,my]}],"bg-color":[{bg:N()}],"gradient-from-pos":[{from:ae()}],"gradient-via-pos":[{via:ae()}],"gradient-to-pos":[{to:ae()}],"gradient-from":[{from:N()}],"gradient-via":[{via:N()}],"gradient-to":[{to:N()}],rounded:[{rounded:F()}],"rounded-s":[{"rounded-s":F()}],"rounded-e":[{"rounded-e":F()}],"rounded-t":[{"rounded-t":F()}],"rounded-r":[{"rounded-r":F()}],"rounded-b":[{"rounded-b":F()}],"rounded-l":[{"rounded-l":F()}],"rounded-ss":[{"rounded-ss":F()}],"rounded-se":[{"rounded-se":F()}],"rounded-ee":[{"rounded-ee":F()}],"rounded-es":[{"rounded-es":F()}],"rounded-tl":[{"rounded-tl":F()}],"rounded-tr":[{"rounded-tr":F()}],"rounded-br":[{"rounded-br":F()}],"rounded-bl":[{"rounded-bl":F()}],"border-w":[{border:oe()}],"border-w-x":[{"border-x":oe()}],"border-w-y":[{"border-y":oe()}],"border-w-s":[{"border-s":oe()}],"border-w-e":[{"border-e":oe()}],"border-w-bs":[{"border-bs":oe()}],"border-w-be":[{"border-be":oe()}],"border-w-t":[{"border-t":oe()}],"border-w-r":[{"border-r":oe()}],"border-w-b":[{"border-b":oe()}],"border-w-l":[{"border-l":oe()}],"divide-x":[{"divide-x":oe()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":oe()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...I(),`hidden`,`none`]}],"divide-style":[{divide:[...I(),`hidden`,`none`]}],"border-color":[{border:N()}],"border-color-x":[{"border-x":N()}],"border-color-y":[{"border-y":N()}],"border-color-s":[{"border-s":N()}],"border-color-e":[{"border-e":N()}],"border-color-bs":[{"border-bs":N()}],"border-color-be":[{"border-be":N()}],"border-color-t":[{"border-t":N()}],"border-color-r":[{"border-r":N()}],"border-color-b":[{"border-b":N()}],"border-color-l":[{"border-l":N()}],"divide-color":[{divide:N()}],"outline-style":[{outline:[...I(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[Zv,$,Q]}],"outline-w":[{outline:[``,Zv,gy,ly]}],"outline-color":[{outline:N()}],shadow:[{shadow:[``,`none`,u,xy,hy]}],"shadow-color":[{shadow:N()}],"inset-shadow":[{"inset-shadow":[`none`,d,xy,hy]}],"inset-shadow-color":[{"inset-shadow":N()}],"ring-w":[{ring:oe()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:N()}],"ring-offset-w":[{"ring-offset":[Zv,ly]}],"ring-offset-color":[{"ring-offset":N()}],"inset-ring-w":[{"inset-ring":oe()}],"inset-ring-color":[{"inset-ring":N()}],"text-shadow":[{"text-shadow":[`none`,f,xy,hy]}],"text-shadow-color":[{"text-shadow":N()}],opacity:[{opacity:[Zv,$,Q]}],"mix-blend":[{"mix-blend":[...se(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":se()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[Zv]}],"mask-image-linear-from-pos":[{"mask-linear-from":L()}],"mask-image-linear-to-pos":[{"mask-linear-to":L()}],"mask-image-linear-from-color":[{"mask-linear-from":N()}],"mask-image-linear-to-color":[{"mask-linear-to":N()}],"mask-image-t-from-pos":[{"mask-t-from":L()}],"mask-image-t-to-pos":[{"mask-t-to":L()}],"mask-image-t-from-color":[{"mask-t-from":N()}],"mask-image-t-to-color":[{"mask-t-to":N()}],"mask-image-r-from-pos":[{"mask-r-from":L()}],"mask-image-r-to-pos":[{"mask-r-to":L()}],"mask-image-r-from-color":[{"mask-r-from":N()}],"mask-image-r-to-color":[{"mask-r-to":N()}],"mask-image-b-from-pos":[{"mask-b-from":L()}],"mask-image-b-to-pos":[{"mask-b-to":L()}],"mask-image-b-from-color":[{"mask-b-from":N()}],"mask-image-b-to-color":[{"mask-b-to":N()}],"mask-image-l-from-pos":[{"mask-l-from":L()}],"mask-image-l-to-pos":[{"mask-l-to":L()}],"mask-image-l-from-color":[{"mask-l-from":N()}],"mask-image-l-to-color":[{"mask-l-to":N()}],"mask-image-x-from-pos":[{"mask-x-from":L()}],"mask-image-x-to-pos":[{"mask-x-to":L()}],"mask-image-x-from-color":[{"mask-x-from":N()}],"mask-image-x-to-color":[{"mask-x-to":N()}],"mask-image-y-from-pos":[{"mask-y-from":L()}],"mask-image-y-to-pos":[{"mask-y-to":L()}],"mask-image-y-from-color":[{"mask-y-from":N()}],"mask-image-y-to-color":[{"mask-y-to":N()}],"mask-image-radial":[{"mask-radial":[$,Q]}],"mask-image-radial-from-pos":[{"mask-radial-from":L()}],"mask-image-radial-to-pos":[{"mask-radial-to":L()}],"mask-image-radial-from-color":[{"mask-radial-from":N()}],"mask-image-radial-to-color":[{"mask-radial-to":N()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":b()}],"mask-image-conic-pos":[{"mask-conic":[Zv]}],"mask-image-conic-from-pos":[{"mask-conic-from":L()}],"mask-image-conic-to-pos":[{"mask-conic-to":L()}],"mask-image-conic-from-color":[{"mask-conic-from":N()}],"mask-image-conic-to-color":[{"mask-conic-to":N()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:P()}],"mask-repeat":[{mask:re()}],"mask-size":[{mask:ie()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,$,Q]}],filter:[{filter:[``,`none`,$,Q]}],blur:[{blur:ce()}],brightness:[{brightness:[Zv,$,Q]}],contrast:[{contrast:[Zv,$,Q]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,xy,hy]}],"drop-shadow-color":[{"drop-shadow":N()}],grayscale:[{grayscale:[``,Zv,$,Q]}],"hue-rotate":[{"hue-rotate":[Zv,$,Q]}],invert:[{invert:[``,Zv,$,Q]}],saturate:[{saturate:[Zv,$,Q]}],sepia:[{sepia:[``,Zv,$,Q]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,$,Q]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[Zv,$,Q]}],"backdrop-contrast":[{"backdrop-contrast":[Zv,$,Q]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,Zv,$,Q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Zv,$,Q]}],"backdrop-invert":[{"backdrop-invert":[``,Zv,$,Q]}],"backdrop-opacity":[{"backdrop-opacity":[Zv,$,Q]}],"backdrop-saturate":[{"backdrop-saturate":[Zv,$,Q]}],"backdrop-sepia":[{"backdrop-sepia":[``,Zv,$,Q]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":w()}],"border-spacing-x":[{"border-spacing-x":w()}],"border-spacing-y":[{"border-spacing-y":w()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,$,Q]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[Zv,`initial`,$,Q]}],ease:[{ease:[`linear`,`initial`,_,$,Q]}],delay:[{delay:[Zv,$,Q]}],animate:[{animate:[`none`,v,$,Q]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,$,Q]}],"perspective-origin":[{"perspective-origin":x()}],rotate:[{rotate:le()}],"rotate-x":[{"rotate-x":le()}],"rotate-y":[{"rotate-y":le()}],"rotate-z":[{"rotate-z":le()}],scale:[{scale:ue()}],"scale-x":[{"scale-x":ue()}],"scale-y":[{"scale-y":ue()}],"scale-z":[{"scale-z":ue()}],"scale-3d":[`scale-3d`],skew:[{skew:de()}],"skew-x":[{"skew-x":de()}],"skew-y":[{"skew-y":de()}],transform:[{transform:[$,Q,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:x()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:fe()}],"translate-x":[{"translate-x":fe()}],"translate-y":[{"translate-y":fe()}],"translate-z":[{"translate-z":fe()}],"translate-none":[`translate-none`],zoom:[{zoom:[Qv,$,Q]}],accent:[{accent:N()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:N()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,$,Q]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scrollbar-thumb-color":[{"scrollbar-thumb":N()}],"scrollbar-track-color":[{"scrollbar-track":N()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":w()}],"scroll-mx":[{"scroll-mx":w()}],"scroll-my":[{"scroll-my":w()}],"scroll-ms":[{"scroll-ms":w()}],"scroll-me":[{"scroll-me":w()}],"scroll-mbs":[{"scroll-mbs":w()}],"scroll-mbe":[{"scroll-mbe":w()}],"scroll-mt":[{"scroll-mt":w()}],"scroll-mr":[{"scroll-mr":w()}],"scroll-mb":[{"scroll-mb":w()}],"scroll-ml":[{"scroll-ml":w()}],"scroll-p":[{"scroll-p":w()}],"scroll-px":[{"scroll-px":w()}],"scroll-py":[{"scroll-py":w()}],"scroll-ps":[{"scroll-ps":w()}],"scroll-pe":[{"scroll-pe":w()}],"scroll-pbs":[{"scroll-pbs":w()}],"scroll-pbe":[{"scroll-pbe":w()}],"scroll-pt":[{"scroll-pt":w()}],"scroll-pr":[{"scroll-pr":w()}],"scroll-pb":[{"scroll-pb":w()}],"scroll-pl":[{"scroll-pl":w()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,$,Q]}],fill:[{fill:[`none`,...N()]}],"stroke-w":[{stroke:[Zv,gy,ly,uy]}],stroke:[{stroke:[`none`,...N()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{"container-named":[`container-type`],overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`right`,`left`],"inset-y":[`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`pr`,`pl`],py:[`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`mr`,`ml`],my:[`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-r`,`border-w-l`],"border-w-y":[`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-r`,`border-color-l`],"border-color-y":[`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},postfixLookupClassGroups:[`container-type`],orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function Py(...e){return Ny(iv(e))}var Fy=sv(`inline-flex h-9 shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md border px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 disabled:pointer-events-none disabled:opacity-50 dark:focus-visible:ring-zinc-500`,{variants:{variant:{primary:`border-slate-900 bg-slate-950 text-white hover:bg-slate-800 dark:border-zinc-100 dark:bg-zinc-50 dark:text-zinc-950 dark:hover:bg-zinc-200`,secondary:`border-slate-200 bg-white text-slate-900 hover:bg-slate-50 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-100 dark:hover:bg-zinc-900`,ghost:`border-transparent bg-transparent text-slate-700 hover:bg-slate-100 dark:text-zinc-300 dark:hover:bg-zinc-900`},size:{sm:`h-8 px-2 text-xs`,md:`h-9 px-3 text-sm`,icon:`h-9 w-9 px-0`}},defaultVariants:{variant:`secondary`,size:`md`}});function Iy({className:e,variant:t,size:n,...r}){return(0,z.jsx)(`button`,{className:Py(Fy({variant:t,size:n}),e),type:`button`,...r})}function Ly({className:e,...t}){return(0,z.jsx)(`section`,{className:Py(`rounded-lg border border-slate-200/80 bg-white/95 text-slate-950 shadow-[0_1px_2px_rgba(15,23,42,0.04)] dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-50`,e),...t})}function Ry({className:e,...t}){return(0,z.jsx)(`div`,{className:Py(`p-4 pt-0`,e),...t})}var zy=[`codex`,`claude`,`kiro`,`trae`,`coco`,`openai`,`anthropic`],By=new Set([`acp`,`status_projection`]);function Vy(e){let t=e.trim().toLowerCase().replace(/_/gu,`-`);for(let e of zy)if(t===e||t.startsWith(`${e}-`))return e;return t}function Hy(e,t){let n=t?.trim().toLowerCase()??``;return n.length>0&&!By.has(n)?Vy(n):Vy(e)}var Uy={"zh-CN":{title:`交办说明`,context:`背景与补充`,constraints:`约束`,inputs:`输入材料`,acceptance:`验收要求`,return:`需要回传`,supplied:`已提供给接收方`,pending:`等待接收方读取`,decision:`接收方判断`,unknown:`尚未记录`,unavailable:`暂时无法读取`,adopt:`已采纳`,defer:`已暂缓`,reject:`未采纳`,no_change:`无需调整`,result:`结论已保存`,delivered:`结论已回传`,details:`查看交办内容`},en:{title:`Delegation brief`,context:`Context & corrections`,constraints:`Constraints`,inputs:`Inputs`,acceptance:`Acceptance`,return:`Expected return`,supplied:`Supplied to receiver`,pending:`Awaiting receiver read`,decision:`Receiver decision`,unknown:`Not recorded`,unavailable:`Readback unavailable`,adopt:`Adopted`,defer:`Deferred`,reject:`Rejected`,no_change:`No change needed`,result:`Conclusion saved`,delivered:`Conclusion returned`,details:`View delegation details`}};function Wy({request:e}){let{locale:t}=Ji();if(!e)return null;let n=Uy[t],r=e.brief,i=e.decision,a=e.returns.find(e=>e.phase===`conclusion`);return(0,z.jsxs)(`section`,{className:`personal-collaboration`,"aria-label":n.title,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:r.purpose}),(0,z.jsx)(`span`,{children:e.agent_id})]}),(0,z.jsxs)(`p`,{className:`personal-collaboration-status`,children:[(0,z.jsx)(`span`,{children:e.read_status===`supplied`?n.supplied:e.read_status===`unavailable`?n.unavailable:n.pending}),(0,z.jsxs)(`span`,{children:[n.decision,`: `,n[i]??(e.decision===`unavailable`?n.unavailable:n.unknown)]}),a?(0,z.jsx)(`span`,{children:a.status===`delivered`?n.delivered:n.result}):null]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.details}),(0,z.jsx)(`h4`,{children:n.context}),(0,z.jsx)(`p`,{children:r.context}),r.constraints.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:n.constraints}),(0,z.jsx)(`ul`,{children:r.constraints.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))})]}):null,r.inputs.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:n.inputs}),(0,z.jsx)(`ul`,{children:r.inputs.map((e,t)=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.ref}),` — `,e.description,e.sha256?(0,z.jsxs)(`small`,{children:[`sha256:`,e.sha256]}):null]},t))})]}):null,(0,z.jsx)(`h4`,{children:n.acceptance}),(0,z.jsx)(`ul`,{children:r.acceptance.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))}),(0,z.jsx)(`h4`,{children:n.return}),(0,z.jsx)(`p`,{children:r.return_requirement})]})]})}var Gy={stop:`ready_stop`,resume:`resume_review`,delete:`delete_review`};function Ky(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function qy(e){return typeof e==`string`&&e.trim().length>0?e:null}function Jy(e,t=240){let n=typeof e==`string`?e.replace(/\s+/g,` `).trim():``;return n.length>t?`${n.slice(0,t-1)}…`:n}function Yy(e){let t=Ky(e)??{},n=Jy(t.agent_id,80)||`unknown-agent`,r=Jy(t.acceptance,200);if(t.staffing===`gap`){let e=Ky(t.declined_first_todo)??{};return[`${n} · gap`,Jy(t.gap_reason_code,80),Jy(e.text,200)].filter(Boolean).join(` · `)}let i=Ky(t.first_todo)??{};return[`${n} · ready`,Jy(i.priority,8),Jy(i.action_kind,40),Jy(i.text,240),r?`acceptance: ${r}`:``].filter(Boolean).join(` · `)}function Xy(e){let t=Ky(e)??{};return Object.entries(t).map(([e,t])=>`${e}: ${typeof t==`object`&&t?JSON.stringify(t):String(t)}`).join(` · `)}function Zy(e){let t=Ky(e);if(t?.action_kind!==`team.plan`)return;let n=Ky(Ky(t.normalized_parameters)?.plan);if(!n||n.kind!==`steward_team_plan_preview`||n.applies!==!1)return;let r=qy(t.proposal_id),i=qy(t.expected_state_fingerprint),a=qy(n.goal_id);if(!r||!i||!a)return;let o=Array.isArray(n.lanes)?n.lanes:[],s=Array.isArray(n.gaps)?n.gaps:[],c=[{key:`goal`,value:a},{key:`objective`,value:Jy(n.objective)},...o.map((e,t)=>({key:`lane_${t+1}`,value:Yy(e)})),...s.length>0?[{key:`lane_gaps`,value:s.map(e=>{let t=Ky(e)??{};return[Jy(t.lane_id,80),Jy(t.reason_code,80)].filter(Boolean).join(`: `)}).filter(Boolean).join(` · `)}]:[],{key:`quota_envelope`,value:Xy(n.quota_envelope)},{key:`stop_condition`,value:Jy(n.stop_condition)}].filter(e=>e.value.length>0),l={schemaVersion:`review_card_frame_v0`,actionKind:`team.plan`,proposalId:r,stateFingerprint:i,titleKey:`team_plan_preview`,subtitleKey:`preview_only_no_lane_exists`,warningKey:`confirming_creates_each_ready_lane_first_todo`,focus:`${a} · ${o.length} lane${o.length===1?``:`s`}`,fields:c};if(t.status===`preview_ready`||t.status===`deferred`)return{...l,kind:`confirmation`,attentionKind:`authority`,interactionMode:`confirm_reject`,decisions:[`confirm`,`reject`],confirmLabelKey:`confirm_team_plan`,rejectLabelKey:`reject_team_plan`};if(t.status===`applying`)return{...l,kind:`pending`,attentionKind:`progress`,interactionMode:`inform`};let u=Ky(t.receipt),d=Ky(t.failure),f=t.status===`applied`?`applied`:t.status===`rejected`?`rejected`:t.status===`stale`?`stale`:t.status===`failed`?`failed`:`inactive`;return{...l,kind:`result`,attentionKind:`progress`,interactionMode:`inform`,resultKind:f,resultSummary:Jy(u?.outcome??d?.error_code??t.status,160)}}function Qy(e){let t=Ky(e.projection);if(t?.schema_version!==`loopx_operation_projection_v0`)return null;let n=qy(t.title),r=qy(t.subtitle),i=qy(t.focus),a=qy(t.warning);if(!n||!r||!i||!a||!Array.isArray(t.fields))return null;let o=[];for(let e of t.fields){let t=Ky(e),n=qy(t?.label),r=qy(t?.value);if(!n||!r)return null;o.push({label:n,value:r})}return{title:n,subtitle:r,focus:i,fields:o,warning:a}}function $y(e){let t=Ky(e);if(t?.action_kind!==`operation.execute`)return;let n=Ky(t.normalized_parameters),r=Ky(t.operation);if(!n||r?.schema_version!==`loopx_operation_envelope_v0`)return;let i=qy(r.operation_id),a=qy(r.confirmation_digest),o=qy(r.expires_at),s=Qy(n);if(!i||!a||!o||!s||i!==t.proposal_id)return;let c=r.lifecycle_state;if(c!==`awaiting_confirmation`&&c!==`claimed`&&c!==`outcome_observed`)return;let l={schemaVersion:`operation_review_frame_v0`,operationId:i,confirmationDigest:a,lifecycleState:c,simulated:Ky(n.projection).simulated===!0,expiresAt:o,content:s};if(c===`awaiting_confirmation`)return{...l,kind:`confirmation`,attentionKind:`authority`,interactionMode:`confirm_reject`,decisions:[`confirm`,`reject`]};if(c===`claimed`)return{...l,kind:`pending`,attentionKind:`progress`,interactionMode:`inform`};let u=Ky(r.outcome);if(!u)return;let d=u.outcome===`rejected_by_operator`,f=u.simulation===!0||l.simulated;return{...l,kind:`result`,attentionKind:`progress`,interactionMode:`inform`,resultKind:d?`rejected`:f?`simulation_completed`:`completed`,resultDeliveryVerified:Ky(r.result_delivery)!==null,summary:qy(u.summary)??``}}function eb(e){let t=Ky(e)??{},n={schemaVersion:`action_review_plan_v0`,proposalId:typeof t.proposal_id==`string`?t.proposal_id:``,sourceFingerprint:typeof t.expected_state_fingerprint==`string`?t.expected_state_fingerprint:``},r=$y(t),i=Zy(t),a=e=>({...n,...e,...r?{operationFrame:r}:{},...i?{reviewCardFrame:i}:{}}),o=(e,t)=>a({interaction:e,reason:t,canApply:!1}),s=t.action_kind===`goal.lifecycle`;if(s&&t.gate!=null||t.status===`gated`)return o(`gated`,`authority_gate`);if(s&&t.stale!=null||t.status===`stale`)return o(`refresh`,`stale_proposal`);if(t.status===`applied`)return Ky(t.receipt)?.projection_verified===!0&&(t.action_kind!==`operation.execute`||Ky(Ky(t.operation)?.result_delivery)!==null)?o(`completed`,`readback_verified`):o(`repair`,`readback_unverified`);let c=Ky(t.canonical_update_basis),l=Ky(t.normalized_parameters),u=c?.schema_version===`loopx_chat_canonical_update_basis_v0`&&qy(c.provider_revision)!==null&&qy(c.registry_sha256)!==null&&(t.action_kind===`todo.update`||t.action_kind===`monitor.update`&&[`pause`,`resume`,`edit`].includes(String(l?.operation))),d=c?.schema_version===`loopx_chat_canonical_terminal_basis_v0`&&qy(c.provider_revision)!==null&&qy(c.registry_sha256)!==null&&(t.action_kind===`todo.update`&&l?.operation===`complete`||t.action_kind===`monitor.update`&&l?.operation===`stop`);if((u||d)&&(t.status===`applying`||t.status===`failed`))return{...a({interaction:`review`,canApply:!0,reason:Ky(t.failure)?.error_code===`canonical_update_projection_pending`?`canonical_update_projection_pending`:`canonical_update_retry`}),retryOriginal:!0};if(t.status===`applying`)return o(`pending`,`apply_pending`);if(t.status===`failed`||t.error!=null)return o(`repair`,`apply_failed`);if(t.status!==`preview_ready`&&t.status!==`deferred`)return o(`inactive`,`inactive_proposal`);let f=(e,t=!0)=>a({interaction:`review`,reason:e,canApply:t});if(t.action_kind!==`goal.lifecycle`)return f(t.permission_classification===`protected`?`protected_action`:`action_review`);let p=t.validation_evidence,m=t.available_transitions;if(!(qy(t.proposal_id)!==null&&qy(t.expected_state_fingerprint)!==null&&Array.isArray(p)&&p.length>0&&p.every(e=>qy(e)!==null)&&Array.isArray(m)&&m.includes(`apply`)))return o(`refresh`,`incomplete_proposal`);let h=Ky(t.context),g=l?.operation,_=qy(l?.goal_id);if(!_||h?.goal_id!=null&&h.goal_id!==_)return o(`refresh`,`incomplete_proposal`);if(g!==`stop`&&g!==`resume`&&g!==`delete`)return f(`unknown_action`,!1);if(t.permission_classification===`protected`)return f(`protected_action`);if(t.permission_classification!==`durable_write`)return f(`unknown_permission`,!1);let v=Gy[g];return v===`ready_stop`&&t.status===`preview_ready`?a({interaction:`direct`,reason:v,canApply:!0}):f(v===`ready_stop`?`action_review`:v)}function tb(e){return e.error_code===`action_stale`||e.error_code===`action_conflict`||Ky(e.proposal)?.status===`stale`}function nb(e){return typeof e==`object`&&e?e:{}}function rb(e){return typeof e==`string`?e:``}function ib(e,t){let n=nb(e.plan),r=[],i=rb(e.goal_id)||rb(n.goal_id);i&&r.push({key:`goal_id`,label:t(`proposal.field.goalId`),value:i});let a=rb(n.objective);a&&r.push({key:`objective`,label:t(`proposal.field.objective`),value:a}),(Array.isArray(n.lanes)?n.lanes:[]).forEach((e,n)=>{let i=nb(e),a=rb(i.lane_id)||`lane-${n+1}`,o=rb(i.agent_id),s=rb(i.acceptance);if(rb(i.staffing)===`gap`){let e=nb(i.declined_first_todo);r.push({key:`lane_${a}`,label:o||a,value:[t(`proposal.teamPlan.gapLane`),lb(rb(i.gap_reason_code),t),rb(e.text)].filter(Boolean).join(` · `)});return}let c=nb(i.first_todo),l=[rb(c.priority),rb(c.action_kind),rb(c.text)].filter(Boolean).join(` · `);r.push({key:`lane_${a}`,label:o||a,value:[l||t(`proposal.teamPlan.laneUnstaffed`),s?`${t(`proposal.teamPlan.acceptanceShort`)}: ${s}`:``].filter(Boolean).join(` · `)})});let o=nb(n.quota_envelope),s=Object.entries(o);s.length>0&&r.push({key:`quota_envelope`,label:t(`proposal.field.quotaEnvelope`),value:s.map(([e,t])=>`${e}: ${String(t??``)}`).join(` · `)+` · ${t(`proposal.teamPlan.advisory`)}`});let c=rb(n.stop_condition);return c&&r.push({key:`stop_condition`,label:t(`proposal.field.stopCondition`),value:`${c} · ${t(`proposal.teamPlan.advisory`)}`}),r}function ab(e){let t=nb(e.plan);return Array.isArray(t.lanes)?t.lanes.length:0}function ob(e){let t=nb(e.plan);return rb(e.goal_id)||rb(t.goal_id)}function sb(e,t){let n=nb(e),r=nb(t.plan),i=(Array.isArray(r.lanes)?r.lanes:[]).map(nb);return(Array.isArray(n.lanes)?n.lanes:[]).map(e=>{let t=nb(e),n=rb(t.lane_id),r=i.find(e=>e.lane_id===n);return{laneId:n,agentId:rb(t.agent_id),task:rb(nb(r?.first_todo).text)||n}}).filter(e=>e.laneId.length>0)}function cb(e,t={}){let n=nb(e),r=nb(t.plan),i=(Array.isArray(r.lanes)?r.lanes:[]).map(nb);return(Array.isArray(n.gap_lanes)?n.gap_lanes:[]).map(e=>{let t=nb(e);return{laneId:rb(t.lane_id),agentId:rb(t.agent_id),reasonCode:rb(t.reason_code),task:rb(nb(i.find(e=>e.lane_id===t.lane_id)?.declined_first_todo).text)}}).filter(e=>e.laneId.length>0)}function lb(e,t){return e===`agent_not_registered`?t(`proposal.teamPlan.gapReason.agentNotRegistered`):e===`action_kind_not_supported`?t(`proposal.teamPlan.gapReason.actionKindNotSupported`):e===`capability_not_granted`?t(`proposal.teamPlan.gapReason.capabilityNotGranted`):e===`audience_not_authorized`?t(`proposal.teamPlan.gapReason.audienceNotAuthorized`):e}function ub(e){let t=nb(e),n=rb(t.outcome),r=Array.isArray(t.lanes)?t.lanes.length:0,i=typeof t.gap_count==`number`?t.gap_count:0;return n===`team_plan_partially_applied`?{kind:`partially_applied`,created:r,gaps:i}:n===`team_plan_lanes_already_present`||n===`team_plan_commit_recovered`?{kind:`already_present`,created:r,gaps:i}:n===`team_plan_applied`?{kind:`applied`,created:r,gaps:i}:null}function db(e,t){return e?.kind===`partially_applied`?t(`proposal.teamPlan.appliedPartially`,{created:String(e.created),gaps:String(e.gaps)}):e?.kind===`already_present`?t(`proposal.teamPlan.appliedAlreadyPresent`):t(e?.kind===`applied`?`proposal.teamPlan.applied`:`drawer.proposalApplied`,{count:e?.created??0})}function fb({ariaLabel:e,className:t,icon:n,onChange:r,options:i,prefixLabel:a,value:o}){let s=(0,R.useId)(),c=(0,R.useRef)(null),l=(0,R.useRef)(null),u=(0,R.useRef)(new Map),[d,f]=(0,R.useState)(!1),[p,m]=(0,R.useState)(o),h=i.find(e=>e.value===o)??i[0],g=i.filter(e=>!e.disabled);(0,R.useEffect)(()=>{if(!d)return;let e=e=>{c.current?.contains(e.target)||f(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[d]),(0,R.useEffect)(()=>{d&&u.current.get(p)?.focus()},[p,d]);function _(e){m(e)}function v(e=`selected`){let t=e===`last`?g.at(-1):g[0],n=e===`selected`&&h&&!h.disabled?h:t;n&&(f(!0),_(n.value))}function y({restoreFocus:e=!1}={}){f(!1),e&&l.current?.focus()}function b(e){e.disabled||(r(e.value),y({restoreFocus:!0}))}function x(e){if(!g.length)return;let t=g.findIndex(e=>e.value===p),n=t<0?0:(t+e+g.length)%g.length;_(g[n].value)}function S(e){e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),v(`selected`)):e.key===`ArrowUp`&&(e.preventDefault(),v(`last`))}function C(e,t){if(e.key===`ArrowDown`)e.preventDefault(),x(1);else if(e.key===`ArrowUp`)e.preventDefault(),x(-1);else if(e.key===`Home`)e.preventDefault(),g[0]&&_(g[0].value);else if(e.key===`End`){e.preventDefault();let t=g.at(-1);t&&_(t.value)}else e.key===`Enter`||e.key===` `?(e.preventDefault(),b(t)):e.key===`Escape`?(e.preventDefault(),y({restoreFocus:!0})):e.key===`Tab`&&y()}let w;return(0,z.jsxs)(`div`,{className:`personal-select${t?` ${t}`:``}`,ref:c,children:[(0,z.jsxs)(`button`,{"aria-controls":s,"aria-expanded":d,"aria-haspopup":`listbox`,"aria-label":e,className:`personal-select-trigger`,"data-value":o,onClick:()=>d?y():v(),onKeyDown:S,ref:l,role:`combobox`,type:`button`,children:[n?(0,z.jsx)(`span`,{className:`personal-select-icon`,children:n}):null,(0,z.jsxs)(`span`,{className:`personal-select-value`,children:[a?(0,z.jsx)(`small`,{children:a}):null,(0,z.jsx)(`span`,{children:h?.label??o})]}),(0,z.jsx)(gm,{"aria-hidden":!0,className:d?`is-open`:void 0,size:14})]}),d?(0,z.jsx)(`div`,{"aria-label":e,className:`personal-select-listbox`,id:s,role:`listbox`,children:i.map(e=>{let t=e.group&&e.group!==w;return w=e.group,(0,z.jsxs)(`div`,{className:`personal-select-option-wrap`,children:[t?(0,z.jsx)(`div`,{className:`personal-select-group-label`,children:e.group}):null,(0,z.jsxs)(`button`,{"aria-disabled":e.disabled||void 0,"aria-selected":e.value===o,className:`personal-select-option`,disabled:e.disabled,id:`${s}-${e.value.replace(/[^a-z0-9_-]/gi,`-`)}`,onClick:()=>b(e),onFocus:()=>m(e.value),onKeyDown:t=>C(t,e),ref:t=>{t?u.current.set(e.value,t):u.current.delete(e.value)},role:`option`,tabIndex:e.value===p?0:-1,type:`button`,children:[(0,z.jsx)(`span`,{children:e.label}),e.value===o?(0,z.jsx)(hm,{"aria-hidden":!0,size:15}):null]})]},e.value)})}):null]})}function pb({agents:e,managerChannelBinding:t,managerChatOpen:n,managerRuntime:r,mobileNavigationOpen:i,onOpenGoalCapabilities:a,onOpenManagerChat:o,onRefresh:s,onOpenNavigation:c,onSelectGoalTab:l,onSelectAgent:u,onReturnManagerHome:d,refreshState:f,readOnlySourceLabel:p,selectedAgentId:m,selectedGoal:h,selectedGoalTab:g}){let{locale:_,t:v}=Ji(),y=t?t.executor_kind===`individual`?v(`header.managerExecutorKindIndividual`):t.executor_kind===`managed`?v(`header.managerExecutorKindManaged`):v(`header.managerExecutorKindRegistered`):null,b=t?.available===!1,x=t?.output_token_budget,S=x?.scope===`per_model_request`&&x.valid&&typeof x.max_tokens==`number`?v(`header.managerOutputTokenBudget`,{tokens:new Intl.NumberFormat(_).format(x.max_tokens)}):null,C=t?.available===!1?t.unavailable_reason:null,w=C===`operator_credential_unconfigured`?`header.managerExecutionUnavailableCredential`:C===`dsh_runtime_unavailable`?`header.managerExecutionUnavailableRuntime`:C===`invalid_reasoning_effort`?`header.managerExecutionUnavailableEffort`:C===`invalid_output_token_limit`?`header.managerExecutionUnavailableOutputBudget`:`header.managerExecutionUnavailable`,T=t&&t.executor_endpoint_source===`product_default`&&t.executor_endpoint_default_reason===`steward_channel_default`?`header.managerEndpointStewardDefault`:null,E=t?v(t.selection_policy===`pinned`?`header.managerSelectionPinned`:t.selection_policy===`flexible`?`header.managerSelectionFlexible`:`header.managerSelectionPreferred`):null,D=t?.allocation_reason?v(t.allocation_reason===`user_explicit`?`header.managerAllocationUser`:t.allocation_reason===`pinned_configuration`?`header.managerAllocationPinned`:t.allocation_reason===`flexible_availability_fallback`?`header.managerAllocationFallback`:t.allocation_reason===`flexible_pool_unavailable`?`header.managerAllocationUnavailable`:t.allocation_reason===`flexible_primary_available`?`header.managerAllocationPrimary`:t.allocation_reason===`product_default`?`header.managerAllocationProductDefault`:t.allocation_reason===`service_override`?`header.managerAllocationService`:`header.managerAllocationConfigured`):null,O=p?(0,z.jsxs)(`span`,{className:`personal-read-only-source`,title:v(`header.readOnlySourceDescription`,{source:p}),children:[(0,z.jsx)(Om,{size:15}),p,(0,z.jsx)(`small`,{children:v(`common.readOnly`)})]}):(0,z.jsx)(fb,{ariaLabel:v(`header.selectChatRuntime`),className:`personal-agent-select`,icon:(0,z.jsx)(fm,{size:16}),onChange:u,options:e.map(e=>({disabled:!e.available,label:`${e.label}${e.available?``:` · ${v(`header.agentUnavailable`)}`}`,value:e.agentId})),prefixLabel:v(`header.chatRuntime`),value:m});return(0,z.jsxs)(`header`,{className:`personal-channel-header`,"data-goal-selected":!!h,children:[(0,z.jsx)(`button`,{"aria-expanded":i??!1,"aria-label":v(`header.openGoalNavigation`),className:`personal-icon-button personal-mobile-menu`,onClick:c,type:`button`,children:(0,z.jsx)(Vm,{size:18})}),(0,z.jsxs)(`div`,{className:`personal-channel-title`,children:[(0,z.jsx)(`h1`,{children:h?.title??v(`header.manager`)}),h&&!h.loadState&&![`安静运行`,`推进中`].includes(h.state)?(0,z.jsx)(`p`,{children:Yi(h.state,_)}):null,!h&&t?(0,z.jsxs)(`p`,{className:`personal-manager-execution`,children:[(0,z.jsxs)(`span`,{className:b?`personal-execution-chip is-unavailable`:`personal-execution-chip`,children:[(0,z.jsx)(`span`,{className:`personal-execution-chip-endpoint`,children:t.executor_endpoint}),y?(0,z.jsx)(`span`,{className:`personal-execution-chip-kind`,children:y}):null,(0,z.jsx)(`span`,{className:`personal-execution-chip-model`,children:t.model}),S?(0,z.jsx)(`span`,{className:`personal-execution-chip-budget`,children:S}):null]}),b?(0,z.jsx)(`span`,{className:`personal-execution-note`,children:v(w,{executor:t.executor_endpoint,credential:t.credential_env_var})}):null]}):null,!h&&(r||T)?(0,z.jsxs)(`details`,{className:`personal-runtime-details`,open:r!=null&&r.status!==`ready`||void 0,children:[(0,z.jsx)(`summary`,{children:_===`zh-CN`?`运行环境`:`Execution environment`}),!h&&r?(0,z.jsx)(`p`,{children:r.status===`ready`?v(`header.managerRuntime`,{profile:r.runtime_profile,sandbox:r.sandbox}):v(`header.managerRuntimeFallback`,{profile:r.runtime_profile,sandbox:r.sandbox})}):null,E&&D&&t?(0,z.jsx)(`p`,{children:v(`header.managerAllocation`,{policy:E,reason:D})}):null,T&&t?(0,z.jsx)(`span`,{className:`personal-execution-rule-note`,children:v(T,{executor:t.executor_endpoint})}):null]}):null,h?.loadState?(0,z.jsx)(`p`,{role:`status`,children:v(h.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}):null]}),h?(0,z.jsxs)(`div`,{className:`personal-goal-navigation`,children:[(0,z.jsxs)(`nav`,{"aria-label":v(`header.goalView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":g===`overview`?`page`:void 0,onClick:()=>l(`overview`),type:`button`,children:v(`header.overview`)}),(0,z.jsx)(`button`,{"aria-current":g===`tasks`?`page`:void 0,onClick:()=>l(`tasks`),type:`button`,children:v(`header.tasks`)}),(0,z.jsx)(`button`,{"aria-current":g===`chat`?`page`:void 0,onClick:()=>l(`chat`),type:`button`,children:v(`header.chat`)}),(0,z.jsx)(`button`,{"aria-current":g===`files`?`page`:void 0,onClick:()=>l(`files`),type:`button`,children:v(`header.files`)})]}),O]}):(0,z.jsxs)(`nav`,{"aria-label":v(`header.managerView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":n?void 0:`page`,onClick:d,type:`button`,children:v(`header.managerOverview`)}),(0,z.jsx)(`button`,{"aria-current":n?`page`:void 0,onClick:o,type:`button`,children:v(`header.chat`)})]}),(0,z.jsxs)(`div`,{className:`personal-channel-actions`,children:[h&&a?(0,z.jsx)(`button`,{"aria-label":v(`header.goalSettings`),title:v(`header.goalSettingsDescription`),className:`personal-icon-button personal-goal-settings-action`,onClick:a,type:`button`,children:(0,z.jsx)(sh,{"aria-hidden":!0,size:17})}):null,h?null:O,s?(0,z.jsxs)(`span`,{className:`personal-refresh-control is-${f??`idle`}`,children:[f===`loading`?(0,z.jsx)(`small`,{children:v(`header.refreshing`)}):f===`done`?(0,z.jsx)(`small`,{children:v(`header.refreshDone`)}):f===`error`?(0,z.jsx)(`small`,{children:v(`header.refreshFailed`)}):null,(0,z.jsx)(`button`,{"aria-label":v(f===`loading`?`header.refreshing`:`header.refresh`),className:`personal-icon-button`,disabled:f===`loading`,onClick:s,type:`button`,children:(0,z.jsx)(Qm,{className:f===`loading`?`is-spinning`:void 0,size:17})})]}):null]})]})}function mb({result:e,zh:t,onInspect:n}){let r=t?{responds_to:`回应此版本`,revises:`修订此版本`,uses:`使用此版本`}:{responds_to:`Respond to this version`,revises:`Revise this version`,uses:`Use this version`};return(0,z.jsxs)(`section`,{className:`goal-team-lineage`,"aria-label":t?`版本与采用关系`:`Versions and adoption`,children:[e.dependencies?.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:t?`请求中的版本依据`:`Versions in the request`}),(0,z.jsx)(`ul`,{children:e.dependencies.map((e,i)=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`strong`,{children:r[e.relation]??(t?`未知关系`:`Unknown relationship`)}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(e.operation_id),children:e.operation_id}),(0,z.jsx)(`span`,{children:e.state===`current`?t?`源产物与接收方输入一致`:`Source and receiver input match`:t?`此版本无法核验`:`This version cannot be verified`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`指定版本`:`Referenced version`}),(0,z.jsxs)(`code`,{children:[e.ref,` · sha256:`,e.sha256]}),(0,z.jsx)(`code`,{children:e.input_ref})]})]},`${e.operation_id}:${e.input_ref}:${i}`))}),(0,z.jsx)(`p`,{children:t?`这是请求的关系;完成修订或采用仍需结果和回执。`:`These are requested relationships; revision or adoption still needs results and receipts.`})]}):null,(0,z.jsx)(`h4`,{children:t?`请求方采用`:`Requester adoption`}),e.adoptions?.length?(0,z.jsx)(`ul`,{children:e.adoptions.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`strong`,{children:e.state===`current`?t?`已记录采用 · 后续结果验收有效`:`Adoption recorded · downstream result currently accepted`:t?`采用证据已失效或无法核验`:`Adoption evidence stale or unavailable`}),(0,z.jsxs)(`span`,{children:[e.requester_agent_id,` → `,e.consumer_agent_id]}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(e.consumer_operation_id),children:t?`查看后续结果`:`Inspect downstream result`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`采用版本与结果版本`:`Source and result versions`}),e.source_artifacts.map(e=>(0,z.jsxs)(`code`,{children:[t?`来源`:`Source`,`: `,e.ref,` · sha256:`,e.sha256]},`source:${e.ref}`)),e.consumer_artifacts.map(e=>(0,z.jsxs)(`code`,{children:[t?`结果`:`Result`,`: `,e.ref,` · sha256:`,e.sha256]},`result:${e.ref}`))]})]},e.consumer_operation_id))}):(0,z.jsx)(`p`,{children:t?`尚无请求方采用记录。`:`No requester adoption is recorded.`})]})}function hb(e,t){let n=t.findIndex(t=>t.ref===e);if(n>=0)return n;let r=e.match(/\.[^./]+$/)?.[0].toLowerCase(),i=r?t.findIndex(e=>e.ref.toLowerCase().endsWith(r)):-1;return Math.max(0,i)}function gb(e,t){if(e.state!==`current`||t.operation_id!==e.operation_id||t.status!==`accepted`||t.recovery_required||t.error)return null;let n=(t.artifacts??[]).filter(t=>t.ref===e.ref&&t.sha256===e.sha256);return n.length===1?n[0]:null}function _b(e,t){let n=e.split(` -`),r=t.split(` -`),i=0,a=0;for(;ir&&n.push(e.slice(r,o));let s=a[0],c=`${t}-i${i++}`;if(s.startsWith("`"))n.push((0,z.jsx)(`code`,{className:`personal-md-code`,children:s.slice(1,-1)},c));else if(s.startsWith(`**`))n.push((0,z.jsx)(`strong`,{children:s.slice(2,-2)},c));else{let e=s.indexOf(`](`),t=s.slice(1,e),r=s.slice(e+2,-1);n.push((0,z.jsx)(`a`,{className:`personal-md-link`,href:r,rel:`noreferrer`,target:`_blank`,children:t},c))}r=o+s.length}return re.trim().replace(/\\\|/g,`|`))}function Cb(e,t){let n=e.split(` -`),r=[],i=[],a=()=>{i.length>0&&(r.push({type:`paragraph`,lines:i}),i=[])},o=0;for(;o/^:?-{3,}:?$/.test(e))){a();let e=[];for(o+=2;o{let n=`b${t}`;if(e.type===`code`)return(0,z.jsx)(`pre`,{className:`personal-md-pre`,children:(0,z.jsx)(`code`,{children:e.text})},n);if(e.type===`heading`)return(0,z.jsx)(`p`,{className:`personal-md-heading is-h${e.level}`,children:yb(e.text,n)},n);if(e.type===`table`)return(0,z.jsx)(`div`,{className:`personal-md-table-scroll`,tabIndex:0,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsx)(`tr`,{children:e.headers.map((e,t)=>(0,z.jsx)(`th`,{scope:`col`,children:yb(e,`${n}-h${t}`)},t))})}),(0,z.jsx)(`tbody`,{children:e.rows.map((e,t)=>(0,z.jsx)(`tr`,{children:e.map((e,r)=>(0,z.jsx)(`td`,{children:yb(e,`${n}-${t}-${r}`)},r))},t))})]})},n);if(e.type===`list`){let t=e.items.map((e,t)=>(0,z.jsx)(`li`,{children:yb(e,`${n}-${t}`)},`${n}-${t}`));return e.ordered?(0,z.jsx)(`ol`,{className:`personal-md-list`,children:t},n):(0,z.jsx)(`ul`,{className:`personal-md-list`,children:t},n)}return(0,z.jsx)(`p`,{children:e.lines.map((e,t)=>(0,z.jsxs)(R.Fragment,{children:[t>0?(0,z.jsx)(`br`,{}):null,yb(e,`${n}-${t}`)]},`${n}-${t}`))},n)})})}var Tb=e=>/\.(md|markdown)$/i.test(e);function Eb({artifact:e,label:t,raw:n=!1}){return!n&&Tb(e.ref)?(0,z.jsx)(`div`,{className:`goal-team-report`,"aria-label":t,tabIndex:0,children:(0,z.jsx)(wb,{text:e.text,report:!0})}):(0,z.jsx)(`pre`,{tabIndex:0,"aria-label":t,children:e.text})}function Db({artifact:e,zh:t,heading:n=e.ref}){let[r,i]=(0,R.useState)(!1);return(0,z.jsxs)(`article`,{className:`goal-team-artifact`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h4`,{children:n}),Tb(e.ref)?(0,z.jsx)(`button`,{type:`button`,"aria-pressed":r,onClick:()=>i(e=>!e),children:r?t?`阅读报告`:`Read report`:t?`查看原文`:`View source`}):null]}),(0,z.jsx)(Eb,{artifact:e,raw:r,label:`${t?`证据内容`:`Evidence content`}: ${e.ref}`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`产物版本`:`Artifact version`}),(0,z.jsx)(`code`,{children:e.sha256})]})]})}function Ob({sessionId:e,result:t,zh:n}){let[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(0),[s,c]=(0,R.useState)(!1),[l,u]=(0,R.useState)(``),[d,f]=(0,R.useState)(!1),p=(0,R.useRef)(0);(0,R.useEffect)(()=>(p.current++,i(null),u(``),c(!1),o(0),()=>{p.current++}),[t,e]);let m=t.status===`accepted`&&!t.error&&!t.recovery_required?t.artifacts??[]:[],h=t.dependencies??[];async function g(t){let r=++p.current;i(null),u(``),c(!0),o(hb(t.ref,m)),f(!1);try{let a=await _g(e,t.operation_id);if(r!==p.current)return;gb(t,a)?i({link:t,source:a}):u(n?`指定来源版本无法核验,未展示对照。`:`The referenced source version cannot be verified. Comparison withheld.`)}catch{r===p.current&&u(n?`来源读取失败,已清除上次对照。可重试或查看执行详情。`:`Source read failed; previous comparison cleared. Retry or inspect the execution.`)}finally{r===p.current&&c(!1)}}if(!h.length||!m.length)return null;let _=r?gb(r.link,r.source):null,v=m[a],y=_&&v?_b(_.text,v.text):null,b=n?{revises:`修订依据`,responds_to:`回应依据`,uses:`使用依据`}:{revises:`Revision source`,responds_to:`Response source`,uses:`Input source`};return(0,z.jsxs)(`section`,{className:`goal-team-comparison`,"aria-label":n?`依据与结果对照`:`Source and result comparison`,"aria-busy":s,children:[(0,z.jsxs)(`div`,{className:`goal-team-comparison-heading`,children:[(0,z.jsx)(`h4`,{children:n?`看清这次变化`:`See what changed`}),(0,z.jsx)(`span`,{children:n?`按需核验`:`On-demand verification`})]}),(0,z.jsx)(`div`,{className:`goal-team-comparison-sources`,children:h.map((e,t)=>(0,z.jsxs)(`button`,{type:`button`,disabled:s||e.state!==`current`,"aria-pressed":r?.link===e,onClick:()=>void g(e),children:[(0,z.jsx)(`span`,{children:b[e.relation]}),(0,z.jsx)(`strong`,{children:e.ref}),h.filter(t=>t.ref===e.ref).length>1?(0,z.jsx)(`span`,{children:e.operation_id}):null,e.state===`current`?null:(0,z.jsx)(`span`,{children:n?`无法核验`:`Unavailable`})]},`${e.operation_id}:${e.input_ref}:${t}`))}),s?(0,z.jsx)(`p`,{role:`status`,children:n?`正在读取指定来源版本…`:`Reading the referenced source version…`}):null,l?(0,z.jsx)(`p`,{role:`alert`,children:l}):null,_&&v&&y?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,"aria-pressed":d,onClick:()=>f(e=>!e),children:d?n?`阅读对照`:`Read comparison`:n?`查看原文差异`:`View source changes`}),m.length>1?(0,z.jsxs)(`label`,{children:[n?`对照产物`:`Compare output`,(0,z.jsx)(`select`,{value:a,onChange:e=>o(Number(e.target.value)),children:m.map((e,t)=>(0,z.jsx)(`option`,{value:t,children:e.ref},`${e.ref}:${t}`))})]}):null,(0,z.jsx)(`div`,{className:`goal-team-comparison-grid`,children:[{kind:`source`,title:n?`指定来源`:`Referenced source`,artifact:_,lines:y.left,end:y.leftEnd},{kind:`result`,title:n?`本次产物`:`This output`,artifact:v,lines:y.right,end:y.rightEnd}].map(e=>(0,z.jsxs)(`article`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{children:e.title}),(0,z.jsx)(`strong`,{children:e.artifact.ref})]}),d?(0,z.jsx)(`pre`,{tabIndex:0,"aria-label":`${e.title}: ${e.artifact.ref}`,children:e.lines.map((t,n)=>(0,z.jsxs)(`span`,{"data-changed":n>=y.start&&n(w(),()=>{C.current++}),[e,t]);async function w(){let n=++C.current;s(null),l(``),p(``),d(!0);try{let r=await _g(e,t);n===C.current&&(s(r),l(new Date().toLocaleTimeString()))}catch(e){n===C.current&&p(e instanceof Error?e.message:String(e))}finally{n===C.current&&d(!1)}}async function T(){if((!o||!m.trim())&&!S.current)return;let r=S.current??{id:crypto.randomUUID(),text:[`${n?`针对团队执行`:`Regarding team execution`}: ${t}`,...(o?.artifacts??[]).map(e=>`${e.ref} · sha256:${e.sha256}`),m.trim()].join(` -`)};S.current=r,_(!0),y(``);try{let t=await Sg(e,r.text,`inbox`,r.id);x({id:r.id,status:t.status})}catch(e){y(e instanceof Error?e.message:String(e))}finally{_(!1)}}let E=b?i.find(e=>e.client_ingress_id===b.id)?.status??b.status:``,D=E===`pending`?n?`已进入协调员收件箱,等待读取`:`In the coordinator inbox; awaiting read`:E===`delivered`?n?`已交给协调员;尚无应用回执`:`Delivered to coordinator; application not confirmed`:n?`投递状态待核实`:`Delivery requires reconciliation`;return(0,z.jsxs)(`section`,{className:`goal-team-evidence`,"aria-label":n?`执行证据`:`Execution evidence`,"aria-busy":u,children:[(0,z.jsxs)(`div`,{className:`goal-team-work-actions`,children:[(0,z.jsx)(`h3`,{children:n?`执行证据`:`Execution evidence`}),(0,z.jsx)(`button`,{type:`button`,disabled:u,onClick:()=>void w(),children:n?`重新读取证据`:`Recheck evidence`})]}),u?(0,z.jsx)(`p`,{role:`status`,children:n?`正在核验绑定、验收与文件…`:`Checking bindings, acceptance and files…`}):null,f?(0,z.jsxs)(`p`,{role:`alert`,children:[n?`无法核验,已清除上次证据。`:`Cannot verify; previous evidence cleared.`,` `,f]}):null,o?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`p`,{role:`status`,children:[(0,z.jsxs)(`strong`,{children:[o.agent_id,` · `,vg(o,n)]}),` · `,c]}),(0,z.jsx)(`p`,{children:n?`按需读取的当前观察,不是持续在线状态;验收不代表协调员已采用。`:`An on-demand observation, not continuous liveness; acceptance does not establish coordinator adoption.`}),(0,z.jsx)(Ob,{sessionId:e,result:o,zh:n}),(0,z.jsx)(mb,{result:o,zh:n,onInspect:a}),o.error?(0,z.jsx)(`p`,{role:`alert`,children:o.error}):null,o.status===`accepted`&&!o.error&&!o.recovery_required&&o.artifacts?.length?o.artifacts.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(Db,{artifact:e,zh:n}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`版本与来源标识`:`Version and source identifiers`}),(0,z.jsx)(`code`,{children:t}),(0,z.jsx)(`code`,{children:o.request_id}),(0,z.jsx)(`code`,{children:o.todo_id})]})]},`${e.ref}:${e.sha256}`)):(0,z.jsx)(`p`,{children:n?`本次读取没有可展示的已验收产物。`:`No accepted artifact is available in this readback.`}),(0,z.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),T()},children:[(0,z.jsxs)(`label`,{children:[n?`向协调员反馈此执行`:`Send feedback about this execution`,(0,z.jsx)(`textarea`,{value:m,maxLength:6e3,rows:3,disabled:!!S.current,onChange:e=>h(e.target.value)})]}),(0,z.jsx)(`p`,{children:n?`附上执行标识及当前产物版本,交给原协调员收件箱;不会直接改写任务或中断成员。`:`Includes the operation and observed artifact versions in the original coordinator inbox; does not change tasks or interrupt members.`}),r?null:(0,z.jsx)(`p`,{children:n?`协调员未在执行或当前观察不可用;恢复执行后可发送。`:`Coordinator inactive or observation unavailable; resume execution to send.`}),(0,z.jsx)(`button`,{type:`submit`,disabled:!r||g||!!b||!m.trim(),children:g?n?`正在投递…`:`Sending…`:v?n?`重试同一条反馈`:`Retry this feedback`:n?`发送反馈`:`Send feedback`})]})]}):null,v?(0,z.jsxs)(`p`,{role:`alert`,children:[n?`未确认投递,请重试同一条反馈,避免重复发送。`:`Delivery not confirmed; retry the same feedback to avoid duplicates.`,` `,v]}):null,b?(0,z.jsx)(`p`,{role:`status`,children:D}):null]})}var Ab={authority_unavailable:{en:`Canonical authority unavailable`,zh:`缺少规范权限状态`},turn_blocked:{en:`Task admission blocked`,zh:`当前任务未获准执行`},acceptance_unavailable:{en:`Acceptance binding unavailable`,zh:`缺少有效验收绑定`},runtime_unavailable:{en:`Runtime unavailable`,zh:`运行时不可用`},runtime_unverified:{en:`Runtime availability unverified`,zh:`运行时可用性尚未验证`},launchable:{en:`Local launch prerequisites met`,zh:`本机启动条件已满足`}};function jb({check:e,zh:t}){let n=e.executor?[e.executor.host,e.executor.reason].filter(Boolean).join(` · `):e.authority_reason,r=e.state===`authority_unavailable`?t?`未检查或启动执行器`:`No executor was inspected or launched`:t?`不代表正在执行`:`Does not mean executing`,i=e.authority_next_action===`preview_reviewed_goal_authority_promotion`?t?`下一步:预览整 Goal 协调 Authority 晋级`:`Next: preview whole-Goal coordination-authority promotion`:e.authority_next_action===`repair_canonical_authority`?t?`下一步:修复规范 Authority 读回`:`Next: repair canonical authority readback`:null;return(0,z.jsxs)(`p`,{role:`status`,children:[t?Ab[e.state].zh:Ab[e.state].en,n?` · ${n}`:``,i?` · ${i}`:``,` · ${r}`]})}function Mb({sessionId:e,members:t,zh:n,canMessage:r,ingress:i}){let[a,o]=(0,R.useState)(null),s=(0,R.useRef)(null),c=(0,R.useRef)(null),l=(0,R.useRef)(null),[u,d]=(0,R.useState)(null),[f,p]=(0,R.useState)({}),[m,h]=(0,R.useState)(!1),[g,_]=(0,R.useState)(``),v=(0,R.useRef)(0);(0,R.useEffect)(()=>{(a?s.current:l.current)?.focus()},[a]),(0,R.useEffect)(()=>(v.current++,d(null),p({}),_(``),h(!1),y(),()=>{v.current++}),[e]);async function y(t){let n=++v.current;h(!0),_(``),d(null),o(null);try{let r=await yg(e,t);n===v.current&&d(r)}catch(e){n===v.current&&_(e instanceof Error?e.message:String(e))}finally{n===v.current&&h(!1)}}async function b(t){let n=++v.current;h(!0),_(``),p(e=>{let n={...e};return delete n[t],n});try{let r=await bg(e,t);n===v.current&&p(e=>({...e,[t]:r}))}catch(e){n===v.current&&_(e instanceof Error?e.message:String(e))}finally{n===v.current&&h(!1)}}return a?(0,z.jsxs)(`div`,{className:`goal-team-work`,children:[(0,z.jsx)(`button`,{ref:s,type:`button`,onClick:()=>o(null),children:n?`返回执行列表`:`Back to executions`}),(0,z.jsx)(kb,{sessionId:e,operationId:a,zh:n,canMessage:r,ingress:i,onInspect:o},`${e}:${a}`)]}):(0,z.jsx)(`div`,{className:`goal-team-work`,children:(0,z.jsxs)(`section`,{"aria-label":n?`团队执行详情`:`Team execution details`,children:[(0,z.jsx)(`p`,{children:n?`检查不会启动成员。暂停协调员后,已派发的工作仍会继续。`:`Inspection starts no members. Dispatched work continues when the coordinator is paused.`}),(0,z.jsx)(`h3`,{children:n?`已绑定成员`:`Bound members`}),(0,z.jsx)(`ul`,{className:`goal-team-bindings`,children:t.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.agent_id}),(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>void b(e.id),children:n?`检查启动条件`:`Check prerequisites`})]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`任务与执行配置`:`Task and execution details`}),(0,z.jsx)(`code`,{children:e.todo_id}),f[e.id]?.executor?.profile?(0,z.jsx)(`code`,{children:f[e.id]?.executor?.profile}):null]}),f[e.id]?(0,z.jsx)(jb,{check:f[e.id],zh:n}):null]},e.id))}),(0,z.jsxs)(`div`,{className:`goal-team-work-actions`,children:[(0,z.jsx)(`strong`,{children:n?`此协调身份的持久工作`:`Durable work for this coordinator`}),(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>{p({}),y()},children:n?`重新核验`:`Refresh`}),u?.has_more&&u.next_cursor?(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>void y(u.next_cursor),children:n?`下一页`:`Next page`}):null]}),m?(0,z.jsx)(`p`,{role:`status`,children:n?`正在读取当前事实…`:`Reading current facts…`}):null,g?(0,z.jsx)(`p`,{role:`alert`,children:g}):null,u?(0,z.jsxs)(z.Fragment,{children:[u.page_readback_complete?null:(0,z.jsx)(`p`,{role:`status`,children:n?`本页有无法核验的工作,请检查原请求;不要直接重新派工。`:`Some work cannot be verified. Reconcile the original request before redispatching.`}),u.items.length?null:(0,z.jsx)(`p`,{children:n?`此页没有委派记录;不代表整个团队没有工作或 Goal 已完成。`:`No records on this page; this does not establish an idle team or a completed Goal.`}),(0,z.jsx)(`ul`,{className:`goal-team-operations`,children:u.items.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`strong`,{children:[e.agent_id??(n?`记录不可读`:`Unreadable record`),` · `,vg(e,n)]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`执行标识`:`Execution identifier`}),(0,z.jsx)(`code`,{children:e.operation_id??e.record_id})]}),e.operation_id?(0,z.jsx)(`button`,{ref:e.operation_id===c.current?l:void 0,type:`button`,onClick:()=>{c.current=e.operation_id,o(e.operation_id)},children:n?`查看证据与反馈`:`Evidence and feedback`}):null]},e.record_id))}),(0,z.jsxs)(`p`,{children:[n?`仅限当前协调身份;分页不是团队快照。`:`Scoped to this coordinator; paging is not a team snapshot.`,u.has_more?n?` 还有下一页。`:` More pages remain.`:``]})]}):null]})})}function Nb({sessionId:e,onPrepare:t,onExecute:n,onChange:r}){let{locale:i}=Ji(),a=i===`zh-CN`,[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(null),u=c===`settings`,d=e=>l(e?`settings`:null),f=(0,R.useRef)(null);(0,R.useEffect)(()=>{c&&!f.current?.open?f.current?.showModal():!c&&f.current?.open&&f.current.close()},[c]);let[p,m]=(0,R.useState)(!1),[h,g]=(0,R.useState)(``),[_,v]=(0,R.useState)(``),[y,b]=(0,R.useState)({agent_id:``,token_budget:0});(0,R.useEffect)(()=>{let t=!0,n=!1;if(s(null),r(null),g(``),v(``),d(!1),!e||e===`new-session-pending`)return;async function i(){if(!n){n=!0;try{let n=await gg(e);t&&(s(n),r(n),v(``))}catch(e){t&&v(e instanceof Error?e.message:String(e))}finally{n=!1}}}i();let a=window.setInterval(()=>{document.hidden||i()},2500);return()=>{t=!1,window.clearInterval(a)}},[e]);let x=!!(o?.enabled&&o.active_turn_id),S=o?.native.status??`absent`,C=![`absent`,`complete`].includes(S),w=!!(o?.settings.agent_id&&o.settings.token_budget&&o.settings.execution_config),T=e=>{b({agent_id:e.settings.agent_id??``,token_budget:e.settings.token_budget??0}),d(!0)},E=o?.enabled?o.recovery_required?a?`LoopX · 需要恢复连接`:`LoopX · Reconnect required`:S===`blocked`?a?`LoopX · 需要处理阻塞`:`LoopX · Blocked`:x?a?`LoopX · 正在推进`:`LoopX · Working`:S===`complete`?a?`LoopX · 本轮已结束`:`LoopX · Run finished`:[`budgetLimited`,`usageLimited`].includes(S)?a?`LoopX · 已到额度限制`:`LoopX · Usage limit`:a?`LoopX · 已暂停`:`LoopX · Paused`:a?`普通对话`:`Conversation`,D=()=>{o&&!u?T(o):d(!1)};async function O(){m(!0),g(``);try{let e=await gg(await t());s(e),r(e),T(e)}catch(e){g(e instanceof Error?e.message:String(e))}finally{m(!1)}}async function k(t){if(e){m(!0),g(``);try{let n=await xg(e,t,t===`configure`?y:void 0);s(n),r(n),(t===`configure`||t===`exit`)&&d(!1)}catch(e){g(e instanceof Error?e.message:String(e))}finally{m(!1)}}}let A=o?.deliveries.some(e=>[`rejected`,`unavailable`].includes(e.status)),ee=o?.ingress.filter(e=>e.status!==`delivered`)??[];return(0,z.jsxs)(`section`,{className:`goal-loopx-mode`,"aria-label":a?`LoopX 运行模式`:`LoopX execution mode`,children:[(0,z.jsxs)(`div`,{className:`goal-loopx-mode-bar`,children:[(0,z.jsxs)(`span`,{className:`goal-loopx-mode-status`,"data-active":x,role:`status`,children:[(0,z.jsx)(`i`,{"aria-hidden":`true`}),E]}),(0,z.jsxs)(`div`,{className:`goal-loopx-mode-actions`,children:[w&&e?(0,z.jsxs)(`button`,{type:`button`,className:`goal-loopx-team-trigger`,onClick:()=>l(`team`),"aria-haspopup":`dialog`,children:[(0,z.jsx)(hh,{size:16}),a?`团队执行情况`:`Team execution`,A?(0,z.jsx)(`span`,{className:`goal-loopx-alert-dot`,"aria-label":a?`最近回读需要核验`:`Last observations need review`}):null]}):null,(0,z.jsx)(`button`,{type:`button`,disabled:p||o?.conversation_busy||!o,onClick:D,"aria-label":a?`运行设置`:`Settings`,title:a?`运行设置与用量`:`Settings and usage`,"aria-haspopup":`dialog`,children:(0,z.jsx)(ah,{size:16})}),(0,z.jsxs)(`button`,{type:`button`,className:`goal-loopx-primary`,disabled:p||!!(o?.conversation_busy&&!x),title:x?a?`暂停协调员;已派发的成员继续执行`:`Pause coordinator; dispatched members keep working`:void 0,onClick:async()=>{if(!o){await O();return}x?k(`pause`):!w||Number(o.settings.token_budget??0)<=Number(o.native.tokensUsed??0)?D():n(C?`resume`:`start`)},children:[x?(0,z.jsx)(Jm,{size:14}):(0,z.jsx)(Ym,{size:14}),x?a?`暂停协调员`:`Pause coordinator`:o?.enabled?S===`complete`?a?`开启新一轮`:`Start new run`:a?`恢复推进`:`Continue`:a?`开启 LoopX 模式`:`Enable LoopX`]})]})]}),ee.length?(0,z.jsxs)(`p`,{role:`status`,children:[a?`待处理消息:`:`Pending messages: `,ee.map(e=>`${e.mode===`loopx_queue`?`queue`:`inbox`} · ${e.status}`).join(` / `)]}):null,A?(0,z.jsx)(`button`,{className:`goal-loopx-review-notice`,type:`button`,onClick:()=>l(`team`),children:a?`最近成员回读有未通过或无法核验的结果 · 查看团队`:`Last member observations include rejected or unverified results · View team`}):null,(h||_)&&!c?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:h||_}):null,(0,z.jsx)(`dialog`,{className:`goal-loopx-dialog`,ref:f,"aria-labelledby":`goal-loopx-dialog-title`,onClose:()=>l(null),onClick:e=>{e.target===e.currentTarget&&l(null)},children:c?(0,z.jsxs)(`div`,{className:`goal-loopx-dialog-content`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h2`,{id:`goal-loopx-dialog-title`,children:c===`team`?a?`团队执行情况`:`Team execution`:a?`运行设置`:`Execution settings`}),(0,z.jsx)(`button`,{type:`button`,autoFocus:!0,"aria-label":a?`关闭`:`Close`,onClick:()=>l(null),children:(0,z.jsx)(gh,{size:18})})]}),h||_?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:h||_}):null,c===`team`&&e&&!_?(0,z.jsx)(Mb,{sessionId:e,members:o?.members??[],zh:a,canMessage:x&&!o?.paused&&!_,ingress:o?.ingress??[]},`${e}:${o?.settings.agent_id}:${o?.settings.execution_config}`):null,c===`team`?(0,z.jsxs)(`div`,{className:`goal-team-control`,children:[(0,z.jsx)(`button`,{type:`button`,disabled:p||!x||!!_,onClick:()=>void k(`pause`),children:a?`暂停协调员`:`Pause coordinator`}),(0,z.jsxs)(`p`,{role:`status`,children:[o?.paused?x?a?`已暂停后续调度,等待当前协调轮次停止回读。`:`Further dispatch paused; awaiting coordinator turn stop readback.`:a?`协调员已暂停。`:`Coordinator paused.`:null,a?`此操作不会停止已派发成员;成员状态以上次执行回读为准。当前入口不支持停止整个团队。`:`This does not stop dispatched members; their states are last-read observations. Whole-team stop is unavailable here.`]})]}):null,u?(0,z.jsxs)(`div`,{className:`goal-loopx-mode-settings`,children:[(0,z.jsxs)(`label`,{children:[a?`已注册的协调身份`:`Registered coordinator`,(0,z.jsxs)(`select`,{value:y.agent_id,onChange:e=>b({...y,agent_id:e.target.value}),children:[(0,z.jsx)(`option`,{value:``,children:a?`选择已授权身份`:`Select authorized identity`}),o?.registered_agents.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),(0,z.jsxs)(`label`,{children:[a?`协调员总 token 额度`:`Coordinator total token allowance`,(0,z.jsx)(`input`,{type:`number`,min:1,max:2147483647,value:y.token_budget||``,onChange:e=>b({...y,token_budget:Number(e.target.value)})})]}),(0,z.jsxs)(`label`,{children:[a?`成员执行绑定文件(Goal 配置)`:`Member execution bindings (Goal configuration)`,(0,z.jsx)(`input`,{readOnly:!0,value:o?.settings.execution_config??(a?`未配置`:`Not configured`)})]}),(0,z.jsx)(`p`,{children:a?`绑定文件由 Goal 子代理设置统一管理;额度包含协调员历史用量,成员授权不会因开启模式而扩大。`:`Manage the binding file in Goal sub-agent settings. The allowance includes coordinator history; enabling this mode does not expand member grants.`}),(0,z.jsx)(`button`,{type:`button`,disabled:p||!y.agent_id||y.token_budget<1||!o?.settings.execution_config,onClick:()=>void k(`configure`),children:a?`保存设置`:`Save settings`})]}):null,c===`settings`&&o?.enabled&&o.native.tokensUsed!==void 0?(0,z.jsxs)(`p`,{className:`goal-loopx-mode-usage`,children:[a?`协调员累计用量`:`Coordinator usage`,` `,o.native.tokensUsed.toLocaleString(),` / `,o.native.tokenBudget?.toLocaleString()??`—`,` tokens`]}):null,c===`settings`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:a?`开启后,当前协调员持续推进本 Goal。暂停仅影响协调员,已派发成员继续执行;本轮结束不等于 Goal 完成。`:`The coordinator continues this Goal. Pausing affects only the coordinator; dispatched members keep working. A finished run does not complete the Goal.`}),o?.enabled&&!x?(0,z.jsx)(`button`,{type:`button`,disabled:p,onClick:()=>void k(`exit`),children:a?`退出模式`:`Exit mode`}):null]}):null]}):null})]})}var Pb=e=>e.items.filter(e=>e.operation_id&&e.status===`accepted`&&!e.recovery_required&&e.artifacts?.length);function Fb({sessionId:e,zh:t,refreshKey:n}){let[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(null),[s,c]=(0,R.useState)(!1),[l,u]=(0,R.useState)(``),d=(0,R.useRef)(0),f=(0,R.useRef)(null),p=(0,R.useRef)(void 0),m=(0,R.useRef)(!1),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{f.current=null,p.current=void 0},[e]),(0,R.useEffect)(()=>(v(p.current),()=>{d.current++}),[e,n]),(0,R.useEffect)(()=>{a&&m.current&&(h.current?.focus(),m.current=!1)},[a]);let g=t?`产物或验收已变化,未展示旧报告。请重新选择可核验的产物。`:`Artifact or acceptance changed. Previous report cleared; select a verified artifact again.`;async function _(t,n,r){let i=await _g(e,t);if(r!==d.current)return;let a=i.artifacts??[],s=n?.ref?a.filter(e=>e.ref===n.ref):[],c=n?.ref?s.length===1&&s[0].sha256===n.sha256?s[0]:void 0:a.find(e=>Tb(e.ref))??a[0];i.operation_id!==t||i.status!==`accepted`||i.error||i.recovery_required||!c?u(g):(f.current={operationId:t,ref:c.ref,sha256:c.sha256},o({result:i,artifact:c}))}async function v(n,r=!1){let a=++d.current;r&&(f.current=null),p.current=n,m.current=!1,c(!0),u(``),i(null),o(null);try{let t=await yg(e,n);if(a!==d.current)return;i(t);let r=f.current;if(!r){let e=Pb(t)[0],n=e?.artifacts?.find(e=>Tb(e.ref))??e?.artifacts?.[0];e?.operation_id&&n&&(r={operationId:e.operation_id,...n})}r&&(f.current=r,await _(r.operationId,r,a))}catch(e){a===d.current&&u(`${t?`无法核验,已清除上次报告。`:`Cannot verify; previous report cleared.`} ${String(e)}`)}finally{a===d.current&&c(!1)}}async function y(e,n){let r=++d.current;m.current=!0,c(!0),u(``),o(null);let i={operationId:e,...n};f.current=i;try{await _(e,i,r)}catch(e){r===d.current&&u(`${t?`无法核验,已清除上次报告。`:`Cannot verify; previous report cleared.`} ${String(e)}`)}finally{r===d.current&&c(!1)}}let b=r?Pb(r):[];return(0,z.jsxs)(`section`,{className:`goal-team-results`,"aria-label":t?`团队成果`:`Team results`,"aria-busy":s,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:t?`团队成果`:`Team results`}),(0,z.jsxs)(`button`,{type:`button`,disabled:s,onClick:()=>void v(p.current),children:[(0,z.jsx)(Qm,{size:14,"aria-hidden":`true`}),t?`刷新成果`:`Refresh results`]})]}),s?(0,z.jsx)(`p`,{role:`status`,children:t?`正在核验产物…`:`Verifying artifacts…`}):null,l?(0,z.jsx)(`p`,{role:`alert`,children:l}):null,r&&!r.page_readback_complete?(0,z.jsx)(`p`,{role:`status`,children:t?`部分工作无法核验,请在团队执行中检查。`:`Some work cannot be verified; inspect Team execution.`}):null,(0,z.jsxs)(`div`,{className:`goal-team-results-layout`,children:[r?(0,z.jsxs)(`nav`,{className:`goal-team-result-list`,"aria-label":t?`选择团队产物`:`Choose a team artifact`,children:[b.map(e=>{let t=e.artifacts.find(e=>Tb(e.ref))??e.artifacts[0];return(0,z.jsxs)(`button`,{type:`button`,disabled:s,"aria-label":`${e.agent_id} · ${t.ref}`,"aria-pressed":a?.result.operation_id===e.operation_id,onClick:()=>void y(e.operation_id,t),children:[(0,z.jsx)(jm,{size:16,"aria-hidden":`true`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.agent_id}),(0,z.jsx)(`small`,{children:t.ref})]}),(0,z.jsx)(hm,{className:`goal-team-result-check`,size:14,"aria-hidden":`true`})]},e.record_id)}),b.length?null:(0,z.jsx)(`p`,{children:t?`本页没有可读取的已验收产物。`:`No accepted artifact is available on this page.`}),r.has_more&&r.next_cursor?(0,z.jsx)(`button`,{type:`button`,disabled:s,onClick:()=>void v(r.next_cursor,!0),children:t?`下一页成果`:`Next results page`}):null]}):null,a?(0,z.jsxs)(`div`,{ref:h,tabIndex:-1,className:`goal-team-result-reader`,"aria-label":t?`当前报告`:`Current report`,children:[(0,z.jsx)(Db,{artifact:a.artifact,zh:t,heading:t?`已通过当前验收`:`Currently accepted`},`${a.result.operation_id}:${a.artifact.sha256}`),a.result.artifacts&&a.result.artifacts.length>1?(0,z.jsxs)(`label`,{children:[t?`其他产物`:`Other artifacts`,(0,z.jsx)(`select`,{value:a.artifact.ref,onChange:e=>{let t=a.result.artifacts.find(t=>t.ref===e.target.value);t&&(f.current={operationId:a.result.operation_id,ref:t.ref,sha256:t.sha256},o({...a,artifact:t}))},children:a.result.artifacts.map(e=>(0,z.jsx)(`option`,{value:e.ref,children:e.ref},e.ref))})]}):null,(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`验收与采用关系`:`Acceptance and adoption`}),(0,z.jsx)(mb,{result:a.result,zh:t,onInspect:e=>void y(e)})]})]}):null]})]})}function Ib({attention:e,onSelect:t}){let{t:n}=Ji(),r=Zi(e.updatedAt,n);return(0,z.jsxs)(`button`,{className:`personal-timeline-row personal-attention-row`,"data-testid":`personal-browse-row`,onClick:t,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-attention`,children:(0,z.jsx)(ym,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[e.goalTitle??e.goalId,` · `,n(`home.lane.needsYou`),r?` · ${n(`tasks.waitingAge`,{age:r})}`:``]}),(0,z.jsx)(`strong`,{children:e.text})]}),(0,z.jsx)(`span`,{className:`personal-priority-dot is-${e.priority??(e.blocking?`high`:`medium`)}`}),(0,z.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?n(`tasks.blocked`):n(`tasks.pending`)}),(0,z.jsx)(_m,{size:17})]})}function Lb({onSelect:e,output:t}){let{t:n}=Ji(),r=t.kind===`report`?jm:Am;return(0,z.jsxs)(`button`,{className:`personal-timeline-row personal-output-row`,"data-output-kind":t.kind,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-output`,children:(0,z.jsx)(r,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[t.goalTitle??t.goalId,` · `,t.agentLabel??`LoopX`]}),(0,z.jsx)(`strong`,{children:t.title}),t.summary?(0,z.jsx)(`span`,{children:t.summary}):null,t.report?(0,z.jsxs)(`small`,{children:[n(`files.reportDelta`,{added:t.report.addedCount,changed:t.report.changedCount}),` · `,n(`files.verifiedReport`)]}):null]}),t.createdAt?(0,z.jsx)(`time`,{children:t.createdAt}):null,(0,z.jsx)(_m,{size:17})]})}var Rb={completed:`runs.completed`,failed:`runs.failed`,interrupted:`runs.interrupted`,queued:`runs.queued`,running:`runs.running`,waiting:`runs.waiting`};function zb({onSelect:e,run:t,showGoal:n=!0}){let{t:r}=Ji();return(0,z.jsxs)(`button`,{"aria-label":`${r(`tasks.viewExecution`)}:${t.title}`,className:`personal-timeline-row personal-run-row`,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-run`,children:(0,z.jsx)(fm,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[n?`${t.goalTitle} · `:``,t.agentLabel]}),(0,z.jsx)(`strong`,{children:t.title}),t.latestActivity===t.title?null:(0,z.jsx)(`small`,{children:t.latestActivity})]}),(0,z.jsxs)(`span`,{className:`personal-row-status is-${t.status}`,children:[t.status===`running`?(0,z.jsx)(zm,{className:`personal-spin`,size:14}):null,r(Rb[t.status])]}),(0,z.jsx)(_m,{size:17})]})}function Bb({onSelect:e,schedule:t}){let{t:n}=Ji(),r=t.scheduleKind===`heartbeat`;return(0,z.jsxs)(`button`,{"aria-label":`${r?`Heartbeat`:n(`tasks.scheduled`)}:${t.label};${t.status??`active`}`,className:`personal-schedule-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-schedule-icon`,children:r?(0,z.jsx)(Zm,{size:17}):(0,z.jsx)(mm,{size:17})}),(0,z.jsxs)(`span`,{className:`personal-schedule-copy`,children:[(0,z.jsx)(`small`,{children:n(r?`schedule.heartbeat`:`schedule.monitor`)}),(0,z.jsx)(`strong`,{children:t.label}),(0,z.jsx)(`p`,{children:t.schedule??n(`schedule.summary`)})]}),(0,z.jsx)(`span`,{className:`personal-schedule-status is-${t.status??`active`}`,children:t.status===`paused`?n(`schedule.paused`):n(`schedule.active`)}),(0,z.jsx)(_m,{size:16})]})}function Vb({delivery:e}){let{t}=Ji();if(!e)return null;let n=e.status===`delivered`?e.verification===`reconciled_after_restart`?t(`returnDelivery.reconciled`):t(`returnDelivery.delivered`):e.status===`verification_required`?t(`returnDelivery.verifying`):e.status===`explicit_unverified`?t(`returnDelivery.unverified`):t(`returnDelivery.queued`),r=e.status===`delivered`?`delivered`:e.status===`verification_required`?`verification_required`:e.status===`explicit_unverified`?`explicit_unverified`:`queued`;return(0,z.jsx)(`small`,{className:`personal-return-delivery is-${r}`,role:`status`,children:n})}function Hb({items:e,onSelect:t,selectedGoal:n}){let{locale:r,t:i}=Ji();if(e.length===0)return(0,z.jsxs)(`div`,{className:`personal-timeline-empty`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(ch,{size:20})}),(0,z.jsx)(`strong`,{children:i(n?`timeline.emptyGoal`:`timeline.emptyWorkspace`)}),(0,z.jsx)(`p`,{children:i(n?`timeline.emptyGoalDescription`:`timeline.emptyWorkspaceDescription`)})]});let a=[...e].reverse().find(e=>e.kind===`message`&&e.message.role!==`user`||e.kind===`proposal`&&[`applied`,`stale`,`error`,`gated`].includes(e.proposal.status)||e.kind===`run`&&e.run.status===`completed`),o=a?.kind===`message`?`${a.message.agentLabel??i(`header.manager`)}:${a.message.pending?i(`timeline.pending`):a.message.text}`:a?.kind===`proposal`?`${a.proposal.title}:${a.proposal.status}`:a?.kind===`run`?i(`timeline.runCompleted`,{run:a.run.title}):``,s=e.filter(e=>e.kind===`proposal`&&e.proposal.status===`gated`),c=e.filter(e=>e.kind===`run`&&[`queued`,`running`,`completed`].includes(e.run.status)),l=new Set(c.map(e=>e.id)),u=e.filter(e=>e.kind!==`proposal`&&!l.has(e.id)),d=c.filter(e=>e.run.status===`running`&&!!e.run.sessionId&&!!e.run.canInterrupt).length,f=c.filter(e=>e.run.status===`queued`).length,p=c.filter(e=>e.run.status===`completed`).length,m=c.length-d-f-p,h=r===`zh-CN`?[d&&`${d} 个执行中`,f&&`${f} 个排队中`,p&&`${p} 次执行已结束`,m&&`${m} 项进展更新`].filter(Boolean).join(` · `):[d&&`${d} running`,f&&`${f} queued`,p&&`${p} runs finished`,m&&`${m} progress updates`].filter(Boolean).join(` · `),g=e.filter(e=>e.kind===`proposal`&&e.proposal.status!==`gated`);function _(e){return e.kind===`attention`?(0,z.jsx)(Ib,{attention:e.attention,onSelect:()=>t({item:e.attention,kind:`attention`})},e.id):e.kind===`run`?(0,z.jsx)(zb,{showGoal:!n,onSelect:()=>t({item:e.run,kind:`run`}),run:e.run},e.id):e.kind===`output`?(0,z.jsx)(Lb,{onSelect:()=>t({item:e.output,kind:`output`}),output:e.output},e.id):e.kind===`schedule`?(0,z.jsx)(Bb,{onSelect:()=>t({item:e.schedule,kind:`schedule`}),schedule:e.schedule},e.id):e.kind===`proposal`?(0,z.jsxs)(`button`,{className:`personal-proposal-row is-${e.proposal.status}`,onClick:()=>t({item:e.proposal,kind:`proposal`}),type:`button`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(ch,{size:17})}),(0,z.jsxs)(`span`,{children:[(0,z.jsxs)(`small`,{children:[e.proposal.actionKind,` · `,e.proposal.status]}),(0,z.jsx)(`strong`,{children:e.proposal.title}),e.proposal.impact?(0,z.jsx)(`p`,{children:e.proposal.impact}):null]}),(0,z.jsx)(`b`,{children:e.proposal.status===`gated`&&e.proposal.actionKind!==`operation.execute`?i(`timeline.review`):e.proposal.primaryLabel??i(`timeline.reviewAndConfirm`)})]},e.id):(0,z.jsxs)(`article`,{className:`personal-message is-${e.message.role}`,children:[e.message.role===`user`?null:(0,z.jsx)(`span`,{className:`personal-message-avatar`,children:(0,z.jsx)(fm,{size:17})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.message.role===`user`?i(`common.you`):e.message.agentLabel??i(`header.manager`)}),e.message.time?(0,z.jsx)(`time`,{children:e.message.time}):null]}),e.message.attachments?.length?(0,z.jsx)(`div`,{className:`personal-message-images`,children:e.message.attachments.map(e=>(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl},e.id))}):null,e.message.role===`user`?(0,z.jsx)(`p`,{children:e.message.text}):(0,z.jsx)(wb,{text:e.message.text}),e.message.pending?(0,z.jsx)(`span`,{className:`personal-message-pending`,children:i(`timeline.pending`)}):null,(0,z.jsx)(Wy,{request:e.message.collaboration}),(0,z.jsx)(Vb,{delivery:e.message.returnDelivery})]})]},e.id)}return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{"aria-atomic":`true`,"aria-live":`polite`,className:`personal-live-region`,role:`status`,children:o}),(0,z.jsxs)(`div`,{className:`personal-channel-timeline`,children:[c.length?(0,z.jsxs)(`details`,{className:`personal-activity-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(im,{size:16,"aria-hidden":`true`}),(0,z.jsx)(`strong`,{children:r===`zh-CN`?`执行动态`:`Execution activity`}),(0,z.jsx)(`span`,{children:h})]}),(0,z.jsx)(`div`,{children:c.map(_)})]}):null,u.map(_),s.length?(0,z.jsxs)(`details`,{className:`personal-gated-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(ch,{size:16})}),(0,z.jsx)(`strong`,{children:i(`timeline.waitingConfirmation`)}),(0,z.jsx)(`small`,{children:i(`timeline.gateHistory`,{count:s.length})})]}),(0,z.jsx)(`div`,{children:s.map(_)})]}):null,g.map(_)]})]})}function Ub({goal:e}){let{t,locale:n}=Ji(),r=n===`zh-CN`?{checkpoint_satisfied:`检查点满足`,checkpoint_fresh:`检查点有效`,path_outcome_valid:`路径决策有效`,evidence_refs_present:`证据引用齐全`,final_outcome_claim_present:`最终成果声明齐全`,no_reported_outcome_gap:`无已报告成果缺口`}:{checkpoint_satisfied:`Checkpoint satisfied`,checkpoint_fresh:`Checkpoint current`,path_outcome_valid:`Valid path decision`,evidence_refs_present:`Evidence refs present`,final_outcome_claim_present:`Final outcome claim present`,no_reported_outcome_gap:`No reported outcome gap`},i={connected:t(`acceptance.connected`),mapped:t(`acceptance.mapped`),refreshed:t(`acceptance.refreshed`),adapter_inspected:t(`acceptance.inspected`),run_recorded:t(`acceptance.recorded`),reward_judged:t(`acceptance.judged`),operator_approved:t(`acceptance.approved`),controller_ready:t(`acceptance.ready`),attention_queue:t(`acceptance.attentionSource`),agent_vision:t(`acceptance.visionSource`),todo_projection:t(`acceptance.todoSource`),current_run:t(`acceptance.runSource`)},a=e=>i[e]??t(`acceptance.unknown`),o=e.acceptanceObservation,s=e.loadState||!o||o.goal_id!==e.goalId||o.coverage===`unavailable`;return(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-acceptance`,"aria-label":t(`acceptance.title`),children:[(0,z.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,z.jsx)(`h3`,{children:t(`acceptance.title`)}),(0,z.jsx)(`em`,{children:t(`common.readOnly`)})]}),(0,z.jsx)(`p`,{role:`status`,children:t(s?`acceptance.unavailable`:`acceptance.partial`)}),!s&&o?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:t(`acceptance.gaps`)}),o.acceptance_gaps.length?o.acceptance_gaps.map((e,i)=>(0,z.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,z.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),e.resolution_hint?(0,z.jsx)(`p`,{children:e.resolution_hint}):null,e.component_checks?(0,z.jsx)(`div`,{children:Object.entries(e.component_checks).map(([e,t])=>(0,z.jsxs)(`p`,{children:[r[e],`: `,n===`zh-CN`?t?`通过`:`未通过`:t?`Passed`:`Failed`]},e))}):null,(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.owner`)}),(0,z.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,z.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.observed`)}),(0,z.jsx)(`dd`,{children:e.observed_at??t(`acceptance.unknown`)})]})]})]},`${e.kind}:${e.owner}:${i}`)):(0,z.jsx)(`p`,{children:t(`acceptance.noGaps`)}),(0,z.jsx)(`h4`,{children:t(`acceptance.guards`)}),o.guards.length?o.guards.map((e,n)=>(0,z.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,z.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.owner`)}),(0,z.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),e.blocks_agent?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.agent`)}),(0,z.jsx)(`dd`,{children:e.blocks_agent})]}):null,e.todo_id?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.task`)}),(0,z.jsx)(`dd`,{children:e.todo_id})]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,z.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.scope`)}),(0,z.jsx)(`dd`,{children:e.decision_scope??t(`acceptance.unknown`)})]})]})]},`${e.todo_id}:${n}`)):(0,z.jsx)(`p`,{children:t(`acceptance.noGuards`)}),(0,z.jsx)(`h4`,{children:t(`acceptance.next`)}),(0,z.jsx)(`p`,{children:o.next_action??t(`acceptance.unknown`)}),(0,z.jsxs)(`details`,{children:[(0,z.jsxs)(`summary`,{children:[t(`acceptance.historical_progress`),` · `,o.historical_progress.length]}),(0,z.jsx)(`p`,{children:t(`acceptance.historical`)}),o.historical_progress.map(e=>(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:a(e.kind)}),` · `,e.observed_at??t(`acceptance.unknown`),` `,e.evidence_refs.join(`, `)]},e.kind))]}),o.missing_sources.length?(0,z.jsxs)(`p`,{children:[t(`acceptance.missing`),` `,o.missing_sources.map(a).join(`, `)]}):null,o.truncated?(0,z.jsx)(`p`,{children:t(`acceptance.truncated`)}):null]}):null]})}function Wb({item:e,successor:t,onSelect:n}){let{t:r}=Ji(),i=e.details;return(0,z.jsxs)(`section`,{className:`personal-detail-card`,"aria-label":r(`attentionDetail.title`),children:[(0,z.jsx)(`h3`,{children:r(`attentionDetail.title`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.request`)}),(0,z.jsx)(`dd`,{children:r(i?.interaction===`decision`?`attentionDetail.decision`:`attentionDetail.unknownRequest`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`common.status`)}),(0,z.jsx)(`dd`,{children:r(`attentionDetail.${i?.lifecycle??`unknown`}`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`drawer.reason`)}),(0,z.jsx)(`dd`,{children:i?.reason??e.explanation??r(`attentionDetail.unknownReason`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Todo`}),(0,z.jsx)(`dd`,{children:e.todoId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.targetTodo`)}),(0,z.jsx)(`dd`,{children:i?.unblocksTodoId??r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.targetAgent`)}),(0,z.jsx)(`dd`,{children:i?.blocksAgent??r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.scope`)}),(0,z.jsx)(`dd`,{children:i?.decisionScope?`${i.decisionScope.kind} · ${i.decisionScope.granularity} · ${i.decisionScope.scopeKey}`:r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`drawer.evidence`)}),(0,z.jsx)(`dd`,{children:i?.evidence??e.evidence??r(`drawer.decisionDefaultEvidence`)})]})]}),i?.supersededBy?(0,z.jsxs)(`p`,{children:[r(`attentionDetail.replacement`),`: `,i.supersededBy]}):null,t&&n?(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>n(t),type:`button`,children:r(`attentionDetail.openReplacement`)}):null,(0,z.jsx)(`p`,{children:r(`attentionDetail.boundary`)})]})}function Gb({proposal:e,t}){let n=e.teamPlanOutcome?.kind===`already_present`;return(0,z.jsxs)(`section`,{className:`personal-proposal-card personal-team-plan-result`,children:[(0,z.jsx)(`h3`,{children:db(e.teamPlanOutcome??null,t)}),(0,z.jsxs)(`dl`,{className:`personal-team-plan-assignments`,children:[e.teamPlanAssignments?.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.agentId||e.laneId}),(0,z.jsx)(`dd`,{children:e.task})]},e.laneId)),e.teamPlanGapLanes?.map(e=>(0,z.jsxs)(`div`,{className:`is-pending`,children:[(0,z.jsx)(`dt`,{children:e.agentId||e.laneId}),(0,z.jsxs)(`dd`,{children:[e.task||e.laneId,(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[t(`proposal.teamPlan.pending`),` · `,lb(e.reasonCode,t)]})]})]},e.laneId))]}),(0,z.jsx)(`p`,{children:t(n?`proposal.teamPlan.recoveredHint`:`proposal.teamPlan.assignedHint`)}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t(`proposal.teamPlan.originalPlan`)}),(0,z.jsx)(`dl`,{children:e.fields.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.label}),(0,z.jsx)(`dd`,{children:e.value})]},e.key))})]})]})}function Kb(e){return e.replace(/\s+/gu,` `).trim()}function qb(e,t){let n=RegExp(`(?:不要|不需要|无需|禁止|别|暂不|do not\\b|don't\\b|without\\b).{0,10}(?:${t.source})`,`iu`),r=RegExp(`(?:${t.source}).{0,10}(?:不要|不需要|无需|禁止|关闭)`,`iu`),i=RegExp(`disable\\b.{0,10}(?:${t.source})|(?:turn|switch|set)\\b.{0,10}(?:${t.source}).{0,10}\\boff\\b|(?:${t.source})\\s+(?:is\\s+)?disabled\\b`,`iu`);return n.test(e)||r.test(e)||i.test(e)}function Jb(e){return/(我现在该做什么|下一步|哪些\s*Goal\s*在等我|需要我|谁在等我|Agent\s*在做什么|当前进度|总结(?:今天)?进展)/iu.test(e)}function Yb(e){let t=/(怎么|如何|为什么|给.*建议|分析一下|解释|只读)/u.test(e),n=/(解决一下|修复一下|处理一下|执行一下|改一下|跑(?:一下)?测试|rebase|push|提交|推送)/iu.test(e);return!t&&n&&/(帮我|请|给我|直接|现在|开始|bytedcli|codebase|git|rebase|push|提交|推送)/iu.test(e)}function Xb(e){return Kb(e).toLowerCase().match(/(?:^|[\s,,;;:((:]|到|至)(?todo_done:todo_[a-z0-9_-]{3,64}|pr_merged:(?:(?:[a-z0-9_.-]{1,80})\/(?:[a-z0-9_.-]{1,100}))?#[1-9][0-9]{0,8}|capacity_available:[a-z][a-z0-9_:-]{0,63}|resume_at:[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}t[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]{1,3})?(?:z|[+-][0-9]{2}:[0-9]{2}))(?=$|[\s,,。;;))])/iu)?.groups?.condition??null}function Zb(e,t){let n=Kb(e),r=[],i=t.agents.find(e=>{let t=n.toLowerCase();return t.includes(e.agentId.toLowerCase())||t.includes(e.label.toLowerCase())}),a=t.todos.find(e=>n.includes(e.todoId)||n.includes(e.text)),o=/(刚刚|已经|已)(?:经)?\s*(新增|创建|添加)(?:的)?\s*(todo|待办|任务)/iu.test(n),s=!!t.goalId&&!qb(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n);if(!t.goalId&&!qb(n,/goal|目标/iu)&&/(创建|新建|设置|create|start|set up).{0,24}(goal|目标)/iu.test(n)&&r.push({actionKind:`goal.create`,confidence:.97,normalizedParameters:{heartbeat_enabled:!qb(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n)}}),t.goalId&&s&&r.push({actionKind:`heartbeat.bind`,confidence:.96,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&!s&&!qb(n,/定时|监控|监测|持续观察|scheduled check|monitor/iu)&&/(定时|监控|监测|每.{0,8}(分钟|小时|天)|持续观察|scheduled check|monitor|every.{0,12}(minute|hour|day)|daily)/iu.test(n)&&r.push({actionKind:`monitor.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&i&&!qb(n,/绑定|负责|接管|管理/iu)&&/((让|交给).{0,20}(管理|负责|接管).{0,8}(goal|目标)|(绑定).{0,12}(goal|目标)|(goal|目标).{0,12}(交给|绑定|负责|接管))/iu.test(n)&&r.push({actionKind:`agent.bind`,confidence:.96,normalizedParameters:{agent_id:i.agentId,goal_id:t.goalId}}),t.goalId&&!o&&!qb(n,RegExp(`todo|待办|任务`,`iu`))&&/(创建|新建|新增|添加|加一个|记一个).{0,16}(todo|待办|任务)|(todo|待办|任务).{0,12}(创建|新建|新增|添加)|(?:create|add)(?:\s+(?:a|an|new))?\s+(?:todo|task)|(?:todo|task).{0,12}(?:create|add)/iu.test(n)&&r.push({actionKind:`todo.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&Yb(n)&&r.push({actionKind:`todo.create`,confidence:.9,normalizedParameters:{goal_id:t.goalId,start_execution:!0}}),t.goalId&&a){let e=!qb(n,/完成|做完|关闭/u)&&/完成|做完|关闭/u.test(n)?`complete`:!qb(n,/阻塞|卡住/u)&&/阻塞|卡住/u.test(n)?`block`:!qb(n,/暂缓|稍后|推迟/u)&&/暂缓|稍后|推迟/u.test(n)?`defer`:i&&!qb(n,/交给|分配给|改派/u)&&/交给|分配给|改派/u.test(n)?`reassign`:null;if(e){let i=e===`defer`?Xb(n):null;if(e===`defer`&&!i)return{actionKind:`todo.update`,confidence:.97,missingFields:[`resume_when`],normalizedParameters:{goal_id:t.goalId,operation:e,todo_id:a.todoId},route:`clarify`};r.push({actionKind:`todo.update`,confidence:.97,normalizedParameters:{goal_id:t.goalId,operation:e,...i?{resume_when:i}:{},todo_id:a.todoId}})}}let c=[...new Map(r.map(e=>[e.actionKind,e])).values()];return c.length>1?{actionKind:null,confidence:.4,missingFields:[`single_intent`],normalizedParameters:{},route:`clarify`}:c.length===1?{...c[0],missingFields:[],route:`typed_action`}:!t.goalId&&Jb(n)?{actionKind:null,confidence:.98,missingFields:[],normalizedParameters:{},route:`projection`}:{actionKind:null,confidence:.75,missingFields:[],normalizedParameters:{},route:`agent_chat`}}function Qb(e,t,n){if(!e)return{};if(!t.trim())return{modelConfig:null};let r={model:t.trim()};return n&&(r.reasoning_effort=n),{modelConfig:r}}var $b=[`a[href]`,`button:not([disabled])`,`textarea:not([disabled])`,`select:not([disabled])`,`input:not([disabled])`,`[tabindex]:not([tabindex='-1'])`].join(`,`),ex=[{key:`drawer.taskBlock`,operation:`block`},{key:`drawer.taskSuccessor`,operation:`successor_create`}],tx=[{key:`drawer.decisionReject`,resolution:`reject`},{key:`drawer.decisionDefer`,resolution:`defer`}],nx=Array.from({length:32},(e,t)=>t+1),rx=/^[a-z][a-z0-9_.-]{0,63}$/u;function ix(e){let t=String(e??``).trim().toLowerCase();return rx.test(t)?t:null}function ax(e,t){return e.enabled===t.enabled&&e.maxChildren===t.maxChildren&&JSON.stringify(e.modelConfig??null)===JSON.stringify(t.modelConfig??null)&&(e.executionConfig??``)===(t.executionConfig??``)&&[...e.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)===[...t.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)}function ox({agents:e,attentionHistory:t=[],onSelectAttention:n,callbacks:r,goalNotifications:i=[],goals:a=[],inspectorExpanded:o=!1,larkConnections:s=[],onClose:c,onToggleInspectorSize:l,readOnly:u=!1,runs:d=[],selection:f}){let{locale:p,t:m}=Ji(),[h,g]=(0,R.useState)(``),[_,v]=(0,R.useState)(!1),[y,b]=(0,R.useState)(`idle`),[x,S]=(0,R.useState)(`record`),[C,w]=(0,R.useState)([]),[T,E]=(0,R.useState)(null),[D,O]=(0,R.useState)(2),[k,A]=(0,R.useState)(``),[ee,j]=(0,R.useState)(``),[M,te]=(0,R.useState)(``),[ne,N]=(0,R.useState)(`idle`),[P,re]=(0,R.useState)(null),[ie,ae]=(0,R.useState)(null),F=(0,R.useRef)(null),oe=(0,R.useRef)(null),[I,se]=(0,R.useState)(e.find(e=>e.available)?.agentId??`codex`),[L,ce]=(0,R.useState)(``),[le,ue]=(0,R.useState)(``),de=(0,R.useRef)(null),fe=(0,R.useRef)(null),pe=(0,R.useRef)(null),me=(0,R.useRef)(null),he=f.kind===`run`?`run:${f.item.runId}`:f.kind===`proposal`?`proposal:${f.item.previewId}`:f.kind===`todo`?`todo:${f.item.todoId}`:f.kind===`attention`?`attention:${f.item.todoId}`:f.kind===`output`?`output:${f.item.outputId}`:f.kind===`schedule`?`schedule:${f.item.scheduleId}`:`goal:${f.item.goalId}`;(0,R.useEffect)(()=>{b(`idle`),v(!1),S(`record`),ue(``);let e=f.kind===`goal`?f.item.subagentExecution:void 0;w(e?.allowedDomains??[]),A(e?.modelConfig?.model??``),j(e?.modelConfig?.reasoning_effort??``),te(e?.executionConfig??``),O(e?.maxChildren?Math.min(e.maxChildren,32):2),E(null),N(`idle`),re(null),ae(null),F.current=e??null,oe.current=null},[he]);let ge=f.kind===`goal`?f.item.subagentExecution:void 0;(0,R.useEffect)(()=>{let e=F.current,t=ge?!e||!ax(e,ge):e!==null;if(F.current=ge??null,!ie){t&&ge&&(w(ge.allowedDomains),A(ge.modelConfig?.model??``),j(ge.modelConfig?.reasoning_effort??``),te(ge.executionConfig??``),O(ge.maxChildren||2),E(null),N(`idle`),re(null));return}let n=oe.current;(!ge||ax(ie,ge)||n&&!ax(n,ge))&&(ge&&(w(ge.allowedDomains),A(ge.modelConfig?.model??``),j(ge.modelConfig?.reasoning_effort??``),te(ge.executionConfig??``),O(ge.maxChildren||2)),oe.current=null,ae(null))},[ge,ie]),(0,R.useEffect)(()=>{let e=document.activeElement;e instanceof HTMLElement&&!fe.current?.contains(e)&&(pe.current=e);let t=window.requestAnimationFrame(()=>me.current?.focus());return()=>window.cancelAnimationFrame(t)},[he]);let _e=(0,R.useCallback)(()=>{let e=pe.current;c(),window.requestAnimationFrame(()=>e?.focus())},[c]);(0,R.useEffect)(()=>{function e(e){if(e.key===`Escape`){e.preventDefault(),_e();return}if(e.key===`Tab`&&f.kind!==`todo`){let t=Array.from(fe.current?.querySelectorAll($b)??[]).filter(e=>!e.hasAttribute(`disabled`)&&e.getAttribute(`aria-hidden`)!==`true`);if(t.length===0)return;let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())}}return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e)}},[_e,f.kind]);let ve=f.kind===`attention`?m(`drawer.titleAttention`):f.kind===`todo`?m(`drawer.taskDetails`):f.kind===`run`?m(`drawer.runDetails`):f.kind===`output`?m(`drawer.titleOutput`):f.kind===`proposal`&&f.item.actionKind===`team.plan`&&f.item.status===`applied`?m(`proposal.teamPlan.resultTitle`):f.kind===`proposal`?m(f.item.reviewPlan?.retryOriginal?`drawer.recoverEditResult`:f.item.status===`applied`?`drawer.titleProposalApplied`:`drawer.titleProposalConfirm`):f.kind===`schedule`?f.item.scheduleKind===`heartbeat`?`Heartbeat`:m(`drawer.titleSchedule`):m(`drawer.goalDetails`),ye=f.kind===`proposal`?f.item.goalId??`manager`:f.item.goalId,be=f.kind===`attention`?f.item.goalTitle??m(`drawer.currentGoal`):f.kind===`todo`||f.kind===`run`?f.item.goalTitle:f.kind===`output`?f.item.goalTitle??m(`drawer.currentGoal`):f.kind===`goal`?f.item.title:f.kind===`schedule`?m(`drawer.goalAutoRun`):f.kind===`proposal`&&f.item.status===`applied`&&f.item.actionKind===`team.plan`?f.item.goalId??m(`drawer.currentGoal`):f.item.goalId?m(`drawer.goalChanges`):m(`drawer.managerChanges`),xe=f.kind===`goal`?d.find(e=>e.goalId===f.item.goalId&&!!e.sessionId)??d.find(e=>e.goalId===f.item.goalId):null,Se=f.kind===`run`&&(f.item.completedSteps>0||!!f.item.latestActivity||!!f.item.outputs?.length),Ce=f.kind===`attention`?Zi(f.item.updatedAt,m):null,we=Xb(le);async function Te(){f.kind!==`run`||!h.trim()||(await r.onCorrectRun?.(f.item,h.trim()),g(``))}async function Ee(e,t,n,i){if(t===`successor_create`){await r.onPreviewAction?.({actionKind:`todo.create`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-successor-${e.todoId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,text:m(`drawer.taskSuccessorText`,{task:e.text})},summary:m(`drawer.taskSuccessorSummary`,{task:e.text})});return}await r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-${t}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:e.claimedBy??I,goal_id:e.goalId,operation:t,...t===`block`?{note:m(`drawer.taskSuccessorNote`)}:{},...t===`defer`&&i?{resume_when:i}:{},todo_id:e.todoId},summary:`${n}:${e.text}`})}async function De(e,t,n){u||!of(e)||await r.onPreviewAction?.({actionKind:`gate.resolve`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-decision-${e.todoId}-${t}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,decision:t,todo_id:e.todoId},summary:`${n}:${e.text}`})}let Oe=f.kind===`goal`?ie??f.item.subagentExecution??{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0}:{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0},ke=ne===`previewing`||ne===`applying`,Ae=(()=>{if(f.kind!==`goal`)return[];let e=new Map;for(let t of Oe.allowedDomains){let n=ix(t);n&&e.set(n,{matchingTodoCount:0,value:n})}if(Oe.domainCandidates)for(let t of Oe.domainCandidates){let n=ix(t.domain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+t.matchingTodoCount,value:n})}else for(let t of f.item.agentTodos){if(t.done||t.taskClass!==`advancement_task`)continue;let n=ix(t.taskDomain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+1,value:n})}return[...e.values()]})();function je(){w(Oe.allowedDomains),A(Oe.modelConfig?.model??``),j(Oe.modelConfig?.reasoning_effort??``),te(Oe.executionConfig??``),O(Oe.maxChildren||2),E(null),N(`idle`),re(null)}function Me(){let e=[...new Set(C.map(e=>ix(e)))];return e.every(e=>!!e)?e:null}function Ne(e,t){w(n=>t?[...n,e].filter((e,t,n)=>n.indexOf(e)===t):n.filter(t=>t!==e)),re(null),N(`idle`),E(null)}async function Pe(e,t=e){if(f.kind!==`goal`||!r.onPreviewGoalSubagentConfiguration)return;let n=e?Me():[];if(t&&!k.trim()&&ee){N(`error`),E(m(`drawer.subagentModelRequired`));return}if(e&&!n){N(`error`),E(m(`drawer.subagentDomainInvalid`)),re(null);return}let i={alignCodexHostCapacity:e,allowedDomains:n??[],enabled:e,goalId:f.item.goalId,maxChildren:e?D:0,executionConfig:M.trim(),...Qb(t,k,ee)};N(`previewing`),E(m(`drawer.subagentPreviewing`)),re(null);try{let e=await r.onPreviewGoalSubagentConfiguration(i);if(!e.changed){oe.current=ge??null,ae({...e.configuration,domainCandidates:Oe.domainCandidates}),w(e.configuration.allowedDomains),A(e.configuration.modelConfig?.model??``),j(e.configuration.modelConfig?.reasoning_effort??``),te(e.configuration.executionConfig??``),O(e.configuration.maxChildren||2),N(`success`),E(m(`drawer.subagentNoChange`));return}re({...i,codexHostCapacity:e.configuration.codexHostCapacity,changed:e.changed,previewId:e.previewId}),N(`ready`),E(m(`drawer.subagentPreviewReady`))}catch(e){N(`error`),E(e instanceof Error?e.message:m(`drawer.subagentPreviewFailed`))}}async function Fe(){if(!(!P||!r.onApplyGoalSubagentConfiguration)){N(`applying`),E(m(`drawer.subagentApplying`));try{let e=await r.onApplyGoalSubagentConfiguration({allowedDomains:P.allowedDomains,alignCodexHostCapacity:P.enabled,enabled:P.enabled,goalId:P.goalId,maxChildren:P.maxChildren,modelConfig:P.modelConfig,executionConfig:P.executionConfig,previewId:P.previewId});oe.current=ge??null,ae({...e,domainCandidates:Oe.domainCandidates}),w(e.allowedDomains),A(e.modelConfig?.model??``),j(e.modelConfig?.reasoning_effort??``),te(e.executionConfig??``),O(e.maxChildren||2),N(`success`),E(m(e.codexHostCapacity?.newSessionRequired?`drawer.subagentAppliedRestart`:`drawer.subagentApplied`)),re(null);try{await r.onRefresh?.()}catch{N(`warning`),E(m(`drawer.subagentAppliedRefreshFailed`))}}catch(e){N(`error`),E(e instanceof Error?e.message:m(`drawer.subagentApplyFailed`))}}}return(0,z.jsxs)(`div`,{"aria-labelledby":`personal-drawer-title`,"aria-modal":f.kind===`todo`?void 0:`true`,className:`personal-context-drawer`,"data-context-kind":f.kind,ref:fe,role:`dialog`,children:[(0,z.jsxs)(`header`,{className:`personal-drawer-header${f.kind===`todo`?` is-task-inspector`:``}`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h2`,{id:`personal-drawer-title`,ref:me,tabIndex:-1,children:ve}),(0,z.jsx)(`p`,{children:be})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-header-actions`,children:[f.kind===`todo`&&l?(0,z.jsx)(`button`,{"aria-label":m(o?`drawer.inspectorHalf`:`drawer.inspectorFull`),className:`personal-icon-button personal-inspector-size`,onClick:l,title:m(o?`drawer.inspectorHalfView`:`drawer.inspectorFullView`),type:`button`,children:o?(0,z.jsx)(Wm,{size:17}):(0,z.jsx)(Bm,{size:17})}):null,(0,z.jsxs)(`button`,{"aria-label":m(`drawer.closeDetail`,{context:be}),className:`personal-icon-button personal-drawer-close`,onClick:_e,ref:de,type:`button`,children:[(0,z.jsx)(om,{className:`personal-mobile-back`,size:18}),(0,z.jsx)(gh,{className:`personal-desktop-close`,size:18})]})]})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-body`,children:[f.kind===`attention`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card is-attention`,children:[(0,z.jsx)(`small`,{children:f.item.blocking?m(`drawer.attentionBlocking`):m(`drawer.attentionWaiting`)}),(0,z.jsx)(`h3`,{children:f.item.text}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:f.item.priority??`medium`})]}),Ce?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.waiting`)}),(0,z.jsx)(`dd`,{children:m(`tasks.waitingAge`,{age:Ce})})]}):null]})]}),(0,z.jsx)(Wb,{item:f.item,onSelect:n,successor:af(f.item,t)}),!u&&of(f.item)?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void De(f.item,`approve`,m(`common.confirm`)),type:`button`,children:[(0,z.jsx)(hm,{size:17}),m(`drawer.decisionReview`)]}),(0,z.jsxs)(`details`,{className:`personal-compact-menu`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Em,{size:17}),m(`drawer.decisionMore`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{onClick:()=>void r.onExplainDecision?.(f.item),type:`button`,children:[(0,z.jsx)(Hm,{size:16}),m(`drawer.explainDecision`)]}),tx.map(e=>(0,z.jsx)(`button`,{onClick:()=>void De(f.item,e.resolution,m(e.key)),type:`button`,children:m(e.key)},e.resolution))]})]})]}):null]}):null,f.kind===`todo`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-task-inspector-summary`,children:[(0,z.jsxs)(`div`,{className:`personal-task-inspector-status`,children:[(0,z.jsxs)(`span`,{className:f.item.done?`is-done`:f.item.status===`blocked`?`is-blocked`:`is-open`,children:[(0,z.jsx)(`i`,{}),f.item.done?m(`drawer.taskStatusCompleted`):f.item.status===`deferred`?m(`drawer.taskStatusDeferred`):f.item.status===`blocked`?m(`drawer.taskStatusBlocked`):m(`drawer.taskStatusOpen`)]}),f.item.priority?(0,z.jsx)(`span`,{children:f.item.priority}):null,(0,z.jsx)(`span`,{children:f.item.taskClass===`advancement_task`?m(`drawer.taskAdvancement`):f.item.taskClass??m(`drawer.taskOrdinary`)})]}),(0,z.jsx)(`h3`,{children:f.item.text})]}),(0,z.jsxs)(`section`,{"aria-label":m(`drawer.taskInfo`),className:`personal-task-inspector-fields`,children:[(0,z.jsx)(`h4`,{children:m(`drawer.taskInfo`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.owner`)}),(0,z.jsx)(`dd`,{children:f.item.ownerLabel??f.item.claimedBy??m(`drawer.notAssigned`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.status`)}),(0,z.jsx)(`dd`,{children:f.item.done?m(`drawer.taskStatusCompleted`):f.item.status===`deferred`?m(`drawer.taskStatusDeferred`):f.item.status===`blocked`?m(`drawer.taskStatusBlocked`):m(`drawer.taskStatusOpen`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:f.item.priority??m(`drawer.notSet`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.dependencies`)}),(0,z.jsx)(`dd`,{children:f.item.dependencies?.join(` · `)||m(`common.none`)})]}),f.item.status===`deferred`||f.item.resumeWhen?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeWhen`)}),(0,z.jsx)(`dd`,{children:f.item.resumeWhen||m(`drawer.notSet`)})]}):null,f.item.resumeWhen?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeState`)}),(0,z.jsx)(`dd`,{children:f.item.resumeReady?m(`drawer.resumeReady`):m(`drawer.resumePending`)})]}):null,f.item.resumeReceiptId?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeReceipt`)}),(0,z.jsx)(`dd`,{children:f.item.resumeReceiptId})]}):null,f.item.validationDigest?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.validationRevision`)}),(0,z.jsx)(`dd`,{children:f.item.validationRevision??0})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.validationDigest`)}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:f.item.validationDigest})})]}),f.item.validationRevisionActor?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.validationRevisionActor`)}),(0,z.jsx)(`dd`,{children:f.item.validationRevisionActor})]}):null]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.nextTransition`)}),(0,z.jsx)(`dd`,{children:f.item.nextTransition??(f.item.done?m(`drawer.taskNextCompleted`):f.item.resumeReady?m(`drawer.taskNextResumeReady`):f.item.status===`deferred`?m(`drawer.taskNextDeferred`):m(`drawer.taskNextOpen`))})]})]})]}),!u&&!f.item.done?(0,z.jsxs)(`div`,{className:`personal-task-inspector-actions`,"aria-label":m(`drawer.taskActions`),children:[(0,z.jsxs)(`details`,{className:`personal-task-management`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Em,{size:16}),m(`drawer.taskManage`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.reassign`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[m(`drawer.reassign`),(0,z.jsx)(`select`,{"aria-label":m(`drawer.reassign`),onChange:e=>se(e.target.value),value:I,children:e.filter(e=>e.available).map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:f.item.goalId,kind:`todo`,todo_id:f.item.todoId},idempotencyKey:`workspace-todo-${f.item.todoId}-reassign-${I}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:I,goal_id:f.item.goalId,operation:`reassign`,todo_id:f.item.todoId},summary:m(`drawer.reassignSummary`,{task:f.item.text})}),type:`button`,children:m(`timeline.review`)})]}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[m(`drawer.taskPriority`),(0,z.jsxs)(`select`,{"aria-label":m(`drawer.taskPriority`),value:L,onChange:e=>ce(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:m(`drawer.taskPriorityChoose`)}),[`P0`,`P1`,`P2`,`P3`,`P4`].map(e=>(0,z.jsx)(`option`,{value:e,children:e},e)),(0,z.jsx)(`option`,{value:`clear`,children:m(`drawer.taskPriorityClear`)})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:!L,onClick:()=>void r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:f.item.goalId,kind:`todo`,todo_id:f.item.todoId},idempotencyKey:`workspace-todo-${f.item.todoId}-priority-${L}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:f.item.goalId,todo_id:f.item.todoId,operation:`edit`,...L===`clear`?{clear_priority:!0}:{priority:L}},summary:`${m(`drawer.taskPriority`)}: ${L===`clear`?m(`drawer.taskPriorityClear`):L}`}),type:`button`,children:m(`timeline.review`)})]}),(0,z.jsx)(`strong`,{children:m(`drawer.taskDeferUntil`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select personal-inline-resume-when`,children:[m(`drawer.taskDeferUntil`),(0,z.jsx)(`input`,{"aria-label":m(`drawer.taskDeferCondition`),"aria-invalid":!!le.trim()&&!we,onChange:e=>ue(e.target.value),placeholder:m(`drawer.taskDeferPlaceholder`),value:le}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:!we,onClick:()=>void Ee(f.item,`defer`,m(`drawer.taskDefer`),we??void 0),type:`button`,children:m(`drawer.taskDeferReview`)}),(0,z.jsx)(`small`,{children:le.trim()&&!we?m(`drawer.taskDeferInvalid`):m(`drawer.taskDeferSupported`)})]}),(0,z.jsx)(`div`,{className:`personal-task-management-secondary`,children:ex.map(e=>(0,z.jsx)(`button`,{onClick:()=>void Ee(f.item,e.operation,m(e.key)),type:`button`,children:m(e.key)},e.operation))})]})]}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void Ee(f.item,`complete`,m(`drawer.taskComplete`)),type:`button`,children:[(0,z.jsx)(hm,{size:17}),m(`drawer.taskComplete`)]})]}):null,f.item.done?(0,z.jsxs)(`div`,{className:`personal-task-completed-note`,children:[(0,z.jsx)(hm,{size:16}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.taskCompletedTitle`)}),(0,z.jsx)(`small`,{children:m(`drawer.taskCompletedNote`)})]})]}):null]}):null,f.kind===`goal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:Yi(f.item.state,p)}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.agentSentence}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.tokens`)}),(0,z.jsxs)(`dd`,{children:[Qd(f.item.usage?.tokens24h,m(`drawer.usageNotMeasured`),Yd),` / `,Qd(f.item.usage?.tokens7d,m(`drawer.usageNotMeasured`),Yd)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.cost`)}),(0,z.jsxs)(`dd`,{children:[Qd(f.item.usage?.costUsd24h,m(`drawer.usageNotMeasured`),Xd),` / `,Qd(f.item.usage?.costUsd7d,m(`drawer.usageNotMeasured`),Xd)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.duration`)}),(0,z.jsxs)(`dd`,{children:[Qd(f.item.usage?.durationMs24h,m(`drawer.usageNotMeasured`),Zd),` / `,Qd(f.item.usage?.durationMs7d,m(`drawer.usageNotMeasured`),Zd)]})]})]})]}),(0,z.jsx)(Ub,{goal:f.item}),(()=>{let e=i.find(e=>e.goalId===f.item.goalId),t=s.find(e=>e.goal_id===f.item.goalId);return(0,z.jsxs)(z.Fragment,{children:[f.item.repository?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-repository`,children:[(0,z.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,z.jsx)(`small`,{children:m(`drawer.repository`)}),(0,z.jsx)(`em`,{children:m(`common.readOnly`)})]}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(Mm,{size:16}),f.item.repository.label]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.branch`)}),(0,z.jsx)(`dd`,{children:f.item.repository.branch||`detached`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Role`}),(0,z.jsx)(`dd`,{children:m(`drawer.repositoryRole`)})]})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>{let e=navigator.clipboard?.writeText(f.item.repository?.identity??``);if(!e){b(`error`);return}e.then(()=>b(`copied`)).catch(()=>b(`error`))},type:`button`,children:[(0,z.jsx)(Cm,{size:15}),m(y===`copied`?`drawer.copyRepositoryDone`:`drawer.copyRepository`)]}),y===`error`?(0,z.jsx)(`p`,{className:`personal-copy-feedback is-error`,role:`status`,children:m(`drawer.copyRepositoryError`)}):y===`copied`?(0,z.jsx)(`p`,{className:`personal-copy-feedback`,role:`status`,children:m(`drawer.copyRepositorySuccess`)}):null]}):null,u?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:m(`drawer.larkConnection`)}),(0,z.jsx)(`h3`,{children:m(`drawer.remoteDetailsUnavailable`)}),(0,z.jsx)(`p`,{children:m(`drawer.remoteDetailsDescription`)})]}):(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:m(`drawer.larkConnection`)}),t?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`h3`,{children:[t.app_label,(0,z.jsx)(`span`,{className:`personal-connection-status`,children:m(`drawer.connected`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.group`)}),(0,z.jsx)(`dd`,{children:t.chat_name})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.topic`)}),(0,z.jsxs)(`dd`,{children:[`# `,t.topic_name]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.trigger`)}),(0,z.jsx)(`dd`,{children:t.incoming_mode===`mentions`?m(`lark.someoneMentions`):m(`lark.allMessages`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.replyMode`)}),(0,z.jsx)(`dd`,{children:m(`lark.topicReply`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.autoNotify`)}),(0,z.jsx)(`dd`,{children:e?.humanGateAutoNotifyEnabled?m(`common.on`):m(`common.off`)})]}),e?.lastNotifiedAt?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.lastNotification`)}),(0,z.jsx)(`dd`,{children:e.lastNotifiedAt})]}):null]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:m(`drawer.larkNotConfigured`)}),(0,z.jsx)(`p`,{children:m(`drawer.larkNotConfiguredDescription`)})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onOpenNotificationSettings?.(f.item.goalId),type:`button`,children:[(0,z.jsx)(dm,{size:16}),m(t?`drawer.larkConfigure`:`drawer.larkConnect`)]})]})]})})(),(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-session`,children:[(0,z.jsx)(`small`,{children:m(`drawer.runDetails`)}),xe?.sessionId?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:Xi(xe.sessionStatus??xe.status,m)}),(0,z.jsx)(`p`,{children:xe.title}),r.onOpenRunSession?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onOpenRunSession?.(xe),type:`button`,children:[(0,z.jsx)(Ym,{size:16}),m(`drawer.runLatest`)]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:m(`drawer.noRun`)}),(0,z.jsx)(`p`,{children:m(`drawer.noRunDescription`)})]})]}),u?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`heartbeat`,f.item.goalId),type:`button`,children:[(0,z.jsx)(Zm,{size:16}),m(`drawer.setupHeartbeat`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`monitor`,f.item.goalId),type:`button`,children:[(0,z.jsx)(mm,{size:16}),m(`drawer.scheduleAdd`)]})]}),f.item.subagentExecution?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-subagents`,children:[(0,z.jsxs)(`div`,{className:`personal-subagent-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:m(`drawer.subagentLabel`)}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(fm,{size:16}),m(`drawer.subagentTitle`)]})]}),(0,z.jsxs)(`button`,{"aria-checked":Oe.enabled,"aria-label":m(P&&ne===`ready`?`drawer.subagentPending`:Oe.enabled?`drawer.subagentDisable`:`drawer.subagentEnable`),className:`personal-subagent-switch`,"data-pending":P&&ne===`ready`?`true`:void 0,disabled:u||ke||!!P||!r.onPreviewGoalSubagentConfiguration,onClick:()=>void Pe(!Oe.enabled),role:`switch`,type:`button`,children:[(0,z.jsx)(`span`,{}),m(P&&ne===`ready`?`drawer.subagentPending`:Oe.enabled?`common.on`:`common.off`)]})]}),(0,z.jsx)(`p`,{children:m(`drawer.subagentDescription`)}),P&&ne===`ready`?(0,z.jsxs)(`div`,{className:`personal-subagent-preview`,children:[(0,z.jsx)(`strong`,{children:m(P.enabled?`drawer.subagentConfirmEnable`:`drawer.subagentConfirmDisable`)}),(0,z.jsx)(`p`,{children:P.enabled?m(`drawer.subagentPreviewSummary`,{count:P.maxChildren,domains:P.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)}):m(`drawer.subagentDisableSummary`)}),P.modelConfig===void 0?null:(0,z.jsxs)(`p`,{children:[m(`drawer.subagentModel`),`: `,P.modelConfig?.model||m(`drawer.subagentModelDefault`),` · `,P.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)]}),(0,z.jsxs)(`p`,{children:[m(`drawer.subagentExecutionConfig`),`: `,P.executionConfig||m(`drawer.subagentExecutionConfigNone`)]}),P.enabled&&P.codexHostCapacity?(0,z.jsx)(`p`,{children:m(P.codexHostCapacity.writeRequired?`drawer.subagentHostCapacityRaise`:`drawer.subagentHostCapacityReady`,{configured:P.codexHostCapacity.configuredChildren??m(`drawer.subagentHostCapacityImplicit`),required:P.codexHostCapacity.requiredChildren})}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{className:`personal-primary-action`,onClick:()=>void Fe(),type:`button`,children:m(`common.confirm`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:je,type:`button`,children:m(`common.cancel`)})]})]}):null,T?(0,z.jsxs)(`p`,{className:`personal-subagent-feedback is-${ne}`,role:`status`,children:[ne===`previewing`||ne===`applying`?(0,z.jsx)($m,{className:`personal-spin`,size:13}):null,T]}):null,(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentModel`)}),(0,z.jsx)(`dd`,{children:Oe.modelConfig?.model||m(`drawer.subagentModelDefault`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentEffort`)}),(0,z.jsx)(`dd`,{children:Oe.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentCurrentBoundary`)}),(0,z.jsx)(`dd`,{children:Oe.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentChildLimit`)}),(0,z.jsx)(`dd`,{children:Oe.maxChildren||0})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentExecutionConfig`)}),(0,z.jsx)(`dd`,{children:Oe.executionConfig||m(`drawer.subagentExecutionConfigNone`)})]})]}),u?(0,z.jsx)(`p`,{className:`personal-subagent-read-only`,children:m(`drawer.subagentRemoteReadOnly`)}):(0,z.jsxs)(`div`,{className:`personal-subagent-fields`,children:[(0,z.jsxs)(`fieldset`,{className:`personal-subagent-domain-picker`,disabled:ke,children:[(0,z.jsx)(`legend`,{children:m(`drawer.subagentDomains`)}),Ae.length>0?(0,z.jsx)(`div`,{className:`personal-subagent-domain-options`,children:Ae.map(e=>{let t=C.includes(e.value);return(0,z.jsxs)(`label`,{className:`personal-subagent-domain-option${t?` is-selected`:``}`,children:[(0,z.jsx)(`input`,{"aria-label":e.value,checked:t,onChange:t=>Ne(e.value,t.target.checked),type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.value}),(0,z.jsx)(`small`,{children:m(`drawer.subagentDomainTodoCount`,{count:e.matchingTodoCount})})]})]},e.value)})}):(0,z.jsx)(`p`,{className:`personal-subagent-domain-empty`,children:m(`drawer.subagentDomainsEmpty`)}),(0,z.jsx)(`small`,{children:m(`drawer.subagentDomainsHint`)})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentModel`)}),(0,z.jsx)(`input`,{"aria-label":m(`drawer.subagentModel`),disabled:ke,value:k,placeholder:`gpt-5.6-luna`,onChange:e=>{A(e.target.value),re(null),N(`idle`),E(null)}})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentEffort`)}),(0,z.jsxs)(`select`,{"aria-label":m(`drawer.subagentEffort`),disabled:ke,value:ee,onChange:e=>{j(e.target.value),re(null),N(`idle`),E(null)},children:[(0,z.jsx)(`option`,{value:``,children:m(`drawer.subagentModelDefault`)}),[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`,`ultra`].map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:ke,type:`button`,onClick:()=>{A(`gpt-5.6-luna`),j(`max`),re(null),N(`idle`),E(null)},children:m(`drawer.subagentLunaPreset`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:ke,type:`button`,onClick:()=>{A(``),j(``),re(null),N(`idle`),E(null)},children:m(`drawer.subagentClearModel`)}),(0,z.jsx)(`p`,{children:m(`drawer.subagentModelHint`)}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentExecutionConfig`)}),(0,z.jsx)(`input`,{"aria-label":m(`drawer.subagentExecutionConfig`),disabled:ke,onChange:e=>{te(e.target.value),re(null),N(`idle`),E(null)},placeholder:`.loopx/config/delegations.json`,value:M})]}),(0,z.jsx)(`p`,{children:m(`drawer.subagentExecutionConfigHint`)}),(0,z.jsxs)(`label`,{className:`personal-subagent-limit-field`,children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentMaxChildren`)}),(0,z.jsx)(`select`,{"aria-label":m(`drawer.subagentMaxChildren`),disabled:ke,onChange:e=>{O(Number(e.target.value)),re(null),N(`idle`),E(null)},value:D,children:nx.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:ke,onClick:()=>void Pe(Oe.enabled,!0),type:`button`,children:m(`drawer.subagentPreviewBoundary`)})]})]}):null]}):null,f.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{"aria-label":m(`drawer.runView`),className:`personal-run-drawer-tabs`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":x===`record`,onClick:()=>S(`record`),role:`tab`,type:`button`,children:m(`drawer.executionRecordAndResult`)}),(0,z.jsx)(`button`,{"aria-selected":x===`details`,onClick:()=>S(`details`),role:`tab`,type:`button`,children:m(`drawer.detailsAndActions`)})]}),x===`record`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card personal-session-summary`,children:[(0,z.jsxs)(`small`,{children:[f.item.agentLabel,` · `,Xi(f.item.sessionStatus??f.item.status,m)]}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]})]})]}),(0,z.jsxs)(`section`,{"aria-label":m(`drawer.executionRecord`),className:`personal-session-message-record`,children:[(0,z.jsx)(`h3`,{children:m(`drawer.executionRecord`)}),f.item.sessionMessages?.length?(0,z.jsx)(`ol`,{children:f.item.sessionMessages.map(e=>(0,z.jsxs)(`li`,{className:`is-${e.role}`,children:[(0,z.jsx)(`i`,{}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.role===`user`?m(`drawer.runRoleUser`):e.role===`assistant`?m(`drawer.runRoleAssistant`):m(`drawer.runRoleSystem`)}),e.createdAt?(0,z.jsx)(`time`,{children:new Date(e.createdAt).toLocaleTimeString(p,{hour:`2-digit`,minute:`2-digit`,hour12:!1})}):null]}),(0,z.jsx)(`p`,{children:e.text})]})]},e.messageId))}):(0,z.jsx)(`p`,{className:`personal-session-empty`,children:Se?m(`drawer.runRecordProjected`,{completed:f.item.completedSteps,outputs:f.item.outputs?.length?m(`drawer.runRecordProjectedOutputs`,{count:f.item.outputs.length}):``,total:f.item.totalSteps}):m(`drawer.runRecordEmpty`)}),f.item.status===`running`?(0,z.jsxs)(`div`,{className:`personal-session-active-step`,children:[(0,z.jsx)(`i`,{}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.analysis`)}),(0,z.jsx)(`small`,{children:m(`drawer.agentWorking`)})]})]}):null]}),f.item.outputs?.length?(0,z.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-run-outputs-title`,children:[(0,z.jsx)(`h3`,{id:`personal-run-outputs-title`,children:m(`drawer.outputs`)}),(0,z.jsx)(`ol`,{children:f.item.outputs.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`small`,{children:e.createdAt??e.kind??m(`files.emptySummary`)})]})},e.outputId))})]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsxs)(`small`,{children:[f.item.agentLabel,` · `,Xi(f.item.status,m)]}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.sessionStatus`)}),(0,z.jsx)(`dd`,{children:Xi(f.item.sessionStatus??f.item.status,m)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.sessionRecoverable`)}),(0,z.jsx)(`dd`,{children:f.item.resumable===!1?m(`drawer.resumeNo`):m(`drawer.resumeYes`)})]})]})]}),f.item.sessionStatus===`resume_failed`&&!u?(0,z.jsxs)(`section`,{className:`personal-recovery-panel`,"aria-label":m(`drawer.recoveryFailed`),children:[(0,z.jsx)(`strong`,{children:m(`drawer.recoveryFailed`)}),(0,z.jsx)(`p`,{children:m(`drawer.recoveryDescription`)}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,z.jsx)($m,{size:16}),m(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(Ym,{size:16}),m(`drawer.recoveryNewSession`)]})]}):null,u?null:(0,z.jsxs)(`section`,{className:`personal-correction-panel`,children:[(0,z.jsx)(`header`,{children:(0,z.jsxs)(`span`,{children:[(0,z.jsx)(fm,{size:16}),m(`drawer.correctionLabel`,{agent:f.item.agentLabel})]})}),(0,z.jsx)(`p`,{children:m(`drawer.correctionDescription`)}),(0,z.jsxs)(`div`,{className:`personal-correction-composer`,children:[(0,z.jsx)(`textarea`,{"aria-label":m(`drawer.correctionTextarea`,{agent:f.item.agentLabel,goal:f.item.goalTitle,run:f.item.title}),onChange:e=>g(e.target.value),placeholder:m(`drawer.correctionPlaceholder`),rows:3,value:h}),(0,z.jsx)(`button`,{"aria-label":m(`drawer.correctionSend`),disabled:!h.trim(),onClick:()=>void Te(),type:`button`,children:(0,z.jsx)(nh,{size:16})})]})]}),u?null:(0,z.jsxs)(`details`,{className:`personal-compact-menu personal-run-more`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Em,{size:17}),m(`drawer.moreRunActions`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{disabled:!f.item.canInterrupt,onClick:()=>void r.onInterruptRun?.(f.item),type:`button`,children:[(0,z.jsx)(Jm,{size:16}),m(`drawer.runInterrupt`)]}),(0,z.jsxs)(`button`,{disabled:f.item.resumable===!1,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,z.jsx)($m,{size:16}),m(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(Ym,{size:16}),m(`drawer.runNewSession`)]}),(0,z.jsxs)(`button`,{onClick:()=>void r.onCloseRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(lh,{size:16}),m(`drawer.runCloseSession`)]})]})]})]})]}):null,f.kind===`output`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:f.item.kind??`output`}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.summary??m(`drawer.outputRecorded`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.outputTodo`)}),(0,z.jsx)(`dd`,{children:f.item.todoId??m(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.outputRun`)}),(0,z.jsx)(`dd`,{children:f.item.runId??m(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Agent`}),(0,z.jsx)(`dd`,{children:f.item.agentLabel??f.item.agentId??`LoopX`})]})]})]}),f.item.report?(0,z.jsxs)(`section`,{className:`personal-report-detail`,"data-testid":`personal-periodic-report-detail`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsxs)(`strong`,{children:[`+`,f.item.report.addedCount]}),m(`files.reportAdded`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f.item.report.changedCount}),m(`files.reportChanged`)]})]}),(0,z.jsxs)(`p`,{children:[f.item.report.periodStartAt,` → `,f.item.report.periodEndAt]}),(0,z.jsx)(`ol`,{children:f.item.report.items.map(e=>(0,z.jsxs)(`li`,{"data-change-kind":e.changeKind,children:[(0,z.jsxs)(`small`,{children:[e.changeKind,` · `,e.status]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`p`,{children:e.summary})]},e.sourceRef))}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`span`,{children:[m(`files.reportPublication`),`: `,f.item.report.publicationId]}),(0,z.jsxs)(`span`,{children:[m(`files.reportGeneration`),`: `,f.item.report.generationId]})]})]}):null,f.item.safePreview?(0,z.jsx)(`pre`,{"aria-label":m(`drawer.outputSafePreview`),className:`personal-safe-preview`,children:f.item.safePreview}):(0,z.jsx)(`p`,{className:`personal-preview-unavailable`,children:m(`drawer.previewUnavailable`)}),(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:!r.onOpenOutput,onClick:()=>{r.onOpenOutput?.(f.item),c()},type:`button`,children:[(0,z.jsx)(Dm,{size:16}),m(`files.openConversation`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!r.onExportOutput,onClick:()=>void r.onExportOutput?.(f.item),type:`button`,children:[(0,z.jsx)(Tm,{size:16}),m(`files.exportSummary`)]})]})]}):null,f.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[f.item.actionKind===`team.plan`&&f.item.status===`applied`?(0,z.jsx)(Gb,{proposal:f.item,t:m}):(0,z.jsxs)(`section`,{className:`personal-proposal-card`,children:[(0,z.jsxs)(`small`,{children:[f.item.actionKind,` · `,f.item.status]}),(0,z.jsx)(`h3`,{children:f.item.title}),f.item.impact?(0,z.jsx)(`p`,{children:f.item.impact}):null,f.item.reviewPlan&&!f.item.reviewPlan.retryOriginal&&f.item.actionKind!==`team.plan`?(0,z.jsx)(`p`,{className:`personal-proposal-explainer`,"data-action-review":f.item.reviewPlan.interaction,children:f.item.actionKind===`operation.execute`&&f.item.status===`gated`?m(`actionReview.operation_group_confirmation`):f.item.actionKind===`operation.execute`&&f.item.reviewPlan.reason===`readback_unverified`?m(`actionReview.operation_result_delivery_pending`):m(`actionReview.${f.item.reviewPlan.reason}`)}):null,f.item.status===`ready`&&f.item.actionKind!==`team.plan`?(0,z.jsx)(`p`,{className:`personal-proposal-explainer`,children:m(`drawer.proposalExplainer`)}):null,(0,z.jsx)(`dl`,{children:f.item.fields.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.label}),(0,z.jsx)(`dd`,{children:e.value})]},e.key))})]}),f.item.status===`applied`&&f.item.actionKind!==`team.plan`?(0,z.jsxs)(`p`,{className:`personal-proposal-state ${f.item.actionKind===`operation.execute`&&f.item.reviewPlan?.reason===`readback_unverified`?`is-gated`:`is-applied`}`,children:[(0,z.jsx)(hm,{size:16}),f.item.actionKind===`operation.execute`?f.item.primaryLabel:m(`drawer.proposalApplied`)]}):null,f.item.status===`applied`&&f.item.actionKind!==`operation.execute`&&f.item.goalId?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>{let e=f.item.goalId;c(),r.onOpenGoal?.(e)},type:`button`,children:[(0,z.jsx)(Dm,{size:16}),f.item.actionKind===`goal.create`?m(`drawer.proposalEnterGoal`):m(f.item.actionKind===`team.plan`?`proposal.teamPlan.openGoal`:`drawer.proposalViewGoal`)]}):null,f.item.status===`stale`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-stale`,children:m(`drawer.proposalStale`)}):null,f.item.status===`error`&&!f.item.reviewPlan?.retryOriginal?(0,z.jsxs)(`div`,{className:`personal-proposal-state is-error`,children:[(0,z.jsx)(`span`,{children:f.item.reviewPlan?.reason===`readback_unverified`?m(`actionReview.readback_unverified`):m(`drawer.proposalApplyFailed`)}),f.item.errorMessage?(0,z.jsx)(`small`,{children:f.item.errorMessage}):null,(0,z.jsx)(`small`,{children:m(f.item.actionKind===`team.plan`?`proposal.teamPlan.retryHint`:`drawer.proposalApplyFailedHint`)})]}):null,f.item.status===`rejected`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-error`,children:m(`drawer.proposalRejected`)}):null,f.item.status===`deferred`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-gated`,children:m(`drawer.proposalDeferred`)}):null,f.item.status===`gated`?(0,z.jsxs)(`div`,{className:`personal-proposal-state is-gated`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f.item.actionKind===`operation.execute`?f.item.primaryLabel:m(`drawer.gateRequiresHost`)}),f.item.actionKind===`operation.execute`?f.item.impact:m(`drawer.gateRequiresHostDescription`)]}),f.item.gate?.nextAction?(0,z.jsx)(`small`,{children:f.item.gate.nextAction}):null]}):null,f.item.status===`gated`&&f.item.actionKind===`gate.resolve`?(()=>{let e=e=>f.item.fields.find(t=>t.key===e)?.value,t=e(`goal_id`),n=e(`todo_id`);return!t||!n?null:(0,z.jsxs)(`section`,{className:`personal-detail-card personal-gate-cli-hint`,children:[(0,z.jsx)(`small`,{children:m(`drawer.gateApproveHint`)}),(0,z.jsxs)(`code`,{children:[`loopx todo complete --goal-id `,t,` --todo-id `,n,` --decision-outcome approve`]}),(0,z.jsx)(`small`,{children:m(`drawer.gateRejectHint`)})]})})():null,!u&&f.item.workspaceCandidates?.length?(0,z.jsx)(`div`,{className:`personal-workspace-candidates`,"aria-label":m(`drawer.workspaceCandidates`),children:f.item.workspaceCandidates.map(e=>(0,z.jsxs)(`button`,{onClick:()=>void r.onSelectWorkspaceCandidate?.(f.item,e.workspaceRef),type:`button`,children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.workspaceRef})]},e.workspaceRef))}):null,!u&&f.item.actionKind!==`operation.execute`&&f.item.status===`error`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void(f.item.actionKind===`team.plan`||f.item.reviewPlan?.retryOriginal?r.onApplyProposal?.(f.item):r.onTransitionProposal?.(f.item,`regenerate`)),type:`button`,children:[(0,z.jsx)($m,{size:17}),m(f.item.reviewPlan?.retryOriginal?`drawer.retryOriginal`:f.item.actionKind===`team.plan`?`proposal.teamPlan.retry`:`drawer.proposalRegenerate`)]}):!u&&f.item.actionKind!==`operation.execute`&&f.item.status!==`gated`&&(f.item.actionKind!==`team.plan`||f.item.status!==`applied`)?(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:![`ready`,`deferred`].includes(f.item.status)||f.item.reviewPlan?.canApply===!1,onClick:()=>void r.onApplyProposal?.(f.item),type:`button`,children:[(0,z.jsx)(hm,{size:17}),f.item.status===`applying`?m(`drawer.applying`):f.item.primaryLabel??m(`drawer.apply`)]}):null,!u&&f.item.actionKind!==`operation.execute`&&([`stale`,`gated`,`rejected`].includes(f.item.status)||f.item.status===`ready`&&f.item.reviewPlan?.canApply===!1)?(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`regenerate`),type:`button`,children:[(0,z.jsx)($m,{size:16}),m(`drawer.proposalRecheck`)]}):null,!u&&f.item.actionKind!==`operation.execute`&&[`ready`,`gated`].includes(f.item.status)?(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`defer`),type:`button`,children:m(`drawer.proposalDefer`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`reject`),type:`button`,children:m(`drawer.decisionReject`)})]}):null,[`applied`,`applying`].includes(f.item.status)?null:(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:c,type:`button`,children:m(`drawer.proposalClose`)})]}):null,f.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsxs)(`small`,{children:[f.item.scheduleKind===`heartbeat`?`Goal Heartbeat`:`continuous_monitor`,` · `,f.item.status??`active`]}),(0,z.jsx)(`h3`,{children:f.item.label}),(0,z.jsx)(`p`,{children:f.item.target??f.item.schedule??m(`drawer.scheduleDefaultTarget`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleTimezone`)}),(0,z.jsx)(`dd`,{children:f.item.timezone??m(`drawer.scheduleLocalTimezone`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleNext`)}),(0,z.jsx)(`dd`,{children:f.item.nextRunAt??m(`drawer.schedulePending`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleLast`)}),(0,z.jsx)(`dd`,{children:f.item.previousRunAt??m(`drawer.scheduleNeverRun`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleNotification`)}),(0,z.jsx)(`dd`,{children:f.item.notificationRule??m(`drawer.scheduleDefaultNotification`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleStopCondition`)}),(0,z.jsx)(`dd`,{children:f.item.stopCondition??m(`drawer.scheduleDefaultStop`)})]})]})]}),!u&&f.item.scheduleKind===`monitor`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`run_now`),type:`button`,children:[(0,z.jsx)(Ym,{size:16}),m(`drawer.scheduleRunNow`)]}):null,u?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,f.item.status===`paused`?`resume`:`pause`),type:`button`,children:[f.item.status===`paused`?(0,z.jsx)(Ym,{size:16}):(0,z.jsx)(Jm,{size:16}),f.item.status===`paused`?m(`drawer.scheduleResume`):m(`drawer.schedulePause`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`edit`),type:`button`,children:[(0,z.jsx)(mm,{size:16}),m(`drawer.scheduleEdit`)]})]}),u?null:(0,z.jsxs)(`button`,{className:`personal-danger-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`stop`),type:`button`,children:[(0,z.jsx)(lh,{size:16}),m(`drawer.scheduleStop`,{kind:f.item.scheduleKind===`heartbeat`?` Heartbeat`:m(`drawer.titleSchedule`)})]}),(0,z.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-execution-history-title`,children:[(0,z.jsx)(`h3`,{id:`personal-execution-history-title`,children:m(`drawer.executionHistory`)}),f.item.executionHistory?.length?(0,z.jsx)(`ol`,{children:f.item.executionHistory.map((e,t)=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.timestamp})]}),(0,z.jsx)(`em`,{className:`is-${e.status}`,children:e.status})]},`${e.timestamp}:${e.runId??t}`))}):(0,z.jsx)(`p`,{children:m(`drawer.noExecutionHistory`)})]})]}):null,f.kind===`run`||f.kind===`proposal`||f.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{"aria-expanded":_,className:`personal-diagnostics-trigger`,onClick:()=>v(e=>!e),type:`button`,children:[(0,z.jsx)(`span`,{children:m(`drawer.advancedDiagnostics`)}),(0,z.jsx)(gm,{className:_?`is-open`:``,size:16})]}),_?(0,z.jsxs)(`div`,{className:`personal-diagnostics`,children:[(0,z.jsxs)(`code`,{children:[`goal_id: `,ye]}),(0,z.jsxs)(`code`,{children:[`kind: `,f.kind]}),f.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`session_id: `,f.item.sessionId??m(`drawer.notLinked`)]}),(0,z.jsxs)(`code`,{children:[`turn_id: `,f.item.turnId??m(`common.none`)]}),(0,z.jsxs)(`code`,{children:[`adapter: `,f.item.agentId]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.sessionStatus??f.item.status]})]}):f.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`action: `,f.item.actionKind]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.status]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`schedule_id: `,f.item.scheduleId]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.status??`active`]})]})]}):null]}):null]})]})}var sx=[`checking`,`connecting`,`downloading`,`installing_app`,`installing_runtime`],cx={desktop_status_unavailable:[`无法读取 App 更新状态。请重启 App 后再试;若仍失败,请重新安装最新 App。`,`Cannot read the App update status. Restart the App; if this persists, reinstall the latest App.`],update_feed_unavailable:[`此通道的更新源尚未就绪或暂时不可用。可稍后重新检查,当前版本仍可继续使用。`,`This channel's update feed is not ready or temporarily unavailable. Check again later; you can keep using this version.`],update_feed_invalid:[`更新源格式异常。请稍后重新检查。`,`The update feed is invalid. Check again later.`],update_platform_unavailable:[`此通道尚无适用于本机的更新包。`,`This channel has no update package for this platform.`],update_check_timeout:[`检查更新超时。请稍后重试。`,`The update check timed out. Try again later.`],update_network_failed:[`无法连接更新服务器。请检查网络后重试。`,`Cannot reach the update server. Check your connection and retry.`],update_download_or_signature_failed:[`更新包下载或签名校验失败,尚未安装。请重新检查更新。`,`Download or signature verification failed; the update was not installed. Check for updates again.`]};function lx(e,t=`update_failed`){return{phase:`error`,details:{code:typeof e==`string`&&Object.hasOwn(cx,e)?e:t}}}function ux(){let{locale:e}=Ji(),t=e===`zh-CN`,[n,r]=(0,R.useState)(!1),i=(0,R.useRef)(null),[a,o]=(0,R.useState)(`stable`),[s,c]=(0,R.useState)({phase:`idle`}),[l,u]=(0,R.useState)(``),[d,f]=(0,R.useState)(!1),p=(0,R.useRef)(!1),m=window.__TAURI__?.core.invoke,h=sx.includes(s.phase);(0,R.useEffect)(()=>{let e=i.current;if(!e)return;let t=()=>r(e.matches(`:popover-open`));return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)},[]),(0,R.useEffect)(()=>{if(!m)return;let e=!0;return m(`desktop_update_status`).then(t=>{if(!e)return;u(t.app_version),f(t.rollback_available===!0),t.state?.phase&&c(t.state);let n=t.state?.details?.channel??(t.app_version.includes(`-main.`)?`main`:`stable`);o(n),t.state?.phase||m(`desktop_update`,{action:`check`,channel:n}).then(t=>{e&&c(t)}).catch(t=>{e&&c(lx(t))})}).catch(()=>{e&&c(lx(null,`desktop_status_unavailable`))}),()=>{e=!1}},[m]),(0,R.useEffect)(()=>{if(!m||!h)return;let e=window.setInterval(()=>{m(`desktop_update_status`).then(e=>{e.state?.phase&&c(e.state)}).catch(()=>{})},1e3);return()=>window.clearInterval(e)},[m,h]);async function g(e){if(!(!m||p.current)){p.current=!0,c({phase:e===`check`?`checking`:e===`repair`?`installing_runtime`:`downloading`});try{if(!l){let e=await m(`desktop_update_status`);u(e.app_version),f(e.rollback_available===!0)}c(await m(`desktop_update`,{action:e,channel:a}))}catch(e){c(lx(e,l?`update_failed`:`desktop_status_unavailable`))}finally{p.current=!1}}}let _={service_error:t?`运行时已安装,但服务尚未连接。可重试更新、修复或恢复上版。`:`Runtime installed, but services are unavailable. Retry updates, repair, or restore the previous version.`,runtime_pairing_required:t?`本机 CLI 运行时与 App 自带运行时不一致。回到 App 启动界面可「更新 App 与运行时」或「回退 CLI」。`:`This host's CLI runtime and the App's bundled runtime differ. On the App boot screen, update both or use the App's runtime.`,idle:t?`App 会检查可用更新,不会自动安装。`:`Updates are checked automatically, never installed without confirmation.`,runtime_required:t?`请完成匹配组件安装,或检查 App 更新。`:`Install matching components or check for an App update.`,connecting:t?`正在连接更新后的服务…`:`Connecting to updated services…`,checking:t?`正在检查更新…`:`Checking for updates…`,available:t?`新版本已就绪,一次更新 App 与匹配的运行时。`:`Update the App and its matching runtime together.`,up_to_date:t?`当前通道暂无更新。`:`No newer update on this channel.`,downloading:t?`正在下载并校验签名…`:`Downloading and verifying signature…`,installing_app:t?`正在安装 App,请保持窗口打开。`:`Installing the App. Keep this window open.`,installing_runtime:t?`正在安装匹配的运行时,请稍候…`:`Installing the matching runtime…`,restart_required:t?`重启后将自动完成运行时安装与服务连接。`:`Restart to finish runtime installation and reconnect services.`,ready:t?`更新完成,服务已就绪。`:`Update completed; services are ready.`,error:cx[s.details?.code??``]?.[+!t]??(t?`更新未完成。请重试;启动失败可尝试修复当前版本。`:`Update incomplete. Retry; repair this version if startup fails.`)},v=h?t?`正在更新…`:`Updating…`:s.phase===`available`?t?`有可用更新`:`Update available`:s.phase===`restart_required`?t?`重启完成更新`:`Restart to finish`:s.phase===`error`?t?`更新需重试`:`Retry update`:t?`更新 LoopX`:`Update LoopX`;return(0,z.jsxs)(`div`,{className:`personal-desktop-update`,children:[(0,z.jsxs)(`button`,{className:`personal-update-trigger`,type:`button`,"aria-expanded":n,"aria-controls":`desktop-update-panel`,onClick:e=>{i.current?.style.setProperty(`bottom`,`${window.innerHeight-e.currentTarget.getBoundingClientRect().top+8}px`),i.current?.togglePopover()},children:[(0,z.jsx)(Tm,{size:16,"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:v}),(0,z.jsx)(vm,{size:14,"aria-hidden":`true`})]}),(0,z.jsxs)(`section`,{ref:i,popover:`auto`,id:`desktop-update-panel`,className:`personal-update-panel`,"aria-label":t?`LoopX 更新`:`LoopX updates`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:t?`LoopX 更新`:`LoopX updates`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":t?`关闭更新面板`:`Close updates`,onClick:()=>i.current?.hidePopover(),children:(0,z.jsx)(gh,{size:16,"aria-hidden":`true`})})]}),(0,z.jsxs)(`small`,{children:[l,` · `,a===`main`?t?`main 预览版`:`main preview`:t?`稳定版`:`Stable`]}),s.details?.version?(0,z.jsxs)(`p`,{children:[t?`目标版本:`:`Target: `,s.details.version]}):null,(0,z.jsxs)(`p`,{role:`status`,"aria-live":`polite`,children:[h?(0,z.jsx)(Qm,{className:`is-spinning`,size:14,"aria-hidden":`true`}):null,_[s.phase]]}),s.phase===`downloading`&&s.details?.total?(0,z.jsx)(`progress`,{"aria-label":t?`下载进度`:`Download progress`,max:s.details.total,value:s.details.received??0}):null,m?(0,z.jsx)(`div`,{className:`personal-update-actions`,children:s.phase===`restart_required`?(0,z.jsx)(`button`,{type:`button`,onClick:()=>void g(`restart`),children:t?`重启完成更新`:`Restart to finish`}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,disabled:h,onClick:()=>void g(`check`),children:t?`检查更新`:`Check for updates`}),s.phase===`available`?(0,z.jsx)(`button`,{type:`button`,onClick:()=>void g(`apply`),children:t?`更新并准备重启`:`Install update`}):null]})}):(0,z.jsx)(`p`,{children:t?`请在 LoopX App 中更新;浏览器自身无需安装包。`:`Update from the LoopX App; the browser needs no installer.`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`高级选项`:`Advanced options`}),(0,z.jsxs)(`label`,{children:[t?`更新通道`:`Update channel`,(0,z.jsxs)(`select`,{disabled:h||s.phase===`restart_required`,value:a,onChange:e=>{o(e.target.value),c({phase:`idle`})},children:[(0,z.jsx)(`option`,{value:`stable`,children:t?`稳定版(推荐)`:`Stable (recommended)`}),(0,z.jsx)(`option`,{value:`main`,children:t?`main 预览版`:`main preview`})]})]}),(0,z.jsx)(`p`,{children:t?`App 与匹配的 CLI 一起更新,服务可能短暂断开。不删除 Goal 数据。`:`Updates the App and matching CLI. Services may briefly disconnect. Goal data is not deleted.`}),m?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:t?`启动失败时,可重装当前 App 随附的运行时。`:`If startup fails, reinstall this App's bundled runtime.`}),(0,z.jsx)(`button`,{disabled:h||s.phase===`restart_required`,type:`button`,onClick:()=>void g(`repair`),children:t?`修复当前版本`:`Repair this version`})]}):null,m&&d?(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`恢复上个版本`:`Restore previous version`}),(0,z.jsx)(`p`,{children:t?`将恢复已保留的 App 和它的运行时,需要重启。`:`Restore the retained App and its runtime, then restart.`}),(0,z.jsx)(`button`,{disabled:h,type:`button`,onClick:()=>void g(`rollback`),children:t?`确认恢复上版`:`Restore previous version`})]}):null]})]})]})}var dx=e=>`loopx-sidebar-goal-order-v1:${encodeURIComponent(e)}`;function fx(e){try{let t=JSON.parse(e??`null`);return Array.isArray(t)&&t.every(e=>typeof e==`string`)?[...new Set(t)]:[]}catch{return[]}}function px(e,t){let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.goalId)??1/0)-(n.get(t.goalId)??1/0))}function mx(e,t,n,r,i){if(n===r||!t.includes(n)||!t.includes(r))return e;let a=[...new Set([...e,...t])].filter(e=>e!==n);return a.splice(a.indexOf(r)+Number(i),0,n),a}function hx(e,t){let n=dx(t),[r,i]=(0,R.useState)(()=>{try{return fx(localStorage.getItem(n))}catch{return[]}}),[a,o]=(0,R.useState)(!1),[s,c]=(0,R.useState)(null),[l,u]=(0,R.useState)(null),d=(0,R.useRef)(null),f=(0,R.useRef)(!1),p=px(e,r),m=p.map(e=>e.goalId);function h(t,a,s){let l=mx(r,m,t,a,s);if(l===r)return;i(l);let u=px(e,l),d=u.findIndex(e=>e.goalId===t),f=u[d];f&&c({title:f.title,position:d+1});try{localStorage.setItem(n,JSON.stringify(l)),o(!1)}catch{o(!0)}}function g(){d.current=null,u(null)}return{sorted:p,target:l,saveFailed:a,lastMoved:s,move:h,moveBy(e,t){let n=p[m.indexOf(e)+t];n&&h(e,n.goalId,t===1)},pointerProps:e=>({onPointerDown(t){f.current=!1,t.pointerType===`mouse`&&t.button===0&&(d.current={id:e,x:t.clientX,y:t.clientY,dragging:!1},t.currentTarget.setPointerCapture(t.pointerId))},onPointerMove(e){let t=d.current;if(!t||!t.dragging&&Math.hypot(e.clientX-t.x,e.clientY-t.y)<6)return;t.dragging=!0,f.current=!0;let n=document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-reorder-goal]`),r=e.currentTarget.closest(`.personal-goal-list`),i=n?.dataset.reorderGoal;if(!n||!i||!r?.contains(n)||i===t.id){u(null);return}let a=n.getBoundingClientRect();u({id:i,after:e.clientY>a.top+a.height/2})},onPointerUp(){d.current?.dragging&&l&&h(d.current.id,l.id,l.after),g()},onPointerCancel:g,onLostPointerCapture:g,onKeyDown(e){e.key===`Escape`&&g()},onClickCapture(e){f.current&&=(e.preventDefault(),e.stopPropagation(),!1)}})}}var gx=`/ssh-hosts`,_x=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/;function vx(e){return typeof e==`string`&&_x.test(e.trim())}function yx(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`SSH Host 列表响应无效。`);let t=e;if(t.ok!==!0||t.schema_version!==`ssh_host_catalog_v0`||!Array.isArray(t.hosts))throw Error(`SSH Host 列表协议不兼容,请更新本机 LoopX 服务。`);let n=new Set;return{hosts:t.hosts.flatMap(e=>{if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=String(e.alias??``).trim();return!vx(t)||n.has(t)?[]:(n.add(t),[{alias:t}])}),schemaVersion:`ssh_host_catalog_v0`}}async function bx(e=fetch,t=gx){let n=await e(t,{cache:`no-store`});if(!n.ok)throw Error(`无法读取本机 SSH Host(HTTP ${n.status})。`);return yx(await n.json())}function xx(e,t){let n=e.trim();if(!vx(n))return{error:`请选择有效的 SSH Host。`};let r=Number(t);return!Number.isInteger(r)||r<1024||r>65535?{error:`本地端口必须是 1024–65535 之间的整数。`}:{command:`ssh -N -L ${r}:127.0.0.1:8766 ${n}`,hostAlias:n,label:n,statusUrl:`http://127.0.0.1:${r}/status.json`}}var Sx=`/api/ssh-source/ensure`,Cx=`/api/ssh-source/goal-lifecycle`;async function wx(e,t){let n=await fetch(Sx,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({host_alias:e,local_port:Number(t)})}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error??`无法建立 SSH 隧道来源。`);if(!r?.ok)throw Error(`无法建立 SSH 隧道来源。`);return r}async function Tx(e,t,n,r,i=fetch){let a=await i(Cx,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({goal_id:t,host_alias:e,operation:n,reason:r})}),o=await a.json().catch(()=>null);if(!a.ok)throw Error(o?.error??`无法更新远端 Goal 生命周期。`);if(!o?.ok||o.schema_version!==`loopx_remote_goal_lifecycle_v1`||o.goal_id!==t||o.host_alias!==e||o.operation!==n||o.activation_state!==(n===`stop`?`stopped`:`active`)||o.projection_verified!==!0)throw Error(`远端 Goal 生命周期回读未验证。`);return o}function Ex({activeSource:e,connectionState:t,errorMessage:n,onAdd:r,onConfiguredHostsLoaded:i,onRemove:a,onSelect:o,sources:s}){let{t:c}=Ji(),[l,u]=(0,R.useState)(!1),[d,f]=(0,R.useState)(null),[p,m]=(0,R.useState)(`configured`),[h,g]=(0,R.useState)([]),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)(!1),[C,w]=(0,R.useState)(``),[T,E]=(0,R.useState)(``),[D,O]=(0,R.useState)(`8876`),[k,A]=(0,R.useState)(``),ee=`configured:`,j=[...s.map(e=>({label:e.label,value:e.id})),...h.filter(e=>!s.some(t=>t.label===e.alias)).map(e=>({group:c(`source.configuredGroup`,{count:h.length}),label:e.alias,value:`${ee}${e.alias}`}))],M=(0,R.useMemo)(()=>h.some(e=>e.alias===C)?xx(C,D):{error:c(`source.selectHost`)},[h,C,D,c]);(0,R.useEffect)(()=>{te()},[]);async function te(){b(!0),v(null);try{let e=await bx();g(e.hosts),i?.(e.hosts.map(e=>e.alias)),w(t=>t||e.hosts[0]?.alias||``),e.hosts.length||v(c(`source.hostEmpty`))}catch(e){v(e instanceof Error?e.message:c(`source.hostLoadError`))}finally{b(!1)}}function ne(){u(!0),m(`configured`),f(null),te()}function N(){u(!1),m(`configured`),v(null),S(!1),w(``),f(null),E(``),O(`8876`),A(``)}function P(){let e=r({label:T,statusUrl:k});if(e.error){f(e.error);return}N()}function re(){if(`error`in M){f(M.error??c(`source.invalid`));return}let e=r({ensureTunnel:!0,hostAlias:M.hostAlias,label:M.label,statusUrl:M.statusUrl});if(e.error){f(e.error);return}N()}function ie(e){let t=new Set;for(let e of s)try{t.add(new URL(e.statusUrl).port)}catch{}let n=`8877`;for(let e=8877;e<9077;e+=1)if(!t.has(String(e))){n=String(e);break}let i=xx(e,n);if(`error`in i){f(i.error??c(`source.invalid`));return}let a=r({ensureTunnel:!0,hostAlias:i.hostAlias,label:i.label,statusUrl:i.statusUrl});a.error?f(a.error):f(null),O(n)}async function ae(){if(`error`in M){f(M.error??c(`source.invalid`));return}try{await navigator.clipboard.writeText(M.command),S(!0),f(null)}catch{f(c(`source.copyError`))}}return(0,z.jsxs)(`section`,{"aria-label":c(`source.controlPlane`),className:`personal-status-source`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{children:`Control plane`}),(0,z.jsx)(`button`,{"aria-label":c(`source.addSsh`),onClick:ne,title:c(`source.add`),type:`button`,children:(0,z.jsx)(Xm,{size:14})})]}),(0,z.jsx)(fb,{ariaLabel:c(`source.select`),className:`personal-status-source-select`,icon:(0,z.jsx)(ih,{size:15}),onChange:e=>{if(e.startsWith(ee)){ie(e.slice(11));return}o(e)},options:j,value:e.id}),(0,z.jsxs)(`div`,{className:`personal-status-source-meta`,children:[(0,z.jsxs)(`span`,{className:`is-${t}`,children:[(0,z.jsx)(`i`,{}),c(t===`loading`?`source.connecting`:t===`error`?`source.notAvailable`:`source.connected`)]}),(0,z.jsx)(`small`,{children:e.readOnly?c(`source.readOnly`):c(`source.localInteractive`)}),e.kind===`ssh_tunnel`?(0,z.jsx)(`button`,{"aria-label":c(`source.remove`,{source:e.label}),onClick:()=>a(e.id),title:c(`source.removeCurrent`),type:`button`,children:(0,z.jsx)(fh,{size:12})}):null]}),n?(0,z.jsx)(`p`,{className:`personal-status-source-error`,role:`alert`,children:n}):null,l?(0,z.jsxs)(`div`,{className:`personal-status-source-form`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:c(`source.addSsh`)}),(0,z.jsx)(`button`,{"aria-label":c(`source.closeForm`),onClick:N,type:`button`,children:(0,z.jsx)(gh,{size:13})})]}),(0,z.jsxs)(`div`,{"aria-label":c(`source.addMethod`),className:`personal-status-source-modes`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":p===`configured`,onClick:()=>{m(`configured`),f(null)},role:`tab`,type:`button`,children:c(`source.configured`)}),(0,z.jsx)(`button`,{"aria-selected":p===`manual`,onClick:()=>{m(`manual`),f(null)},role:`tab`,type:`button`,children:c(`source.manual`)})]}),p===`configured`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.configuredCount`,{count:h.length})}),(0,z.jsxs)(`span`,{className:`personal-status-source-field-row`,children:[(0,z.jsx)(`input`,{"aria-label":c(`source.host`),disabled:y||!h.length,list:`loopx-configured-ssh-hosts`,onChange:e=>{w(e.target.value),S(!1)},placeholder:c(y?`source.loadingHosts`:`source.hostPlaceholder`),value:C}),(0,z.jsx)(`datalist`,{id:`loopx-configured-ssh-hosts`,children:h.map(e=>(0,z.jsx)(`option`,{value:e.alias},e.alias))}),(0,z.jsx)(`button`,{"aria-label":c(`source.refreshHosts`),disabled:y,onClick:()=>void te(),title:c(`source.refreshHosts`),type:`button`,children:(0,z.jsx)(eh,{size:13})})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.localPort`)}),(0,z.jsx)(`input`,{"aria-label":c(`source.localPort`),inputMode:`numeric`,onChange:e=>{O(e.target.value),S(!1)},value:D})]}),(0,z.jsxs)(`div`,{className:`personal-status-source-command`,children:[(0,z.jsx)(`code`,{children:`error`in M?c(`source.tunnelCommandPending`):M.command}),(0,z.jsxs)(`button`,{"aria-label":c(`source.copyCommand`),disabled:`error`in M,onClick:()=>void ae(),type:`button`,children:[(0,z.jsx)(Cm,{size:12}),c(x?`source.copied`:`source.copy`)]})]}),_?(0,z.jsx)(`p`,{className:`is-error`,children:_}):null,(0,z.jsx)(`p`,{children:c(`source.description`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,disabled:`error`in M,onClick:re,type:`button`,children:c(`source.addConfigured`)})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.name`)}),(0,z.jsx)(`input`,{autoFocus:!0,maxLength:48,onChange:e=>E(e.target.value),placeholder:c(`source.namePlaceholder`),value:T})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.statusUrl`)}),(0,z.jsx)(`input`,{onChange:e=>A(e.target.value),placeholder:`http://127.0.0.1:8876/status.json`,value:k})]}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:`ssh -N -L 8876:127.0.0.1:8766 `})}),(0,z.jsx)(`p`,{children:c(`source.manualDescription`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,onClick:P,type:`button`,children:c(`source.addConfigured`)})]}),d?(0,z.jsx)(`p`,{className:`is-error`,role:`alert`,children:d}):null]}):null]})}var Dx={需修复:`is-danger`,等你:`is-warning`,等待条件:`is-info`,推进中:`is-success`,安静运行:`is-quiet`,已完成:`is-quiet`,已停止:`is-stopped`};function Ox({attentionCount:e,goals:t,goalArchiveLoadState:n={error:null,phase:`ready`},lifecycleBusyGoalIds:r,goalLifecycleOperations:i,onRequestGoalCreate:a,onOpenSettings:o,onRetryGoalArchive:s,onRequestGoalLifecycle:c,onSelectGoal:l,selectedGoalId:u,statusSourceControl:d}){let{locale:f,t:p}=Ji(),[m,h]=(0,R.useState)(!1),g=hx(t.filter(e=>e.activationState!==`stopped`),d?.activeSource.statusUrl??`/status.json`),_=g.sorted,v=t.filter(e=>e.activationState===`stopped`),y=e=>!!c&&(!i||i.includes(e)),b=(e,t)=>(0,z.jsxs)(`div`,{className:`personal-goal-row${g.target?.id===e.goalId?g.target.after?` is-drop-after`:` is-drop-before`:``}`,"data-reorder-goal":t?void 0:e.goalId,"data-load-error":e.loadError,children:[(0,z.jsxs)(`button`,{...t?{}:g.pointerProps(e.goalId),title:t?void 0:p(`sidebar.dragGoal`),"aria-current":u===e.goalId?`page`:void 0,className:`personal-goal-link`,onClick:()=>l(e.goalId),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-goal-state-dot ${e.loadState?``:Dx[e.state]}`}),(0,z.jsxs)(`span`,{className:`personal-goal-link-copy`,children:[(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsxs)(`small`,{children:[e.loadState&&(!t||u===e.goalId)?p(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,f),e.needsYou&&!t?` · ${p(`home.lane.needsYou`)}`:``]})]}),(0,z.jsx)(_m,{size:15})]}),!t&&m?(0,z.jsxs)(`div`,{className:`personal-goal-move-actions`,children:[(0,z.jsx)(`button`,{type:`button`,"aria-label":p(`sidebar.moveUp`,{goal:e.title}),disabled:_[0]?.goalId===e.goalId,onClick:()=>g.moveBy(e.goalId,-1),children:(0,z.jsx)(lm,{"aria-hidden":`true`,size:13})}),(0,z.jsx)(`button`,{type:`button`,"aria-label":p(`sidebar.moveDown`,{goal:e.title}),disabled:_.at(-1)?.goalId===e.goalId,onClick:()=>g.moveBy(e.goalId,1),children:(0,z.jsx)(am,{"aria-hidden":`true`,size:13})})]}):null,c&&y(t?`resume`:`stop`)?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{"aria-label":`${p(t?`sidebar.resume`:`sidebar.stop`)} ${e.title}`,"aria-busy":r?.has(e.goalId)||void 0,className:`personal-goal-lifecycle${r?.has(e.goalId)?` is-pending`:``}`,disabled:r?.has(e.goalId),onClick:()=>c(e,t?`resume`:`stop`),title:p(t?`sidebar.resumeGoal`:`sidebar.stopGoal`),type:`button`,children:r?.has(e.goalId)?(0,z.jsx)(zm,{size:13}):t?(0,z.jsx)($m,{size:13}):(0,z.jsx)(Jm,{size:13})}),t&&y(`delete`)?(0,z.jsx)(`button`,{"aria-label":`${p(`sidebar.delete`)} ${e.title}`,className:`personal-goal-lifecycle personal-goal-delete`,onClick:()=>c(e,`delete`),title:p(`sidebar.deleteGoal`),type:`button`,children:(0,z.jsx)(fh,{size:13})}):null]}):null]},e.goalId);return(0,z.jsxs)(`div`,{className:`personal-goal-directory`,children:[(0,z.jsxs)(`div`,{className:`personal-sidebar-brand`,children:[(0,z.jsx)(`span`,{className:`personal-brand-mark`,children:(0,z.jsx)(fm,{size:18})}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:`LoopX`})})]}),d?(0,z.jsx)(Ex,{...d}):null,(0,z.jsxs)(`nav`,{"aria-label":p(`home.workspace`),className:`personal-sidebar-nav`,children:[(0,z.jsxs)(`button`,{"aria-current":u===null?`page`:void 0,className:`personal-manager-link`,onClick:()=>l(null),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-manager-icon`,children:(0,z.jsx)(fm,{size:17})}),(0,z.jsx)(`span`,{children:p(`sidebar.manager`)}),e>0?(0,z.jsx)(`span`,{className:`personal-sidebar-count`,children:e}):null,(0,z.jsx)(_m,{size:15})]}),(0,z.jsxs)(`div`,{className:`personal-sidebar-section-title`,children:[(0,z.jsx)(`span`,{children:`Goals`}),(0,z.jsxs)(`span`,{className:`personal-sidebar-title-actions`,children:[(0,z.jsx)(`small`,{children:_.length}),(0,z.jsx)(`button`,{"aria-label":p(`sidebar.sortGoals`),title:p(`sidebar.sortGoals`),"aria-pressed":m,onClick:()=>h(!m),type:`button`,children:(0,z.jsx)(cm,{"aria-hidden":`true`,size:15})}),a?(0,z.jsx)(`button`,{"aria-label":p(`sidebar.createGoal`),onClick:a,type:`button`,children:(0,z.jsx)(Xm,{size:15})}):null]})]}),g.saveFailed?(0,z.jsx)(`p`,{role:`status`,children:p(`sidebar.orderNotSaved`)}):null,(0,z.jsx)(`span`,{className:`personal-sr-only`,role:`status`,children:g.lastMoved?p(`sidebar.goalMoved`,{goal:g.lastMoved.title,position:g.lastMoved.position}):``}),(0,z.jsx)(`div`,{className:`personal-goal-list`,children:_.map(e=>b(e,!1))}),v.length||n.phase===`loading`||n.phase===`error`?(0,z.jsxs)(`details`,{className:`personal-stopped-goals`,open:n.phase===`error`||void 0,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(gm,{size:13}),(0,z.jsx)(`span`,{children:p(`sidebar.stopped`)}),n.phase===`loading`?(0,z.jsx)(zm,{"aria-label":p(`sidebar.stoppedLoading`),className:`is-spinning`,size:13}):(0,z.jsx)(`small`,{children:v.length})]}),(0,z.jsxs)(`div`,{className:`personal-goal-list is-stopped`,children:[n.phase===`error`?(0,z.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`alert`,children:[(0,z.jsx)(`span`,{children:p(`sidebar.stoppedLoadFailed`)}),s?(0,z.jsx)(`button`,{onClick:s,type:`button`,children:p(`sidebar.retryStopped`)}):null]}):null,v.map(e=>b(e,!0))]})]}):null]}),(0,z.jsxs)(`div`,{className:`personal-sidebar-footer`,children:[(0,z.jsx)(ux,{}),o?(0,z.jsxs)(`button`,{"aria-label":p(`settings.open`),className:`personal-sidebar-utility`,onClick:o,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-sidebar-utility-icon`,children:(0,z.jsx)(ah,{size:17})}),(0,z.jsx)(`span`,{className:`personal-sidebar-utility-copy`,children:(0,z.jsx)(`strong`,{children:p(`settings.open`)})}),(0,z.jsx)(_m,{"aria-hidden":`true`,size:15})]}):null]})]})}var kx=J({ok:X(!0),total:G().int().nonnegative(),next_cursor:W().nullable(),items:q(J({todo_id:W(),text:W(),claimed_by:W().nullable(),evidence:W().nullable(),priority:W().nullable(),task_class:W().nullable()})).max(40)});function Ax({goal:e,agentId:t,seed:n,enabled:r,listView:i=!1,onSelect:a}){let{t:o}=Ji(),s=(0,R.useId)(),[c,l]=(0,R.useState)(!1),u=!i||c,d=i?96:148,[f,p]=(0,R.useState)(n),[m,h]=(0,R.useState)(t===`all`?e.doneTodoCount??n.length:n.length),[g,_]=(0,R.useState)(void 0),[v,y]=(0,R.useState)(!1),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(!1),[w,T]=(0,R.useState)({top:0,height:600}),[E,D]=(0,R.useState)(null),O=(0,R.useRef)(null),k=(0,R.useRef)(null),[A,ee]=(0,R.useState)(0);(0,R.useEffect)(()=>{let e=O.current;if(!e)return;let t=new ResizeObserver(()=>T({top:e.scrollTop,height:e.clientHeight}));return t.observe(e),()=>{t.disconnect(),k.current?.abort()}},[]);let j=g===void 0||w.top+w.height>=f.length*d-d*2;(0,R.useEffect)(()=>{if(!r||!u||!j||g===null||b||k.current)return;let n=new AbortController;k.current=n,y(!0);let i=new URLSearchParams({goal_id:e.goalId});t!==`all`&&i.set(`agent_id`,t),g&&i.set(`cursor`,g),fetch(`/api/chat/completed-todos?${i}`,{signal:n.signal}).then(async e=>{if(e.status===409&&C(!0),!e.ok)throw Error(`history unavailable`);let t=kx.parse(await e.json());if(n.signal.aborted)return;let r=t.items.map(e=>({todoId:e.todo_id,text:e.text,claimedBy:e.claimed_by,evidence:e.evidence,priority:e.priority,taskClass:e.task_class,done:!0,status:`done`}));p(e=>g===void 0?r:[...e,...r.filter(t=>!e.some(e=>e.todoId===t.todoId))]),h(t.total),_(t.next_cursor)}).catch(()=>{n.signal.aborted||x(!0)}).finally(()=>{n.signal.aborted||(k.current=null,y(!1))})},[r,u,j,g,b,A,e.goalId,t,v]),(0,R.useEffect)(()=>{O.current&&(O.current.scrollTop=0),T({top:0,height:O.current?.clientHeight??600}),D(null)},[i]);let M=Math.max(0,Math.floor(w.top/d)-3),te=Math.min(f.length,Math.ceil((w.top+w.height)/d)+3),ne=Array.from({length:Math.max(0,te-M)},(e,t)=>M+t);return E!==null&&El(e=>!e),children:[(0,z.jsx)(`span`,{"aria-hidden":`true`,children:c?`▾`:`▸`}),` `,o(`tasks.completed`)]}):(0,z.jsxs)(`strong`,{children:[(0,z.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-done`}),o(`tasks.completed`)]}),(0,z.jsx)(`span`,{children:m})]}),(0,z.jsxs)(`div`,{id:s,hidden:!u,"aria-label":o(`tasks.completed`),className:`personal-task-lane-scroll`,ref:O,role:`region`,tabIndex:0,onScroll:e=>T({top:e.currentTarget.scrollTop,height:e.currentTarget.clientHeight}),children:[(0,z.jsx)(`div`,{className:`personal-completed-window`,style:{height:f.length*d},children:ne.map(t=>{let n=f[t];return(0,z.jsx)(`div`,{className:`personal-task-card personal-completed-row`,style:{top:t*d,height:d},children:(0,z.jsxs)(`button`,{type:`button`,onFocus:()=>D(t),onBlur:()=>D(null),onClick:()=>a({kind:`todo`,item:{...n,goalId:e.goalId,goalTitle:e.title,ownerLabel:n.claimedBy??e.agentLabel??e.agentId}}),children:[(0,z.jsx)(`span`,{className:`is-done`,children:`✓`}),(0,z.jsx)(`strong`,{children:$d(n.text,112)}),(0,z.jsx)(`small`,{children:n.claimedBy??e.agentLabel??e.agentId})]})},n.todoId)})}),(0,z.jsx)(`div`,{className:`personal-completed-footer`,role:`status`,children:v?o(`tasks.historyLoading`):b?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`span`,{children:o(S?`tasks.historyExpired`:`tasks.historyError`)}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>{S&&(_(void 0),O.current&&(O.current.scrollTop=0)),C(!1),x(!1),ee(e=>e+1)},children:o(`tasks.historyRetry`)})]}):r?g===null?o(`tasks.historyEnd`):(0,z.jsx)(`button`,{type:`button`,onClick:()=>{O.current&&(O.current.scrollTop=f.length*d)},children:o(`tasks.historyMore`)}):o(`tasks.historyLocalOnly`)})]})]})}function jx({children:e,count:t,label:n,tone:r,listView:i=!1}){let a=(0,R.useId)(),o=(0,R.useRef)(null),s=(0,R.useRef)([]),c=(0,R.useRef)(null),[l,u]=(0,R.useState)({after:!1,before:!1}),d=(0,R.useCallback)(()=>{let e=o.current;if(!e)return;let t={after:Math.max(0,e.scrollHeight-e.clientHeight)-e.scrollTop>1,before:e.scrollTop>1};u(e=>e.after===t.after&&e.before===t.before?e:t)},[]);return(0,R.useEffect)(()=>{let e=o.current;if(!e)return;let t=new ResizeObserver(d);return c.current=t,t.observe(e),e.addEventListener(`scroll`,d,{passive:!0}),d(),()=>{t.disconnect(),c.current=null,s.current=[],e.removeEventListener(`scroll`,d)}},[i,d]),(0,R.useEffect)(()=>{let e=o.current,t=c.current;if(!e||!t)return;for(let e of s.current)t.unobserve(e);let n=Array.from(e.children).filter(e=>e instanceof HTMLElement);for(let e of n)t.observe(e);s.current=n,d()},[e,t,i,d]),i?!t&&r!==`done`?null:(0,z.jsxs)(`details`,{className:`personal-task-group tone-${r}`,open:!0,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(gm,{size:16}),(0,z.jsx)(`strong`,{children:n}),(0,z.jsx)(`span`,{children:t})]}),(0,z.jsx)(`div`,{className:`personal-task-list-rows`,children:e})]}):(0,z.jsxs)(`section`,{className:`personal-object-list personal-task-lane`,children:[(0,z.jsxs)(`header`,{id:a,children:[(0,z.jsxs)(`strong`,{children:[(0,z.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-${r}`}),n]}),(0,z.jsx)(`span`,{children:t})]}),(0,z.jsx)(`div`,{"aria-labelledby":a,className:`personal-task-lane-scroll${l.before?` has-overflow-before`:``}${l.after?` has-overflow-after`:``}`,ref:o,role:`region`,tabIndex:t>0?0:-1,children:e})]})}function Mx({historyEnabled:e=!1,goal:t,items:n,onDraftTaskFromMessage:r,onOpenChat:i,onQuickComplete:a,quickCompletingTodoIds:o,onSelect:s,selectedTodoId:c=null,userTodos:l}){let{t:u}=Ji(),[d,f]=(0,R.useState)(!1),[p,m]=(0,R.useState)({goalId:``,laneId:`all`}),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{if(!c)return;let e=window.requestAnimationFrame(()=>h.current?.scrollIntoView({block:`nearest`,inline:`nearest`}));return()=>window.cancelAnimationFrame(e)},[c]);let g=l.filter(e=>e.goalId===t.goalId).map(e=>({...e,goalTitle:t.title})),_=e=>e.priority===`P0`?0:e.priority===`P1`?1:e.priority===`P2`?2:e.priority===`P3`?3:e.priority===`P4`?4:50,v=(0,R.useMemo)(()=>{let e=new Map((t.agentLanes??[]).map(e=>[e.agentId,e]));for(let n of t.agentTodos)n.claimedBy&&!e.has(n.claimedBy)&&e.set(n.claimedBy,{agentId:n.claimedBy,label:n.claimedBy});return[...e.values()]},[t.agentLanes,t.agentTodos]),y=p.goalId===t.goalId&&v.some(e=>e.agentId===p.laneId)?p.laneId:`all`,b=e=>y===`all`||e===y,x=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&!e.done).filter(e=>b(e.claimedBy)).sort((e,t)=>_(e)-_(t)),S=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&e.done).filter(e=>b(e.claimedBy)),C=n.filter(e=>e.kind===`schedule`&&b(e.schedule.agentId)),w=n.filter(e=>e.kind===`run`&&!!e.run.todoId&&b(e.run.agentId)),T=!g.length&&!x.length&&!S.length&&!C.length,E=n.filter(e=>e.kind===`message`&&(e.message.role===`user`||e.message.role===`assistant`)),D=E.reduce((e,t,n)=>t.message.role===`user`?n:e,-1),O=D>=0?E[D]?.message:null,k=D>=0?E.slice(D+1).reverse().find(e=>e.message.role===`assistant`)?.message:null,A=D>=0&&E.slice(D+1).some(e=>e.message.role===`assistant`&&e.message.pending);return(0,z.jsxs)(`section`,{"aria-label":u(`header.tasks`),className:`personal-task-board${d?` is-list-view`:``}`,children:[(0,z.jsxs)(`header`,{className:`personal-task-view-toolbar`,children:[(0,z.jsx)(`div`,{children:(0,z.jsx)(`strong`,{children:u(`header.tasks`)})}),(0,z.jsxs)(`div`,{className:`personal-task-view-switch`,role:`group`,"aria-label":u(`tasks.viewLabel`),children:[(0,z.jsx)(`button`,{type:`button`,"aria-pressed":d,onClick:()=>f(!0),children:u(`tasks.listView`)}),(0,z.jsx)(`button`,{type:`button`,"aria-pressed":!d,onClick:()=>f(!1),children:u(`tasks.boardView`)})]})]}),v.length>1?(0,z.jsxs)(`section`,{"aria-label":u(`tasks.agentLaneFilter`),className:`personal-task-lane-filter`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(fm,{size:15}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:u(`tasks.agentLane`)})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{className:`sr-only`,children:u(`tasks.agentLaneFilter`)}),(0,z.jsxs)(`select`,{"aria-label":u(`tasks.agentLaneFilter`),onChange:e=>m({goalId:t.goalId,laneId:e.target.value}),value:y,children:[(0,z.jsx)(`option`,{value:`all`,children:u(`tasks.allAgentLanes`,{count:v.length})}),v.map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))]}),(0,z.jsx)(gm,{"aria-hidden":!0,size:14})]})]}):null,O?(0,z.jsxs)(`section`,{"aria-label":u(`tasks.chatRecent`),className:`personal-task-chat-receipt`,children:[(0,z.jsx)(`span`,{className:`personal-task-chat-icon`,children:(0,z.jsx)(Um,{size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:u(A?`tasks.chatPending`:k?`tasks.chatAgentReplied`:`tasks.chatRecent`)}),(0,z.jsx)(`small`,{children:k?.returnDelivery?u(`tasks.chatReturn`):k?.agentLabel})]}),(0,z.jsx)(`div`,{className:`personal-task-reply-preview`,children:(0,z.jsx)(wb,{text:A?u(`tasks.chatPendingDescription`):(k?.text??O.text).trim().split(/\r?\n/,1)[0]})})]}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`button`,{onClick:i,type:`button`,children:[(0,z.jsx)(Um,{size:14}),u(`tasks.chatViewReply`)]}),k&&!A&&r?(0,z.jsxs)(`button`,{onClick:()=>r(k.text),type:`button`,children:[(0,z.jsx)(Rm,{size:14}),u(`tasks.convertToTask`)]}):null]})]}):null,(0,z.jsxs)(`div`,{className:d?`personal-task-grouped-list`:`personal-task-kanban`,children:[(0,z.jsxs)(jx,{listView:d,count:g.length,label:u(`timeline.waitingConfirmation`),tone:`attention`,children:[g.map(e=>{let t=Zi(e.updatedAt,u);return(0,z.jsxs)(`button`,{onClick:()=>s({item:e,kind:`attention`}),type:`button`,children:[(0,z.jsx)(`span`,{"aria-hidden":`true`,className:`is-attention`,children:`!`}),(0,z.jsx)(`strong`,{children:e.text}),(0,z.jsxs)(`small`,{children:[(0,z.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?u(`tasks.blocked`):u(`tasks.pending`)}),t?(0,z.jsx)(`span`,{className:`personal-task-age`,children:u(`tasks.waitingAge`,{age:t})}):null]})]},e.todoId)}),g.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyConfirm`)})]}),(0,z.jsxs)(jx,{listView:d,count:x.length,label:u(`tasks.pendingAndRunning`),tone:`progress`,children:[x.map(e=>{let n={...e,goalId:t.goalId,goalTitle:t.title,ownerLabel:e.claimedBy??t.agentLabel??t.agentId},r=w.find(t=>t.run.todoId===e.todoId)?.run;return(0,z.jsxs)(`div`,{className:`personal-task-card${r?` has-session`:``}${c===e.todoId?` is-selected`:``}`,ref:c===e.todoId?e=>{h.current=e}:void 0,children:[(0,z.jsxs)(`button`,{"aria-pressed":c===e.todoId,onClick:()=>s({item:n,kind:`todo`}),type:`button`,children:[(0,z.jsx)(`span`,{children:`○`}),(0,z.jsx)(`strong`,{children:e.text}),(0,z.jsxs)(`small`,{children:[e.priority?(0,z.jsx)(`span`,{className:`personal-priority-badge is-${e.priority.toLowerCase()}`,children:e.priority}):null,e.status===`blocked`?(0,z.jsx)(`span`,{className:`personal-priority-badge is-blocked`,children:u(`tasks.blocked`)}):null,r?(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:r.status===`running`||r.status===`queued`?u(`runs.running`):r.status===`failed`?u(`tasks.sessionError`):u(`common.waiting`)}):null,e.status===`deferred`?(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:u(`drawer.taskStatusDeferred`)}):r?null:(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:u(`tasks.waiting`)}),e.claimedBy??t.agentLabel??t.agentId]})]}),(0,z.jsxs)(`div`,{className:`personal-task-card-actions`,children:[r?(0,z.jsxs)(`button`,{className:`personal-task-session-link`,"aria-label":u(`tasks.openExecution`,{name:e.text}),onClick:()=>s({item:r,kind:`run`}),title:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`),type:`button`,children:[(0,z.jsx)(Dm,{size:14}),(0,z.jsx)(`span`,{children:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`)})]}):null,a?(0,z.jsx)(`button`,{"aria-busy":o?.has(e.todoId)||void 0,"aria-label":u(`tasks.markComplete`,{name:e.text}),disabled:o?.has(e.todoId),onClick:()=>void a(n),title:u(`tasks.completed`),type:`button`,children:o?.has(e.todoId)?(0,z.jsx)(zm,{className:`personal-spin`,size:14}):(0,z.jsx)(hm,{size:14})}):null,(0,z.jsx)(`button`,{"aria-label":u(`tasks.moreActions`,{name:e.text}),onClick:()=>s({item:n,kind:`todo`}),title:u(`common.actions`),type:`button`,children:(0,z.jsx)(Em,{size:14})})]})]},e.todoId)}),x.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyRunning`)})]}),(0,z.jsxs)(jx,{listView:d,count:C.length,label:u(`tasks.scheduled`),tone:`schedule`,children:[C.map(e=>(0,z.jsxs)(`button`,{onClick:()=>s({item:e.schedule,kind:`schedule`}),type:`button`,children:[(0,z.jsx)(`span`,{children:`◷`}),(0,z.jsx)(`strong`,{children:e.schedule.label}),(0,z.jsx)(`small`,{children:e.schedule.status===`paused`?u(`schedule.paused`):u(`schedule.active`)})]},e.id)),C.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptySchedules`)})]}),(0,z.jsx)(Ax,{goal:t,agentId:y,seed:S,enabled:e,listView:d,onSelect:s},`${t.goalId}:${y}:${e}`)]}),T?(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyGoal`)}):null]})}var Nx=yd(W(),q(W())),Px=J({node_id:W().min(1),kind:Y([`deliverable`,`gate`,`gate_summary`,`lease`,`validation`,`repair`,`handoff`,`evidence`]),title:W(),state:Y([`open`,`ready`,`blocked`,`done`,`waiting`,`unknown`]),refs:Nx,owner_agent:W().optional(),actor_agent:W().optional(),from_agent:W().optional(),to_agent:W().optional()}),Fx=J({edge_id:W().min(1),from_node_id:W(),to_node_id:W(),relation:Y([`depends_on`,`blocks`,`validates`,`repairs`,`audits`,`continues`,`hands_off_to`,`supersedes`]),reason:W(),refs:Nx.optional()}),Ix=J({schema_version:X(`task_graph_projection_v0`),mode:X(`read_only`),goal_id:W(),generated_at:W().nullable(),truth_contract:J({projection_is_writable:X(!1),write_api:X(!1)}),limits:J({user_gate_node_limit:G().int().nonnegative(),user_gate_open_count:G().int().nonnegative(),user_gate_truncated_count:G().int().nonnegative(),source_truncated:K().optional(),predecessor_truncated:K().optional(),missing_predecessor_count:G().int().nonnegative().optional(),topology_complete:K().optional()}),nodes:q(Px),edges:q(Fx)}).superRefine((e,t)=>{let n=new Set(e.nodes.map(e=>e.node_id)),r=new Set(e.edges.map(e=>e.edge_id));(n.size!==e.nodes.length||r.size!==e.edges.length||e.edges.some(e=>!n.has(e.from_node_id)||!n.has(e.to_node_id)))&&t.addIssue({code:`custom`,message:`Graph identities or endpoints are invalid`})}),Lx=J({ok:X(!0),goal_id:W(),observed_at:W().datetime({offset:!0}),graph:Ix.nullable(),acceptance:uf.nullable()});function Rx(e,t){let n=Lx.parse(e);if(n.goal_id!==t||n.graph&&n.graph.goal_id!==t||n.acceptance&&n.acceptance.goal_id!==t)throw Error(`Review source does not match the selected Goal`);return n}async function zx(e,t){let n=new URLSearchParams({goal_id:e}),r=await fetch(`/api/chat/delivery-review?${n}`,{signal:t,cache:`no-store`});if(!r.ok)throw Error(`Review unavailable (${r.status})`);return Rx(await r.json(),e)}function Bx(e,t,n,r){let i=new Set([r]);for(let t of e.edges)t.from_node_id===r&&i.add(t.to_node_id),t.to_node_id===r&&i.add(t.from_node_id);let a=t.trim().toLocaleLowerCase();return e.nodes.filter(e=>{let t=[e.title,e.owner_agent,e.actor_agent,e.from_agent,e.to_agent,...Object.values(e.refs).flat()].some(e=>e?.toLocaleLowerCase().includes(a)),r=n===`all`||n===`related`&&i.has(e.node_id)||n===`conditions`&&[`gate`,`gate_summary`,`lease`].includes(e.kind)||n===`evidence`&&[`evidence`,`validation`,`repair`,`handoff`].includes(e.kind);return t&&r})}function Vx(e){let t=e.limits;return t.topology_complete!==!0||t.source_truncated===!0||t.predecessor_truncated===!0||(t.missing_predecessor_count??0)>0||t.user_gate_truncated_count>0}function Hx(e){return[`gate`,`gate_summary`,`lease`].includes(e.kind)?0:e.kind===`deliverable`?1:2}function Ux(e,t){let n=e=>String(e??t.unavailable).replace(/[\\`*_{}[\]<>|#]/g,`\\$&`).replace(/[\r\n]+/g,` `),r=[`# ${t.title}`,``,`Goal: ${n(e.goal_id)}`,`${t.observed}: ${n(e.observed_at)}`,``,t.scope,``,t.acceptanceBoundary,``,`## ${t.chain}`,``],i=e.graph;if(!i)r.push(t.noGraph);else{Vx(i)&&r.push(t.incomplete,``),r.push("```json",JSON.stringify(i.limits,null,2),"```",``);for(let e of i.nodes)r.push(`- ${n(e.title)} · ${t.kind[e.kind]} · ${t.state[e.state]}${e.owner_agent?` · ${n(e.owner_agent)}`:``}`,` ${t.refs}: ${n(e.node_id)}; ${n(JSON.stringify(e.refs))}`),(e.from_agent||e.to_agent)&&r.push(` ${n(e.from_agent)} → ${n(e.to_agent)}`),e.actor_agent&&r.push(` actor: ${n(e.actor_agent)}`);let e=new Map(i.nodes.map(e=>[e.node_id,e.title]));r.push(``,`## ${t.relations}`,``);for(let a of i.edges)r.push(`- ${n(e.get(a.from_node_id))} → ${t.relation[a.relation]} → ${n(e.get(a.to_node_id))}: ${n(a.reason)} (${n(a.edge_id)})`,` ${t.refs}: ${n(JSON.stringify(a.refs??{}))}`)}r.push(``,`## ${t.acceptance}`,``);let a=e.acceptance;if(!a)r.push(t.unavailable);else{let e=a.coverage===`partial`;r.push(`${t.required}: ${e?a.acceptance_gaps.length:t.unavailable}`,`${t.guards}: ${e?a.guards.length:t.unavailable}`,``);for(let e of a.acceptance_gaps)r.push(`### ${n(e.evidence_required)}`,``,`${t.owner}: ${n(e.owner)}`,`${t.reason}: ${n(e.reason)}`,`${t.observed}: ${n(e.observed_at)}`,`${t.refs}: ${n(e.source)}`),e.resolution_hint&&r.push(n(e.resolution_hint)),e.component_checks&&r.push(`${t.checks}:`,"```json",JSON.stringify(e.component_checks,null,2),"```"),r.push(``);r.push(`### ${t.guards}`,``);for(let e of a.guards)r.push(`- ${n(e.reason)}`,` ${t.owner}: ${n(e.owner)}; ${t.required}: ${n(e.evidence_required)}`,` ${t.refs}: ${n(e.todo_id)}; ${n(e.blocks_agent)}; ${n(e.decision_scope)}`);r.push(``,`### ${t.historical}`,``);for(let e of a.historical_progress)r.push(`- ${n(e.kind)} · ${n(e.observed_at)} · ${n(e.source)} · ${n(e.evidence_refs.join(`, `))}`);r.push(``,`${t.observedScope}: ${n(a.coverage)}; truncated=${a.truncated}`,`${t.missingSources}: ${n(a.missing_sources.join(`, `))}`,`${t.next}: ${n(a.next_action)} (${n(a.next_action_source)})`)}let o=a?.goal_acceptance_contract;if(o?.enabled===!0){let i=t.contract;r.push(``,`## ${i.title}`,``,i.boundary,`${i.source}: ${n(e.goal_id)}`,`${i.revision}: ${o.revision}`,`${i.digest}: ${n(o.digest)}`,``,`### ${i.objective}`,n(o.objective||i.unknown),``,`### ${i.criteria}`),o.non_goals.length&&r.push(`${i.nonGoals}: ${n(o.non_goals.join(`; `))}`),o.criteria.length||r.push(i.noCriteria);for(let e of o.criteria)r.push(`- ${n(e.id)}: ${n(e.description)}`);r.push(``,`### ${i.tasks}`),o.tasks.length||r.push(i.noTasks);for(let e of o.tasks)r.push(`- ${n(e.todo_id)}: ${i.taskState[e.state]}`,` ${i.criteria}: ${n(e.criterion_ids.join(`, `)||i.unknown)}`),e.reason&&r.push(` ${n(e.reason)}`),e.applicable===!1&&r.push(` ${i.notApplicable}`);r.push(``,`### ${i.verification}`,i.verificationState[o.status]),o.held_todo_ids.length&&r.push(`${i.heldTasks}: ${n(o.held_todo_ids.join(`, `))}`),r.push(``,`### ${i.receipt}`);let a=o.verification;if(!a)r.push(i.unknown);else{r.push(i.receiptNote,`${i.operation}: ${n(a.operation_id)}`,`${i.revision}: ${a.contract_revision}`,`${i.digest}: ${n(a.contract_digest)}`,`${i.verificationScope}: ${n(a.todo_id??i.allCriteria)}`);for(let e of a.results)r.push(`- ${n(e.criterion_id)}: ${e.passed?i.passed:i.failed}; ${i.exitCode}: ${e.exit_code??i.unknown}`)}}return r.join(` -`)+` -`}function Wx({goalId:e,contract:t,copy:n,current:r}){if(t?.enabled!==!0)return null;let i=`loopx --format json goal-acceptance inspect --goal-id '${e.replace(/'/g,`'\\''`)}'`;return(0,z.jsxs)(`details`,{className:`delivery-acceptance-contract`,children:[(0,z.jsx)(`summary`,{children:n.title}),(0,z.jsxs)(`div`,{className:`delivery-acceptance-content`,children:[(0,z.jsx)(`p`,{children:n.boundary}),r?null:(0,z.jsx)(`p`,{role:`status`,className:`delivery-notice`,children:n.retained}),(0,z.jsxs)(`dl`,{className:`delivery-acceptance-source`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.source}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:e})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.revision}),(0,z.jsx)(`dd`,{children:t.revision})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.digest}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.digest})})]})]}),(0,z.jsx)(`h3`,{children:n.objective}),(0,z.jsx)(`p`,{children:t.objective||n.unknown}),t.non_goals.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:n.nonGoals}),(0,z.jsx)(`ul`,{children:t.non_goals.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))})]}):null,(0,z.jsx)(`h3`,{children:n.criteria}),t.criteria.length?(0,z.jsx)(`ul`,{children:t.criteria.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.id}),` · `,e.description]},e.id))}):(0,z.jsx)(`p`,{children:n.noCriteria}),(0,z.jsx)(`h3`,{children:n.tasks}),t.tasks.length?(0,z.jsx)(`ul`,{className:`delivery-acceptance-tasks`,children:t.tasks.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`code`,{children:e.todo_id}),` · `,(0,z.jsx)(`strong`,{children:n.taskState[e.state]})]}),(0,z.jsxs)(`p`,{children:[n.criteria,`: `,e.criterion_ids.length?e.criterion_ids.join(`, `):n.unknown]}),e.applicable===!1?(0,z.jsx)(`p`,{children:n.notApplicable}):null,e.reason?(0,z.jsx)(`p`,{children:e.reason}):null]},e.todo_id))}):(0,z.jsx)(`p`,{children:n.noTasks}),(0,z.jsx)(`h3`,{children:n.verification}),(0,z.jsx)(`p`,{children:n.verificationState[t.status]}),t.held_todo_ids.length?(0,z.jsxs)(`p`,{children:[n.heldTasks,`: `,t.held_todo_ids.join(`, `)]}):null,(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.receipt}),t.verification?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:n.receiptNote}),(0,z.jsxs)(`dl`,{className:`delivery-acceptance-source`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.operation}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.verification.operation_id})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.revision}),(0,z.jsx)(`dd`,{children:t.verification.contract_revision})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.digest}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.verification.contract_digest})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.verificationScope}),(0,z.jsx)(`dd`,{children:t.verification.todo_id??n.allCriteria})]})]}),(0,z.jsx)(`ul`,{children:t.verification.results.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.criterion_id}),` · `,e.passed?n.passed:n.failed,` · `,n.exitCode,`: `,e.exit_code??n.unknown]},e.criterion_id))})]}):(0,z.jsx)(`p`,{children:n.unknown})]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.help}),(0,z.jsx)(`p`,{children:n.guidance}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:i})}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:`loopx goal-acceptance --help`})}),(0,z.jsx)(`a`,{href:`https://github.com/huangruiteng/loopx/blob/main/docs/reference/goal-acceptance-observations.md#owner-authorized-contract-v0`,target:`_blank`,rel:`noreferrer`,children:n.guide})]})]})]})}var Gx={en:{title:`Goal acceptance contract`,boundary:`Read-only owner contract. Task association and artifact checks are separate; neither automatically approves or completes the Goal.`,source:`Goal source`,revision:`Contract revision`,digest:`Contract digest`,objective:`Objective`,criteria:`Acceptance criteria`,nonGoals:`Outside scope`,tasks:`Task associations`,verification:`Artifact verification`,unknown:`Unknown`,noTasks:`No task associations reported. Coverage is unknown.`,noCriteria:`No acceptance criteria reported.`,retained:`Retained snapshot; refresh to read current acceptance facts.`,taskState:{ready:`Task association confirmed`,unbound:`Task association missing`,stale:`Task association stale`},verificationState:{unverified:`Artifact checks not verified`,accepted:`Artifact checks passed`,failed:`Artifact checks failed`,stale:`Artifact checks stale`,partial:`Task checks passed; Goal-wide verification unknown`,held:`Task associations require confirmation`},notApplicable:`Outside the current task gate`,heldTasks:`Tasks held`,receipt:`Recorded artifact checks`,receiptNote:`Recorded results use the revision below. The current contract status above accounts for stale checks and task holds.`,operation:`Verification reference`,verificationScope:`Verification scope`,allCriteria:`All contract criteria`,passed:`Passed`,failed:`Failed`,exitCode:`Exit code`,help:`Setup and readback`,guide:`Owner setup guide (v0)`,guidance:`The local Goal owner configures this contract through the CLI using configure --document and the inspected --expected-provider-revision. Changes and verification require --execute. Inspect before changing the contract; refresh this snapshot afterward. Disable with the current provider revision to hide this section.`},"zh-CN":{title:`Goal 验收合同`,boundary:`只读的所有者合同。任务关联与产物检查是独立事实,均不会自动批准或完成 Goal。`,source:`Goal 来源`,revision:`合同版本`,digest:`合同摘要`,objective:`目标`,criteria:`验收条件`,nonGoals:`范围之外`,tasks:`任务关联`,verification:`产物验证`,unknown:`未知`,noTasks:`未提供任务关联,覆盖范围未知。`,noCriteria:`未提供验收条件。`,retained:`当前保留旧快照,请刷新读取最新验收事实。`,taskState:{ready:`任务关联已确认`,unbound:`任务关联缺失`,stale:`任务关联已过期`},verificationState:{unverified:`产物检查未验证`,accepted:`产物检查通过`,failed:`产物检查失败`,stale:`产物检查已过期`,partial:`任务检查通过;Goal 整体验证未知`,held:`任务关联需要确认`},notApplicable:`不属于当前任务门禁范围`,heldTasks:`受阻任务`,receipt:`已记录的产物检查`,receiptNote:`记录对应下方版本。上方当前合同状态已考虑检查过期和任务阻塞。`,operation:`验证引用`,verificationScope:`验证范围`,allCriteria:`全部合同条件`,passed:`通过`,failed:`失败`,exitCode:`退出码`,help:`配置与读回`,guide:`所有者配置指南(v0)`,guidance:`本地 Goal 所有者通过 CLI 的 configure --document 配置合同,并提供 inspect 读到的 --expected-provider-revision。变更和验证都需要 --execute。变更前先检查合同,操作后刷新此快照;使用当前 provider revision 执行 disable 可隐藏本区块。`}},Kx={en:{contract:Gx.en,title:`Delivery & evidence`,scope:`Current work and a limited set of predecessors. Use Tasks for the full task inventory.`,observed:`Snapshot read`,chain:`Delivery chain`,relations:`Relationships`,acceptance:`Acceptance observations`,acceptanceBoundary:`Completed tasks and recorded evidence do not certify Goal acceptance.`,noGraph:`No delivery chain is available in this snapshot. This does not mean all work is complete.`,incomplete:`Some related information is missing or not expanded.`,unavailable:`Unknown`,refs:`Source references`,required:`Evidence still required`,guards:`Pending decisions`,next:`Next action`,owner:`Owner`,reason:`Reason`,historical:`Historical observations`,checks:`Component checks`,missingSources:`Missing sources`,observedScope:`Observation coverage`,kind:{deliverable:`Work`,gate:`Decision`,gate_summary:`Other decisions`,lease:`Ownership`,validation:`Validation`,repair:`Recovery`,handoff:`Handoff`,evidence:`Evidence`},state:{open:`Open`,ready:`Ready`,blocked:`Blocked`,done:`Done`,waiting:`Waiting`,unknown:`Unknown`},relation:{depends_on:`depends on`,blocks:`blocks`,validates:`validates / contextualizes`,repairs:`repairs`,audits:`audits`,continues:`continues`,hands_off_to:`hands off to`,supersedes:`supersedes`},refresh:`Refresh snapshot`,export:`Export delivery snapshot`,exported:`Snapshot downloaded`,loading:`Reading the current delivery chain…`,error:`The delivery snapshot could not be read. Refresh to retry.`,refreshError:`Refresh failed. The previous snapshot remains visible; refresh before opening linked work or exporting.`,changed:`Workspace facts changed after this snapshot. Refresh before opening linked work or exporting.`,search:`Search title, owner or reference`,all:`All nodes`,conditions:`Conditions & owners`,evidence:`Evidence & handoffs`,related:`Directly related`,map:`Map`,list:`List`,view:`Delivery chain layout`,filter:`Delivery chain focus`,visible:`Visible`,empty:`No nodes match these filters.`,reset:`Reset filters`,select:`Select a node to trace its relationships and open its source.`,work:`Work`,context:`Evidence & recovery`,details:`Selected item`,noRelations:`No relationships are recorded for this item.`,openTask:`Open task`,openGate:`Review decision`,openRun:`Open execution`,sourceUnavailable:`The linked item is not in the current workspace. Use its reference in the task board or CLI.`,omittedGates:`Decisions not expanded`,missing:`Missing predecessors`,clipped:`Expansion limited`,sourceClipped:`Source truncated`,yes:`Yes`,no:`No`,chainOnly:`Bounded chain`,exportFailed:`Download failed. Please retry.`},"zh-CN":{contract:Gx[`zh-CN`],title:`交付与依据`,scope:`仅含当前工作及有限前序,完整任务清单见任务页。`,observed:`快照读取时间`,chain:`交付链`,relations:`关联关系`,acceptance:`验收观察`,acceptanceBoundary:`任务完成、已有证据均不等于 Goal 已通过验收。`,noGraph:`当前快照没有可展示的交付链,这不代表工作已经全部完成。`,incomplete:`部分关联信息缺失或未展开。`,unavailable:`未知`,refs:`来源引用`,required:`仍需补齐的证据`,guards:`待你处理`,next:`下一步`,owner:`负责人`,reason:`原因`,historical:`历史观察`,checks:`组成检查`,missingSources:`缺失来源`,observedScope:`观察范围`,kind:{deliverable:`工作`,gate:`决策`,gate_summary:`其他决策`,lease:`责任归属`,validation:`验证`,repair:`恢复`,handoff:`交接`,evidence:`证据`},state:{open:`待处理`,ready:`就绪`,blocked:`受阻`,done:`已完成`,waiting:`等待`,unknown:`未知`},relation:{depends_on:`依赖`,blocks:`阻塞`,validates:`验证 / 提供背景`,repairs:`修复`,audits:`复核`,continues:`延续`,hands_off_to:`交接给`,supersedes:`替代`},refresh:`刷新快照`,export:`导出交付快照`,exported:`快照已下载`,loading:`正在读取当前交付链…`,error:`交付快照读取失败,请刷新重试。`,refreshError:`刷新失败,当前保留上次快照;请刷新后再打开关联工作或导出。`,changed:`工作区状态已在此快照之后变化,请刷新后再打开关联工作或导出。`,search:`搜索标题、负责人或引用`,all:`全部节点`,conditions:`条件与责任`,evidence:`证据与交接`,related:`直接关联`,map:`关系图`,list:`列表`,view:`交付链布局`,filter:`交付链范围`,visible:`当前显示`,empty:`没有匹配当前筛选的节点。`,reset:`重置筛选`,select:`选择一个节点,追溯关联关系并打开来源。`,work:`工作`,context:`证据与恢复`,details:`选中事项`,noRelations:`当前快照未记录此事项的关联关系。`,openTask:`打开任务`,openGate:`查看决策`,openRun:`打开执行`,sourceUnavailable:`关联事项未出现在当前工作区,可使用其引用到任务看板或 CLI 查找。`,omittedGates:`未展开决策`,missing:`缺失前序`,clipped:`展开受限`,sourceClipped:`来源被裁剪`,yes:`是`,no:`否`,chainOnly:`当前局部链`,exportFailed:`下载失败,请重试。`}};function qx({graph:e,nodes:t,selected:n,onSelect:r,copy:i}){let a=(0,R.useId)().replace(/:/g,``),o=[0,1,2].map(e=>t.filter(t=>Hx(t)===e)),s=new Map(o.flatMap((e,t)=>e.map((e,n)=>[e.node_id,{x:t*320+12,y:n*124+48}]))),c=Math.max(1,...o.map(e=>e.length))*124+48;return(0,z.jsx)(`div`,{className:`delivery-map-scroll`,role:`region`,"aria-label":i.map,tabIndex:0,children:(0,z.jsxs)(`div`,{className:`delivery-map`,style:{height:c},children:[[i.conditions,i.work,i.context].map((e,t)=>(0,z.jsx)(`strong`,{className:`delivery-map-heading`,style:{left:t*320+12},children:e},e)),(0,z.jsxs)(`svg`,{"aria-hidden":`true`,width:`960`,height:c,children:[(0,z.jsx)(`defs`,{children:(0,z.jsx)(`marker`,{id:a,viewBox:`0 0 10 10`,refX:`9`,refY:`5`,markerWidth:`6`,markerHeight:`6`,orient:`auto-start-reverse`,children:(0,z.jsx)(`path`,{d:`M 0 0 L 10 5 L 0 10 z`,fill:`currentColor`})})}),e.edges.map(e=>{let t=s.get(e.from_node_id),r=s.get(e.to_node_id);if(!t||!r)return null;let i=t.x{let t=s.get(e.node_id);return(0,z.jsxs)(`button`,{className:`delivery-map-node`,style:{left:t.x,top:t.y},"aria-pressed":n===e.node_id,onClick:()=>r(e.node_id),type:`button`,children:[(0,z.jsxs)(`span`,{children:[i.kind[e.kind],(0,z.jsx)(`em`,{"data-state":e.state,children:i.state[e.state]})]}),(0,z.jsx)(`strong`,{title:e.title,children:e.title}),(0,z.jsx)(`small`,{children:e.owner_agent??i.unavailable})]},e.node_id)})]})})}function Jx({goal:e,items:t,userTodos:n,onSelect:r,active:i}){let{locale:a}=Ji(),o=Kx[a],[s,c]=(0,R.useState)({kind:`loading`}),[l,u]=(0,R.useState)(0),[d,f]=(0,R.useState)(``),[p,m]=(0,R.useState)(`all`),[h,g]=(0,R.useState)(null),[_,v]=(0,R.useState)(()=>window.matchMedia(`(min-width: 1024px)`).matches),[y,b]=(0,R.useState)(``),x=(0,R.useRef)(null),S=n.filter(t=>t.goalId===e.goalId),C=JSON.stringify([e.agentTodos,e.acceptanceObservation,S]),w=(0,R.useRef)(C);w.current=C,(0,R.useEffect)(()=>{if(!i)return;let t=new AbortController,n=w.current;return c(e=>({...e,kind:`loading`})),b(``),zx(e.goalId,t.signal).then(e=>{t.signal.aborted||c({kind:`ready`,snapshot:e,sourceKey:n})}).catch(()=>{t.signal.aborted||c(e=>({...e,kind:`error`}))}),()=>t.abort()},[e.goalId,l,i]);let T=s.snapshot?.goal_id===e.goalId?s.snapshot:null,E=!!T&&s.sourceKey!==C,D=!!T&&s.kind===`ready`&&!E,O=T?.graph,k=O?.nodes.find(e=>e.node_id===h),A=p===`related`&&!k?`all`:p,ee=(0,R.useMemo)(()=>O?Bx(O,d,A,h):[],[O,d,A,h]),j=O?.edges.filter(e=>e.from_node_id===h||e.to_node_id===h)??[],M=new Map(O?.nodes.map(e=>[e.node_id,e])),te=()=>{f(``),m(`all`)},ne=e=>{g(e),b(``),window.requestAnimationFrame(()=>x.current?.scrollIntoView({block:`nearest`}))};function N(n){let r=new Set(n.refs.todo_ids??[]),i=new Set(n.refs.gate_ids??[]),a=new Set(n.refs.run_ids??[]);return[...e.agentTodos.filter(e=>r.has(e.todoId)).map(t=>({kind:`todo`,item:{...t,goalId:e.goalId,goalTitle:e.title,ownerLabel:t.claimedBy}})),...S.filter(e=>i.has(e.todoId)||r.has(e.todoId)).map(e=>({kind:`attention`,item:e})),...t.filter(t=>t.kind===`run`&&t.run.goalId===e.goalId&&a.has(t.run.runId)).map(e=>({kind:`run`,item:e.run}))]}let P=k?N(k):[];function re(){if(!T||!D)return;let e;try{e=URL.createObjectURL(new Blob([Ux(T,o)],{type:`text/markdown;charset=utf-8`}));let t=document.createElement(`a`);t.href=e,t.download=`loopx-delivery-review.md`,t.click(),b(o.exported)}catch{b(o.exportFailed)}finally{e&&window.setTimeout(()=>URL.revokeObjectURL(e),1e3)}}return(0,z.jsxs)(`section`,{className:`delivery-review`,"aria-label":o.title,children:[(0,z.jsxs)(`header`,{className:`delivery-review-toolbar`,children:[(0,z.jsx)(`h2`,{children:o.title}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{type:`button`,disabled:s.kind===`loading`,onClick:()=>u(e=>e+1),children:[(0,z.jsx)(Qm,{size:15}),o.refresh]}),(0,z.jsxs)(`button`,{type:`button`,disabled:!D,onClick:re,children:[(0,z.jsx)(Tm,{size:15}),o.export]})]})]}),y?(0,z.jsx)(`p`,{role:`status`,children:y}):null,T?(0,z.jsxs)(z.Fragment,{children:[s.kind===`ready`?null:(0,z.jsx)(`p`,{role:s.kind===`error`?`alert`:`status`,className:`delivery-notice`,children:s.kind===`error`?o.refreshError:o.loading}),(0,z.jsxs)(`p`,{className:`delivery-snapshot-time`,children:[o.observed,` · `,(0,z.jsx)(`time`,{dateTime:T.observed_at,children:new Date(T.observed_at).toLocaleString(a)})]}),E?(0,z.jsx)(`p`,{role:`alert`,className:`delivery-notice`,children:o.changed}):null,(0,z.jsxs)(`p`,{className:`delivery-boundary`,children:[o.scope,` `,o.acceptanceBoundary]}),O?(0,z.jsxs)(z.Fragment,{children:[Vx(O)?(0,z.jsxs)(`details`,{className:`delivery-notice`,children:[(0,z.jsx)(`summary`,{children:o.incomplete}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.omittedGates}),(0,z.jsx)(`dd`,{children:O.limits.user_gate_truncated_count})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.missing}),(0,z.jsx)(`dd`,{children:O.limits.missing_predecessor_count??o.unavailable})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.clipped}),(0,z.jsx)(`dd`,{children:O.limits.predecessor_truncated===void 0?o.unavailable:O.limits.predecessor_truncated?o.yes:o.no})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.sourceClipped}),(0,z.jsx)(`dd`,{children:O.limits.source_truncated===void 0?o.unavailable:O.limits.source_truncated?o.yes:o.no})]})]})]}):null,(0,z.jsxs)(`section`,{className:`delivery-chain`,"aria-label":o.chain,children:[(0,z.jsxs)(`header`,{className:`delivery-chain-toolbar`,children:[(0,z.jsx)(`h3`,{children:o.chain}),(0,z.jsxs)(`span`,{children:[o.visible,` `,ee.length,`/`,O.nodes.length]}),(0,z.jsxs)(`div`,{role:`group`,"aria-label":o.view,children:[(0,z.jsx)(`button`,{type:`button`,"aria-pressed":_,onClick:()=>v(!0),children:o.map}),(0,z.jsx)(`button`,{type:`button`,"aria-pressed":!_,onClick:()=>v(!1),children:o.list})]})]}),(0,z.jsxs)(`div`,{className:`delivery-filters`,children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(th,{size:16}),(0,z.jsx)(`input`,{"aria-label":o.search,placeholder:o.search,value:d,onChange:e=>f(e.target.value)})]}),(0,z.jsxs)(`select`,{"aria-label":o.filter,value:A,onChange:e=>m(e.target.value),children:[(0,z.jsx)(`option`,{value:`all`,children:o.all}),(0,z.jsx)(`option`,{value:`conditions`,children:o.conditions}),(0,z.jsx)(`option`,{value:`evidence`,children:o.evidence}),(0,z.jsx)(`option`,{value:`related`,disabled:!k,children:o.related})]}),(0,z.jsx)(`button`,{type:`button`,onClick:te,children:o.reset})]}),ee.length?_?(0,z.jsx)(qx,{graph:O,nodes:ee,selected:h,onSelect:ne,copy:o}):(0,z.jsx)(`ul`,{className:`delivery-node-list`,children:ee.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,"aria-pressed":h===e.node_id,onClick:()=>ne(e.node_id),children:[(0,z.jsx)(`span`,{children:o.kind[e.kind]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`small`,{children:e.owner_agent??o.unavailable}),(0,z.jsx)(`em`,{"data-state":e.state,children:o.state[e.state]})]})},e.node_id))}):(0,z.jsx)(`p`,{className:`delivery-empty`,role:`status`,children:o.empty})]}),(0,z.jsx)(`section`,{className:`delivery-node-detail`,"aria-label":o.details,ref:x,children:k?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[o.kind[k.kind],` · `,o.state[k.state]]}),(0,z.jsx)(`h3`,{children:k.title}),k.owner_agent?(0,z.jsx)(`p`,{children:k.owner_agent}):null]}),k.from_agent||k.to_agent?(0,z.jsxs)(`p`,{children:[k.from_agent??o.unavailable,` → `,k.to_agent??o.unavailable]}):null,(0,z.jsx)(`div`,{className:`delivery-source-actions`,children:P.length?P.map((e,t)=>(0,z.jsxs)(`button`,{type:`button`,disabled:!D,onClick:()=>r(e),children:[(0,z.jsx)(Dm,{size:15}),e.kind===`todo`?o.openTask:e.kind===`attention`?o.openGate:o.openRun]},`${e.kind}:${t}`)):(0,z.jsx)(`p`,{children:o.sourceUnavailable})}),(0,z.jsx)(`h4`,{children:o.relations}),j.length?(0,z.jsx)(`ul`,{className:`delivery-relations`,children:j.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>ne(e.from_node_id),children:M.get(e.from_node_id).title}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(sm,{size:13}),o.relation[e.relation],(0,z.jsx)(sm,{size:13})]}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>ne(e.to_node_id),children:M.get(e.to_node_id).title})]}),(0,z.jsx)(`p`,{children:e.reason})]},e.edge_id))}):(0,z.jsx)(`p`,{children:o.noRelations}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:o.refs}),(0,z.jsx)(`code`,{children:k.node_id}),Object.entries(k.refs).map(([e,t])=>(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:e}),` `,t.join(`, `)]},e))]})]}):(0,z.jsx)(`p`,{children:o.select})})]}):(0,z.jsx)(`p`,{className:`delivery-notice`,children:o.noGraph})]}):(0,z.jsx)(`p`,{role:s.kind===`error`?`alert`:`status`,className:`delivery-notice`,children:s.kind===`error`?o.error:o.loading}),(0,z.jsx)(Wx,{goalId:e.goalId,contract:T?.acceptance?.goal_acceptance_contract,copy:o.contract,current:D}),(0,z.jsx)(Ub,{goal:T?{...e,acceptanceObservation:T.acceptance}:e})]})}function Yx({active:e,goal:t,items:n,userTodos:r,readOnly:i,onOpenDetails:a,onSelect:o,onView:s}){let{t:c,locale:l}=Ji(),u=l===`zh-CN`?{progress:`当前进展`,attention:`需要你`,none:`当前没有已加载的待处理决定。`,details:`Goal 信息`,tasks:`查看任务`,usage:`最近 24 小时`,execution:`执行记录`,remote:`此来源仅提供同步的状态与验收观察,交付链需要实时本机来源。`}:{progress:`Current progress`,attention:`Needs you`,none:`No pending decisions are loaded.`,details:`Goal information`,tasks:`View tasks`,usage:`Last 24 hours`,execution:`Execution`,remote:`This source provides synchronized status and acceptance observations. The delivery chain requires the live local source.`},d=r.filter(e=>e.goalId===t.goalId),f=n.find(e=>e.kind===`run`&&e.run.goalId===t.goalId);return(0,z.jsxs)(`section`,{className:`goal-overview`,"aria-label":c(`header.overview`),children:[(0,z.jsxs)(`header`,{className:`goal-overview-heading`,children:[(0,z.jsx)(`h2`,{children:c(`header.overview`)}),(0,z.jsxs)(`button`,{onClick:a,type:`button`,children:[(0,z.jsx)(Pm,{size:15}),u.details]})]}),(0,z.jsxs)(`div`,{className:`goal-overview-summary${d.length?` has-attention`:``}`,children:[(0,z.jsxs)(`section`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:u.progress}),(0,z.jsx)(`span`,{children:Yi(t.state,l)})]}),(0,z.jsx)(`strong`,{children:t.nextSentence}),t.agentSentence&&t.agentSentence!==t.nextSentence?(0,z.jsx)(`p`,{children:t.agentSentence}):null,d.length?null:(0,z.jsx)(`p`,{className:`goal-overview-quiet`,children:u.none}),f?(0,z.jsxs)(`button`,{className:`goal-overview-run`,type:`button`,onClick:()=>o({kind:`run`,item:f.run}),children:[(0,z.jsxs)(`small`,{children:[u.execution,` · `,f.run.agentLabel]}),(0,z.jsx)(`strong`,{children:f.run.title}),(0,z.jsx)(sm,{size:15})]}):null]}),d.length?(0,z.jsxs)(`section`,{className:`goal-overview-attention`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:u.attention}),(0,z.jsx)(`span`,{children:d.length})]}),(0,z.jsx)(`ul`,{children:d.slice(0,3).map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,onClick:()=>o({kind:`attention`,item:e}),children:[(0,z.jsx)(`span`,{children:e.text}),(0,z.jsx)(sm,{size:15})]})},e.todoId))}),d.length>3?(0,z.jsxs)(`button`,{type:`button`,onClick:()=>s(`tasks`),children:[u.tasks,` (`,d.length,`)`,(0,z.jsx)(sm,{size:14})]}):null]}):null]}),(0,z.jsxs)(`section`,{className:`goal-overview-usage`,"aria-label":u.usage,children:[(0,z.jsx)(`h3`,{children:u.usage}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.tokensShort`)}),(0,z.jsx)(`dd`,{children:Qd(t.usage?.tokens24h,c(`drawer.usageNotMeasured`),Yd)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.costShort`)}),(0,z.jsx)(`dd`,{children:Qd(t.usage?.costUsd24h,c(`drawer.usageNotMeasured`),Xd)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.durationShort`)}),(0,z.jsx)(`dd`,{children:Qd(t.usage?.durationMs24h,c(`drawer.usageNotMeasured`),Zd)})]})]})]}),i?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`goal-overview-source-note`,children:u.remote}),(0,z.jsx)(Ub,{goal:t})]}):(0,z.jsx)(Jx,{active:e,goal:t,items:n,userTodos:r,onSelect:o})]})}function Xx({activeTab:e,panels:t,scrollRef:n}){let[r,i]=(0,R.useState)(()=>new Set([e])),a=(0,R.useRef)({});return(0,R.useEffect)(()=>i(t=>t.has(e)?t:new Set([...t,e])),[e]),(0,R.useLayoutEffect)(()=>{let t=n.current;if(!t)return;t.scrollTop=a.current[e]??0;let r=()=>{a.current[e]=t.scrollTop};return t.addEventListener(`scroll`,r,{passive:!0}),()=>t.removeEventListener(`scroll`,r)},[e,n]),Object.keys(t).map(n=>r.has(n)||n===e?(0,z.jsx)(`div`,{className:`personal-goal-view-panel`,"data-goal-panel":n,hidden:n!==e,children:t[n]},n):null)}function Zx(e,t){return{live_steering:{label:t(`lark.ingressSteering`),detail:t(`lark.ingressSteeringDescription`)},session_queue:{label:t(`lark.ingressQueue`),detail:t(`lark.ingressQueueDescription`)},async_inbox:{label:t(`lark.ingressAsync`),detail:t(`lark.ingressAsyncDescription`)},direct_session:{label:t(`lark.ingressLegacy`),detail:t(`lark.ingressLegacyDescription`)}}[e]}function Qx(e,t){return e.listener_status===`starting`?{label:t(`lark.health.starting`),detail:t(`lark.health.startingDetail`),state:`not_ready`}:e.listener_status===`retrying`&&e.listener_error_code===`lark_event_source_disconnected`?{label:t(`lark.health.sourceDisconnected`),detail:t(`lark.health.sourceDisconnectedDetail`),state:`not_ready`}:e.listener_status===`retrying`?{label:t(`lark.health.retrying`),detail:t(`lark.health.retryingDetail`),state:`not_ready`}:e.listener_status===`stopped`||e.listener_status===null?{label:t(`lark.health.notStarted`),detail:t(`lark.health.notStartedDetail`),state:`not_ready`}:e.last_event_status===`message_context_permission_required`?{label:t(`lark.health.messageContextPermission`),detail:t(`lark.health.messageContextPermissionDetail`),state:`not_ready`}:e.last_event_status===`processing_failed`?{label:t(`lark.health.processingFailed`),detail:t(`lark.health.processingFailedDetail`),state:`not_ready`}:e.health_error_code===`invalid_routing_state`?{label:t(`lark.health.invalidRouting`),detail:t(`lark.health.invalidRoutingDetail`),state:`not_ready`}:e.last_event_status===`queued_for_agent`?{label:t(`lark.health.queued`),detail:t(`lark.health.queuedDetail`,{agent:e.agent_id??t(`lark.targetAgent`)}),state:`ready`}:e.last_event_status===`context_only_captured`||e.last_event_status===`context_only_already_captured`?{label:t(`lark.health.contextCaptured`),detail:t(`lark.health.contextCapturedDetail`),state:`ready`}:e.last_event_status===`ignored`&&e.last_event_reason===`not_addressed`?{label:t(`lark.health.notAddressed`),detail:t(`lark.health.notAddressedDetail`),state:`ready`}:e.last_event_status===`ignored`&&e.last_event_reason===`self_message`?{label:t(`lark.health.listening`),detail:t(`lark.health.ignoredSelf`),state:`ready`}:e.health_error_code===`lark_event_route_mismatch`||[`chat_mismatch`,`topic_mismatch`,`route_ambiguous`].includes(e.last_event_reason??``)?{label:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguous`):t(`lark.health.routeMismatch`),detail:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguousDetail`):t(`lark.health.routeMismatchDetail`),state:`not_ready`}:[`invalid_event`,`binding_unavailable`].includes(e.last_event_reason??``)?{label:t(`lark.health.routeUnavailable`),detail:t(`lark.health.routeUnavailableDetail`),state:`not_ready`}:e.last_event_status===`replied_and_acknowledged`?{label:t(`lark.health.listening`),detail:t(`lark.health.eventProcessed`,{events:e.event_count,replies:e.replied_count}),state:`ready`}:e.health_error_code===`lark_event_delivery_unverified`||e.event_count===0?{label:t(`lark.health.eventUnverified`),detail:t(`lark.health.eventUnverifiedDetail`),state:`unverified`}:{label:e.reply_ready?t(`lark.health.listening`):t(`lark.health.unavailable`),detail:t(`lark.health.lastStatus`,{status:e.last_event_status??t(`lark.health.waiting`)}),state:e.reply_ready?`ready`:`not_ready`}}function $x(e){return e.history_permission_guidance?.api_document_url??null}function eS(e,t,n){if(e instanceof qh){let t=String(e.payload.error_code??``);return{lark_cli_not_installed:n(`lark.error.cliMissing`),lark_cli_not_executable:n(`lark.error.cliExecutable`),lark_cli_start_failed:n(`lark.error.cliStart`),lark_message_permissions_required:n(`lark.error.messagePermissions`),lark_app_required:n(`lark.error.appRequired`),invalid_lark_app:n(`lark.error.invalidApp`),lark_group_lookup_failed:n(`lark.error.groupLookup`),provider_api_failed:n(`lark.error.provider`)}[t]??e.message}return e instanceof Error?e.message:t}function tS({embedded:e=!1,focusGoalConnection:t=!1,goals:n,initialGoalId:r,onChanged:i,onClose:a}){let{t:o}=Ji(),[s,c]=(0,R.useState)(`connections`),[l,u]=(0,R.useState)([]),[d,f]=(0,R.useState)([]),[p,m]=(0,R.useState)(!0),[h,g]=(0,R.useState)(null),[_,v]=(0,R.useState)(``),[y,b]=(0,R.useState)(t),[x,S]=(0,R.useState)(``),[C,w]=(0,R.useState)(r??n[0]?.goalId??``),[T,E]=(0,R.useState)(``),[D,O]=(0,R.useState)([]),[k,A]=(0,R.useState)(``),[ee,j]=(0,R.useState)(!1),[M,te]=(0,R.useState)(null),[ne,N]=(0,R.useState)(`addressed_only`),[P,re]=(0,R.useState)(t&&r?`goal`:`manager`),[ie,ae]=(0,R.useState)(`async_inbox`),[F,oe]=(0,R.useState)(`topic_reply`),[I,se]=(0,R.useState)(``),[L,ce]=(0,R.useState)(!1),[le,ue]=(0,R.useState)({}),[de,fe]=(0,R.useState)(!1),[pe,me]=(0,R.useState)(null),[he,ge]=(0,R.useState)(null),[_e,ve]=(0,R.useState)(null),[ye,be]=(0,R.useState)(null),[xe,Se]=(0,R.useState)(!1),[Ce,we]=(0,R.useState)(`loopx-workspace-bot`),[Te,Ee]=(0,R.useState)(`feishu`),[De,Oe]=(0,R.useState)(null),[ke,Ae]=(0,R.useState)(!1),[je,Me]=(0,R.useState)(null),Ne=(0,R.useRef)(null),Pe=(0,R.useRef)(null),Fe=(0,R.useRef)(!1);async function Ie(){m(!0),g(null);try{let[e,t]=await Promise.all([__(),E_()]);u(e),f(t),S(t=>t||e.find(e=>e.reply_ready)?.app_ref||e.find(e=>e.ready)?.app_ref||e[0]?.app_ref||``)}catch(e){g(eS(e,o(`lark.error.configuration`),o))}finally{m(!1)}}(0,R.useEffect)(()=>{Ie()},[]),(0,R.useEffect)(()=>{if(!t||p||Fe.current||!r)return;Fe.current=!0;let e=d.find(e=>e.goal_id===r);e?Je(e):V(n.find(e=>e.goalId===r))},[d,t,n,r,p]),(0,R.useEffect)(()=>{if(!y||!x||_e){O([]),A(``),j(!1),te(null);return}let e=!1;j(!0),te(null);let t=window.setTimeout(()=>{w_(x,T).then(t=>{e||(O(t),A(e=>t.some(t=>t.chat_id===e)?e:t[0]?.chat_id??``))}).catch(t=>{e||(O([]),A(``),te(eS(t,o(`lark.error.groupLoad`),o)))}).finally(()=>{e||j(!1)})},180);return()=>{e=!0,window.clearTimeout(t)}},[x,T,y,_e]),(0,R.useEffect)(()=>{if(!xe||!De||[`ready`,`failed`,`cancelled`].includes(De.status))return;let e=!1,t=window.setTimeout(()=>{b_(De.setup_id).then(async t=>{e||(Oe(t),t.verification_url&&Pe.current!==t.verification_url&&(Pe.current=t.verification_url,Ne.current&&!Ne.current.closed&&(Ne.current.location.href=t.verification_url)),t.status===`ready`&&(await Ie(),S(t.app_ref),ue({}),Se(!1)),t.status===`failed`&&Me(t.error??o(`lark.error.appCreate`)))}).catch(t=>{e||Me(eS(t,o(`lark.error.setupPoll`),o))})},650);return()=>{e=!0,window.clearTimeout(t)}},[xe,De]);let Le=n.find(e=>e.goalId===C),Re=Le?.agentId?[{agentId:Le.agentId,label:Le.agentLabel??Le.agentId}]:[],B=Le?.agentLanes?.length?Le.agentLanes:Re,ze=B.some(e=>e.agentId===I),Be=[];L?Be=B.map(e=>({agentId:e.agentId,appRef:le[e.agentId]??x})):ze&&(Be=[{agentId:I,appRef:x}]);let Ve=Be.map(e=>e.agentId),He=!!_e||Be.length>0&&Be.every(e=>l.some(t=>t.app_ref===e.appRef&&t.reply_ready)),Ue=o(`lark.connect`);he?Ue=o(`lark.saveConnection`):L&&(Ue=o(`lark.connectAllAgentsAction`,{count:Ve.length}));let We=l.find(e=>e.app_ref===x),Ge=D.find(e=>e.chat_id===k),Ke=(0,R.useMemo)(()=>{let e=_.trim().toLocaleLowerCase();return e?d.filter(t=>[t.app_label,t.chat_name,t.goal_title,t.topic_name].some(t=>t.toLocaleLowerCase().includes(e))):d},[d,_]),qe=(0,R.useMemo)(()=>d.filter(e=>Qx(e,o).state===`unverified`).length,[d,o]);function V(e){let i=e??n.find(e=>e.goalId===r)??n[0];ge(null),ve(null),re(e||t?`goal`:`manager`),S(l.some(e=>e.app_ref===x)?x:l.find(e=>e.reply_ready)?.app_ref??l[0]?.app_ref??``),A(``),w(i?.goalId??``),se(i?.agentId??``),ce(!1),ue({}),N(`addressed_only`),ae(`async_inbox`),oe(`topic_reply`),E(``),me(null),b(!0)}function Je(e){ge(e.goal_id),ve(e),re(e.conversation_kind??`goal`),S(e.app_ref),w(e.goal_id);let t=n.find(t=>t.goalId===e.goal_id),r=t?.agentLanes?.length?t.agentLanes:t?.agentId?[{agentId:t.agentId}]:[];se(e.agent_id??(r.length===1?r[0].agentId:``)),ce(!1),ue({}),N(e.capture_scope),ae(e.ingress_mode===`direct_session`?`async_inbox`:e.ingress_mode),oe(e.reply_mode),E(e.chat_name),me(null),b(!0)}function Ye(){Oe(null),Me(null),Pe.current=null,Se(!0)}async function Xe(){if(!(ke||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce))){Ae(!0),Me(null),Pe.current=null,Ne.current=window.open(window.location.href,`_blank`);try{let e=await y_({appRef:Ce,brand:Te});Oe(e)}catch(e){Ne.current?.close(),Me(eS(e,o(`lark.error.setupStart`),o))}finally{Ae(!1)}}}async function Ze(){let e=De;if(Se(!1),Ne.current?.close(),e&&![`ready`,`failed`,`cancelled`].includes(e.status))try{await x_(e.setup_id)}catch{}}async function Qe(){if(!(!x||!C||!_e&&!Ge||P===`goal`&&Ve.length===0||de)){fe(!0),me(null);try{let e={...P===`manager`?{..._e?{connectionId:_e.connection_id}:{appRef:x,chatId:Ge.chat_id,chatName:Ge.chat_name}}:_e?{connectionId:_e.connection_id,agentId:I}:{agentBindings:Be,chatId:Ge.chat_id,chatName:Ge.chat_name},conversationKind:P,captureScope:P===`manager`?`addressed_only`:ne,goalId:C,incomingMode:ne===`configured_chat_all`?`all`:`mentions`,ingressMode:P===`manager`?`session_queue`:ie,replyMode:F},t=await D_({...e,execute:!1});if(!t.ok)throw new qh(t.public_summary??t.blocker??o(`lark.error.bindPreview`),{error_code:t.blocker??`provider_api_failed`});let n=await D_({...e,execute:!0});if(!n.ok)throw new qh(n.public_summary??n.blocker??o(`lark.error.bind`),{error_code:n.blocker??`provider_api_failed`});b(!1),await Ie(),i?.()}catch(e){me(eS(e,o(`lark.error.bind`),o))}finally{fe(!1)}}}async function $e(e,t){if(ye!==t){be(t);return}try{await O_(e,t),be(null),await Ie(),i?.()}catch(e){g(eS(e,o(`lark.error.disconnect`),o))}}return(0,z.jsxs)(`section`,{className:`personal-lark-settings${e?` is-embedded`:``}`,"aria-label":o(`lark.configuration`),children:[e?null:(0,z.jsxs)(`header`,{className:`personal-lark-header`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:o(`settings.goalConnections`)}),(0,z.jsx)(`h1`,{children:`Lark`})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeSettings`),className:`personal-icon-button`,onClick:a,type:`button`,children:(0,z.jsx)(gh,{size:18})})]}),(0,z.jsxs)(`nav`,{className:`personal-lark-tabs`,"aria-label":o(`lark.management`),children:[(0,z.jsxs)(`button`,{"aria-current":s===`apps`?`page`:void 0,onClick:()=>c(`apps`),type:`button`,children:[o(`lark.apps`),` `,(0,z.jsx)(`span`,{children:p?`…`:l.length})]}),(0,z.jsxs)(`button`,{"aria-current":s===`connections`?`page`:void 0,onClick:()=>c(`connections`),type:`button`,children:[o(`lark.connections`),` `,(0,z.jsx)(`span`,{children:p?`…`:d.length})]})]}),h?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:h}):null,p?(0,z.jsxs)(`div`,{className:`personal-lark-loading`,children:[(0,z.jsx)(zm,{className:`is-spinning`,size:18}),o(`lark.loading`)]}):null,!p&&s===`apps`?(0,z.jsxs)(`div`,{className:`personal-lark-apps`,children:[(0,z.jsxs)(`div`,{className:`personal-lark-app-toolbar`,children:[(0,z.jsx)(`span`,{children:o(`lark.reusableApps`,{count:l.length})}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:Ye,type:`button`,children:[(0,z.jsx)(Xm,{size:16}),o(`lark.newApp`)]})]}),(0,z.jsxs)(`div`,{className:`personal-lark-app-grid`,children:[l.map(e=>(0,z.jsxs)(`article`,{className:`personal-lark-app-card`,children:[(0,z.jsx)(`span`,{className:`personal-lark-app-avatar`,children:(0,z.jsx)(fm,{size:19})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsxs)(`small`,{children:[e.brand,` · lark-cli profile`]})]}),(0,z.jsx)(`em`,{className:e.reply_ready?`is-ready`:`is-off`,children:e.reply_ready?o(`lark.autoReplyReady`):e.ready?o(`lark.needsMessagePermissions`):o(`lark.needsSetup`)}),(0,z.jsxs)(`p`,{children:[o(`lark.goalConnections`,{count:d.filter(t=>t.app_ref===e.app_ref).length}),e.ready&&!e.reply_ready?` · ${o(`lark.autoReplyUnavailable`)}`:``]})]},e.app_ref)),l.length===0?(0,z.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noProfiles`)}):null]})]}):null,!p&&s===`connections`?(0,z.jsxs)(`div`,{className:`personal-lark-connections`,children:[qe>0?(0,z.jsxs)(`p`,{className:`personal-lark-route-readiness`,role:`status`,children:[(0,z.jsx)(Um,{size:15}),o(`lark.routesUnverified`,{count:qe})]}):null,(0,z.jsxs)(`div`,{className:`personal-lark-toolbar`,children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(th,{size:16}),(0,z.jsx)(`input`,{"aria-label":o(`lark.searchConnections`),onChange:e=>v(e.target.value),placeholder:o(`lark.searchPlaceholder`),type:`search`,value:_})]}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:l.length===0||n.length===0,onClick:()=>V(),type:`button`,children:[(0,z.jsx)(Xm,{size:16}),o(`lark.connectApp`)]})]}),(0,z.jsxs)(`div`,{className:`personal-lark-table`,role:`table`,"aria-label":o(`lark.goalTopicConnections`),children:[(0,z.jsxs)(`div`,{className:`personal-lark-table-head`,role:`row`,children:[(0,z.jsx)(`span`,{children:o(`lark.connection`)}),(0,z.jsx)(`span`,{children:o(`common.goal`)}),(0,z.jsx)(`span`,{children:o(`lark.capture`)}),(0,z.jsx)(`span`,{children:o(`lark.processing`)}),(0,z.jsx)(`span`,{children:o(`common.actions`)})]}),Ke.map(e=>{let t=Qx(e,o);return(0,z.jsxs)(`div`,{className:`personal-lark-table-row`,role:`row`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.chat_name}),(0,z.jsxs)(`small`,{children:[e.app_label,` · `,t.label]}),(0,z.jsx)(`small`,{children:t.detail}),t.state===`unverified`?(0,z.jsxs)(`a`,{href:`https://open.feishu.cn/document/server-docs/im-v1/message/events/receive?lang=zh-CN`,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(Dm,{size:12}),o(`lark.openEventSettings`)]}):null,$x(e)?(0,z.jsxs)(`a`,{href:$x(e)??void 0,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(Dm,{size:12}),o(`lark.historyPermission`)]}):null]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.goal_title}),(0,z.jsxs)(`small`,{children:[`# `,e.topic_name]})]}),(0,z.jsx)(`span`,{children:e.capture_scope===`addressed_only`?o(`lark.mentionsOnly`):o(`lark.allTopicMessages`)}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.conversation_kind===`manager`?o(`lark.managerConversation`):Zx(e.ingress_mode,o).label}),(0,z.jsx)(`small`,{children:e.conversation_kind===`manager`?o(`lark.managerConversationDescription`):e.agent_id??Zx(e.ingress_mode,o).detail})]}),(0,z.jsxs)(`span`,{className:`personal-lark-row-actions`,children:[(0,z.jsx)(`button`,{"aria-label":o(`lark.settingsConfigure`,{goal:e.goal_title}),onClick:()=>Je(e),type:`button`,children:(0,z.jsx)(ah,{size:15})}),(0,z.jsxs)(`button`,{"aria-label":o(`lark.settingsDisconnect`,{goal:e.goal_title}),className:ye===e.connection_id?`is-confirm`:``,onClick:()=>void $e(e.goal_id,e.connection_id),type:`button`,children:[(0,z.jsx)(mh,{size:15}),ye===e.connection_id?o(`common.confirm`):null]})]})]},e.connection_id)}),Ke.length===0?(0,z.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noConnections`)}):null]})]}):null,y?(0,z.jsx)(`div`,{className:`personal-lark-modal-backdrop`,role:`presentation`,children:(0,z.jsxs)(`section`,{"aria-labelledby":`connect-lark-title`,"aria-modal":`true`,className:`personal-lark-modal`,role:`dialog`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:`Goal Topic connection`}),(0,z.jsx)(`h2`,{id:`connect-lark-title`,children:o(he?`lark.editConnection`:`lark.connectApp`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeConnection`),onClick:()=>b(!1),type:`button`,children:(0,z.jsx)(gh,{size:18})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.conversationKind`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.conversationKind`),disabled:!!_e,value:P,onChange:e=>re(e.target.value),children:[(0,z.jsx)(`option`,{value:`manager`,children:o(`lark.managerConversation`)}),(0,z.jsx)(`option`,{value:`goal`,children:o(`lark.workerConversation`)})]})]}),P===`manager`?(0,z.jsx)(`p`,{children:o(`lark.managerConversationDescription`)}):null,_e?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,z.jsx)(`div`,{children:_e.app_label})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,z.jsx)(`div`,{children:_e.chat_name})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,z.jsx)(`div`,{children:_e.goal_title})]}),(0,z.jsx)(`small`,{children:o(`lark.editPreservesIdentity`)})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.appProfile`),disabled:p,onChange:e=>{e.target.value===`__register__`?Ye():(S(e.target.value),ue({}))},value:x,children:p?(0,z.jsx)(`option`,{value:``,children:o(`lark.appLoading`)}):(0,z.jsxs)(z.Fragment,{children:[l.map(e=>(0,z.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref)),(0,z.jsx)(`option`,{value:`__register__`,children:o(`lark.registerAnother`)})]})}),(0,z.jsx)(`small`,{children:o(`lark.defaultAgentAppDescription`)})]}),We?.ready&&!We.reply_ready?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.appPermissions`)}):null,(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,z.jsx)(`input`,{"aria-label":o(`lark.groupSearch`),onChange:e=>E(e.target.value),placeholder:o(`lark.groupSearch`),type:`search`,value:T}),ee?(0,z.jsxs)(`div`,{className:`personal-lark-group-state`,role:`status`,children:[(0,z.jsx)(zm,{className:`is-spinning`,size:15}),o(`lark.groupLoading`)]}):null,!ee&&M?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:M}):null,!ee&&!M&&D.length===0?(0,z.jsx)(`div`,{className:`personal-lark-group-state`,role:`status`,children:o(`lark.groupEmpty`)}):null,!ee&&!M&&D.length>0?(0,z.jsx)(`select`,{"aria-label":o(`lark.groupChat`),onChange:e=>A(e.target.value),value:k,children:D.map(e=>(0,z.jsx)(`option`,{value:e.chat_id,children:e.chat_name},e.chat_id))}):null]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.bindGoal`),onChange:e=>{let t=e.target.value;w(t),se(n.find(e=>e.goalId===t)?.agentId??``),ue({})},value:C,children:n.map(e=>(0,z.jsx)(`option`,{value:e.goalId,children:e.title},e.goalId))})]})]}),(0,z.jsxs)(`label`,{className:`personal-lark-check`,children:[(0,z.jsx)(`input`,{checked:!0,readOnly:!0,type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:o(`lark.createAutomatically`)}),(0,z.jsx)(`small`,{children:o(`lark.createAutomaticallyDescription`)})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.topicPreview`)}),(0,z.jsxs)(`div`,{className:`personal-lark-topic-preview`,children:[(0,z.jsx)(Um,{size:15}),`# `,Le?.title??Le?.goalId??`Goal`]})]}),P===`goal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.captureScope`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.captureScope`),disabled:_e?.ingress_mode===`direct_session`,onChange:e=>N(e.target.value),value:ne,children:[(0,z.jsx)(`option`,{value:`addressed_only`,children:o(`lark.captureAddressed`)}),(0,z.jsx)(`option`,{value:`configured_chat_all`,children:o(`lark.captureAll`)})]}),(0,z.jsx)(`small`,{children:o(`lark.captureScopeDescription`)})]}),(0,z.jsxs)(`fieldset`,{"aria-label":o(`lark.agentIngress`),className:`personal-lark-ingress`,children:[(0,z.jsx)(`legend`,{children:o(`lark.agentIngress`)}),(0,z.jsx)(`div`,{children:[`live_steering`,`session_queue`,`async_inbox`].map(e=>{let t=Zx(e,o);return(0,z.jsxs)(`label`,{className:ie===e?`is-active`:``,children:[(0,z.jsx)(`input`,{"aria-label":t.label,checked:ie===e,name:`lark-agent-ingress`,onChange:()=>ae(e),type:`radio`,value:e}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t.label}),(0,z.jsx)(`small`,{children:t.detail})]})]},e)})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.targetAgent`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.targetAgent`),disabled:!!_e?.agent_id,onChange:e=>se(e.target.value),value:I,children:[ze?null:(0,z.jsx)(`option`,{disabled:!0,value:I,children:I?o(`lark.agentUnavailable`,{agent:I}):o(`lark.noAgentConfigured`)}),B.map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label===e.agentId?e.agentId:`${e.label} · ${e.agentId}`},e.agentId))]}),(0,z.jsx)(`small`,{children:o(`lark.targetAgentDescription`)})]}),!he&&B.length>1?(0,z.jsxs)(`label`,{"aria-label":o(`lark.connectAllAgents`),className:`personal-lark-check`,children:[(0,z.jsx)(`input`,{checked:L,onChange:e=>ce(e.target.checked),type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:o(`lark.connectAllAgents`)}),(0,z.jsx)(`small`,{children:o(`lark.connectAllAgentsDescription`,{count:B.length})})]})]}):null,!he&&L&&B.length>1?(0,z.jsxs)(`fieldset`,{"aria-label":o(`lark.agentApps`),className:`personal-lark-agent-apps`,children:[(0,z.jsx)(`legend`,{children:o(`lark.agentApps`)}),(0,z.jsx)(`small`,{children:o(`lark.agentAppsDescription`)}),(0,z.jsx)(`div`,{children:B.map(e=>(0,z.jsxs)(`label`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.agentId})]}),(0,z.jsx)(`select`,{"aria-label":o(`lark.agentAppSelection`,{agent:e.label}),onChange:t=>ue(n=>({...n,[e.agentId]:t.target.value})),value:le[e.agentId]??x,children:l.map(e=>(0,z.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref))})]},e.agentId))})]}):null,L&&Be.length>0&&!He?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.agentAppPermissions`)}):null,Ve.length===0?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:o(`lark.selectRegisteredAgent`)}):null]}):null,(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.replyMode`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.replyMode`),onChange:e=>oe(e.target.value),value:F,children:(0,z.jsx)(`option`,{value:`topic_reply`,children:o(`lark.topicReply`)})}),(0,z.jsx)(`small`,{children:o(`lark.replyModeDescription`)})]}),(0,z.jsxs)(`p`,{className:`personal-lark-cardinality`,children:[(0,z.jsx)(hm,{size:15}),o(`lark.cardinality`)]}),pe?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:pe}):null,(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>b(!1),type:`button`,children:o(`lark.cancel`)}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:p||!x||!_e&&(!We?.reply_ready||!k)||P===`goal`&&(!He||Ve.length===0)||!C||de,onClick:()=>void Qe(),type:`button`,children:[de?(0,z.jsx)(zm,{className:`is-spinning`,size:15}):null,Ue]})]})]})}):null,xe?(0,z.jsx)(`div`,{className:`personal-lark-modal-backdrop is-setup`,role:`presentation`,children:(0,z.jsxs)(`section`,{"aria-labelledby":`new-lark-app-title`,"aria-modal":`true`,className:`personal-lark-modal personal-lark-setup-modal`,role:`dialog`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:o(`lark.reusableWorkspaceApp`)}),(0,z.jsx)(`h2`,{id:`new-lark-app-title`,children:o(`lark.newApp`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeCreate`),onClick:()=>void Ze(),type:`button`,children:(0,z.jsx)(gh,{size:18})})]}),De?(0,z.jsxs)(`div`,{className:`personal-lark-setup-progress`,children:[(0,z.jsx)(`span`,{className:`personal-lark-setup-icon is-${De.status}`,children:De.status===`ready`?(0,z.jsx)(hm,{size:22}):(0,z.jsx)(zm,{className:De.status===`failed`?``:`is-spinning`,size:22})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:De.status===`ready`?o(`lark.appCreated`):De.status===`failed`?o(`lark.appCreateFailed`):o(`lark.waitingFeishu`)}),(0,z.jsx)(`p`,{children:De.status===`waiting_for_feishu`?o(`lark.waitingFeishuDescription`):De.status===`starting`?o(`lark.waitingLink`):De.error})]}),De.verification_url?(0,z.jsxs)(`a`,{href:De.verification_url,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(Dm,{size:15}),o(`lark.reopenFeishu`)]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`personal-lark-setup-copy`,children:o(`lark.setupCopy`)}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.profileName`)}),(0,z.jsx)(`input`,{"aria-label":o(`lark.profileName`),autoComplete:`off`,onChange:e=>we(e.target.value),placeholder:`loopx-workspace-bot`,value:Ce})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.region`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.region`),onChange:e=>Ee(e.target.value),value:Te,children:[(0,z.jsx)(`option`,{value:`feishu`,children:`Feishu`}),(0,z.jsx)(`option`,{value:`lark`,children:`Lark`})]})]}),Ce&&!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce)?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:o(`lark.profileValidation`)}):null]}),je?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:je}):null,(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void Ze(),type:`button`,children:o(`lark.cancel`)}),De?null:(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:ke||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce),onClick:()=>void Xe(),type:`button`,children:[ke?(0,z.jsx)(zm,{className:`is-spinning`,size:15}):(0,z.jsx)(Dm,{size:15}),o(`lark.continueFeishu`)]})]})]})}):null]})}function nS(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function rS(e,t,n){let r=nS(t),i=nS(n);return Object.fromEntries(e.fields.flatMap(({key:e,nullable:t})=>{let n=r[e],a=i[e];return Object.hasOwn(r,e)&&(n!=null||t&&n===null)?[[e,n]]:Object.hasOwn(i,e)&&a!=null?[[e,a]]:[]}))}function iS(e,t){let n;try{n=JSON.parse(t)}catch{return null}if(!n||typeof n!=`object`||Array.isArray(n))return null;let r=new Set(e.fields.map(e=>e.key));return Object.keys(n).some(e=>!r.has(e))?null:n}function aS(e,t,n){let r={...e,[t]:n},i=e.schedule;return t===`timezone`&&i&&typeof i==`object`&&`schema_version`in i&&i.schema_version===`periodic_report_schedule_v0`&&(r.schedule={...i,timezone:n}),r}function oS({id:e,value:t,timezone:n,onChange:r}){let{locale:i}=Ji(),a=i===`zh-CN`,o=t&&typeof t==`object`&&!Array.isArray(t)?t:null,s=String(o?.rrule??``).split(`;`).map(e=>e.split(`=`)),c=Object.fromEntries(s.filter(e=>e.length===2)),l=[`MO`,`TU`,`WE`,`TH`,`FR`,`SA`,`SU`],u=(e,t)=>e!==void 0&&/^\d+$/.test(e)&&Number(e)<=t,d=!o||o.schema_version===`periodic_report_schedule_v0`&&[`DAILY`,`WEEKLY`].includes(c.FREQ)&&o.timezone===n&&s.every(e=>e.length===2&&[`FREQ`,`BYDAY`,`BYHOUR`,`BYMINUTE`,`INTERVAL`].includes(e[0]))&&new Set(s.map(([e])=>e)).size===s.length&&u(c.BYHOUR,23)&&u(c.BYMINUTE??`0`,59)&&(c.FREQ===`WEEKLY`?l.includes(c.BYDAY):!c.BYDAY)&&(!c.INTERVAL||c.INTERVAL===`1`),f=a?[`星期一`,`星期二`,`星期三`,`星期四`,`星期五`,`星期六`,`星期日`]:[`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`,`Sunday`];function p(e){let t={FREQ:`WEEKLY`,BYDAY:`MO`,BYHOUR:`9`,BYMINUTE:`0`,...c,...e};r?.({schema_version:`periodic_report_schedule_v0`,schedule_id:o?.schedule_id??`report-schedule`,timezone:n,rrule:[`FREQ=${t.FREQ}`,...t.FREQ===`WEEKLY`?[`BYDAY=${t.BYDAY}`]:[],`BYHOUR=${t.BYHOUR}`,`BYMINUTE=${t.BYMINUTE}`].join(`;`)})}return(0,z.jsxs)(`div`,{className:`personal-report-schedule`,children:[(0,z.jsxs)(`label`,{className:`is-boolean`,htmlFor:e,children:[(0,z.jsx)(`span`,{children:a?`按日历汇报`:`Calendar reports`}),(0,z.jsx)(`input`,{id:e,type:`checkbox`,role:`switch`,checked:!!o,disabled:!r,onChange:e=>e.target.checked?p({}):r?.(null)})]}),o?(0,z.jsxs)(z.Fragment,{children:[d?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{htmlFor:`${e}-frequency`,children:[(0,z.jsx)(`span`,{children:a?`频率`:`Frequency`}),(0,z.jsxs)(`select`,{id:`${e}-frequency`,value:c.FREQ,disabled:!r,onChange:e=>p({FREQ:e.target.value}),children:[(0,z.jsx)(`option`,{value:`DAILY`,children:a?`每天`:`Daily`}),(0,z.jsx)(`option`,{value:`WEEKLY`,children:a?`每周`:`Weekly`})]})]}),c.FREQ===`WEEKLY`&&(0,z.jsxs)(`label`,{htmlFor:`${e}-day`,children:[(0,z.jsx)(`span`,{children:a?`星期`:`Weekday`}),(0,z.jsx)(`select`,{id:`${e}-day`,value:c.BYDAY,disabled:!r,onChange:e=>p({BYDAY:e.target.value}),children:l.map((e,t)=>(0,z.jsx)(`option`,{value:e,children:f[t]},e))})]}),(0,z.jsxs)(`label`,{htmlFor:`${e}-time`,children:[(0,z.jsxs)(`span`,{children:[a?`当地时间`:`Local time`,` (`,n,`)`]}),(0,z.jsx)(`input`,{id:`${e}-time`,type:`time`,required:!0,disabled:!r,value:`${(c.BYHOUR??`9`).padStart(2,`0`)}:${(c.BYMINUTE??`0`).padStart(2,`0`)}`,onChange:e=>{if(!/^\d{2}:\d{2}$/.test(e.target.value))return;let[t,n]=e.target.value.split(`:`);p({BYHOUR:t,BYMINUTE:n})}})]})]}):(0,z.jsx)(`p`,{role:`alert`,children:a?`此计划需在 JSON 模式中编辑;当前内容已保留。`:`Edit this schedule in JSON mode; its current value is preserved.`}),(0,z.jsx)(`p`,{children:a?`由现有唤醒检查到期计划;实际送达以回执为准。`:`Existing wakes check the schedule; delivery is confirmed by its receipt.`})]}):(0,z.jsx)(`p`,{children:a?`未设置日历计划;保持阶段结束时汇报。`:`No calendar schedule; report at validated stage boundaries.`})]})}function sS({copy:e,field:t,id:n,onChange:r,value:i,timezone:a}){let o=e[t.key]?.label??t.label,s=!r;if(t.input_kind===`periodic_report_schedule`)return(0,z.jsx)(oS,{id:n,value:i,timezone:a,onChange:r?e=>r(t.key,e):void 0});if(t.input_kind===`boolean`)return(0,z.jsxs)(`label`,{className:`is-boolean`,htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(0,z.jsx)(`input`,{checked:i===!0,id:n,onChange:r?e=>r(t.key,e.target.checked):void 0,readOnly:s,role:`switch`,type:`checkbox`})]});if(t.input_kind===`select`)return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(0,z.jsxs)(`select`,{id:n,onChange:r?e=>r(t.key,e.target.value):void 0,value:typeof i==`string`?i:``,children:[(0,z.jsx)(`option`,{value:``}),(t.options??[]).map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]});if(t.input_kind===`string_list`)return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(0,z.jsx)(`textarea`,{id:n,onChange:r?e=>r(t.key,e.target.value.split(/\r?\n/u).filter(Boolean)):void 0,readOnly:s,rows:4,value:Array.isArray(i)?i.join(` -`):``})]});let c=t.input_kind===`number`;return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(0,z.jsx)(`input`,{id:n,max:t.maximum,min:t.minimum,onChange:r?e=>r(t.key,c?Number(e.target.value):e.target.value):void 0,readOnly:s,required:t.required,type:c?`number`:`text`,value:typeof i==`number`||typeof i==`string`?i:``})]})}function cS({copy:e={},disabled:t=!1,editor:n,enabledAction:r,omitKeys:i=[],onChange:a,value:o}){let s=(0,R.useId)(),c=new Set(i);return(0,z.jsx)(`fieldset`,{className:`personal-capability-fields`,disabled:t,children:n.fields.filter(e=>!c.has(e.key)).map(t=>{let n=(0,z.jsx)(sS,{copy:e,field:t,id:`${s}-${t.key.replace(/[^a-z0-9_-]/gi,`-`)}`,onChange:a,value:o[t.key],timezone:String(o.timezone??`UTC`)},t.key);return t.key===`enabled`&&t.input_kind===`boolean`?(0,z.jsxs)(`div`,{className:`personal-capability-enabled-row`,children:[n,r]},t.key):n})})}var lS={en:{manager_runtime:{displayName:`Manager runtime`,description:`Selects the persistent host-tool profile used by owner manager conversations.`},steward_executor:{displayName:`Steward executor`,description:`Guides the steward executor, model, and selection boundary for this machine. A pinned route blocks substitution; a flexible pool permits only authorized fallback.`},todo_replan_cadence:{displayName:`Goal review cadence`,description:`Configures the Goal review cadence.`},change_quality_qualification:{displayName:`Change quality qualification`,description:`Prepares a provider-neutral review packet, allows at most one policy-authorized safe-fix pass, and can require an exact-diff receipt.`},progress_review:{displayName:`Progress-review sentinel`,description:`Records typed drift receipts from an external bounded review of scoped file deltas; assist may raise the existing autonomous replan obligation.`},explore_graph:{displayName:`Explore Graph`,description:`Organizes bounded exploration as a typed evidence graph so branches, findings, and synthesis remain inspectable.`},explore_harness:{displayName:`Explore Harness`,description:`Selects a capability-owned planning and research harness profile for bounded multi-step exploration.`},lark_event_inbox:{displayName:`Lark event inbox`,description:`Receives provider events through a local-private inbox binding before LoopX projects them into governed work.`,readOnlyReason:`This capability requires a local-private inbox binding. Manage it in Lark settings or through the capability CLI.`},lark_kanban_heartbeat_sync:{displayName:`Lark Kanban heartbeat sync`,description:`Synchronizes accepted LoopX work state to the configured Lark Kanban heartbeat surface.`},local_authority_shadow:{displayName:`Local authority shadow`,description:`Observes post-commit Todo and task-lease state through the shared authority contract without taking write authority.`},coordination_runtime_shadow:{displayName:`Coordination runtime shadow`,description:`Captures transaction-bound Todo and task-lease mutations for reviewed whole-Goal coordination-authority promotion.`},multi_subagent:{displayName:`Adaptive child capacity`,description:`Sets bounded child-agent capacity and the public-safe responsibility domains in which parallel work may be delegated.`},peer_task_coordination:{displayName:`Registered-peer task coordination`,description:`Routes explicitly scoped peer-owned work to one registered coordinator without granting cross-owner mutation authority.`},periodic_report:{displayName:`Periodic reports`,description:`Turns validated Goal stage progress into a frozen report and automatically delivers it through the configured Goal Channel with exact readback.`},pull_request_review:{displayName:`Pull-request review`,description:`Ranks the public GitHub PR review queue with a machine-level default; it never grants GitHub, Todo, push, or merge authority.`},reward_memory:{displayName:`Reward Memory experiment`,description:`Configures a reviewed local-private provider binding for Goal-scoped Agent recall and evidence-backed outcome learning.`}},"zh-CN":{manager_runtime:{displayName:`管家 Runtime`,description:`选择管家会话持续生效的宿主工具模式。`},steward_executor:{displayName:`管家执行器`,description:`配置本机管家的执行器、模型与选择边界;锁定路径禁止替代,灵活池只允许在已授权范围内回退。`},todo_replan_cadence:{displayName:`Goal 复核周期`,description:`配置 Goal 的复核周期。`},change_quality_qualification:{displayName:`变更质量验证`,description:`生成与 Provider 无关的审阅包,最多允许一次策略授权的安全修复,并可要求精确 diff 回执。`},progress_review:{displayName:`进展评估哨兵`,description:`记录外部有界评估对限定文件变化给出的类型化漂移回执;assist 模式可触发已有的自主重规划义务。`},explore_graph:{displayName:`探索图谱`,description:`把有界探索组织为 typed 证据图,让探索分支、发现与综合结论都可检查、可追溯。`},explore_harness:{displayName:`探索 Harness`,description:`为有界的多步探索选择由能力负责的规划与研究 Harness profile。`},lark_event_inbox:{displayName:`飞书事件收件箱`,description:`通过本机私有收件箱接收 Provider 事件,再由 LoopX 将其投影为受治理的工作。`,readOnlyReason:`此能力依赖本机私有的收件箱绑定,请在飞书设置或 capability CLI 中管理。`},lark_kanban_heartbeat_sync:{displayName:`飞书看板心跳同步`,description:`把 LoopX 已接受的工作状态同步到配置好的飞书看板心跳界面。`},local_authority_shadow:{displayName:`本地 Authority 影子观测`,description:`通过共享 Authority contract 观测提交后的 Todo 与 task lease 状态,但不取得写入权。`},coordination_runtime_shadow:{displayName:`协调 Runtime 影子`,description:`捕获事务绑定的 Todo 与 task lease 变更,为经评审的整 Goal 协调 Authority 晋级提供证据。`},multi_subagent:{displayName:`自适应子 Agent 容量`,description:`限定子 Agent 容量与可公开的职责域,只有落在这些边界内的工作才能并行委派。`},peer_task_coordination:{displayName:`已注册 Peer 任务协调`,description:`把明确限定的 Peer 工作路由给一个已注册协调者,不授予跨 Owner 修改权限。`},periodic_report:{displayName:`周期报告`,description:`把经过验证的 Goal 阶段进展整理为冻结报告,并通过配置的 Goal Channel 自动发送和精确回读。`},pull_request_review:{displayName:`Pull-request Review`,description:`配置公开 GitHub PR 审阅队列的本机默认排序;不会授予 GitHub、Todo、push 或 merge 权限。`},reward_memory:{displayName:`Reward Memory 实验`,description:`为 Goal 内 Agent 的召回与证据化结果学习配置经过审阅的本机私有 Provider 绑定。`}}},uS={en:{runtime_profile:{label:`Runtime profile`,description:`Restricted keeps scoped LoopX reads only. Trusted owner enables normal host tools while protected operations retain separate checks.`},selection_policy:{label:`Selection policy`,description:`Preferred allows an explicit user choice; pinned rejects another executor; flexible permits fallback only inside the eligible pool.`},executor_endpoint:{label:`Primary steward executor`,description:`The preferred or pinned executor for this machine. In a flexible pool it is tried first when available.`},eligible_endpoints:{label:`Flexible eligible executors`,description:`One authorized executor per line. Use only with flexible selection and include the primary executor.`},executor_model:{label:`Model`,description:`Optional model for the selected executor. Leave blank to keep the executor's own default.`},executor_reasoning_effort:{label:`Reasoning effort`,description:`Optional reasoning effort for the selected executor. Leave blank to keep the executor's own default.`},completed_todos:{label:`Completed Todos between Goal reviews`,description:`Machine default or explicit Goal override, from 1 to 5.`},allowed_domains:{label:`Allowed responsibility domains`,description:`Enter one bounded, public-safe domain per line.`},coordinator_agent_id:{label:`Coordinator Agent`,description:`Use an already registered Agent id; leave blank to disable coordination.`},enabled:{label:`Enabled`},model:{label:`Child model`,description:`For example gpt-5.6-luna. Blank clears the child model preference.`},reasoning_effort:{label:`Child reasoning effort`,description:`For example max; the host must support this model and effort.`},max_children:{label:`Maximum children`,description:`Hard upper bound for concurrently delegated child work.`},profile:{label:`Planner profile`,description:`Select one registered Explore Harness profile.`},profile_preset:{label:`Report profile`,description:`Capability-owned report profile, such as weekly-progress.`},wait_for_ci:{label:`Wait for CI`,description:`Disable to use local validation without querying or waiting for CI. Merge authority is unchanged.`},review_priority:{label:`Review priority`,description:`Choose whether other developers' PRs or the authenticated reviewer's own PRs are ranked first.`},route_ref:{label:`Goal Channel route`,description:`Public route alias only; credentials and provider identifiers stay outside this form.`},safe_fix:{label:`Allow one bounded safe-fix pass`},strict_receipt:{label:`Require an exact-diff receipt`},timezone:{label:`Timezone`,description:`Use an IANA timezone, for example Asia/Shanghai.`},schedule:{label:`Calendar reports`,description:`Optional daily or weekly reports; no schedule preserves stage-only delivery.`},config_path:{label:`Local-private configuration path`,description:`Repo-relative ignored JSON under .loopx/config/. Leave blank to retain the current binding; the path is never returned.`},enabled_agents:{label:`Enabled Goal Agents`,description:`Enter one registered Goal-local Agent id per line. A private binding currently accepts exactly one Agent.`}},"zh-CN":{runtime_profile:{label:`运行模式`,description:`restricted 仅使用受限 LoopX 读取;trusted_owner 开放常规宿主工具,但受保护操作仍单独校验。`},selection_policy:{label:`选择策略`,description:`preferred 允许用户显式改选;pinned 拒绝其他执行器;flexible 只在已授权资源池内回退。`},executor_endpoint:{label:`首选管家执行器`,description:`本机首选或锁定的执行器;灵活池模式下优先尝试它。`},eligible_endpoints:{label:`灵活池可用执行器`,description:`每行一个已授权执行器,仅用于 flexible;必须包含首选执行器。`},executor_model:{label:`模型`,description:`所选执行器使用的模型,可留空;留空表示沿用执行器自身的默认模型。`},executor_reasoning_effort:{label:`推理档位`,description:`所选执行器使用的推理档位,可留空;留空表示沿用执行器自身的默认档位。`},completed_todos:{label:`两次 Goal 复核间的已完成 Todo 数`,description:`可设置 1–5;机器默认值可被 Goal 显式覆盖。`},allowed_domains:{label:`允许的职责域`,description:`每行填写一个有边界、可公开的职责域。`},coordinator_agent_id:{label:`协调 Agent`,description:`填写一个已经注册的 Agent ID;留空表示关闭协调。`},enabled:{label:`启用`},model:{label:`子 Agent 模型`,description:`例如 gpt-5.6-luna;留空清除模型偏好。`},reasoning_effort:{label:`子 Agent 推理档位`,description:`例如 max;宿主须支持所选模型与档位。`},max_children:{label:`最大子 Agent 数`,description:`可同时委派的子任务硬上限。`},profile:{label:`规划 Profile`,description:`选择一个已注册的 Explore Harness profile。`},profile_preset:{label:`报告 Profile`,description:`由该能力管理的报告 profile,例如 weekly-progress。`},wait_for_ci:{label:`等待 CI`,description:`关闭后使用本地验证,不查询或等待 CI;不改变合并权限。`},review_priority:{label:`审阅优先级`,description:`选择先排其他开发者的 PR,还是先排当前已认证审阅者自己的 PR。`},route_ref:{label:`Goal Channel 路由`,description:`只填写公开 route alias;凭据与 Provider 标识不会进入此表单。`},safe_fix:{label:`允许一次有界安全修复`},strict_receipt:{label:`要求精确 diff 回执`},timezone:{label:`时区`,description:`使用 IANA 时区,例如 Asia/Shanghai。`},schedule:{label:`日历汇报`,description:`可选每日或每周计划;未设置时保持阶段结束汇报。`},config_path:{label:`本机私有配置路径`,description:`填写 .loopx/config/ 下、相对仓库且被忽略的 JSON;留空保留当前绑定,路径不会被回传。`},enabled_agents:{label:`已启用的 Goal Agent`,description:`每行填写一个已注册的 Goal 内 Agent ID;私有绑定当前只接受一个 Agent。`}}};function dS(e,t){let n=lS[t][e.capability_id];return n?{...e,display_name:n.displayName,description:n.description,configuration_editor:{...e.configuration_editor,...n.readOnlyReason?{read_only_reason:n.readOnlyReason}:{}}}:e}function fS(e){return uS[e]}Object.freeze(Object.keys(lS.en).sort());function pS(e,t){return e.available_scopes.includes(t)&&(t!==`machine`||!!e.machine_namespace)&&e.configuration_editor.editable&&e.configuration_editor.writable_scopes.includes(t)}function mS({values:e,t}){return(0,z.jsxs)(`details`,{className:`personal-capability-raw-values`,children:[(0,z.jsx)(`summary`,{children:t(`capabilities.rawJson`)}),(0,z.jsx)(`div`,{className:`personal-capability-value-grid`,children:e.map(({label:e,value:t})=>(0,z.jsxs)(`section`,{children:[(0,z.jsx)(`strong`,{children:e}),(0,z.jsx)(`pre`,{children:t?JSON.stringify(t,null,2):`—`})]},e))})]})}function hS({source:e,t}){return e?(0,z.jsxs)(`p`,{className:`personal-capability-effective-source`,children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:15}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t(`capabilities.effectiveSource`)}),t(`capabilities.source.${e}`)]})]}):null}function gS({available:e,description:t,t:n}){return e?null:(0,z.jsxs)(`section`,{className:`personal-capability-editor-status is-read-only`,children:[(0,z.jsx)(ph,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:n(`capabilities.readOnly`)}),(0,z.jsx)(`p`,{children:t})]})]})}function _S(e){return e.availability?.includes(`experimental`)?4:e.capability_id===`multi_subagent`?3:e.configuration_editor.writable_scopes.length===0||e.availability===`supported_explicit_opt_in`?2:e.availability===`supported_explicit_override`?0:1}function vS(e,t){return[...e].sort((e,n)=>{let r=_S(e)-_S(n);if(r!==0)return r;let i=dS(e,t),a=dS(n,t);return i.display_name.localeCompare(a.display_name,t)||e.capability_id.localeCompare(n.capability_id)})}function yS({capabilities:e,locale:t,onSelect:n,scope:r,selectedCapabilityId:i,t:a}){return(0,z.jsx)(`nav`,{"aria-label":a(r===`goal`?`capabilities.catalog`:`machine.capabilityCatalog`),className:`personal-capability-list`,tabIndex:0,children:vS(e,t).map(e=>{let o=dS(e,t);return(0,z.jsxs)(`button`,{"aria-current":i===o.capability_id?`page`:void 0,onClick:()=>n(o.capability_id),type:`button`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:o.display_name})}),(0,z.jsx)(`em`,{children:a(o.available_scopes.includes(r)?r===`goal`?`capabilities.goalScope`:`capabilities.machineScope`:r===`machine`?`capabilities.goalScope`:`capabilities.machineScope`)})]},o.capability_id)})})}function bS({capability:e,locale:t,source:n}){let{t:r}=Ji(),i=dS(e,t);return(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{className:`personal-settings-icon`,children:(0,z.jsx)(sh,{"aria-hidden":!0,size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`personal-capability-heading-row`,children:[(0,z.jsx)(`h2`,{children:i.display_name}),(0,z.jsx)(hS,{source:n,t:r})]}),e.context_contribution&&(0,z.jsxs)(`details`,{className:`personal-capability-help`,"data-testid":`capability-context-phases`,children:[(0,z.jsx)(`summary`,{children:t===`zh-CN`?`主 Agent 协作指导`:`Coordinator workflow guidance`}),(0,z.jsx)(`p`,{children:t===`zh-CN`?`随能力开启。支持以下阶段;此处展示能力范围,不能证明某次运行已读取或采纳。`:`Enabled with this capability. These are supported phases, not proof that a run read or adopted the guidance.`}),(0,z.jsx)(`dl`,{children:e.context_contribution.supported_phases.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:(0,z.jsx)(`code`,{children:e})}),(0,z.jsx)(`dd`,{children:xS[e][t===`zh-CN`?`zh`:`en`]})]},e))}),(0,z.jsx)(`p`,{children:t===`zh-CN`?`LoopX Turn 在请求与结果中提供上下文;原生工具入口由 LoopX skill 调用同一只读接口。执行与采纳需另看运行证据。`:`LoopX Turn includes context in requests and results. For native tools, the LoopX skill reads the same interface. Execution and adoption require run evidence.`})]}),(0,z.jsxs)(`details`,{className:`personal-capability-help`,children:[(0,z.jsx)(`summary`,{children:t===`zh-CN`?`配置说明`:`Configuration help`}),(0,z.jsx)(`p`,{children:i.description}),(0,z.jsx)(`dl`,{children:e.configuration_editor.fields.map(e=>{let n=fS(t)[e.key],r=n?.description??e.description;return r?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n?.label??e.label}),(0,z.jsx)(`dd`,{children:r})]},e.key):null})})]},e.capability_id)]})]})}var xS={before_plan:{zh:`规划前:识别独立问题并保留主 Agent 的核验与整合职责。`,en:`Before planning: identify independent questions and retain coordinator validation and integration.`},before_delegate:{zh:`委派前:明确子任务边界、模型偏好及预期证据。`,en:`Before delegation: specify task boundaries, model preferences and expected evidence.`},after_delegate_result:{zh:`回收后:核验结果,说明采纳决定并关联计划与成果。`,en:`After results: validate evidence, explain acceptance and link plans and deliverables.`}};function SS({callbacks:e,goalId:t,notification:n,onChanged:r}){let{t:i}=Ji(),[a,o]=(0,R.useState)(!1),[s,c]=(0,R.useState)(null);async function l(n){if(e.onToggleGoalAutoNotify){o(!0),c(null);try{let a=await e.onToggleGoalAutoNotify({autoNotify:n,goalId:t});if(!a.ok){c(a.public_summary??a.blocker??i(`notifications.setupFailed`));return}r()}catch(e){c(e instanceof Error?e.message:i(`notifications.setupFailed`))}finally{o(!1)}}}return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{className:`personal-notification-toggle`,children:[(0,z.jsx)(`input`,{checked:n?.humanGateAutoNotifyEnabled??!1,disabled:a||n?.configured!==!0||!e.onToggleGoalAutoNotify,onChange:e=>void l(e.target.checked),type:`checkbox`}),(0,z.jsx)(`span`,{children:i(`notifications.autoNotify`)}),a?(0,z.jsx)(zm,{"aria-hidden":!0,className:`is-spinning`,size:14}):null]}),s?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:s}):null]})}function CS({goalId:e,onApplied:t,selected:n,t:r}){let[i,a]=(0,R.useState)({busy:null,draft:{},partialWrite:null,preview:null}),[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(`guided`),[u,d]=(0,R.useState)(``),f=(0,R.useMemo)(()=>n?iS(n.configuration_editor,u):null,[n,u]),p=c===`guided`||f!==null;(0,R.useEffect)(()=>{l(`guided`),d(``),a({busy:null,draft:rS(n?.configuration_editor??{fields:[]},n?.current??n?.effective_configuration?.configuration??n?.default,n?.default),partialWrite:null,preview:null}),s(null)},[n]);async function m(t){if(!(!n||i.busy||!p)){a(e=>({...e,busy:`preview`,partialWrite:null})),s(null);try{let r=await o_(e,n.capability_id,t);a(e=>({...e,preview:r}))}catch(e){s(e instanceof Error?e.message:r(`capabilities.previewFailed`))}finally{a(e=>({...e,busy:null}))}}}async function h(){if(!(!n||!i.preview||i.busy||!p)){a(e=>({...e,busy:`apply`})),s(null);try{let r=rS(n.configuration_editor,i.draft,n.default),o=await s_(e,n.capability_id,i.preview.action===`delete`?null:r,i.preview.plan_revision);a(e=>({...e,partialWrite:o.status===`partial_write`?o:null,preview:null})),o.status!==`partial_write`&&t()}catch(e){a(e=>({...e,preview:null})),s(e instanceof Error?e.message:r(`capabilities.applyFailed`))}finally{a(e=>({...e,busy:null}))}}}function g(e,t){a(r=>({...r,draft:n?.capability_id===`periodic_report`?aS(r.draft,e,t):{...r.draft,[e]:t},preview:null})),s(null)}function _(e){if(!n||i.busy)return;d(e);let t=iS(n.configuration_editor,e);a(e=>({...e,preview:null,draft:t?rS(n.configuration_editor,t,n.default):e.draft})),s(null)}function v(){i.busy||!p||(c===`guided`&&d(JSON.stringify(i.draft,null,2)),l(c===`guided`?`json`:`guided`),a(e=>({...e,preview:null})))}return{apply:h,changeDraft:g,changeJson:_,changeMode:v,editorMode:c,jsonDraft:u,jsonValid:p,error:o,mutation:i,preview:m}}function wS({mutationError:e,onApplied:t,partialWrite:n,preview:r}){let{t:i}=Ji();return(0,z.jsxs)(z.Fragment,{children:[e?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:e}):null,n?(0,z.jsxs)(`section`,{"aria-live":`polite`,className:`personal-capability-recovery`,children:[(0,z.jsx)(ph,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:i(n.host_capacity_pending?`capabilities.hostCapacityPartialWrite`:`capabilities.partialWrite`)}),(0,z.jsx)(`p`,{children:i(n.host_capacity_pending?`capabilities.hostCapacityPartialWriteDescription`:`capabilities.partialWriteDescription`)}),(0,z.jsx)(`small`,{children:n.recommended_action})]}),(0,z.jsxs)(`button`,{onClick:t,type:`button`,children:[(0,z.jsx)(Qm,{"aria-hidden":!0,size:15}),i(`capabilities.refreshSource`)]})]}):null,r?(0,z.jsxs)(`section`,{className:`personal-capability-preview`,"aria-label":i(`capabilities.preview`),children:[(0,z.jsx)(`strong`,{children:i(`capabilities.preview`)}),(0,z.jsx)(`span`,{children:i(`machine.action.${r.action}`)}),r.codex_host_capacity?(0,z.jsx)(`span`,{children:i(r.codex_host_capacity.write_required?`drawer.subagentHostCapacityRaise`:`drawer.subagentHostCapacityReady`,{configured:r.codex_host_capacity.configured_children??i(`drawer.subagentHostCapacityImplicit`),required:r.codex_host_capacity.required_children})}):null,(0,z.jsx)(`small`,{children:i(`capabilities.previewLocked`)})]}):null]})}function TS({callbacks:e,catalog:t,goalId:n,notification:r,onApplied:i,onNotificationChanged:a}){let{locale:o,t:s}=Ji(),c=(0,R.useMemo)(()=>vS(t.capabilities,o),[t.capabilities,o]),[l,u]=(0,R.useState)(()=>c[0]?.capability_id??``),d=(0,R.useMemo)(()=>c.find(e=>e.capability_id===l)??c[0],[c,l]),f=(0,R.useMemo)(()=>d?dS(d,o):void 0,[o,d]),{apply:p,changeDraft:m,changeJson:h,changeMode:g,editorMode:_,jsonDraft:v,jsonValid:y,error:b,mutation:x,preview:S}=CS({goalId:n,onApplied:i,selected:f,t:s}),{busy:C,draft:w,partialWrite:T,preview:E}=x;if(!d||!f)return(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:s(`capabilities.empty`)});let D=f.available_scopes.includes(`goal`),O=pS(f,`goal`),k=f.configuration_editor.read_only_reason??s(D?`capabilities.previewOnly`:`capabilities.machineOnly`);async function A(){if(!f||!O||C||!y)return;let e=rS(f.configuration_editor,w,f.default);await S(e)}async function ee(){!O||C||await S(null)}return(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(yS,{capabilities:t.capabilities,locale:o,onSelect:u,scope:`goal`,selectedCapabilityId:f.capability_id,t:s}),(0,z.jsxs)(`article`,{"aria-label":f.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,z.jsx)(bS,{capability:d,locale:o,source:f.effective_configuration?.source}),(0,z.jsx)(gS,{available:O,t:s,description:k}),f.capability_id===`lark_event_inbox`?(0,z.jsxs)(`section`,{className:`personal-capability-linked-setting`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:s(`capabilities.larkInboxNotificationSetting`)}),(0,z.jsx)(`p`,{children:s(`capabilities.larkInboxNotificationDescription`)})]}),(0,z.jsx)(SS,{callbacks:e,goalId:n,notification:r,onChanged:a})]}):null,O?(0,z.jsxs)(z.Fragment,{children:[_===`json`||!f.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,z.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,z.jsxs)(`button`,{disabled:!!C||!y,onClick:g,type:`button`,children:[(0,z.jsx)(Sm,{"aria-hidden":!0,size:14}),s(_===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,_===`guided`?(0,z.jsx)(`section`,{className:`personal-capability-field-summary`,children:(0,z.jsx)(cS,{disabled:!!C,copy:fS(o),editor:f.configuration_editor,onChange:m,value:w,enabledAction:(0,z.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:g,type:`button`,children:[(0,z.jsx)(Sm,{"aria-hidden":!0,size:14}),s(`machine.editJson`)]})})}):(0,z.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`goal-configuration-json`,children:[(0,z.jsx)(`span`,{children:s(`capabilities.jsonConfiguration`)}),(0,z.jsx)(`textarea`,{id:`goal-configuration-json`,"aria-describedby":`goal-configuration-json-help`,disabled:!!C,onChange:e=>h(e.target.value),rows:12,spellCheck:!1,value:v}),(0,z.jsx)(`small`,{id:`goal-configuration-json-help`,children:s(`capabilities.jsonHelp`)}),y?null:(0,z.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:s(`capabilities.jsonInvalid`)})]})]}):null,(0,z.jsx)(wS,{mutationError:b,onApplied:i,partialWrite:T,preview:E}),O?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[f.current&&f.available_scopes.includes(`machine`)?(0,z.jsx)(`button`,{disabled:!!C||!y,onClick:()=>void ee(),type:`button`,children:s(`capabilities.restoreInheritance`)}):null,(0,z.jsx)(`button`,{disabled:!!C||!y,onClick:()=>void A(),type:`button`,children:s(C===`preview`?`common.loading`:`capabilities.previewChanges`)}),(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!C||!E||!y,onClick:()=>void p(),type:`button`,children:s(C===`apply`?`common.loading`:`capabilities.applyPreview`)})]}):null,(0,z.jsx)(mS,{values:[{label:s(`capabilities.goalValue`),value:f.current},{label:s(f.machine_current?`capabilities.machineValue`:`capabilities.defaultValue`),value:f.machine_current??f.default}],t:s},d.capability_id)]})]})}function ES({callbacks:e,goalId:t,notification:n,onChanged:r}){let{t:i}=Ji(),[a,o]=(0,R.useState)(null),[s,c]=(0,R.useState)(null),[l,u]=(0,R.useState)(!1);function d(){t&&(u(!0),c(null),a_(t).then(o).catch(e=>c(e instanceof Error?e.message:i(`capabilities.loadFailed`))).finally(()=>u(!1)))}return(0,R.useEffect)(d,[t]),t?l&&!a?(0,z.jsxs)(`p`,{"aria-live":`polite`,className:`personal-capability-empty`,children:[(0,z.jsx)(zm,{className:`personal-spin`,size:18}),i(`capabilities.loading`)]}):s?(0,z.jsxs)(`section`,{className:`personal-capability-error`,role:`alert`,children:[(0,z.jsx)(ph,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:i(`capabilities.loadFailed`)}),(0,z.jsx)(`small`,{children:s})]}),(0,z.jsxs)(`button`,{onClick:d,type:`button`,children:[(0,z.jsx)(Qm,{"aria-hidden":!0,size:15}),i(`capabilities.retry`)]})]}):a?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":a.revision,children:[(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:17}),i(`capabilities.atomicOverride`)]}),(0,z.jsx)(`p`,{children:i(`capabilities.atomicOverrideDescription`)})]}),(0,z.jsx)(TS,{callbacks:e,catalog:a.capability_catalog,goalId:t,notification:n,onApplied:d,onNotificationChanged:r})]}):null:(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:i(`capabilities.chooseGoal`)})}function DS(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function OS(e,t){let n=t?.machine_namespace;return n?e?.machine_configuration?.namespaces[n]:void 0}function kS(e,t,n){let r={...DS(e.default),...DS(t),...n};return e.capability_id===`steward_executor`&&(Object.hasOwn(n,`selection_policy`)||Object.hasOwn(n,`eligible_endpoints`))&&(r.schema_version=DS(e.default).schema_version),r}function AS(e,t){for(let n of e.configuration_editor.fields){let e=t[n.key];if(n.required&&(e==null||e===``))return!1}if(e.capability_id===`periodic_report`&&t.enabled===!0)return!!(String(t.profile_preset??``).trim()&&String(t.route_ref??``).trim()&&String(t.timezone??``).trim());if(e.capability_id===`steward_executor`){let e=String(t.selection_policy??`preferred`),n=String(t.executor_endpoint??``),r=Array.isArray(t.eligible_endpoints)?t.eligible_endpoints.map(e=>String(e)):[];return e===`flexible`?r.length>0&&r.includes(n)&&new Set(r).size===r.length:r.length===0}return!0}function jS(e){try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function MS(e){return e?e===`absent`?e:e.replace(/^sha256:/,``).slice(0,12):`—`}function NS(){let{locale:e,t}=Ji(),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(``),[o,s]=(0,R.useState)({}),[c,l]=(0,R.useState)(`{}`),[u,d]=(0,R.useState)(`guided`),[f,p]=(0,R.useState)(null),[m,h]=(0,R.useState)(`upsert`),[g,_]=(0,R.useState)(null),[v,y]=(0,R.useState)(null),[b,x]=(0,R.useState)(`load`),[S,C]=(0,R.useState)(null),[w,T]=(0,R.useState)(null),E=(0,R.useMemo)(()=>vS(n?.capability_catalog.capabilities??[],e),[n,e]),D=n?.invalid_namespaces[0],O=E.find(e=>e.capability_id===i)??(D?E.find(e=>e.machine_namespace===D):void 0)??E.find(e=>pS(e,`machine`))??E[0],k=O?dS(O,e):void 0,A=OS(n,k),ee=!!(k?.machine_namespace&&A),j=!!(k&&pS(k,`machine`)),M=(0,R.useMemo)(()=>jS(c),[c]),te=k?u===`json`?M:kS(k,A,o):null,ne=!!(k&&(u===`json`?M:AS(k,te??{})));async function N(){r(await i_())}(0,R.useEffect)(()=>{let e=!0;return i_().then(t=>{e&&r(t)}).catch(n=>{e&&C(n instanceof Error?n.message:t(`machine.loadError`))}).finally(()=>{e&&x(null)}),()=>{e=!1}},[t]),(0,R.useEffect)(()=>{if(!k)return;let e=OS(n,k),t=rS(k.configuration_editor,e??k.default,k.default),r=kS(k,e,t);s(t),l(JSON.stringify(r,null,2)),d(j?`guided`:`json`),p(null),h(`upsert`),y(null)},[n,i,e]);function P(e,t){s(n=>k?.capability_id===`periodic_report`?aS(n,e,t):{...n,[e]:t}),p(null),h(`upsert`),C(null),T(null)}function re(e){if(k){if(e===`json`)l(JSON.stringify(kS(k,A,o),null,2));else if(M)s(rS(k.configuration_editor,M,k.default));else{C(t(`machine.jsonInvalid`));return}d(e),p(null),h(`upsert`),C(null)}}async function ie(){if(!(!j||!k?.machine_namespace||!te||!ne||b)){x(`preview`),C(null),T(null);try{h(`upsert`),p(await c_(k.machine_namespace,te))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function ae(){if(!(!j||!k?.machine_namespace||!ee||b)){x(`preview`),C(null),T(null);try{h(`remove`),p(await u_(k.machine_namespace))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function F(){if(!j||!k?.machine_namespace||!f||b||m===`upsert`&&!te)return;x(`apply`),C(null);let e=m;try{let n=e===`remove`?await d_(k.machine_namespace,f.plan_revision):await l_(k.machine_namespace,te,f.plan_revision);_(n),p(null),h(`upsert`),y(null),await N(),T(n.status===`applied`?t(e===`remove`?`machine.removed`:`machine.applied`):t(`machine.unchanged`))}catch(e){p(null),h(`upsert`),C(e instanceof Error?e.message:t(`machine.applyError`))}finally{x(null)}}async function oe(){if(!(!g?.transaction_id||b)){x(`rollback-preview`),C(null);try{y(await f_(g.transaction_id))}catch(e){C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}async function I(){if(!(!g?.transaction_id||!v||b)){x(`rollback`),C(null);try{await p_(g.transaction_id,v.plan_revision),_(null),y(null),p(null),await N(),T(t(`machine.rolledBack`))}catch(e){y(null),C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}return b===`load`?(0,z.jsx)(`div`,{className:`personal-machine-loading`,role:`status`,children:t(`common.loading`)}):k?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n?.revision,children:[(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:17}),t(`machine.liveDefault`)]}),(0,z.jsx)(`p`,{children:t(`machine.liveDefaultDescription`)})]}),(0,z.jsxs)(`div`,{className:`personal-capability-body`,children:[n?.status===`invalid`?(0,z.jsxs)(`section`,{className:`personal-machine-error`,"data-testid":`machine-invalid-repair`,role:`alert`,children:[(0,z.jsx)(`strong`,{children:t(`machine.invalidStoredConfiguration`)}),(0,z.jsx)(`p`,{children:t(`machine.invalidStoredConfigurationDescription`)})]}):null,(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(yS,{capabilities:E,locale:e,onSelect:a,scope:`machine`,selectedCapabilityId:k.capability_id,t}),(0,z.jsxs)(`article`,{"aria-label":k.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,z.jsx)(bS,{capability:O,locale:e,source:k.available_scopes.includes(`machine`)?ee?`machine_default`:`capability_default`:void 0}),(0,z.jsx)(gS,{available:j,t,description:k.available_scopes.includes(`machine`)?t(`machine.editorUnavailableDescription`):t(`machine.goalOnly`)}),k.capability_id===`periodic_report`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:A?.schedule?e===`zh-CN`?`日历与阶段汇报`:`Calendar and stage reports`:t(`machine.periodicReportActivation`)}),(0,z.jsx)(`p`,{children:A?.schedule?A.enabled===!0?e===`zh-CN`?`已配置日历计划,由现有唤醒检查;是否送达请核对报告回执。`:`A calendar schedule is configured and checked by existing wakes. Verify delivery in the report receipt.`:e===`zh-CN`?`日历计划已保存;启用此能力后才会检查和投递。`:`The schedule is saved; enable this capability to check and deliver reports.`:t(`machine.periodicReportActivationDescription`)})]})]}):null,k.capability_id===`change_quality_qualification`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.changeQualityActivation`)}),(0,z.jsx)(`p`,{children:t(`machine.changeQualityActivationDescription`)})]})]}):null,k.capability_id===`todo_replan_cadence`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.replanCadenceActivation`)}),(0,z.jsx)(`p`,{children:t(`machine.replanCadenceActivationDescription`)})]})]}):null,k.capability_id===`pull_request_review`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e===`zh-CN`?`只改变队列排序`:`Queue ordering only`}),(0,z.jsx)(`p`,{children:e===`zh-CN`?`默认先审阅其他开发者的 PR;选择 owner-first 才会优先当前已认证审阅者自己的 PR。此配置不会发布 review、写 Todo、push 或 merge。`:`The default reviews other developers' PRs first; choose owner-first only when the authenticated reviewer's own PRs should lead. This setting never posts a review, writes Todos, pushes, or merges.`})]})]}):null,j?(0,z.jsxs)(z.Fragment,{children:[u===`json`||!k.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,z.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,z.jsxs)(`button`,{onClick:()=>re(u===`guided`?`json`:`guided`),type:`button`,children:[(0,z.jsx)(Sm,{"aria-hidden":!0,size:14}),t(u===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,u===`guided`?(0,z.jsxs)(`section`,{className:`personal-capability-field-summary`,children:[(0,z.jsx)(cS,{copy:fS(e),disabled:!!b,editor:k.configuration_editor,onChange:P,value:o,enabledAction:(0,z.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:()=>re(`json`),type:`button`,children:[(0,z.jsx)(Sm,{"aria-hidden":!0,size:14}),t(`machine.editJson`)]})}),ne?null:(0,z.jsx)(`p`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.requiredFields`)})]}):(0,z.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`machine-configuration-json`,children:[(0,z.jsx)(`span`,{children:t(`machine.jsonConfiguration`)}),(0,z.jsx)(`textarea`,{"aria-describedby":`machine-configuration-json-help`,disabled:!!b,id:`machine-configuration-json`,onChange:e=>{l(e.target.value),p(null),C(null)},rows:12,spellCheck:!1,value:c}),(0,z.jsx)(`small`,{id:`machine-configuration-json-help`,children:t(`machine.jsonConfigurationHelp`)}),M?null:(0,z.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.jsonInvalid`)})]})]}):null,S?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:S}):null,w?(0,z.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,z.jsx)(hm,{"aria-hidden":!0,size:16}),w]}):null,f?(0,z.jsxs)(`section`,{"aria-label":t(`machine.preview`),className:`personal-machine-preview`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.preview`)}),(0,z.jsx)(`span`,{children:t(`machine.action.${f.action}`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.currentRevision`)}),(0,z.jsx)(`dd`,{title:f.current_revision,children:MS(f.current_revision)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.desiredRevision`)}),(0,z.jsx)(`dd`,{title:f.desired_revision,children:MS(f.desired_revision)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.changedNamespaces`)}),(0,z.jsx)(`dd`,{children:f.changed_namespaces.join(`, `)||t(`common.none`)})]})]}),(0,z.jsx)(`p`,{children:t(`machine.previewLocked`)})]}):null,g?.rollback_available&&g.transaction_id?(0,z.jsxs)(`section`,{className:`personal-machine-rollback`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.rollbackAvailable`)}),(0,z.jsx)(`p`,{children:t(v?`machine.rollbackPreviewDescription`:`machine.rollbackDescription`)})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!!b||!!(v&&!v.rollback_allowed),onClick:()=>void(v?I():oe()),type:`button`,children:[(0,z.jsx)($m,{"aria-hidden":!0,size:15}),t(b===`rollback`||b===`rollback-preview`?`common.loading`:v?`machine.confirmRollback`:`machine.previewRollback`)]})]}):null,j?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[ee?(0,z.jsxs)(`button`,{className:`is-danger`,disabled:!!b,onClick:()=>void ae(),type:`button`,children:[(0,z.jsx)(fh,{"aria-hidden":!0,size:15}),t(`machine.previewRemoval`)]}):null,(0,z.jsx)(`button`,{disabled:!!b||!ne,onClick:()=>void ie(),type:`button`,children:t(b===`preview`?`common.loading`:`machine.previewChanges`)}),(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!b||!f,onClick:()=>void F(),type:`button`,children:t(b===`apply`?`common.loading`:`machine.applyPreview`)})]}):null,k.available_scopes.includes(`machine`)?(0,z.jsx)(mS,{values:[{label:t(`machine.currentValue`),value:A},{label:t(`capabilities.defaultValue`),value:k.default}],t},k.capability_id):null]})]})]})]}):(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:t(`machine.capabilityEmpty`)})}function PS(e,t){return t(e===`invalid`?`machine.credentialInvalid`:e===`configured`?`machine.credentialConfigured`:`machine.credentialAbsent`)}function FS(e,t){return t(e===`machine_store`?`machine.credentialSourceMachine`:e===`service_environment`?`machine.credentialSourceEnvironment`:`machine.credentialSourceUnset`)}function IS(){let{t:e}=Ji(),[t,n]=(0,R.useState)(null),[r,i]=(0,R.useState)(``),[a,o]=(0,R.useState)(``),[s,c]=(0,R.useState)(``),[l,u]=(0,R.useState)(null),[d,f]=(0,R.useState)(null),p=(0,R.useCallback)(async()=>{c(`load`);try{let e=await n_();n(e),o(String(e.base_url.value??``))}catch(t){u(t instanceof Error?t.message:e(`machine.credentialError`))}finally{c(``)}},[e]);(0,R.useEffect)(()=>{p()},[p]);async function m(t,r){c(`store`),u(null),f(null);try{let e=await r_(t);n(e),o(String(e.base_url.value??``)),i(``),f(r)}catch(t){u(t instanceof Error?t.message:e(`machine.credentialError`))}finally{c(``)}}if(!t&&s===`load`)return(0,z.jsx)(`div`,{className:`personal-machine-loading`,role:`status`,children:e(`common.loading`)});let h=t?`${PS(t.provider_key.configured?`configured`:`absent`,e)} · ${FS(t.provider_key.source,e)}`:``,g=t?`${t.base_url.value??e(`machine.credentialAbsent`)} · ${FS(t.base_url.source,e)}`:``;return(0,z.jsxs)(`section`,{className:`personal-operator-credential`,"data-testid":`operator-credential-settings`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(Fm,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e(`machine.credentialTitle`)}),(0,z.jsx)(`p`,{children:e(`machine.credentialDescription`)})]}),(0,z.jsx)(`span`,{className:`personal-operator-credential-status`,children:t?PS(t.status,e):e(`common.loading`)})]}),t?(0,z.jsxs)(`dl`,{className:`personal-operator-credential-readback`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialApiKey`)}),(0,z.jsx)(`dd`,{children:h})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialFingerprint`)}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.provider_key.fingerprint??e(`common.none`)})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialBaseUrl`)}),(0,z.jsx)(`dd`,{children:g})]})]}):null,t?.status===`invalid`&&t.repair?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:t.repair}):null,(0,z.jsxs)(`label`,{htmlFor:`operator-credential-api-key`,children:[(0,z.jsx)(`span`,{children:e(`machine.credentialApiKey`)}),(0,z.jsx)(`input`,{autoComplete:`off`,disabled:!!s,id:`operator-credential-api-key`,onChange:e=>i(e.target.value),placeholder:e(`machine.credentialApiKeyPlaceholder`),type:`password`,value:r})]}),(0,z.jsxs)(`label`,{htmlFor:`operator-credential-base-url`,children:[(0,z.jsx)(`span`,{children:e(`machine.credentialBaseUrl`)}),(0,z.jsx)(`input`,{autoComplete:`off`,disabled:!!s,id:`operator-credential-base-url`,onChange:e=>o(e.target.value),placeholder:e(`machine.credentialBaseUrlPlaceholder`),type:`text`,value:a})]}),l?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:l}):null,d?(0,z.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,z.jsx)(hm,{"aria-hidden":!0,size:16}),d]}):null,(0,z.jsxs)(`footer`,{className:`personal-operator-credential-actions`,children:[(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!s||!r.trim()&&!a.trim(),onClick:()=>void m({...r.trim()?{provider_key:r}:{},...a.trim()?{base_url:a}:{}},e(`machine.credentialStored`)),type:`button`,children:e(s===`store`?`common.loading`:`machine.credentialStore`)}),(0,z.jsxs)(`button`,{disabled:!!s||t?.provider_key.configured!==!0,onClick:()=>void m({clear_provider_key:!0},e(`machine.credentialCleared`)),type:`button`,children:[(0,z.jsx)(fh,{"aria-hidden":!0,size:15}),e(`machine.credentialClearKey`)]}),(0,z.jsxs)(`button`,{disabled:!!s||t?.base_url.configured!==!0,onClick:()=>void m({clear_base_url:!0},e(`machine.credentialCleared`)),type:`button`,children:[(0,z.jsx)(fh,{"aria-hidden":!0,size:15}),e(`machine.credentialClearUrl`)]})]}),(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:17}),e(`machine.credentialTitle`)]}),(0,z.jsx)(`p`,{children:e(`machine.credentialBoundary`)})]})]})}var LS={appearance:Km,capabilities:sh,language:Im,lark:ah,machine:rh,provider:Fm};function RS({callbacks:e,focusGoalConnection:t=!1,goals:n,initialGoalId:r,initialTab:i=`lark`,goalNotifications:a,onChanged:o,onClose:s,onThemeChange:c,theme:l}){let{locale:u,setLocale:d,t:f}=Ji(),[p,m]=(0,R.useState)(i),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{let e=h.current;if(!e)return;let t=()=>{if(e.scrollWidth<=e.clientWidth)return;let t=e.querySelector(`[aria-current="page"]`);if(!t)return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=r.leftn.right?r.right-n.right:0;i&&(e.scrollLeft+=i)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[p]);let g=[...r?[{key:`capabilities`,label:f(`capabilities.title`)}]:[],{key:`provider`,label:f(`settings.modelProvider`)},{key:`machine`,label:f(`settings.globalCapabilities`)},{key:`lark`,label:`Lark`},{key:`appearance`,label:f(`settings.appearance`)},{key:`language`,label:f(`settings.language`)}],_=[{label:f(`settings.languageEnglish`),value:`en`},{label:f(`settings.languageSimplifiedChinese`),value:`zh-CN`}],v={appearance:{title:f(`settings.appearance`)},capabilities:{title:f(`capabilities.title`)},language:{title:f(`settings.language`)},lark:{title:`Lark`},machine:{title:f(`settings.globalCapabilities`)},provider:{title:f(`settings.modelProvider`)}}[p];return(0,z.jsxs)(`section`,{"aria-label":f(`settings.title`),className:`personal-settings-page`,"data-pw-theme":l,children:[(0,z.jsxs)(`aside`,{className:`personal-settings-sidebar`,children:[(0,z.jsxs)(`button`,{autoFocus:!0,className:`personal-settings-back`,onClick:s,type:`button`,children:[(0,z.jsx)(om,{size:17}),(0,z.jsx)(`span`,{children:f(`settings.back`)})]}),(0,z.jsx)(`div`,{className:`personal-settings-title`,children:(0,z.jsx)(`strong`,{children:f(`settings.title`)})}),(0,z.jsx)(`nav`,{"aria-label":f(`settings.categories`),className:`personal-settings-tabs`,ref:h,children:g.map(e=>{let t=LS[e.key];return(0,z.jsxs)(`button`,{"aria-current":p===e.key?`page`:void 0,onClick:()=>m(e.key),type:`button`,children:[(0,z.jsx)(t,{size:17}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:e.label})})]},e.key)})})]}),(0,z.jsxs)(`main`,{className:`personal-settings-body`,children:[(0,z.jsx)(`header`,{className:`personal-settings-header`,children:(0,z.jsx)(`div`,{children:(0,z.jsx)(`h1`,{children:v.title})})}),p===`lark`?(0,z.jsx)(tS,{embedded:!0,focusGoalConnection:t,goals:n,initialGoalId:r,onChanged:o,onClose:s}):null,p===`provider`?(0,z.jsx)(`div`,{className:`personal-provider-settings`,children:(0,z.jsx)(IS,{})}):null,p===`machine`?(0,z.jsx)(NS,{}):null,p===`capabilities`?(0,z.jsx)(ES,{callbacks:e,goalId:r,notification:a.find(e=>e.goalId===r),onChanged:o}):null,p===`appearance`?(0,z.jsx)(`section`,{className:`personal-detail-card personal-appearance-settings`,children:(0,z.jsxs)(`div`,{className:`personal-settings-choice-group`,role:`radiogroup`,"aria-label":f(`settings.workspaceTheme`),children:[(0,z.jsxs)(`button`,{"aria-checked":l===`loopx`,onClick:()=>c(`loopx`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-loopx`}),(0,z.jsx)(`strong`,{children:f(`settings.themeLoopx`)})]}),(0,z.jsxs)(`button`,{"aria-checked":l===`paper`,onClick:()=>c(`paper`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-paper`}),(0,z.jsx)(`strong`,{children:f(`settings.themeDefault`)})]}),(0,z.jsxs)(`button`,{"aria-checked":l===`brutal`,onClick:()=>c(`brutal`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-brutal`}),(0,z.jsx)(`strong`,{children:f(`settings.themeHighContrast`)})]})]})}):null,p===`language`?(0,z.jsx)(`section`,{className:`personal-settings-card`,children:(0,z.jsx)(`div`,{"aria-label":f(`settings.language`),className:`personal-language-options`,role:`radiogroup`,children:_.map(e=>(0,z.jsxs)(`button`,{"aria-checked":u===e.value,className:u===e.value?`is-selected`:``,onClick:()=>d(e.value),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:e.label})}),u===e.value?(0,z.jsx)(hm,{"aria-hidden":!0,size:17}):null]},e.value))})}):null]})]})}var zS=`loopx-pw-theme`,BS=`loopx`;function VS(){try{let e=window.localStorage.getItem(zS);return e===`loopx`||e===`paper`||e===`brutal`?e:BS}catch{return BS}}function HS(e){try{window.localStorage.setItem(zS,e)}catch{}}function US({drawer:e,drawerMode:t=`panel`,drawerOpen:n,main:r,mobileSidebarOpen:i=!1,onCloseMobileSidebar:a,sidebar:o,theme:s=`loopx`}){let{t:c}=Ji(),l=(0,R.useRef)(null),u=(0,R.useRef)(null);return(0,R.useEffect)(()=>{if(!i)return;u.current=document.activeElement instanceof HTMLElement?document.activeElement:null;let e=l.current?.querySelectorAll(`button:not([disabled]), a[href], select:not([disabled]), textarea:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])`);e?.[0]?.focus();function t(t){if(t.key!==`Tab`||!e?.length)return;let n=e[0],r=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),r.focus()):!t.shiftKey&&document.activeElement===r&&(t.preventDefault(),n.focus())}return document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`keydown`,t),u.current?.focus(),u.current=null}},[i]),(0,z.jsxs)(`section`,{className:`personal-workspace-shell${n?` has-drawer`:``}${n&&t.startsWith(`inspector`)?` has-task-inspector`:``}${t===`inspector-full`?` is-task-inspector-full`:``}${i?` mobile-sidebar-open`:``}`,"data-pw-theme":s,children:[i?(0,z.jsx)(`button`,{"aria-hidden":!0,className:`personal-sidebar-backdrop`,onClick:a,tabIndex:-1,type:`button`}):null,(0,z.jsx)(`aside`,{"aria-label":i?c(`header.goalNavigation`):void 0,"aria-modal":i?!0:void 0,className:`personal-workspace-sidebar`,"data-workspace-sidebar":!0,ref:l,role:i?`dialog`:void 0,children:(0,z.jsxs)(`div`,{className:`personal-workspace-sidebar-inner`,children:[i?(0,z.jsxs)(`button`,{className:`personal-sr-only`,onClick:a,type:`button`,children:[c(`common.close`),` `,c(`header.goalNavigation`)]}):null,o]})}),(0,z.jsx)(`main`,{"aria-hidden":i||void 0,className:`personal-workspace-main`,inert:i||void 0,children:r}),n?(0,z.jsx)(`aside`,{className:`personal-workspace-drawer`,"data-context-drawer":!0,"data-drawer-mode":t,children:e}):null]})}function WS(e){let t=e.match(/(?:下一步|建议|行动项|待办)[::\s]*([^\n]+)/u),n=t?t[1]:e;n=n.replace(/```[\s\S]*?```/g,``).replace(/`([^`]+)`/g,`$1`).replace(/\[([^\]]+)\]\([^)]+\)/g,`$1`).replace(/[#*~_>]/g,``).replace(/^[-*•\d+.\s]+/u,``).replace(/^(好的|没问题|收到|建议如下|任务如下|分析如下|结论[::])[\s,,::]*/u,``);let r=(n.split(/\r?\n/).map(e=>e.trim()).filter(Boolean)[0]||n).replace(/\s+/gu,` `).trim();return Array.from(r).slice(0,120).join(``)}function GS(e){let t=new Map;return e.forEach(e=>{let n=e.fields.find(e=>e.key===`todo_id`)?.value??``,r=[e.actionKind,e.goalId??``,n,e.title].join(`:`);t.set(r,e)}),[...t.values()]}function KS(e,t,n){if(!e)return n(`home.noFirstActivity`);let r=new Date(e);if(Number.isNaN(r.getTime()))return e;let i=new Date,a=new Intl.DateTimeFormat(t,{hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r);return r.toDateString()===i.toDateString()?n(`home.todayAt`,{time:a}):new Intl.DateTimeFormat(t,{month:`numeric`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r)}function qS({goals:e,onSelectGoal:t,onRetry:n,systemHealth:r}){let{locale:i,t:a}=Ji(),o=e.filter(e=>e.activationState===`active`),s=o.filter(e=>e.loadState===`error`).length,c=[{key:`needs_you`,label:a(`home.lane.needsYou`)},{key:`running`,label:a(`home.lane.running`)},{key:`observing`,label:a(`home.lane.observing`)},{key:`scheduled`,label:a(`home.lane.scheduled`)}],l=Object.fromEntries(c.map(e=>[e.key,[]])),u=[];e.filter(e=>!e.loadState).forEach(e=>{let t=Jd(e);t===`history`?u.push(e):t!==`stopped`&&l[t].push(e)});let d=e=>(0,z.jsxs)(`button`,{className:`personal-home-goal-card`,"data-goal-state":e.loadState??e.state,"data-load-error":e.loadError,onClick:()=>t(e.goalId),type:`button`,children:[(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`span`,{className:`personal-home-goal-meta`,children:e.agentLaneCount&&e.agentLaneCount>1?a(`header.workAgentCount`,{count:e.agentLaneCount}):e.agentLabel??e.agentId}),(0,z.jsx)(`p`,{children:e.loadError?a(`startup.error.${e.loadError}`):e.needsYou??e.nextSentence}),(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`span`,{children:e.loadState?a(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,i)}),(0,z.jsx)(`small`,{title:e.latestActivity,children:e.loadState?``:e.latestActivity?KS(e.latestActivity,i,a):e.agentTodos.length?a(`home.taskCount`,{count:e.agentTodos.length}):a(`home.noActivity`)})]})]},e.goalId);return(0,z.jsxs)(`section`,{"aria-label":a(`home.workspace`),className:`personal-home-board`,children:[r&&(!r.ok||r.issues.length>0||r.freshnessWarning)?(0,z.jsxs)(`div`,{className:`personal-system-health-banner`,role:`alert`,children:[(0,z.jsxs)(`div`,{className:`personal-system-health-header`,children:[(0,z.jsx)(ym,{size:15}),(0,z.jsx)(`strong`,{children:a(`home.systemHealth`,{summary:r.summary})}),r.freshnessWarning?(0,z.jsxs)(`small`,{children:[`(`,r.freshnessWarning,`)`]}):null]}),r.issues.length>0?(0,z.jsx)(`ul`,{className:`personal-system-health-issues`,children:r.issues.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))}):null]}):null,o.some(e=>e.loadState)?(0,z.jsxs)(`section`,{className:`personal-home-lane`,"aria-live":`polite`,children:[(0,z.jsx)(`header`,{children:a(`startup.progress`,{loaded:o.filter(e=>!e.loadState).length,total:o.length})}),s?(0,z.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`status`,children:[(0,z.jsx)(`span`,{children:a(`startup.failedCount`,{count:s})}),(0,z.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,onClick:n,type:`button`,children:a(`startup.retryFailed`)})]}):null,o.filter(e=>e.loadState).map(d)]}):null,(0,z.jsx)(`div`,{className:`personal-home-lanes`,children:c.filter(e=>l[e.key].length>0).map(e=>(0,z.jsxs)(`section`,{className:`personal-home-lane is-${e.key}`,"data-testid":`personal-home-lane-${e.key}`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`i`,{}),e.label]}),(0,z.jsx)(`b`,{children:l[e.key].length})]}),(0,z.jsx)(`div`,{className:`personal-home-lane-list`,children:l[e.key].map(d)})]},e.key))}),u.length?(0,z.jsxs)(`details`,{className:`personal-home-history`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:a(`home.history`)}),(0,z.jsx)(`b`,{children:u.length}),(0,z.jsx)(`small`,{children:a(`home.completedGoals`)})]}),(0,z.jsx)(`div`,{children:u.map(d)})]}):null]})}function JS({items:e,onSelect:t,reportState:n}){let{locale:r,t:i}=Ji();return(0,z.jsxs)(`section`,{className:`personal-object-list personal-files-list`,"data-testid":`personal-goal-outputs`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:i(`files.title`)}),(0,z.jsx)(`span`,{children:e.length})]}),n?.loading?(0,z.jsxs)(`p`,{className:`personal-object-list-state`,role:`status`,children:[(0,z.jsx)(Qm,{className:`is-spinning`,size:14}),i(`files.loadingReports`)]}):null,n?.error?(0,z.jsxs)(`p`,{className:`personal-object-list-state is-error`,role:`alert`,children:[(0,z.jsx)(ym,{size:14}),i(`files.reportLoadFailed`),`: `,n.error]}):null,!n?.loading&&!n?.error&&e.length===0?(0,z.jsxs)(`p`,{className:`personal-object-list-state`,children:[(0,z.jsx)(jm,{size:14}),i(`files.empty`)]}):null,e.map(e=>(0,z.jsxs)(`button`,{"data-output-kind":e.output.kind,onClick:()=>t({item:e.output,kind:`output`}),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-file-icon`,children:(0,z.jsx)(jm,{size:16})}),(0,z.jsx)(`strong`,{children:e.output.title}),e.output.report?(0,z.jsx)(`em`,{children:i(`files.reportDelta`,{added:e.output.report.addedCount,changed:e.output.report.changedCount})}):null,(0,z.jsx)(`p`,{children:e.output.summary??e.output.safePreview??e.output.kind??i(`files.emptySummary`)}),(0,z.jsx)(`small`,{title:e.output.createdAt,children:[e.output.kind===`report`?i(`files.verifiedReport`):null,KS(e.output.createdAt,r,i)].filter(Boolean).join(` · `)})]},e.id))]})}function YS({agentLabel:e,messages:t,onClose:n,onDraftTask:r,onOpenConversation:i,title:a}){let{t:o}=Ji(),s=t.reduce((e,t,n)=>t.role===`user`?n:e,0),c=t.slice(Math.max(0,s)).slice(-3),l=c.filter(e=>e.role===`assistant`&&!e.pending).at(-1);return(0,R.useEffect)(()=>{if(!n)return;let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]),(0,z.jsxs)(`aside`,{"aria-label":o(`conversation.receipt`),className:`personal-manager-conversation-tray`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(fm,{size:16}),(0,z.jsx)(`strong`,{children:a??o(`conversation.title`)}),(0,z.jsx)(`small`,{children:t.at(-1)?.pending?o(`conversation.replying`):o(`common.recently`)})]}),(0,z.jsxs)(`div`,{className:`personal-manager-conversation-actions`,children:[r&&l?(0,z.jsxs)(`button`,{className:`personal-manager-conversation-btn`,onClick:()=>r(l.text),title:o(`conversation.convertHint`),type:`button`,children:[(0,z.jsx)(Rm,{size:13}),(0,z.jsx)(`span`,{children:o(`conversation.toTask`)})]}):null,(0,z.jsx)(`button`,{className:`personal-manager-conversation-link`,onClick:i,type:`button`,children:o(`conversation.full`)}),n?(0,z.jsx)(`button`,{"aria-label":o(`conversation.close`),className:`personal-manager-conversation-close`,onClick:n,title:o(`conversation.close`),type:`button`,children:(0,z.jsx)(gh,{size:14})}):null]})]}),(0,z.jsx)(`div`,{"aria-live":`polite`,className:`personal-manager-conversation-messages`,children:c.map(t=>(0,z.jsxs)(`article`,{className:`is-${t.role}`,children:[(0,z.jsx)(`strong`,{children:t.role===`user`?o(`common.you`):t.agentLabel??e??o(`header.manager`)}),(0,z.jsxs)(`div`,{className:`personal-manager-conversation-bubble`,children:[t.role===`user`?(0,z.jsx)(`p`,{children:t.text}):(0,z.jsx)(wb,{text:t.text}),t.pending?(0,z.jsx)(`small`,{children:o(`conversation.agentPending`)}):null,(0,z.jsx)(Wy,{request:t.collaboration}),(0,z.jsx)(Vb,{delivery:t.returnDelivery})]})]},t.id))})]})}function XS({onClose:e,onOpenDetails:t,run:n}){let{t:r}=Ji();return(0,z.jsxs)(`section`,{"aria-label":r(`session.record`),className:`personal-session-record`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(fm,{size:17}),r(`session.record`)]}),(0,z.jsx)(`button`,{"aria-label":r(`session.closeRecord`),onClick:e,type:`button`,children:(0,z.jsx)(gh,{size:15})})]}),(0,z.jsx)(`div`,{children:(0,z.jsx)(`strong`,{children:n.title})}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Agent`}),(0,z.jsx)(`dd`,{children:n.agentLabel})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`common.status`)}),(0,z.jsx)(`dd`,{children:Xi(n.sessionStatus??n.status,r)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Session`}),(0,z.jsx)(`dd`,{title:n.sessionId,children:n.sessionId})]})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:t,type:`button`,children:r(`session.details`)})]})}function ZS(e,t,n){let r=[];if(t===null)return e.userTodos.slice(0,4).forEach(t=>r.push({attention:{...t,goalTitle:t.goalTitle??Kd(e,t.goalId)},id:`attention:${t.todoId}`,kind:`attention`})),e.goals.filter(e=>Jd(e)===`running`).slice(0,4).forEach(e=>r.push({id:`run:${e.goalId}`,kind:`run`,run:{agentId:e.agentId,agentLabel:e.agentLabel??e.agentId,completedSteps:e.doneTodoCount??e.agentTodos.filter(e=>e.done).length,goalId:e.goalId,goalTitle:e.title,latestActivity:e.agentSentence,runId:`goal:${e.goalId}`,status:`running`,title:e.nextSentence,totalSteps:Math.max((e.doneTodoCount??0)+e.agentTodos.filter(e=>!e.done).length,1)}})),r;let i=e.goals.find(e=>e.goalId===t);if(!i)return r;if(i.needsYou){let t=e.userTodos.find(e=>e.goalId===i.goalId);r.push({attention:t?{...t,goalTitle:i.title}:{blocking:i.needsYouBlocking??!1,goalId:i.goalId,goalTitle:i.title,text:i.needsYou,todoId:`${i.goalId}:attention`},id:`attention:${i.goalId}`,kind:`attention`})}qd(i)&&r.push({id:`run:${i.goalId}`,kind:`run`,run:{agentId:i.agentId,agentLabel:i.agentLabel??i.agentId,completedSteps:i.doneTodoCount??i.agentTodos.filter(e=>e.done).length,goalId:i.goalId,goalTitle:i.title,latestActivity:i.agentSentence,runId:`goal:${i.goalId}`,status:i.state===`推进中`?`running`:i.state===`需修复`?`failed`:`waiting`,title:i.nextSentence,totalSteps:Math.max((i.doneTodoCount??0)+i.agentTodos.filter(e=>!e.done).length,1)}}),i.agentTodos.filter(e=>e.taskClass===`continuous_monitor`).forEach(t=>{let a=e.timeline?.find(e=>e.kind===`run`&&e.run.goalId===i.goalId&&e.run.todoId===t.todoId&&!!e.run.sessionId);r.push({id:`schedule:${i.goalId}:${t.todoId}`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:a?[{label:a.run.latestActivity||a.run.title,runId:a.run.runId,status:a.run.status===`waiting`||a.run.status===`queued`?`running`:a.run.status,timestamp:i.latestActivity||n(`common.recently`)}]:[],goalId:i.goalId,label:t.text,schedule:t.evidence??n(`schedule.summary`),scheduleId:t.todoId,scheduleKind:`monitor`,sessionId:a?.run.sessionId,status:t.done||t.status===`paused`?`paused`:`active`,stopCondition:n(`drawer.scheduleDefaultStop`),target:t.text,timezone:`Asia/Shanghai`}})});let a=e.timeline?.find(e=>e.kind===`proposal`&&e.proposal.actionKind===`heartbeat.bind`&&e.proposal.goalId===i.goalId);if(a){let e=e=>a.proposal.fields.find(t=>t.key===e)?.value;r.push({id:`schedule:${i.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:[],goalId:i.goalId,label:`${n(`schedule.heartbeat`)} · ${i.title}`,nextRunAt:n(`drawer.schedulePending`),notificationRule:n(`drawer.scheduleDefaultNotification`),schedule:e(`cadence`)??n(`schedule.summary`),scheduleId:`${i.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:a.proposal.status===`applied`?`active`:`draft`,stopCondition:e(`stop_condition`)??n(`drawer.scheduleDefaultStop`),timezone:e(`timezone`)??`Asia/Shanghai`}})}return r}function QS(e){return e===`preview_ready`?`ready`:e===`cancelled`?`draft`:e===`failed`?`error`:e}function $S(e,t){let n={agent_id:t(`proposal.field.agentId`),cadence:t(`proposal.field.cadence`),completion_criteria:t(`proposal.field.completionCriteria`),execution_boundary:t(`proposal.field.executionBoundary`),goal_id:t(`proposal.field.goalId`),heartbeat:t(`proposal.field.heartbeat`),initial_todos:t(`proposal.field.initialTodos`),objective:t(`proposal.field.objective`),operation:t(`proposal.field.operation`),permission:t(`proposal.field.permission`),reason:t(`proposal.field.reason`),stop_condition:t(`proposal.field.stopCondition`),target:t(`proposal.field.target`),timezone:t(`proposal.field.timezone`),title:t(`proposal.field.title`),workspace_ref:t(`proposal.field.workspace`)},r=[`title`,`objective`,`completion_criteria`,`execution_boundary`,`permission`,`agent_id`,`workspace_ref`,`initial_todos`,`heartbeat`,`stop_condition`,`goal_id`];return Object.entries(e).sort(([e],[t])=>{let n=r.indexOf(e),i=r.indexOf(t);return(n<0?r.length:n)-(i<0?r.length:i)}).slice(0,10).map(([e,r])=>({key:e,label:n[e]??e.replaceAll(`_`,` `),value:e===`workspace_ref`?r===`current`?t(`proposal.workspace.current`):t(`proposal.workspace.named`,{workspace:String(r??`current`)}):Array.isArray(r)?r.join(` · `):typeof r==`object`&&r?JSON.stringify(r):String(r??`—`)}))}function eC(e,t,n){let r=t.operationFrame,i=r?.content.fields.map((e,t)=>({key:`projection:${t}`,label:e.label,value:e.value})).slice(0,8)??[];return[{key:`operation_state`,label:n(`proposal.field.operationState`),value:r?.lifecycleState??e.status},...r?.kind===`result`?[{key:`result_delivery`,label:n(`proposal.field.resultDelivery`),value:r.resultDeliveryVerified?n(`proposal.resultDelivery.verified`):n(`proposal.resultDelivery.pending`)}]:[],...i,...r?[{key:`warning`,label:n(`proposal.field.confirmationBoundary`),value:r.content.warning}]:[],...r?[{key:`expires_at`,label:n(`proposal.field.expiresAt`),value:r.expiresAt}]:[]].slice(0,10)}function tC(e){if(e.action_kind!==`goal.lifecycle`)return;let t=e.normalized_parameters.operation;return t===`stop`||t===`resume`||t===`delete`?t:void 0}function nC(e,t){let n=tC(e),r=eb(e),i=typeof e.normalized_parameters.title==`string`?e.normalized_parameters.title:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:``,a=typeof e.normalized_parameters.target==`string`?e.normalized_parameters.target:``,o=r.operationFrame,s=o?.content.title??e.summary,c=e.action_kind===`operation.execute`?s:e.action_kind===`team.plan`?e.status===`applied`?db(ub(e.receipt),t):t(`proposal.summary.teamPlan`,{goal:ob(e.normalized_parameters),count:ab(e.normalized_parameters)}):e.action_kind===`goal.create`?t(`proposal.summary.goalCreate`,{title:i}):e.action_kind===`heartbeat.bind`?t(`proposal.summary.heartbeat`):e.action_kind===`monitor.create`?t(`proposal.summary.monitor`,{target:a}):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.summary.lifecycleStop`,{title:i}):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.summary.lifecycleDelete`,{title:i}):e.action_kind===`goal.lifecycle`?t(`proposal.summary.lifecycleResume`,{title:i}):e.summary;return{actionKind:e.action_kind,reviewPlan:r,fields:e.action_kind===`operation.execute`?eC(e,r,t):e.action_kind===`team.plan`?ib(e.normalized_parameters,t):$S(e.normalized_parameters,t),goalId:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:void 0,impact:r.retryOriginal?t(`actionReview.${r.reason}`):e.action_kind===`operation.execute`?t(`proposal.impact.operation`):e.action_kind===`team.plan`?e.status===`applied`?t(`proposal.teamPlan.assignedHint`):t(`proposal.impact.teamPlan`):e.action_kind===`goal.create`?t(`proposal.impact.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.impact.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.impact.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.impact.lifecycleResume`):e.permission_classification===`protected`?t(`proposal.impact.protected`):``,previewId:e.proposal_id,lifecycleOperation:n,gate:e.gate?{kind:String(e.gate.kind??`protected_action`),nextAction:typeof e.gate.next_action==`string`?e.gate.next_action:void 0,summary:String(e.gate.summary??t(`proposal.gate.default`))}:void 0,primaryLabel:r.retryOriginal?t(`drawer.retryOriginal`):e.action_kind===`operation.execute`?o?.kind===`result`?o.resultDeliveryVerified?t(`proposal.primary.operationResultVerified`):t(`proposal.primary.operationResultPending`):t(`proposal.primary.operationGroup`):e.action_kind===`team.plan`?t(e.status===`applied`?`proposal.teamPlan.viewResult`:`proposal.primary.teamPlan`):e.action_kind===`goal.create`?t(`proposal.primary.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.primary.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.primary.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.primary.lifecycleResume`):e.action_kind===`todo.create`&&e.normalized_parameters.start_execution===!0?t(`proposal.primary.todoStart`):t(`proposal.primary.apply`),status:r.retryOriginal||e.status===`applied`&&e.action_kind!==`operation.execute`&&r.interaction!==`completed`?`error`:QS(e.status),teamPlanOutcome:e.action_kind===`team.plan`?ub(e.receipt)??void 0:void 0,teamPlanAssignments:e.action_kind===`team.plan`?sb(e.receipt,e.normalized_parameters):void 0,teamPlanGapLanes:e.action_kind===`team.plan`?cb(e.receipt,e.normalized_parameters):void 0,title:c}}function rC(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,42);if(t)return t;let n=2166136261;for(let t of e)n^=t.codePointAt(0)??0,n=Math.imul(n,16777619);return`goal-${(n>>>0).toString(36)}`}function iC(e,t){let n=e.match(/[「“"]([^」”"]{2,80})[」”"]/u)?.[1];return n?n.trim():e.replace(/^(请|帮我|我想|给我|创建|新建|设置|please|i want to|create|set up)+/iu,``).replace(/(一个|新的)?\s*(goal|目标)/giu,``).replace(/[,。!?].*$/u,``).trim().slice(0,80)||t(`goal.defaultTitle`)}function aC(e,t){for(let n of e.split(/\r?\n/u)){let e=n.trim();for(let n of t){let t=e.match(RegExp(`^${n.replace(/[.*+?^${}()|[\]\\]/gu,`\\$&`)}\\s*[::]\\s*(.*)$`,`iu`));if(t?.[1]?.trim())return t[1].trim()}}return``}function oC(e,t){let n=aC(e,[`目标`,`Objective`]),r=aC(e,[`完成标准`,`Completion criteria`]),i=aC(e,[`执行边界(可选)`,`执行边界`,`边界`,`Execution boundary (optional)`,`Execution boundary`,`Boundary`]),a=(n||iC(e,t)).split(/[。;;\n]/u)[0].trim().slice(0,80)||t(`goal.defaultTitle`),o=[n||a,r?t(`goal.objectiveCompletion`,{criteria:r}):``,i?t(`goal.objectiveBoundary`,{boundary:i}):``].filter(Boolean).join(` -`),s=/(只读|不调用外部工具|不修改(?:仓库|代码|状态)|read.?only|do not (?:call|use) external tools|do not modify (?:repositories|repository|code|state))/iu.test(i||e);return{completionCriteria:r,executionBoundary:i,initialTodos:r?[t(`goal.initialTodo`,{criteria:r})]:[],objective:o,permission:s?`read_only`:`workspace_write_on_confirmation`,title:a}}function sC(e){let t=e.match(/(?:每|every)\s*(\d{1,3})\s*(?:分钟|minutes?)/iu)?.[1];if(t)return`${t}m`;let n=e.match(/(?:每|every)\s*(\d{1,2})\s*(?:小时|hours?)/iu)?.[1];return n?`${n}h`:/每小时|every hour|hourly/iu.test(e)?`1h`:(/每天|每日|早上|上午|daily|every day/iu.test(e),`1d`)}function cC(e,t){return/(每周|星期|周[一二三四五六日天]|weekly|every\s+(?:mon|tues|wednes|thurs|fri|satur|sun)day|\d{1,2}\s*[::]\s*\d{2})/iu.test(e)?t(`schedule.unsupportedCalendar`):null}function lC(e,t){return aC(e,[`检查内容`,`监控内容`,`目标`,`Check target`,`Monitor target`,`Target`])||e.replace(/^(?:为当前 Goal |for the current Goal )?(?:添加|配置|创建|add|configure|create)?\s*(?:定时检查|监控|scheduled check|monitor)[::]?/iu,``).split(/\r?\n/u)[0].trim()||t(`schedule.defaultTarget`)}function uC(e){return/(mr|pr).{0,8}(合并|merge)/iu.test(e)?`pr_merged`:/发布完成|上线完成|release (?:is )?complete|deployment (?:is )?complete/iu.test(e)?`release_complete`:`goal_complete`}function dC(e,t){let n=e.toLowerCase();return t.find(e=>n.includes(e.agentId.toLowerCase())||n.includes(e.label.toLowerCase()))}function fC(e){let t=aC(e,[`标题`,`任务标题`,`Todo 标题`]),n=aC(e,[`内容`,`任务内容`,`Todo 内容`]);if(t)return[t,n].filter(Boolean).join(`:`).slice(0,400);let r=e.match(/[「“"]([^」”"]{2,200})[」”"]/u)?.[1];return r?r.trim():e.replace(/^(请|帮我|给我|为当前 Goal |新增|新建|创建|添加|加上|加一个|记一个)+/u,``).replace(/^(一个\s*)?(普通\s*)?(todo|待办|任务)(?:\s*到\s*Tasks?)?[::\s]*/iu,``).replace(/[。;;,,]\s*(?:不要|不需要|无需|禁止|别|暂不).{0,80}(?:heartbeat|心跳|定时|监控|执行).*$/iu,``).replace(/[,,]\s*(并且|然后|再)?\s*(交给|分配给|让).+$/u,``).replace(/\s*(交给|分配给|让)\s+.+$/u,``).trim().slice(0,400)||`推进当前 Goal 的下一项工作`}var pC=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),mC=5242880,hC=4;function gC(e,t){return new Promise((n,r)=>{let i=new FileReader;i.onerror=()=>r(Error(t(`composer.imageReadError`,{name:e.name}))),i.onload=()=>n({dataUrl:String(i.result??``),id:crypto.randomUUID(),mimeType:e.type,name:e.name,size:e.size}),i.readAsDataURL(e)})}function _C({conversationSessionId:e,agents:t=[{agentId:`codex`,available:!0,capability:`代码与项目执行`,label:`Codex`}],callbacks:n={},goalArchiveLoadState:r={error:null,phase:`ready`},managerChannelBinding:i,managerRuntime:a,model:o,readOnly:s=!1,selectedAgentId:c,selectedGoalId:l,statusSourceControl:u}){let{locale:d,t:f}=Ji(),[p,m]=(0,R.useState)(l??null),[h,g]=(0,R.useState)(c??t.find(e=>e.available)?.agentId??`codex`),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)(null),[C,w]=(0,R.useState)({}),[T,E]=(0,R.useState)(`chat`),[D,O]=(0,R.useState)(!1),[k,A]=(0,R.useState)(!1),[ee,j]=(0,R.useState)(!1),[M,te]=(0,R.useState)(()=>{try{let e=window.sessionStorage.getItem(`loopx-pw-composer-drafts`),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}),[ne,N]=(0,R.useState)(!1),[P,re]=(0,R.useState)(null),[ie,ae]=(0,R.useState)(`queue`),[F,oe]=(0,R.useState)(``),[I,se]=(0,R.useState)([]),[L,ce]=(0,R.useState)(null),[le,ue]=(0,R.useState)(null),[de,fe]=(0,R.useState)(()=>new Set),[pe,me]=(0,R.useState)(()=>new Set),[he,ge]=(0,R.useState)(`idle`),[_e,ve]=(0,R.useState)([]),[ye,be]=(0,R.useState)([]),[xe,Se]=(0,R.useState)(!1),[Ce,we]=(0,R.useState)(VS),[Te,Ee]=(0,R.useState)({}),[De,Oe]=(0,R.useState)([]),ke=(0,R.useRef)(!1),Ae=(0,R.useRef)(NaN),je=(0,R.useRef)(null),Me=(0,R.useRef)(null),Ne=(0,R.useRef)(null),Pe=(0,R.useRef)(null),Fe=(0,R.useRef)(new Set),Ie=(0,R.useRef)(new Set),[Le,Re]=(0,R.useState)(null),B=l===void 0?p:l,ze=c??h,Be=`${B??`manager`}:${ze}`,Ve=M[Be]??``;(0,R.useEffect)(()=>{se([]),ce(null)},[Be]);function He(e,t){te(n=>{let r={...n};t?r[e]=t:delete r[e];try{window.sessionStorage.setItem(`loopx-pw-composer-drafts`,JSON.stringify(r))}catch{}return r})}function Ue(e){He(Be,e)}function We(e){return kh.find(t=>t.id===e)?.prompt??``}(0,R.useEffect)(()=>{let e=je.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)},[Ve]);let Ge=(0,R.useMemo)(()=>o.goals.map(e=>{let t=Te[e.goalId];return t?{...e,repository:{branch:t.branch,identity:t.identity,label:t.label,readOnly:!0}}:e}),[Te,o.goals]),Ke=(0,R.useMemo)(()=>Ge.filter(e=>Jd(e)===`needs_you`).length,[Ge]),qe=(0,R.useMemo)(()=>Ge.filter(e=>Jd(e)===`needs_you`&&(e.needsYouBlocking||e.state===`等你`)).length,[Ge]),V=Ge.find(e=>e.goalId===B)??null;function Je(e){Ne.current=document.activeElement instanceof HTMLElement?document.activeElement:null,Se(!1),v(e)}function Ye(){v(null),window.requestAnimationFrame(()=>{let e=Ne.current;e?.isConnected&&e.getClientRects().length?e.focus({preventScroll:!0}):document.querySelector(`.personal-mobile-menu`)?.focus({preventScroll:!0})})}let Xe=_?.kind===`settings`,Ze=B,Qe=(0,R.useMemo)(()=>{let e=Object.values(C).filter(e=>e.actionKind===`heartbeat.bind`&&e.goalId&&e.status===`applied`).map(e=>({id:`schedule:${e.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:ze,executionHistory:[],goalId:e.goalId,label:e.title,nextRunAt:f(`drawer.schedulePending`),notificationRule:f(`drawer.scheduleDefaultNotification`),schedule:e.fields.find(e=>e.key===`cadence`)?.value??f(`schedule.summary`),scheduleId:`${e.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:e.status===`applied`?`active`:`draft`,stopCondition:e.fields.find(e=>e.key===`stop_condition`)?.value??f(`drawer.scheduleDefaultStop`),timezone:e.fields.find(e=>e.key===`timezone`)?.value??`Asia/Shanghai`}})),t=[...ZS(o,Ze,f),...o.timeline??[],...e,...GS(Object.values(C)).filter(e=>e.actionKind!==`heartbeat.bind`||e.status!==`applied`).map(e=>({id:`proposal:${e.previewId}`,kind:`proposal`,proposal:e}))];return[...new Map(t.map(e=>[e.id,e])).values()].filter(e=>e.kind!==`proposal`||![`stale`,`error`].includes(e.proposal.status)||e.proposal.reviewPlan?.retryOriginal===!0||_e.includes(e.proposal.previewId)).filter(e=>!B||e.kind===`message`?!0:e.kind===`proposal`?!e.proposal.goalId||e.proposal.goalId===B:e.kind===`attention`?e.attention.goalId===B:e.kind===`run`?e.run.goalId===B:e.kind===`schedule`?e.schedule.goalId===B:e.output.goalId===B)},[Ze,o,C,ze,B,_e,f]),$e=(0,R.useMemo)(()=>x?Qe.filter(e=>e.kind===`message`?!0:e.kind===`run`?e.run.runId===x.runId:e.kind===`output`&&e.output.runId===x.runId):Qe,[x,Qe]);(0,R.useEffect)(()=>{if(!x)return;let e=Qe.find(e=>e.kind===`run`&&e.run.runId===x.runId);!e||e.kind!==`run`||JSON.stringify({completedSteps:x.completedSteps,latestActivity:x.latestActivity,messages:x.sessionMessages,sessionStatus:x.sessionStatus,status:x.status,totalSteps:x.totalSteps})!==JSON.stringify({completedSteps:e.run.completedSteps,latestActivity:e.run.latestActivity,messages:e.run.sessionMessages,sessionStatus:e.run.sessionStatus,status:e.run.status,totalSteps:e.run.totalSteps})&&S(e.run)},[x,Qe]);let et=(0,R.useMemo)(()=>Qe.flatMap(e=>e.kind===`message`?[e.message]:[]),[Qe]),tt=(0,R.useMemo)(()=>V?Qe.flatMap(e=>e.kind===`message`?[e.message]:[]):[],[Qe,V]);(0,R.useEffect)(()=>{V||D||et.some(e=>e.pending)&&A(!0)},[D,et,V]),(0,R.useEffect)(()=>{!V||T===`chat`||tt.some(e=>e.pending)&&j(!0)},[tt,V,T]);let nt=(0,R.useMemo)(()=>Qe.filter(e=>e.kind===`message`||e.kind===`proposal`&&(_e.includes(e.proposal.previewId)||ye.includes(e.proposal.previewId))),[Qe,_e,ye]),rt=nt[nt.length-1],it=rt?.kind===`message`?rt.message.text.length:0;(0,R.useEffect)(()=>{if(!D||!Me.current)return;let e=window.requestAnimationFrame(()=>{Me.current&&(Me.current.scrollTop=Me.current.scrollHeight)});return()=>window.cancelAnimationFrame(e)},[nt.length,D,it]);let at=(0,R.useMemo)(()=>{if(_?.kind===`settings`)return null;if(_?.kind===`attention`)return{kind:`attention`,item:rf(_.item,o.attentionHistory??o.userTodos)};if(_?.kind===`goal`){let e=Ge.find(e=>e.goalId===_.item.goalId);return e?{item:e,kind:`goal`}:_}if(_?.kind!==`run`)return _;let e=Qe.find(e=>e.kind===`run`&&e.run.runId===_.item.runId);return e?{item:e.run,kind:`run`}:_},[Qe,_,Ge,o.attentionHistory,o.userTodos]);(0,R.useEffect)(()=>{if(s){Ee({}),Oe([]);return}let e=!1;return Promise.all([h_(),E_()]).then(([t,n])=>{e||(Ee(Object.fromEntries(t.map(e=>[e.goal_id,e.repository]))),Oe(n))}).catch(()=>{}),()=>{e=!0}},[s]),(0,R.useEffect)(()=>{if(!xe)return;function e(e){e.key===`Escape`&&Se(!1)}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[xe]),(0,R.useEffect)(()=>{if(B||!Qe.length)return;if(!ke.current){ke.current=!0;try{Ae.current=Date.parse(window.localStorage.getItem(`loopx-pw-last-visit`)??``),window.localStorage.setItem(`loopx-pw-last-visit`,new Date().toISOString())}catch{Ae.current=NaN}}let e=Ae.current,t=Qe.filter(e=>e.kind===`run`).map(e=>e.run),n=t=>{let n=Date.parse(t??``);return!Number.isNaN(e)&&!Number.isNaN(n)&&n>e},r={done:t.filter(e=>e.status===`completed`&&n(e.latestActivity)).length,failed:t.filter(e=>(e.status===`failed`||e.status===`interrupted`)&&n(e.latestActivity)).length};Re(e=>e?.done===r.done&&e.failed===r.failed?e:r)},[Qe,B]),(0,R.useEffect)(()=>{if(s){w({});return}let e=!1;return eg(B?{goalId:B}:{contextKind:`manager`}).then(t=>{if(e)return;let n=t.filter(e=>[`preview_ready`,`gated`,`deferred`,`applying`].includes(e.status)||eb(e).retryOriginal===!0||e.action_kind===`operation.execute`&&e.status===`applied`).map(e=>nC(e,f)),r=Object.fromEntries(n.map(e=>[e.previewId,e]));w(e=>({...e,...r})),B||be(n.map(e=>e.previewId))}).catch(()=>{}),()=>{e=!0}},[s,B,f]);async function ot(e,t={}){if(s)throw Error(f(`source.readOnlyWriteError`));let r;try{r=n.onPreviewAction?await n.onPreviewAction(e):nC(await Qh(e),f)}catch(t){if(!(t instanceof qh)||t.payload.error_code!==`action_preview_gate`)throw t;let n=t.payload.gate&&typeof t.payload.gate==`object`?t.payload.gate:{},i=(Array.isArray(n.candidates)?n.candidates:[]).flatMap(e=>{if(!e||typeof e!=`object`)return[];let t=e;return typeof t.workspace_ref==`string`&&typeof t.label==`string`?[{label:t.label,workspaceRef:t.workspace_ref}]:[]}),a=String(n.kind??`workspace_selection_required`),o=a===`agent_binding_required`||a===`agent_identity_selection_required`;r={actionKind:e.actionKind,fields:i.map(e=>({key:`workspace_ref:${e.workspaceRef}`,label:e.label,value:e.workspaceRef})),gate:{kind:a,nextAction:typeof n.next_action==`string`?n.next_action:void 0,summary:String(n.summary??f(`proposal.workspaceGate.defaultSummary`))},impact:f(o?`proposal.workspaceGate.agentImpact`:`proposal.workspaceGate.selectionImpact`),previewId:`workspace-choice-${Date.now().toString(36)}`,sourceRequest:e,status:`gated`,title:f(o?`proposal.workspaceGate.agentTitle`:`proposal.workspaceGate.selectionTitle`),workspaceCandidates:i}}return ve(e=>e.includes(r.previewId)?e:[...e,r.previewId]),w(e=>({...e,[r.previewId]:r})),t.select!==!1&&v({item:r,kind:`proposal`}),r}function st(){_t(null),He(`manager:${ze}`,f(`composer.createGoalTemplate`)),window.requestAnimationFrame(()=>je.current?.focus())}async function ct(e,t){Se(!1);let r={delete:`Deleted from the owner workspace`,resume:`Resumed from the owner workspace`,stop:`Stopped from the owner workspace`},i={delete:f(`proposal.summary.lifecycleDelete`,{title:e.title}),resume:f(`proposal.summary.lifecycleResume`,{title:e.title}),stop:f(`proposal.summary.lifecycleStop`,{title:e.title})},a=null,o=!1;try{if(t===`stop`){if(Fe.current.has(e.goalId))return;Fe.current.add(e.goalId),fe(new Set(Fe.current)),v(null),a={goalId:e.goalId,next:`stopped`,optimisticApplied:!0,previous:e.activationState},ue(f(`feedback.applying`,{title:i.stop})),n.onGoalActivationStateChange?.(e.goalId,`stopped`)}if(n.onExecuteGoalLifecycle){if(t===`delete`)throw Error(`The selected status source does not authorize Goal deletion.`);let a=await n.onExecuteGoalLifecycle({goalId:e.goalId,operation:t,reason:r[t]});if(!a.projectionVerified)throw Error(`Goal lifecycle projection did not verify.`);o=!0,n.onGoalActivationStateChange?.(e.goalId,a.activationState),ue(f(`feedback.completed`,{title:i[t]})),t===`stop`&&_t(null),await ft([e.goalId]);return}let s=await ot({actionKind:`goal.lifecycle`,context:{kind:`goal_directory`,goal_id:e.goalId},idempotencyKey:`workspace-goal-${t}-${e.goalId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:t,reason:r[t]},summary:i[t]},{select:t!==`stop`});if(s.goalId!==e.goalId||s.lifecycleOperation!==t)throw v(null),Error(f(`actionReview.targetChanged`));t===`stop`&&(s.reviewPlan?.interaction===`direct`?(o=!0,await pt(s,{lifecycleProjection:a??void 0,presentation:`feedback`})):(a&&n.onGoalActivationStateChange?.(a.goalId,a.previous),ue(s.gate?f(`feedback.gateRequired`,{summary:s.gate.summary}):f(`feedback.notCompleted`,{status:s.status})),v({item:s,kind:`proposal`})))}catch(e){a&&!o&&n.onGoalActivationStateChange?.(a.goalId,a.previous),ue(f(`feedback.executionFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{t===`stop`&&(Fe.current.delete(e.goalId),fe(new Set(Fe.current)))}}function lt(e,t){Ue(f(t?e===`heartbeat`?`composer.heartbeatTemplate`:`composer.monitorTemplate`:e===`heartbeat`?`composer.heartbeatTemplateWithoutGoal`:`composer.monitorTemplateWithoutGoal`)),v(null),window.requestAnimationFrame(()=>je.current?.focus())}async function ut(e,t,r=``){let i=await n.onRequestScheduleConfig?.(e,t);if(i){ve(e=>e.includes(i.previewId)?e:[...e,i.previewId]),w(e=>({...e,[i.previewId]:i})),v({item:i,kind:`proposal`});return}if(!t){Ue(f(e===`heartbeat`?`composer.heartbeatGoalQuestion`:`composer.monitorGoalQuestion`));return}let a=Date.now().toString(36);await ot({actionKind:e===`heartbeat`?`heartbeat.bind`:`monitor.create`,context:{kind:`schedule`,goal_id:t},idempotencyKey:`workspace-${e}-${t}-${a}`,normalizedParameters:e===`heartbeat`?{agent_id:ze,cadence:sC(r),goal_id:t,stop_condition:uC(r),timezone:`Asia/Shanghai`}:{agent_id:ze,cadence:sC(r),goal_id:t,stop_condition:uC(r),target:lC(r,f),target_key:`goal-${t}`,timezone:`Asia/Shanghai`},summary:e===`heartbeat`?f(`proposal.summary.heartbeat`):f(`proposal.summary.monitor`,{target:lC(r,f)})})}async function dt(e){if(!Ie.current.has(e.todoId)){Ie.current.add(e.todoId),me(new Set(Ie.current)),ue(f(`feedback.preparingPreview`,{title:e.text}));try{await ot({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-complete-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:`complete`,todo_id:e.todoId},summary:f(`tasks.markComplete`,{name:e.text})}),ue(null)}catch(e){ue(f(`feedback.previewFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{Ie.current.delete(e.todoId),me(new Set(Ie.current))}}}function ft(e){let t=n.onReconcileStatus,r=t?t({invalidateGoalIds:e}):n.onRefresh?.();return Promise.resolve(r).catch(()=>{ue(f(`feedback.goalRefreshFailed`))})}async function pt(e,t={}){let r=e.actionKind===`team.plan`&&e.status===`error`&&[`apply_failed`,`readback_unverified`].includes(e.reviewPlan?.reason??``);if(e.reviewPlan&&!e.reviewPlan.canApply&&!r)return;let i=t.presentation!==`feedback`,a=e.actionKind===`goal.lifecycle`&&e.goalId&&(e.lifecycleOperation===`stop`||e.lifecycleOperation===`resume`)?{goalId:e.goalId,next:e.lifecycleOperation===`stop`?`stopped`:`active`,optimisticApplied:!1,previous:o.goals.find(t=>t.goalId===e.goalId)?.activationState??(e.lifecycleOperation===`stop`?`active`:`stopped`)}:null,s=t.lifecycleProjection??a;ue(f(`feedback.applying`,{title:e.title}));let c={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:`pending`,reason:`apply_pending`,canApply:!1}:void 0,status:`applying`};w(t=>({...t,[e.previewId]:c})),i&&v({item:c,kind:`proposal`}),s&&!s.optimisticApplied&&n.onGoalActivationStateChange?.(s.goalId,s.next);try{if(n.onApplyProposal){await n.onApplyProposal(e);let t={...e,status:`applied`};w(n=>({...n,[e.previewId]:t})),i&&v({item:t,kind:`proposal`}),ue(f(`feedback.completed`,{title:e.title})),e.actionKind===`goal.lifecycle`&&((e.lifecycleOperation===`stop`||e.lifecycleOperation===`delete`)&&_t(null),e.lifecycleOperation===`delete`&&e.goalId&&n.onGoalDeleted?.(e.goalId),ft(e.goalId?[e.goalId]:void 0));return}let t=await tg(e.previewId);if(t.proposal.proposal_id!==e.previewId||t.proposal.action_kind!==e.actionKind||e.actionKind===`goal.lifecycle`&&(t.proposal.normalized_parameters.goal_id!==e.goalId||tC(t.proposal)!==e.lifecycleOperation))throw new qh(f(`actionReview.targetChanged`),{error_code:`action_response_mismatch`});let r=nC(t.proposal,f);if(w(t=>({...t,[e.previewId]:r})),i&&v({item:r,kind:`proposal`}),r.reviewPlan?.interaction!==`completed`){s&&n.onGoalActivationStateChange?.(s.goalId,s.previous),v({item:r,kind:`proposal`}),ue(t.proposal.status===`stale`?f(`feedback.stale`):f(`actionReview.${r.reviewPlan.reason}`));return}ue(f(`feedback.completed`,{title:r.title})),r.actionKind===`todo.create`&&await n.onRefresh?.(),r.actionKind===`goal.lifecycle`&&(r.lifecycleOperation===`stop`||r.lifecycleOperation===`delete`)&&_t(null),r.actionKind===`goal.lifecycle`&&r.lifecycleOperation===`delete`&&r.goalId&&n.onGoalDeleted?.(r.goalId),r.actionKind===`goal.lifecycle`&&ft(r.goalId?[r.goalId]:void 0)}catch(t){if(s&&n.onGoalActivationStateChange?.(s.goalId,s.previous),t instanceof qh&&t.payload.error_code===`protected_action`){let r=t.payload.gate,i=r&&typeof r==`object`?r:{},a={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:`gated`,reason:`authority_gate`,canApply:!1}:void 0,gate:{kind:String(i.kind??`protected_action`),nextAction:typeof i.next_action==`string`?i.next_action:void 0,summary:String(i.summary??t.message)},status:`gated`};w(t=>({...t,[e.previewId]:a})),v({item:a,kind:`proposal`}),ue(f(`feedback.gateRequired`,{summary:a.gate.summary})),e.actionKind===`goal.create`&&e.goalId&&(n.onRefresh?.(),_t(e.goalId));return}let r=t instanceof qh&&tb(t.payload),i=t instanceof qh&&t.payload.error_code===`action_response_mismatch`,a={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:r?`refresh`:`repair`,reason:i?`readback_unverified`:r?`stale_proposal`:`apply_failed`,canApply:!1}:void 0,errorMessage:t instanceof Error?t.message:String(t),status:r?`stale`:`error`};w(t=>({...t,[e.previewId]:a})),v({item:a,kind:`proposal`}),ue(f(`feedback.executionFailed`,{error:a.errorMessage}))}}function mt(){E(`chat`),S(null),j(!1),window.requestAnimationFrame(()=>{let e=Me.current?.querySelectorAll(`.personal-message.is-assistant`);e?.item(e.length-1)?.scrollIntoView({block:`start`})})}let ht={...n,onOpenRunSession:async e=>{e.goalId!==B&&_t(e.goalId),E(`chat`),await n.onOpenRunSession?.(e),S(e),v(null)},onOpenGoal:e=>{_t(e),ft([e])},onOpenGoalView:e=>{e===`chat`?mt():E(e),v(null)},onOpenOutput:e=>{e.goalId!==B&&_t(e.goalId),E(`files`),n.onOpenOutput?.(e)},onApplyProposal:pt,onCancelProposal:async e=>{v(null),w(t=>{let n={...t};return delete n[e.previewId],n});try{n.onCancelProposal?.(e),n.onCancelProposal||await ng(e.previewId)}catch(t){w(t=>({...t,[e.previewId]:e})),ue(f(`feedback.cancelFailed`,{error:t instanceof Error?t.message:String(t)}))}},onTransitionProposal:async(e,t)=>{let n=nC(await rg(e.previewId,t),f);ve(e=>e.includes(n.previewId)?e:[...e,n.previewId]),w(r=>{let i={...r};return t===`regenerate`&&delete i[e.previewId],i[n.previewId]=n,i}),v({item:n,kind:`proposal`})},onSelectWorkspaceCandidate:async(e,t)=>{e.sourceRequest&&(w(t=>{let n={...t};return delete n[e.previewId],n}),await ot({...e.sourceRequest,idempotencyKey:`${e.sourceRequest.idempotencyKey}-${t}`,normalizedParameters:{...e.sourceRequest.normalizedParameters,workspace_ref:t}}))},onPreviewAction:ot,onRequestScheduleConfig:(e,t)=>lt(e,t),onOpenNotificationSettings:e=>Je({goalId:e,kind:`settings`,tab:`lark`}),onFetchNotificationTargets:()=>Ng(),onSetupGoalChannel:e=>Fg(e),onToggleGoalAutoNotify:e=>Ig(e),onUpdateSchedule:async(e,t)=>{let n=Date.now().toString(36),r=e.scheduleKind===`heartbeat`;await ot({actionKind:r?`heartbeat.bind`:`monitor.update`,context:{kind:`schedule`,goal_id:e.goalId},idempotencyKey:`workspace-monitor-${e.scheduleId}-${t}-${n}`,normalizedParameters:{agent_id:e.agentId??ze,...!r&&t===`run_now`?{endpoint_id:ze}:{},...t===`edit`?{cadence:`2h`,...r?{timezone:e.timezone??`Asia/Shanghai`}:{}}:{},goal_id:e.goalId,operation:t,...!r&&t===`run_now`&&e.sessionId?{session_id:e.sessionId}:{},...r?{}:{todo_id:e.scheduleId}},summary:t===`pause`?`暂停自动运行:${e.label}`:t===`resume`?`恢复自动运行:${e.label}`:t===`run_now`?`立即运行:${e.label}`:t===`stop`?`停止自动运行:${e.label}`:`编辑自动运行生命周期:${e.label}`})}},gt=s?{onOpenGoal:ht.onOpenGoal,onOpenGoalView:ht.onOpenGoalView,onOpenOutput:ht.onOpenOutput}:ht;function _t(e){m(e),O(!1),A(!1),j(!1),S(null),v(null),E(`tasks`),Se(!1),n.onSelectGoal?.(e)}function vt(e){g(e),n.onSelectAgent?.(e)}function yt(e){we(e),HS(e)}async function bt(r){let i=r?[]:I,a=(r??Ve).trim()||(i.length?f(`composer.imageAnalysisPrompt`):``);if(!(!a||ne)){if(P?.session_id===e&&P?.enabled&&P.active_turn_id&&e){if(i.length){ce(d===`zh-CN`?`运行中的消息投递暂不支持图片,请暂停后发送。`:`Pause execution before sending images.`);return}N(!0);try{let t=await Sg(e,a,ie);r||Ue(``),oe(d===`zh-CN`?`${ie===`queue`?`已排队,等待后续回合`:ie===`inbox`?`已进入收件箱`:`已提交纠偏`} · ${t.status}`:`${ie}: ${t.status}`)}catch(e){ce(e instanceof Error?e.message:String(e))}finally{N(!1)}return}r||(Ue(``),se([])),ce(null),N(!0);try{if(i.length){B?T!==`chat`&&j(!0):A(!0);let e=await n.onSendMessage?.(a,ze,B,i);e&&await ot(e);return}let e=Zb(a,{agents:t.map(e=>({agentId:e.agentId,label:e.label})),goalId:B,todos:(V?.agentTodos??[]).map(e=>({text:e.text,todoId:e.todoId}))});if(e.route===`clarify`){Ue(a);let t=f(`composer.clarifySingleAction`);e.missingFields.includes(`resume_when`)&&(t=f(`composer.clarifyDefer`)),ue(t);return}if(e.actionKind===`goal.create`){let t=oC(a,f),n=rC(t.title);await ot({actionKind:`goal.create`,context:{kind:`manager`,goal_id:null,natural_language:a},idempotencyKey:`workspace-goal-intent-${n}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:ze,completion_criteria:t.completionCriteria,execution_boundary:t.executionBoundary,goal_id:n,heartbeat:{cadence:sC(a),enabled:e.normalizedParameters.heartbeat_enabled===!0,timezone:`Asia/Shanghai`},initial_todos:t.initialTodos,objective:t.objective,permission:t.permission,stop_condition:uC(a),title:t.title,workspace_ref:`current`},summary:f(`proposal.summary.goalCreate`,{title:t.title})});return}if(B&&e.actionKind===`heartbeat.bind`){await ut(`heartbeat`,B,a);return}if(B&&e.actionKind===`monitor.create`){let e=cC(a,f);if(e){Ue(a),ue(e);return}await ut(`monitor`,B,a);return}let r=dC(a,t);if(B&&r&&e.actionKind===`agent.bind`){await ot({actionKind:`agent.bind`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-agent-bind-${B}-${r.agentId}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:r.agentId,goal_id:B},summary:`将 ${r.label} 绑定到 ${V?.title??B}`});return}if(B&&e.actionKind===`todo.create`){if(e.normalizedParameters.start_execution===!0){await ot({actionKind:`todo.create`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-task-start-${B}-${Date.now().toString(36)}`,normalizedParameters:{endpoint_id:r?.agentId??ze,goal_id:B,start_execution:!0,text:a},summary:`交给 Agent 执行:${a.slice(0,120)}`});return}let t=r?.agentId??(/(交给|分配给|让).{0,24}(agent|codex|claude|kiro|kimi)/iu.test(a)?ze:null);await ot({actionKind:`todo.create`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-todo-create-${B}-${Date.now().toString(36)}`,normalizedParameters:{...t?{endpoint_id:t}:{},goal_id:B,text:fC(a)},summary:`创建 Todo:${fC(a)}`});return}let o=V?.agentTodos.find(e=>a.includes(e.todoId)||a.includes(e.text)),s=typeof e.normalizedParameters.operation==`string`?e.normalizedParameters.operation:null;if(B&&o&&e.actionKind===`todo.update`&&s){await ot({actionKind:`todo.update`,context:{kind:`todo`,goal_id:B,todo_id:o.todoId,natural_language:a},idempotencyKey:`workspace-todo-update-${o.todoId}-${s}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:ze,...s===`reassign`&&r?{endpoint_id:r.agentId}:{},...s===`block`?{note:a}:{},...s===`defer`&&typeof e.normalizedParameters.resume_when==`string`?{resume_when:e.normalizedParameters.resume_when}:{},goal_id:B,operation:s,todo_id:o.todoId},summary:`更新 Todo:${o.text}`});return}B?T!==`chat`&&j(!0):A(!0);let c=await n.onSendMessage?.(a,ze,B);c&&await ot(c)}catch(e){r||(Ue(a),se(i));let t=e instanceof Error?e.message:f(`feedback.sendGenericError`);ue(f(`feedback.sendFailed`,{error:t}))}finally{N(!1)}}}let xt=t.find(e=>e.agentId===ze)?.label??ze,St=!V&&Ve.startsWith(f(`composer.createGoalDraftLead`));async function Ct(e){if(!e?.length)return;let t=hC-I.length,n=Array.from(e).slice(0,Math.max(0,t)),r=n.find(e=>!pC.has(e.type)),i=n.find(e=>e.size>mC);if(t<=0){ce(f(`composer.imageCountError`,{count:hC}));return}if(r){ce(f(`composer.imageTypeError`));return}if(i){ce(f(`composer.imageSizeError`,{size:mC/1024/1024}));return}try{let t=await Promise.all(n.map(e=>gC(e,f)));se(e=>[...e,...t].slice(0,hC)),ce(e.length>n.length?f(`composer.imageCountError`,{count:hC}):null)}catch(e){ce(e instanceof Error?e.message:f(`composer.imageReadGenericError`))}finally{Pe.current&&(Pe.current.value=``)}}function wt(e){let t=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&e.type.startsWith(`image/`)).flatMap(e=>{let t=e.getAsFile();return t?[t]:[]});t.length&&(e.preventDefault(),Ct(t))}async function Tt(){let e=await E_();Oe(e)}async function Et(){await Promise.all([Tt(),n.onRefresh?.()])}async function Dt(){if(!(!n.onRefresh||he===`loading`)){ge(`loading`);try{await n.onRefresh(),ge(`done`)}catch{ge(`error`)}window.setTimeout(()=>ge(`idle`),1800)}}let Ot=Xe?(0,z.jsx)(RS,{callbacks:gt,focusGoalConnection:!!(_?.kind===`settings`&&_.goalId),goalNotifications:o.goalNotifications??[],goals:Ge,initialGoalId:_?.kind===`settings`?_.goalId??B:B,initialTab:_?.kind===`settings`?_.tab??`lark`:`lark`,onChanged:()=>void Et(),onClose:Ye,onThemeChange:yt,theme:Ce}):null;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{hidden:Xe,children:(0,z.jsx)(US,{drawer:at?(0,z.jsx)(ox,{agents:t,attentionHistory:o.attentionHistory??o.userTodos,onSelectAttention:e=>v({kind:`attention`,item:e}),callbacks:gt,goalNotifications:o.goalNotifications??[],goals:Ge,inspectorExpanded:y,larkConnections:s?[]:De,onClose:()=>{at.kind===`proposal`&&[`applied`,`rejected`].includes(at.item.status)&&(at.item.actionKind!==`heartbeat.bind`||at.item.status!==`applied`)&&w(e=>{let t={...e};return delete t[at.item.previewId],t}),b(!1),v(null)},onToggleInspectorSize:()=>b(e=>!e),readOnly:s,runs:Qe.flatMap(e=>e.kind===`run`?[e.run]:[]),selection:at}):null,drawerMode:at?.kind===`todo`?y?`inspector-full`:`inspector`:`panel`,drawerOpen:at!==null,mobileSidebarOpen:xe,onCloseMobileSidebar:()=>Se(!1),theme:Ce,main:(0,z.jsxs)(`div`,{className:`personal-channel`,children:[(0,z.jsx)(pb,{agents:t,managerChatOpen:D,managerChannelBinding:i,managerRuntime:a,mobileNavigationOpen:xe,onOpenGoalCapabilities:V&&!s?()=>Je({goalId:V.goalId,kind:`settings`,tab:`capabilities`}):void 0,onRefresh:n.onRefresh?()=>void Dt():void 0,onOpenNavigation:()=>Se(!0),onOpenManagerChat:()=>{A(!1),O(!0)},onSelectGoalTab:e=>{e===`chat`?mt():E(e)},onSelectAgent:vt,onReturnManagerHome:()=>{O(!1),A(!1),window.requestAnimationFrame(()=>Me.current?.scrollTo({behavior:`smooth`,top:0}))},selectedAgentId:ze,refreshState:he,readOnlySourceLabel:s?u?.activeSource.label:void 0,selectedGoal:V,selectedGoalTab:T}),B&&T===`chat`&&!s&&ze===`codex`&&n.onStartLoopX?(0,z.jsx)(Nb,{onPrepare:()=>n.onPrepareLoopX(ze,B),sessionId:e,onChange:re,onExecute:(e,t)=>n.onStartLoopX?.(e,ze,B,t)},`${B}:${ze}`):null,(0,z.jsxs)(`div`,{className:`personal-channel-scroll`,"data-active-goal-view":V?T:void 0,ref:Me,children:[B&&T===`chat`&&!s&&ze===`codex`&&e&&P?.settings.execution_config&&P.settings.agent_id?(0,z.jsx)(Fb,{sessionId:e,zh:d===`zh-CN`,refreshKey:JSON.stringify(P.deliveries)},`${e}:${P.settings.agent_id}:${P.settings.execution_config}`):null,!V&&!D&&Le&&Le.done+Le.failed>0?(0,z.jsxs)(`section`,{className:`personal-digest-card`,"aria-label":f(`digest.away`),children:[(0,z.jsx)(`strong`,{children:f(`digest.away`)}),(0,z.jsxs)(`div`,{className:`personal-digest-stats`,children:[Le.done>0?(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.done}),f(`digest.completed`)]}):null,Le.failed>0?(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.failed}),f(`digest.failed`)]}):null]})]}):null,!V&&!D?(0,z.jsxs)(`section`,{className:`personal-manager-greeting`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(fm,{size:20})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:f(`home.greeting`)}),(0,z.jsx)(`p`,{children:o.goals.some(e=>e.activationState===`active`&&e.loadState)?f(`startup.partial`):(0,z.jsxs)(z.Fragment,{children:[f(`home.waitingCount`,{count:Ke}),` `,qe>0?f(`home.blockingSummary`,{count:qe}):null]})})]})]}):null,V?.loadState?(0,z.jsx)(`section`,{className:`personal-manager-greeting`,role:`status`,"data-testid":`goal-status-loading`,children:(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:f(V.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}),(0,z.jsx)(`p`,{children:f(V.loadError?`startup.error.${V.loadError}`:`startup.independent`)}),V.loadState===`error`?(0,z.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,type:`button`,onClick:()=>void n.onRefresh?.(),children:f(`startup.retry`)}):null]})}):V?(0,z.jsx)(Xx,{activeTab:T,scrollRef:Me,panels:{overview:(0,z.jsx)(Yx,{active:!Xe&&T===`overview`,goal:V,items:Qe,userTodos:o.userTodos,readOnly:s,onOpenDetails:()=>v({kind:`goal`,item:V}),onSelect:v,onView:E}),tasks:(0,z.jsx)(Mx,{historyEnabled:!s,goal:V,items:Qe,onDraftTaskFromMessage:s?void 0:e=>{Ue(`创建一个 Task:${WS(e)}`),ue(f(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>je.current?.focus())},onOpenChat:mt,onQuickComplete:s?void 0:dt,onSelect:v,quickCompletingTodoIds:pe,selectedTodoId:at?.kind===`todo`?at.item.todoId:null,userTodos:o.userTodos}),files:(0,z.jsx)(JS,{items:Qe.filter(e=>e.kind===`output`),onSelect:v,reportState:o.periodicReports}),chat:(0,z.jsxs)(z.Fragment,{children:[V&&x?.goalId===V.goalId?(0,z.jsx)(XS,{onClose:()=>S(null),onOpenDetails:()=>v({item:x,kind:`run`}),run:x}):null,(0,z.jsx)(Hb,{items:$e,onSelect:v,selectedGoal:V})]})}},`${u?.activeSource.statusUrl??`/status.json`}:${V.goalId}`):D?(0,z.jsx)(Hb,{items:nt,onSelect:v,selectedGoal:null}):(0,z.jsx)(qS,{goals:Ge,onRetry:()=>void n.onRefresh?.(),onSelectGoal:_t,systemHealth:o.systemHealth})]}),(0,z.jsxs)(`div`,{className:`personal-composer-wrap`,children:[P?.session_id===e&&P?.enabled&&P.active_turn_id?(0,z.jsxs)(`label`,{className:`goal-loopx-message-mode`,children:[d===`zh-CN`?`消息处理`:`Message delivery`,(0,z.jsxs)(`select`,{"aria-label":d===`zh-CN`?`消息处理方式`:`Message delivery mode`,value:ie,onChange:e=>ae(e.target.value),children:[(0,z.jsx)(`option`,{value:`queue`,children:d===`zh-CN`?`下一轮处理`:`Next turn`}),(0,z.jsx)(`option`,{value:`inbox`,children:d===`zh-CN`?`放入收件箱`:`Inbox`}),(0,z.jsx)(`option`,{value:`steer`,children:d===`zh-CN`?`立即纠偏`:`Steer now`})]}),(0,z.jsx)(`span`,{role:`status`,children:F})]}):null,s?(0,z.jsxs)(`div`,{className:`personal-read-only-notice`,children:[(0,z.jsx)(`strong`,{children:f(`source.readOnlyNoticeTitle`)}),(0,z.jsx)(`span`,{children:f(`source.readOnlyNoticeDescription`)})]}):(0,z.jsxs)(z.Fragment,{children:[!V&&!D&&k&&et.length?(0,z.jsx)(YS,{messages:et,onClose:()=>A(!1),onOpenConversation:()=>{A(!1),O(!0)}}):null,V&&T!==`chat`&&ee&&tt.length?(0,z.jsx)(YS,{agentLabel:xt,messages:tt,onClose:()=>j(!1),onDraftTask:T===`tasks`?e=>{Ue(`创建一个 Task:${WS(e)}`),ue(f(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>je.current?.focus())}:void 0,onOpenConversation:mt,title:`${V.title} · ${xt}`}):null,le?(0,z.jsxs)(`div`,{className:`personal-action-feedback`,role:`status`,children:[(0,z.jsx)(`span`,{children:le}),(0,z.jsx)(`button`,{"aria-label":f(`common.closeActionReceipt`),onClick:()=>ue(null),type:`button`,children:(0,z.jsx)(gh,{size:14})})]}):null,(0,z.jsxs)(`details`,{className:`personal-composer-tools`,children:[(0,z.jsx)(`summary`,{children:d===`zh-CN`?`快捷提问`:`Suggestions`}),V?(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":f(`composer.nextAction`),disabled:ne,onClick:()=>void bt(f(`composer.nextActionPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(Hm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.nextAction`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.agentProgress`),disabled:ne,onClick:()=>void bt(f(`composer.agentProgressPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(nh,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.agentProgress`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.monitor`),disabled:ne,onClick:()=>void bt(f(`composer.monitorShortcutTemplate`,{target:f(`schedule.defaultTarget`)})),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(mm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.monitor`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.blockers`),disabled:ne||!We(`gate`),onClick:()=>void bt(We(`gate`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(ym,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.blockers`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.evidence`),disabled:ne||!We(`evidence`),onClick:()=>void bt(We(`evidence`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(jm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.evidence`)})]})]}):(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":f(`composer.globalTasks`),disabled:ne,onClick:()=>void bt(f(`composer.globalTasksPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(Hm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.globalTasks`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.globalProgress`),disabled:ne,onClick:()=>void bt(f(`composer.globalProgressPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(nh,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.globalProgress`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.createGoal`),onClick:st,title:f(`composer.createGoalHint`),type:`button`,children:[(0,z.jsx)(Xm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.createGoal`)})]})]})]},B??`manager`),St?(0,z.jsxs)(`div`,{className:`personal-goal-draft-status`,role:`status`,children:[(0,z.jsx)(`strong`,{children:f(`composer.createGoalDraft`)}),(0,z.jsx)(`span`,{children:f(`composer.createGoalDraftDescription`)})]}):null,I.length?(0,z.jsx)(`div`,{className:`personal-composer-images`,"aria-label":f(`composer.imagesPending`),children:I.map(e=>(0,z.jsxs)(`figure`,{children:[(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl}),(0,z.jsx)(`button`,{"aria-label":f(`composer.sentImageAlt`,{name:e.name}),onClick:()=>se(t=>t.filter(t=>t.id!==e.id)),type:`button`,children:(0,z.jsx)(gh,{size:13})})]},e.id))}):null,L?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:L}):null,(0,z.jsxs)(`div`,{className:`personal-channel-composer`,onDragOver:e=>{[...e.dataTransfer.items].some(e=>e.kind===`file`&&e.type.startsWith(`image/`))&&e.preventDefault()},onDrop:e=>{let t=[...e.dataTransfer.files].filter(e=>e.type.startsWith(`image/`));t.length&&(e.preventDefault(),Ct(t))},children:[(0,z.jsx)(`button`,{"aria-label":f(`composer.addImage`),className:`personal-composer-attach`,disabled:ne||I.length>=hC,onClick:()=>Pe.current?.click(),title:f(`composer.attachImageHint`),type:`button`,children:(0,z.jsx)(qm,{size:17})}),(0,z.jsx)(`input`,{accept:`image/png,image/jpeg,image/webp,image/gif`,"aria-label":f(`composer.imagePicker`),className:`personal-composer-file-input`,disabled:ne||I.length>=hC,multiple:!0,onChange:e=>void Ct(e.target.files),ref:Pe,type:`file`}),(0,z.jsx)(`textarea`,{"aria-label":f(`composer.sendMessage`),onChange:e=>Ue(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),bt())},onPaste:wt,placeholder:V?f(`composer.goalPlaceholder`,{goal:V.title}):f(`composer.managerPlaceholder`),ref:je,rows:1,value:Ve}),(0,z.jsx)(`button`,{"aria-label":f(St?`composer.createGoal`:`composer.send`),disabled:!Ve.trim()&&I.length===0||ne,onClick:()=>void bt(),title:f(St?`composer.createGoalHint`:`composer.sendMessageHint`),type:`button`,children:(0,z.jsx)(nh,{size:18})})]})]})]})]}),sidebar:(0,z.jsx)(Ox,{attentionCount:Ke,goals:Ge,goalArchiveLoadState:r,goalLifecycleOperations:n.onExecuteGoalLifecycle?[`stop`,`resume`]:void 0,lifecycleBusyGoalIds:de,onRequestGoalCreate:s?void 0:st,onRequestGoalLifecycle:s&&!n.onExecuteGoalLifecycle?void 0:(e,t)=>void ct(e,t),onRetryGoalArchive:n.onRetryGoalArchive||n.onRefresh?()=>void(n.onRetryGoalArchive??n.onRefresh)?.():void 0,onOpenSettings:s?void 0:()=>Je({kind:`settings`}),onSelectGoal:_t,selectedGoalId:B,statusSourceControl:u},u?.activeSource.statusUrl??`/status.json`)})}),Ot]})}function vC(e){return(e??``).replace(/\s+/gu,` `).trim()}function yC(e,t=120){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t-1).join(``)}…`}function bC(e,t,n){let r=vC(e);return!r||r===`暂无`?n?t(n):``:/refresh-state|latest_run|latest run-derived/iu.test(r)?t(`projection.refreshState`):/first read-only adapter tick|read-only adapter/iu.test(r)?t(`projection.firstReadOnlyAdapterCheck`):/todo update recorded for/iu.test(r)?t(`projection.todoStatusUpdated`):/^(loopx|python3|npm|git|run)\s|\s--[a-z0-9-]+|\b[a-z]+_[a-z_]+\b/iu.test(r)?t(n??`projection.agentPreparingNextStep`):yC(r)}function xC(e,t){return t({advancing:`projection.agentAdvancingGoal`,idle:`projection.agentIdle`,needs_you:`projection.agentNeedsDecision`,stopped:`projection.agentStopped`,waiting_external:`projection.agentWaitingExternal`}[e])}function SC({eventCount:e,hasArtifact:t,hasLatestValidation:n},r){return{label:r(n?`projection.latestValidation`:`projection.latestRun`),metadata:e>0?r(`projection.events24h`,{count:e}):r(t?`projection.runEvidenceAvailable`:`projection.publicSafeProjection`)}}var CC=`/status.json`,wC=`loopx-status-source-catalog-v1`,TC={id:`local`,kind:`local`,label:`本机`,readOnly:!1,statusUrl:CC};function EC(e,t){let n=xh(e,t).source;if(!n||!n.isLoopback||n.isRelative)return{error:`SSH 隧道来源必须使用显式的 localhost、127.0.0.1 或 ::1 URL。`};let r=new URL(n.url,t);return[`http:`,`https:`].includes(r.protocol)?{url:r.toString()}:{error:`状态来源只支持 HTTP 或 HTTPS。`}}function DC(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return`ssh-${(t>>>0).toString(36)}`}function OC(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return null;let n=e;if(n.kind!==`ssh_tunnel`||typeof n.label!=`string`||typeof n.statusUrl!=`string`)return null;let r=n.label.trim(),i=EC(n.statusUrl,t);if(!r||r.length>48||!(`url`in i))return null;let a=vx(n.hostAlias)?n.hostAlias.trim():void 0;return{...a?{hostAlias:a}:{},id:DC(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url}}function kC(){return{schemaVersion:1,sources:[TC]}}function AC(e,t){try{let n=e.getItem(wC);if(!n)return kC();let r=JSON.parse(n);if(r.schemaVersion!==1||!Array.isArray(r.sources))return kC();let i=new Set([TC.statusUrl]);return{schemaVersion:1,sources:[TC,...r.sources.flatMap(e=>{let n=OC(e,t);return!n||i.has(n.statusUrl)?[]:(i.add(n.statusUrl),[n])})]}}catch{return kC()}}function jC(e,t){e.setItem(wC,JSON.stringify({schemaVersion:1,sources:t.sources.filter(e=>e.kind===`ssh_tunnel`)}))}function MC(e,t){let n=new Set(t.filter(vx).map(e=>e.trim())),r=!1,i=e.sources.map(e=>e.kind!==`ssh_tunnel`||e.hostAlias||!n.has(e.label)?e:(r=!0,{...e,hostAlias:e.label}));return r?{...e,sources:i}:e}function NC(e,t,n){let r=t.label.trim();if(!r)return{error:`请填写来源名称。`};if(r.length>48)return{error:`来源名称不能超过 48 个字符。`};let i=EC(t.statusUrl,n);if(!(`url`in i))return i;if(e.sources.some(e=>e.statusUrl===i.url))return{error:`这个状态 URL 已经在来源目录中。`};if(t.hostAlias!==void 0&&!vx(t.hostAlias))return{error:`请选择有效的 SSH Host。`};let a=t.hostAlias?.trim(),o={...a?{hostAlias:a}:{},id:DC(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url};return{catalog:{...e,sources:[...e.sources,o]},source:o}}function PC(e,t){return{...e,sources:e.sources.filter(e=>e.kind===`local`||e.id!==t)}}function FC(e,t,n){if(!t.trim()||xh(t,n).source?.isRelative)return TC;let r=t.trim();try{r=new URL(r,n).toString()}catch{return null}return e.sources.find(e=>e.statusUrl===r)??null}function IC(e,t,n){return FC(e,t,n)||(xh(t,n).source?.isRelative?TC:{id:`temporary`,kind:`ssh_tunnel`,label:`临时来源`,readOnly:!0,statusUrl:t.trim()})}function LC(e,t,n,r){return IC(e,t??n,r)}var RC={delete:`删除`,deploy:`部署`,merge:`合并`,payment:`付款`,release:`发布`};function zC(e,t,n){let r=t.replace(/\s+/gu,` `).trim().toLowerCase(),i=n.target.replace(/\s+/gu,` `).trim().toLowerCase();return!i||!r.includes(i)?null:{actionKind:`goal.update`,context:{goal_id:e,kind:`goal`,natural_language:t,semantic_proposal:{operation:n.operation,target:n.target}},idempotencyKey:`workspace-semantic-protected-${e}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e,status:`operator_gate_requested`},summary:`请求受保护操作:${RC[n.operation]} · ${n.target}`}}var BC=CC;async function VC(e){let t=await fetch(e,{cache:`no-store`,signal:AbortSignal.timeout(3e4)});if(!t.ok)throw Error(`HTTP ${t.status} while loading ${e}`);return zp(await t.json())}function HC(e,t){if(t?.controller_readiness?.decision_advisor_ready||t?.controller_readiness?.write_controller_ready)return`controller_ready`;if(t?.controller_readiness)return`controller_gated`;if(t?.human_reward)return`reward_judged`;if(t?.operator_gate?.decision===`approve`)return`operator_approved`;if(t?.operator_gate)return`operator_gated`;let n=e||t?.classification||``;return n===`connected_without_run`?`connected`:n===`read_only_project_map`||t?.project_map?`mapped`:n===`state_refreshed`?`refreshed`:n&&n!==`no_status`?`adapter_inspected`:`registered`}function UC(e,t){let n=new Map(t.map(e=>[e.goal_id,e])),r=new Set,i=e.map(e=>{r.add(e.id);let t=n.get(e.id),i=e.latest_runs[0],a=t?.lifecycle_phase??e.lifecycle_phase??i?.lifecycle_phase??HC(t?.status??i?.classification??e.status,i),o=t?.lifecycle_flags?.length?t.lifecycle_flags:e.lifecycle_flags?.length?e.lifecycle_flags:i?.lifecycle_flags?.length?i.lifecycle_flags:[a];return{goal:e,queueItem:t,latestRun:i,status:t?.status??i?.classification??e.status??`no_status`,waitingOn:t?.waiting_on??`clear`,severity:t?.severity??`clear`,lifecyclePhase:a,lifecycleFlags:o}});for(let e of t)r.has(e.goal_id)||i.push({goal:{activation_state:e.activation_state,id:e.goal_id,status:e.status,display_name:e.goal_id,latest_runs:[],lifecycle_flags:[e.lifecycle_phase??`registered`],registry_member:!0,legacy_runtime_goal:!1,index_exists:!1,raw_index_records:0,unique_runs:0},queueItem:e,status:e.status,waitingOn:e.waiting_on,severity:e.severity,lifecyclePhase:e.lifecycle_phase??`registered`,lifecycleFlags:e.lifecycle_flags??[`registered`]});return i}function WC(e){return(e??``).replace(/\s+/g,` `).trim()}function GC(e){let t=new Map;for(let n of e?.goals??[])t.set(n.goal_id,n);return t}function KC(e,t){return e===void 0||t===void 0?void 0:e+t}function qC(e,t){if(!e)return null;let n=t===`user`?e.queueItem?.project_asset?.user_todos:e.queueItem?.project_asset?.agent_todos;if(n?.items?.length)return{done_count:n.done??n.items.filter(e=>e.done).length,items:n.items,open_count:n.open??n.items.filter(e=>!e.done).length,total_count:n.total??n.items.length};let r=t===`user`?e.queueItem?.user_todos:e.queueItem?.agent_todos;return r?.items?.length?r:null}function JC(e){return e?.items.find(e=>!e.done)}function YC(e,t,n=`todos`){return e?.items?.length?{advancement_done_count:e.advancement_done_count??t?.advancement_done_count,done_count:e.done??e.items.filter(e=>e.done).length,items:e.items,open_count:e.open??e.items.filter(e=>!e.done).length,total_count:e.total??e.items.length}:t??null}function XC(e){return e?.queueItem?.project_asset?.quota?.state??e?.queueItem?.quota?.state??e?.goal.quota?.state??`waiting`}function ZC(e,t,n){let r=[];for(let t of e){let e=qC(t,`agent`);for(let n of e?.items??[])r.push({goalId:t.goal.id,role:`agent`,todo:n})}let i=new Map;for(let e of r){let t=e.todo.claimed_by||`codex`,n=i.get(t)??[];n.push(e),i.set(t,n)}let a=new Map((n?.agents??[]).map(e=>[e.agent_id,e]));return Array.from(new Set([...i.keys(),...a.keys()])).map(e=>{let t=i.get(e)??[],n=a.get(e),r=Array.from(new Set([...t.map(e=>e.goalId),n?.current_todo?.goal_id,...n?.goal_ids??[]].filter(Boolean))),o=(t.filter(e=>!e.todo.done)[0]??t[0])?.goalId??n?.current_todo?.goal_id??r[0]??``,s=n?.last_activity_at??null;return{agentId:e,claimedTodos:t,currentTodo:n?.current_todo??null,evidenceRefs:[],goalIds:r,handoffNote:null,lastActivity:s,nextSafeAction:n?.next_action?.trim()||`Inspect status projection before taking work`,primaryGoalId:o,quotaHints:[],staleClaimHint:null,status:{label:`可用`,summary:`正常运行`,variant:`success`},workspaceRef:null}})}function QC(e){return e?.map(e=>({dataUrl:e.data_url,id:e.id,mimeType:e.mime_type,name:e.name,size:e.size}))}var $C=`loopx.personal-agent-selection.v1`;function ew(){if(typeof window>`u`)return{};try{let e=JSON.parse(window.localStorage.getItem($C)??`{}`);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[0]==`string`&&typeof e[1]==`string`))}catch{return{}}}var tw={需修复:`danger`,等你:`warning`,等待条件:`info`,推进中:`success`,安静运行:`neutral`,已停止:`neutral`,已完成:`neutral`};function nw(e,t){return WC(t)||e.replace(/^loopx[-_]/i,`LoopX `).split(/[-_]+/).filter(Boolean).map((e,t)=>t===0?`${e.slice(0,1).toUpperCase()}${e.slice(1)}`:e).join(` `)}function rw(e){return e.split(/\r?\n/u).filter(e=>!/^\s*GOAL_(STATUS|PROGRESS)\s*:/u.test(e)).map(e=>/^\s*GOAL_EVIDENCE\s*:/u.test(e)?e.replace(/^\s*GOAL_EVIDENCE\s*:/u,`验证依据:`):/^\s*NEXT_ACTION\s*:/u.test(e)?e.replace(/^\s*NEXT_ACTION\s*:/u,`下一步:`):e).join(` -`).trim()}function iw(e,t){return[`agent`,`assistant`].includes(e.trim().toLowerCase())&&t.trim().length>0}var aw=`已发现的项目 Agent`;function ow(e){switch(Vy(e)){case`codex`:return`Codex`;case`claude`:return`Claude Code`;case`kiro`:return`Kiro CLI`;case`trae`:return`Trae CLI Agent`;case`coco`:return`Coco Agent`;default:return nw(e)}}function sw(e,t){switch(Hy(e,t)){case`codex`:return`代码与项目执行`;case`claude`:return`复杂分析与长任务`;case`openai`:case`anthropic`:return`管家问答 · 无工具`;case`kiro`:return`终端编码 · 原生 /goal 循环`;case`trae`:return`前端与交互实现`;case`coco`:return`通用任务`;default:return aw}}function cw(e,t){let n=e.project_asset;return t===`user`?YC(n?.user_todos,e.user_todos,`project_asset.user_todos`):YC(n?.agent_todos,e.agent_todos,`project_asset.agent_todos`)}function lw(e){return $d(e.title??e.text,112)}function uw(e){let t=e.resume_condition?.resume_receipt;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.receipt_id;return typeof n==`string`&&n.trim()?n.trim():null}function dw(e,t){let n=e.completion_validation_revision_history.at(-1);return{resumeWhen:e.resume_when??null,resumeReady:e.resume_ready??null,resumeReceiptId:uw(e),claimedBy:e.claimed_by??null,done:e.status!==`deferred`&&e.done,evidence:e.evidence?$d(e.evidence,96):null,index:e.index,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,taskDomain:e.task_domain??null,text:lw(e),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.index}`,validationDigest:e.completion_validation_sha256??null,validationRevision:e.completion_validation_revision??null,validationRevisionActor:n?.actor_agent_id??null}}function fw(e){let t=e.queueItem?.agent_todos,n=t?.items??e.queueItem?.project_asset?.agent_todos?.items??[],r=new Map(n.map(t=>[t.todo_id?.trim()||`${e.goal.id}:agent:${t.index}`,t]));for(let n of t?.deferred_items??[]){let t=n.todo_id?.trim()||`${e.goal.id}:agent:${n.index}`;r.has(t)||r.set(t,n)}return[...r.values()]}function pw(e){return fw(e).map(t=>dw(t,e))}function mw(e,t,n){let r=new Map;for(let n of e.todo_index?.items??[]){if(n.goal_id!==t.goal.id||n.role!==`agent`)continue;let e=dw(n,t);r.set(e.todoId,e)}for(let e of n)r.has(e.todoId)||r.set(e.todoId,e);let i=new Map;for(let e of r.values()){if(e.done||e.taskClass!==`advancement_task`)continue;let t=e.taskDomain?.trim();t&&i.set(t,(i.get(t)??0)+1)}return[...i].map(([e,t])=>({domain:e,matchingTodoCount:t}))}function hw(e,t){return{claimedBy:e.claimed_by??null,done:e.status===`done`||e.status===`completed`,index:-1,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,text:$d(e.title,112),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.claimed_by??`unknown`}:current`}}function gw(e,t,n){let r=new Map(e.map(e=>[e.todoId,e]));for(let e of t){let t=e.currentTodo;if(!t||t.goal_id!==n.goal.id)continue;let i=hw(t,n);r.has(i.todoId)||r.set(i.todoId,i)}return[...r.values()]}function _w(e){let t=e.queueItem?.project_asset?.agent_todos,n=e.queueItem?.agent_todos,r=fw(e),i=t?.advancement_done_count??n?.advancement_done_count??t?.done??n?.done_count??null,a=r.filter(e=>e.done&&e.status!==`deferred`).length,o=Math.max(i??0,a),s=new Set(r.map(e=>e.todo_id?.trim()).filter(e=>!!e)),c=(t?.recent_completed_advancement_items??[]).filter(e=>!e.todo_id?.trim()||!s.has(e.todo_id.trim())).map(t=>dw(t,e)),l=r.find(e=>!e.done);return{doneTodoCount:o,nextTodoText:WC(t?.next??``)||(l?WC(l.title??``)||WC(l.text??``):``)||null,recentCompleted:c}}function vw(e,t){let n=WC(e);return n?/\b(state_file|registry_goal|authority_sources|source_registry)\b|\b[a-z_]+\s+\d+\/\d+/i.test(n)?t(`projection.goalVerified`):bC(n,t,`projection.validationRecorded`):``}function yw(e,t=4){if(e.length<=t)return e;let n=e.findIndex(e=>!e.done);if(n<0)return e.slice(-t);let r=Math.max(0,Math.min(n-2,e.length-t));return e.slice(r,r+t)}function bw(e,t,n){let r=t.queueItem?.project_asset?.latest_validation,i=t.latestRun,a=e.event_ledger_summary?.goals.find(e=>e.goal_id===t.goal.id);if(!r&&!i&&!a)return null;let o=[vw(r?.summary,n),bC(i?.health_check,n),bC(i?.recommended_action,n)].find(e=>e!==``&&e!==`暂无`)??n(`projection.runRecorded`),s=SC({eventCount:a?.events_24h??0,hasArtifact:!!(i?.json_exists||i?.markdown_exists),hasLatestValidation:!!r},n);return{generatedAt:r?.generated_at??i?.generated_at??a?.latest_event_at??``,label:s.label,metadata:s.metadata,runId:i?`${t.goal.id}:${i.generated_at}`:null,safePreview:[o,s.metadata].filter(Boolean).join(` -`),summary:o,todoId:t.queueItem?.project_asset?.agent_todos?.items.find(e=>!e.done)?.todo_id??null}}function xw(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(done|complete|completed|finished|terminal|closed|success)([_\s-]|$)/i.test(e??``))}function Sw(e,t){return e.global_registry?.findings?.find(e=>e.severity===`high`&&(e.goal_id===t.goal.id||e.goal_ids.includes(t.goal.id)))}function Cw(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(failure|failed|error|broken|unhealthy|blocked[_\s-]?health|health[_\s-]?blocked)([_\s-]|$)/i.test(e??``))}function ww(e,t){let n=t.queueItem?.stale_latest_run_warning;return t.severity===`high`||!!Sw(e,t)||!!(n?.requires_refresh_state||n?.severity===`high`)||Cw(t)}function Tw(e,t){let n=Sw(e,t);return t.queueItem?.stale_latest_run_warning?.recommended_action??t.queueItem?.stale_latest_run_warning?.reason??n?.recommended_action??n?.message??t.queueItem?.recommended_action??t.latestRun?.recommended_action??null}function Ew(e){let t=e.latestRun?.operator_gate,n=t?.decision?.trim().toLowerCase()??``,r=new Set([`approve`,`approved`,`reject`,`rejected`,`defer`,`deferred`,`cancel`,`cancelled`]),i=[e.queueItem?.recommended_action,e.latestRun?.recommended_action].filter(Boolean).join(` `),a=/(?:等待|需要)(?:用户|你|owner).{0,24}(?:批准|确认|授权|补充|选择|决定)|(?:批准|确认|授权).{0,16}(?:后|才能|方可)/i.test(i);return!!(t&&!r.has(n))||e.lifecyclePhase===`operator_gated`&&!r.has(n)||a}function Dw(e,t){let n=e.latestRun?.operator_gate;return bC(n?.operator_question??n?.reason_summary??n?.follow_up??e.queueItem?.recommended_action??e.latestRun?.recommended_action,t,`projection.confirmAgentDecision`)}function Ow(e,t){if(t.goal.activation_state===`stopped`)return`已停止`;let n=qC(t,`user`),r=qC(t,`agent`),i=!!JC(n),a=!!JC(r);return[`user_or_controller`,`controller`].includes(t.waitingOn)||i||Ew(t)?`等你`:ww(e,t)?`需修复`:t.waitingOn===`external_evidence`?`等待条件`:XC(t)===`eligible`||a?`推进中`:xw(t)?`已完成`:`安静运行`}function kw(e,t,n,r){if(n===`已停止`)return xC(`stopped`,r);if(n===`需修复`)return bC(Tw(e,t),r,`projection.statusRefreshNeeded`);if(n===`等你`)return xC(`needs_you`,r);if(n===`推进中`){let e=[(qC(t,`agent`)?.items??[]).filter(e=>!e.done).flatMap(e=>[e.title,e.text]).map(e=>WC(e)).find(e=>e!==``&&e!==`暂无`),t.queueItem?.recommended_action,t.latestRun?.recommended_action].map(e=>WC(e)).find(e=>e!==``&&e!==`暂无`);return e?bC(e,r,`projection.agentAdvancingGoal`):xC(`advancing`,r)}return xC(n===`等待条件`?`waiting_external`:`idle`,r)}function Aw(e,t){return t.some(t=>e.includes(t))}function jw(e,t,n){if(t.goals.some(e=>e.activationState===`active`&&e.loadState))return{text:`Goal 状态尚未全部加载,暂不能给出完整统计。可先打开已加载的 Goal,失败项可重试。`,lines:[]};if(Aw(n,[`Agent`,`agent`,`推进`,`在做`])){let e=t.goals.filter(e=>![`安静运行`,`已完成`,`已停止`].includes(e.state)),n=(e.length>0?e:t.goals).slice(0,3);return n.length===0?{text:`当前状态里还没有 Goal 可供汇总。`,lines:[]}:{text:e.length>0?`Agent 当前关注这些 Goal:`:`当前 Goal 都比较安静:`,lines:n.map(e=>`${e.title} · ${e.state} · ${e.agentSentence}`)}}if(Aw(n,[`现在`,`下一步`,`我该`,`该做什么`,`优先处理`])){let e=t.userTodos[0];if(e)return{text:e.blocking?`先处理「${nw(e.goalId)}」:${e.text}`:`当前最先处理「${nw(e.goalId)}」:${e.text}`,lines:[]};let n=t.goals.find(e=>e.state===`需修复`);if(n)return{text:`没有待办,但这个 Goal 需要先修复。`,lines:[`${n.title} · ${n.agentSentence}`]};let r=t.goals.find(e=>e.state===`推进中`);return r?{text:`目前不需要你介入,Agent 正在推进。`,lines:[`${r.title} · ${r.agentSentence}`]}:{text:`当前系统很安静,没有需要你立即处理的事项。`,lines:[]}}if(Aw(n,[`等我`,`阻塞`,`需要我`,`全局待办`]))return t.userTodos.length===0?{text:`目前没有 Goal 在等你,开放用户待办为 0。`,lines:[]}:{text:`有 ${t.userTodos.length} 项开放用户待办,阻塞项优先:`,lines:t.userTodos.slice(0,3).map(e=>`${nw(e.goalId)} · ${e.blocking?`阻塞`:`待处理`} · ${e.text}`)};if(Aw(n,[`状态`,`异常`,`修复`,`健康`])){let n=t.systemHealth?!t.systemHealth.ok:!e.ok||!e.contract?.ok||!e.global_registry?.ok||(e.global_registry?.summary?.high??0)>0,r=t.goals.filter(e=>e.state===`需修复`),i=r.slice(0,n?2:3).map(e=>`${e.title} · ${e.agentSentence}`);return n&&i.push(`全局状态、契约或注册表健康检查未通过,请进入管理页检查。`),i.length===0?{text:`当前没有发现 Goal 级或全局健康异常。`,lines:[]}:{text:r.length>0?`当前需要关注这些健康问题:`:`Goal 状态正常,但全局健康需要检查:`,lines:i}}return{text:`当前管家支持三类问题:下一步、等待你的事项、Agent 与健康状态。`,lines:[`问“我现在该做什么?”`,`问“哪些 Goal 在等我?”`,`问“Agent 在做什么?”或当前健康状态`]}}function Mw(e,t,n,r=!1){let i=new Map(t.map(e=>[e.goal.id,e])),a=new Set(e.run_history.goals.filter(e=>e.activation_state===`stopped`).map(e=>e.id)),o=GC(e.usage_summary),s=ZC(t,e.todo_index,e.agent_management_projection),c=e.attention_queue.items.flatMap((e,t)=>{if(a.has(e.goal_id))return[];let n=[`user_or_controller`,`controller`].includes(e.waiting_on);return(cw(e,`user`)?.items??[]).map((r,i)=>({projectedDone:r.done,details:tf(r),actionKind:r.action_kind??null,blocking:n,goalId:e.goal_id,sourceOrder:t,taskClass:r.task_class??null,text:lw(r),todoId:r.todo_id?.trim()||`${e.goal_id}:user:${r.index}`,todoOrder:i,updatedAt:r.updated_at??null}))}),l=c.filter(e=>!e.projectedDone),u=new Set(l.map(e=>e.goalId)),d=t.flatMap((t,r)=>a.has(t.goal.id)||u.has(t.goal.id)||!Ew(t)?[]:[{details:tf({task_class:`user_gate`,status:`open`,note:t.latestRun?.operator_gate?.reason_summary}),actionKind:`gate.resolve`,blocking:!0,goalId:t.goal.id,sourceOrder:e.attention_queue.items.length+r,taskClass:`user_gate`,text:Dw(t,n),todoId:`${t.goal.id}:operator-gate`,todoOrder:0,updatedAt:t.latestRun?.operator_gate?.recorded_at??t.latestRun?.generated_at??null}]),f=[...l,...d].sort((e,t)=>Number(t.blocking)-Number(e.blocking)||e.sourceOrder-t.sourceOrder||e.todoOrder-t.todoOrder),p=e.run_history.goals.flatMap(t=>{if(t.registry_member===!1)return[];let a=i.get(t.id);if(!a)return[];let c=Ow(e,a),l=f.find(e=>e.goalId===t.id),u=l?.text??null,d=_w(a),p=t.coordination?.registered_agents??[],m=new Set(p),h=[...s.filter(e=>e.goalIds.includes(t.id)&&!/unassigned|unknown/i.test(e.agentId)&&(m.size===0||m.has(e.agentId))&&(e.currentTodo?.goal_id===t.id||e.claimedTodos.some(e=>e.goalId===t.id)))].sort((e,t)=>(t.lastActivity??``).localeCompare(e.lastActivity??``)),g=new Set(h.map(e=>e.agentId)),_=[...h.map(e=>({agentId:e.agentId,label:e.agentId,lastActivityAt:e.lastActivity,state:e.status.label})),...p.filter(e=>!g.has(e)).map(e=>({agentId:e,label:e,lastActivityAt:null,state:`registered`}))],v=h[0],y=gw(pw(a),h,a),b=[d.nextTodoText,a.queueItem?.recommended_action,a.latestRun?.recommended_action,kw(e,a,c,n)].map(e=>bC(e,n)).find(e=>e!==``&&e!==`暂无`)??n(`projection.nextUpdatePending`);return[{activationState:t.activation_state,agentId:v?.agentId??p[0]??`codex`,agentLaneCount:_.length,agentLanes:_,agentLabel:v?.agentId,agentSentence:kw(e,a,c,n),agentTodos:[...y,...d.recentCompleted],doneTodoCount:d.doneTodoCount,acceptanceObservation:t.acceptance_observation,goalId:t.id,latestActivity:a.latestRun?.generated_at??``,needsYou:u,needsYouActionKind:l?.actionKind??null,needsYouBlocking:l?.blocking??!1,needsYouTaskClass:l?.taskClass??null,needsYouTodoId:l?.todoId??null,nextSentence:b,runEvidence:bw(e,a,n),state:c,...r?{subagentExecution:{allowedDomains:t.spawn_policy?.allowed_domains??[],domainCandidates:mw(e,a,y),enabled:t.spawn_policy?.mode===`multi_subagent`&&t.spawn_policy.spawn_allowed===!0&&t.spawn_policy.max_children>0,executionConfig:t.spawn_policy?.execution_config,maxChildren:t.spawn_policy?.max_children??0,modelConfig:t.spawn_policy?.model_config}}:{},title:nw(t.id,t.display_name),usage:(()=>{let e=o.get(t.id);return e?{costUsd24h:e.cost_usd_24h,costUsd7d:e.cost_usd_7d,durationMs24h:e.duration_ms_24h,durationMs7d:e.duration_ms_7d,tokens24h:KC(e.input_tokens_24h,e.output_tokens_24h),tokens7d:KC(e.input_tokens_7d,e.output_tokens_7d)}:null})()}]}),m=[];if(e.ok||m.push(`状态载荷未标记为正常 (payload.ok === false)`),e.contract&&!e.contract.ok){let t=e.contract.summary,n=t?`${t.errors} 项错误 / ${t.warnings} 项警告`:e.contract.errors?.[0]||`请检查控制面契约`;m.push(`契约检查未通过: ${n}`)}if(e.global_registry){e.global_registry.ok||m.push(`注册表状态异常: ${e.global_registry.summary.high} 项高危`);for(let t of e.global_registry.findings||[])t.severity===`high`&&m.push(`[${t.kind}] ${t.message}`)}let h=e.decision_freshness_summary?.summary?.stale_count?`${e.decision_freshness_summary.summary.stale_count} 项决策状态已过期`:null,g=m.length===0&&!h,_={ok:g,summary:g?`所有控制面契约与注册表检查均正常`:`发现 ${m.length+ +!!h} 项系统健康关注点`,issues:m,freshnessWarning:h};return{blockingTodoCount:f.filter(e=>e.blocking).length,goalNotifications:(e.goal_channel_notification_projection?.goals??[]).map(e=>({goalId:e.goal_id,configured:e.configured,enabled:e.enabled,humanGateAutoNotifyEnabled:e.human_gate_auto_notify_enabled,lastNotifiedAt:e.last_notified_at??null,receiptCount:e.receipt_count,targetRef:e.target_ref??null})),goals:p,openUserTodoCount:f.length,systemHealth:_,attentionHistory:[...c,...d],userTodos:f,visibleUserTodos:f.slice(0,5),workers:(e.agent_management_projection?.agents??[]).map(e=>({agentId:e.agent_id,currentTodoGoalId:e.current_todo?.goal_id??null,currentTodoText:e.current_todo?.title?$d(e.current_todo.title,96):null,lastActivityAt:e.last_activity_at??null,state:e.state??null}))}}function Nw({goalArchiveLoadState:e,isLoading:t,onGoalActivationStateChange:n,onGoalDeleted:r,onSelectGoal:i,onReconcileStatus:a,onRefresh:o,onRetryGoalArchive:s,payload:c,progress:l,rows:u,selectedGoalId:d,statusSourceControl:f,theme:p,toggleTheme:m}){let h=f.activeSource.readOnly,g=f.activeSource.kind===`ssh_tunnel`?f.activeSource.hostAlias:void 0,{t:_}=Ji(),[v,y]=(0,R.useState)([]),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(null),[w,T]=(0,R.useState)(null),E=(0,R.useMemo)(()=>{let e=Mw(c,u,_,b);if(!l)return e;let t=Object.values(l.snapshots).map(e=>Mw(e,UC(e.run_history.goals,e.attention_queue.items),_,b)),n=new Map(t.flatMap(e=>e.goals).map(e=>[e.goalId,e])),r=e.goals.map(e=>n.get(e.goalId)??{...e,loadError:l.errors[e.goalId],loadState:l.errors[e.goalId]?`error`:`loading`,agentId:``,agentSentence:``,nextSentence:``,subagentExecution:void 0}),i=t.flatMap(e=>e.userTodos),a=r.some(e=>e.activationState===`active`&&e.loadState),o=[...new Set(t.flatMap(e=>e.systemHealth?.issues??[]))];return{...e,goals:r,userTodos:i,attentionHistory:t.flatMap(e=>e.attentionHistory??e.userTodos),visibleUserTodos:i.slice(0,5),openUserTodoCount:i.length,blockingTodoCount:i.filter(e=>e.blocking).length,workers:[...new Map(t.flatMap(e=>e.workers??[]).map(e=>[e.agentId,e])).values()],goalNotifications:t.flatMap(e=>e.goalNotifications??[]),systemHealth:a||t.length===0?void 0:{ok:t.every(e=>e.systemHealth?.ok),issues:o,summary:o.length?`发现 ${o.length} 项系统健康关注点`:`状态检查已完成`,freshnessWarning:t.map(e=>e.systemHealth?.freshnessWarning).filter(Boolean).join(`;`)||null}}},[c,u,l,b,_]),D=E.goals.find(e=>e.goalId===d)??null,O=l?.snapshots[d]??c,[k,A]=(0,R.useState)(null),[ee,j]=(0,R.useState)(null),[M,te]=(0,R.useState)(!1),ne=E.goals.some(e=>e.activationState===`active`&&e.loadState===`loading`)?`loading`:E.goals.map(e=>`${e.goalId}:${e.agentId}`).join(`|`),N=D?.goalId??`manager`;E.goals.some(e=>e.activationState===`active`&&e.loadState)||(E.systemHealth?!E.systemHealth.ok:!c.ok)||E.openUserTodoCount>0&&`${E.openUserTodoCount}${E.blockingTodoCount}`;let P=v.length>0?v.map(e=>({agentId:e.agent_id,adapterKind:e.adapter_kind,available:e.available,capability:sw(e.agent_id,e.adapter_kind),interrupt:e.interrupt,label:e.display_name,location:e.location,resume:e.resume,source:e.source,statusLabel:e.available?`可用`:`需要配置`,streaming:e.streaming,toolCalls:e.tool_calls,trustScope:e.trust_scope})):[{agentId:`codex`,available:!0,capability:sw(`codex`),label:`Codex`,statusLabel:`正在检测`}],re=[...P,{agentId:`status-only`,available:!0,capability:`不调用模型`,adapterKind:`status_projection`,interrupt:!1,label:`仅查状态`,resume:!0,statusLabel:`只读`,streaming:!1,toolCalls:!1,trustScope:`read_only`}],ie=P.find(e=>e.label===`Codex`&&e.available)?.agentId??P.find(e=>e.available)?.agentId??`status-only`,ae=w?.executor_endpoint?.trim()??``,F=ae?P.find(e=>e.agentId===ae)?.agentId:void 0,oe=e=>e===`manager`?F??ie:ie,[I,se]=(0,R.useState)(ew),L=Dh(re,I[N]??oe(N),ie),[ce,le]=(0,R.useState)(!1),[ue,de]=(0,R.useState)(!1),[fe,pe]=(0,R.useState)(`chat`),[me,he]=(0,R.useState)(``),[ge,_e]=(0,R.useState)({}),[ve,ye]=(0,R.useState)({}),[be,xe]=(0,R.useState)(null),[Se,Ce]=(0,R.useState)({}),[we,Te]=(0,R.useState)([]),[Ee,De]=(0,R.useState)(null),[Oe,ke]=(0,R.useState)({}),Ae=(0,R.useRef)(1),je=(0,R.useRef)(1),Me=(0,R.useRef)(new Map),Ne=(0,R.useRef)(new Set),Pe=(0,R.useRef)(new Map),Fe=(0,R.useRef)(new Map),Ie=(0,R.useRef)(new Set),Le=(0,R.useRef)(new Set),Re=(0,R.useRef)(null),B=(0,R.useRef)(null),ze=(0,R.useRef)(null),Be=(0,R.useRef)(null);(0,R.useRef)(null);let Ve=ge[N]??[];ve[N];let He=(e,t)=>e===`manager`?_(`header.manager`):t,Ue=D?E.userTodos.filter(e=>e.goalId===D.goalId):E.userTodos,We=D?.agentTodos??[];yw(We,D?.needsYou?3:4);let Ge=We.filter(e=>e.done).length,Ke=We.length>0?`${Ge}/${We.length}`:`暂无计划`;D&&({...E},Ue.filter(e=>e.blocking).length,Ue.length),(0,R.useEffect)(()=>{let e=bh(f.activeSource.statusUrl,window.location.href),t=e.source?wh(O,e.source):null;if(!D||!t?.indexUrl||!t.detailUrl){A(null),j(null),te(!1);return}let{detailUrl:n,indexUrl:r}=t,i=!1;return A(null),j(null),te(!0),Th(r,D.goalId).then(async e=>{let t=e.items[0]?.detail_ref;return t?Eh(n,t):null}).then(e=>{i||A(e)}).catch(e=>{i||j(Bp(e))}).finally(()=>{i||te(!1)}),()=>{i=!0}},[O,D?.goalId,f.activeSource.statusUrl]);let qe=Se[N]?.sessionId;(0,R.useEffect)(()=>{if(h||!qe)return;let e=!1,t,n=async()=>{try{let t=await cg(qe);if(e)return;let n=t.messages.filter(e=>e.origin===`manager_followup`);_e(e=>{let r=e[N]??[],i=new Set(r.map(e=>e.sourceMessageId)),a=n.filter(e=>!i.has(e.message_id)),o=new Map(n.map(e=>[e.message_id,e.return_delivery])),s=new Map(t.messages.filter(e=>e.role!==`user`&&e.origin!==`manager_followup`).map(e=>[e.turn_id,e])),c=new Map(t.messages.map(e=>[e.message_id,e.collaboration])),l=!1,u=r.map(e=>{let t=e.sourceMessageId?o.get(e.sourceMessageId):void 0,n=e.sourceTurnId?s.get(e.sourceTurnId):void 0,r=e.sourceMessageId?c.get(e.sourceMessageId):n?.collaboration;return JSON.stringify(t)===JSON.stringify(e.returnDelivery)&&JSON.stringify(r)===JSON.stringify(e.collaboration)?e:(l=!0,{...e,sourceMessageId:e.sourceMessageId??n?.message_id,returnDelivery:t,collaboration:r})});return!a.length&&!l?e:{...e,[N]:[...u,...a.map(e=>({id:Ae.current++,sourceMessageId:e.message_id,role:`assistant`,agentLabel:`协作回执`,sourceLabel:`协作回执`,text:rw(e.text),lines:[],returnDelivery:e.return_delivery}))]}})}catch{}finally{e||(t=setTimeout(n,3e3))}};return n(),()=>{e=!0,t&&clearTimeout(t)}},[h,qe,N,L.label]);function V(e,t){Ce(n=>{if(t===null){let t={...n};return delete t[e],t}return{...n,[e]:t}})}(0,R.useEffect)(()=>{if(h){y([]),x(!1),C(null),T(null);return}let e=!1;return ag().then(t=>{if(!e){y(t.adapters??[]);let e=t.manager?.runtime;T(t.manager?.channel_binding??null),C(e?{schema_version:`manager_runtime_session_readback_v0`,runtime_profile:e.runtime_profile,configuration_revision:e.configuration_revision,status:e.status,sandbox:e.sandbox,standing_grant:e.standing_grant,tool_classes:e.tool_classes}:null),x(t.goal_subagent_configuration===`preview_locked`)}}).catch(()=>{e||x(!1)}),()=>{e=!0}},[h]),(0,R.useEffect)(()=>{try{window.localStorage.setItem($C,JSON.stringify(I))}catch{}},[I]),(0,R.useEffect)(()=>{if(h||!L.available)return;let e=N,t=`${e}:${L.agentId}`,n=D?`goal`:`manager`,r=D?`goal.${D.goalId}`:`manager`,i=!1,a=null,o=null;return(async()=>{try{let s=await dg({agentId:n===`manager`?void 0:L.agentId,channelId:r,goalId:D?.goalId});if(i||(_e(t=>(t[e]?.length??0)>0?t:{...t,[e]:s.messages.map(t=>({sourceMessageId:t.message_id,agentLabel:t.role===`user`?void 0:t.origin===`manager_followup`?`协作回执`:He(e,L.label),attachments:QC(t.attachments),id:Ae.current++,lines:[],role:t.role===`user`?`user`:`assistant`,returnDelivery:t.return_delivery,collaboration:t.collaboration,sourceLabel:t.role===`user`?void 0:t.role===`error`?`本地会话记录`:e===`manager`?`恢复的${_(`header.manager`)}会话`:`恢复的 ${L.label} 会话`,text:t.role===`user`?t.text:rw(t.text)}))}),L.agentId===`status-only`))return;let c=s.sessions[0];if(o=c?.session_id??null,c&&!c.resumable){Ne.current.add(t),V(e,{agentId:L.agentId,resumable:!1,sessionId:c.session_id,status:`resume_failed`});return}let l=n===`manager`?``:D?.goalId??``;if(n===`goal`&&!l)return;let u=await sg(l,n===`manager`?I[e]:L.agentId,`resume_latest`,n);if(i)return;n===`manager`&&u.session.manager_runtime&&C(u.session.manager_runtime),Me.current.set(t,u.session_id);let d=s.snapshots.find(e=>e.session.session_id===u.session_id),f=d?.session.active_turn_id??``;if(V(e,{agentId:u.agent_id||L.agentId,resumable:!0,sessionId:u.session_id,status:f?`running`:`ready`,turnId:f||void 0}),Ne.current.delete(t),!f)return;let p=`${u.session_id}:${f}`;if(Le.current.has(p))return;Le.current.add(p),Pe.current.set(e,f),V(e,{agentId:L.agentId,resumable:!0,sessionId:u.session_id,status:`running`,turnId:f}),xe(e),a=new AbortController,Fe.current.set(e,a);let m=``,h=Je(e,{activity:[`正在恢复进行中的 Agent 回合`],agentLabel:He(e,L.label),lines:[],pending:!0,sourceLabel:e===`manager`?`恢复的${_(`header.manager`)}会话`:`恢复的 ${L.label} 会话`,text:``});try{let t=await Tg(u.session_id,f,{signal:a.signal,onDelta:t=>{m+=t,Ye(e,h,{text:m})},onActivity:t=>{_e(n=>({...n,[e]:(n[e]??[]).map(e=>e.id===h?{...e,activity:[...new Set([...e.activity??[],t])].slice(-6)}:e)}))}});if(i)return;Ye(e,h,{lines:t.response.gate?[t.response.gate.summary,t.response.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:t.response.message||m.trim()||`${He(e,L.label)} 已完成分析。`});let n=E.goals.find(e=>e.goalId===d?.session.goal_id)??D??E.goals[0]??null;if(n&&t.response.proposals.length>0){let r=t.response.proposals.filter(Oh).map(e=>({goalId:n.goalId,id:je.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));r.length>0&&ye(t=>({...t,[e]:[...t[e]??[],...r]}))}}catch(t){if(i)return;Ye(e,h,{activity:[],lines:[],pending:!1,reconnect:t instanceof qh&&t.payload.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t instanceof Error?t.message:`无法恢复进行中的 Agent 回合。`})}finally{Le.current.delete(p),Pe.current.get(e)===f&&Pe.current.delete(e),V(e,{agentId:L.agentId,resumable:!0,sessionId:u.session_id,status:`ready`}),Fe.current.get(e)===a&&Fe.current.delete(e),i||xe(t=>t===e?null:t)}}catch(n){if(i)return;n instanceof qh&&n.payload.error_code===`resume_failed`&&(Ne.current.add(t),o&&V(e,{agentId:L.agentId,resumable:!1,sessionId:o,status:`resume_failed`}))}})(),()=>{i=!0,a?.abort()}},[N,E.goals[0]?.goalId,h,D?.goalId,L.agentId,L.available,L.label,I]),(0,R.useEffect)(()=>{if(h||D||E.goals.length===0||ne===`loading`)return;let e=!1;return Promise.all(E.goals.filter(e=>!e.loadState).map(async e=>{let t=await lg({agentId:e.agentId,channelId:`goal.${e.goalId}`,goalId:e.goalId});return{goalId:e.goalId,session:t.sessions[0]??null}})).then(t=>{e||Ce(e=>{let n={...e};for(let e of t)e.session&&(n[e.goalId]={agentId:e.session.agent_id,resumable:e.session.resumable,sessionId:e.session.session_id,status:e.session.active_turn_id?`running`:e.session.status,turnId:e.session.active_turn_id??void 0});return n})}).catch(()=>{}),()=>{e=!0}},[h,ne,D?.goalId]),(0,R.useEffect)(()=>{if(De(null),h){Te([]),ke({});return}if(!D){Te([]),ke({});return}let e=!1,t=0,n=0;Te([]),ke({});let r=async()=>{if(!e){if(document.hidden){t=window.setTimeout(()=>void r(),1e4);return}try{let t=await lg({goalId:D.goalId});if(!e){let r=t.sessions.filter(e=>e.channel_id?.startsWith(`task.`));Te(r);let i=await Promise.allSettled(r.map(e=>cg(e.session_id)));if(!e){let e=i.some(e=>e.status===`rejected`);n=e?n+1:0,De(e?`partial`:null),ke(Object.fromEntries(i.flatMap((e,t)=>e.status===`fulfilled`?[[r[t].session_id,e.value]]:[])))}}}catch{n+=1,e||De(`offline`)}e||(t=window.setTimeout(()=>void r(),Math.min(3e4,2e3*2**Math.min(n,4))))}};return r(),()=>{e=!0,window.clearTimeout(t)}},[h,D?.goalId]),(0,R.useEffect)(()=>{if(!ce)return;let e=window.requestAnimationFrame(()=>{Re.current?.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus()});return()=>{window.cancelAnimationFrame(e),B.current?.focus()}},[ce]),(0,R.useEffect)(()=>{if(!ue)return;let e=window.requestAnimationFrame(()=>ze.current?.focus());return()=>{window.cancelAnimationFrame(e),Be.current?.focus()}},[ue]),(0,R.useEffect)(()=>{if(!ce&&!ue)return;let e=e=>{e.key===`Escape`&&(le(!1),de(!1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ce,ue]);function Je(e,t){let n=Ae.current++;return _e(r=>({...r,[e]:[...r[e]??[],{...t,id:n,role:`assistant`}]})),n}function Ye(e,t,n){_e(r=>({...r,[e]:(r[e]??[]).map(e=>e.id===t?{...e,...n}:e)}))}async function Xe(e,t){let n=`${e}:${t}`,r=Me.current.get(n);if(r)return r;let i=await sg(e,t,Ne.current.has(n)?`new`:`resume_latest`,`goal`);return Me.current.set(n,i.session_id),Ne.current.delete(n),V(e,{agentId:t,resumable:!0,sessionId:i.session_id,status:i.session.status}),i.session_id}async function Ze(e,t){let n=e.trim();if(!n)return;let r=t&&`goalId`in t?t.goalId??`manager`:N,i=r===`manager`?null:E.goals.find(e=>e.goalId===r)??null,a=t?.agentId?Dh(re,t.agentId,ie):L,o=r===`manager`?E:i?{...E,blockingTodoCount:E.userTodos.filter(e=>e.goalId===i.goalId&&e.blocking).length,goals:[i],openUserTodoCount:E.userTodos.filter(e=>e.goalId===i.goalId).length,userTodos:E.userTodos.filter(e=>e.goalId===i.goalId),visibleUserTodos:E.userTodos.filter(e=>e.goalId===i.goalId)}:E,s=Ae.current++;if(_e(e=>({...e,[r]:[...e[r]??[],{attachments:t?.attachments,id:s,lines:[],role:`user`,text:n}]})),he(``),xe(r),a.agentId===`status-only`||!i&&r!==`manager`){let e=jw(O,o,n),t=a.agentId===`status-only`;Je(r,{agentLabel:t?`仅查状态`:`LoopX 管家`,lines:e.lines.slice(0,3),sourceLabel:t?`LoopX 状态投影 · 仅查状态`:`LoopX 状态投影`,text:e.text}),og({answer:[e.text,...e.lines.slice(0,3)].filter(Boolean).join(` -`),contextKind:r===`manager`?`manager`:`goal`,goalId:r===`manager`?void 0:r,question:n}).catch(()=>{}),xe(null);return}let c=`${r}:${a.agentId}`,l=null;try{let e=r===`manager`?Me.current.get(c):await Xe(r,a.agentId);if(!e){let t=Ne.current.has(c)?`new`:`resume_latest`,n=r===`manager`?I[r]:a.agentId,o=await sg(r===`manager`?``:i.goalId,n,t,r===`manager`?`manager`:`goal`);r===`manager`&&o.session.manager_runtime&&C(o.session.manager_runtime),e=o.session_id,Me.current.set(c,e),V(r,{agentId:o.agent_id||a.agentId,resumable:!0,sessionId:e,status:`ready`}),Ne.current.delete(c)}let o=``;l=Je(r,{activity:[r===`manager`?`正在连接管家`:`正在连接 Agent`],agentLabel:He(r,a.label),lines:[],pending:!0,sourceLabel:r===`manager`?`${_(`header.manager`)} · 跨 Goal`:`${a.label} Agent · ${nw(i.goalId)}`,text:``});let s={attachments:t?.attachments,signal:(()=>{let e=new AbortController;return Fe.current.set(r,e),e.signal})(),onDelta:e=>{o+=e,l!==null&&Ye(r,l,{text:o})},onActivity:e=>{l!==null&&_e(t=>({...t,[r]:(t[r]??[]).map(t=>t.id===l?{...t,activity:[...new Set([...t.activity??[],e])].slice(-6)}:t)}))},onPhase:(t,n)=>{l!==null&&Ye(r,l,{sourceTurnId:n}),Pe.current.set(r,n),V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`running`,turnId:n})}},u;if(t?.loopxMode){let n=await xg(e,t.loopxMode.operation,t.loopxMode.settings);if(!n.turn_id)throw Error(`LoopX execution returned no turn identity`);s.onPhase(`turn.accepted`,n.turn_id),u=await Tg(e,n.turn_id,s)}else u=await Cg(e,n,s);let d=u.response;Ye(r,l,{lines:d.gate?[d.gate.summary,d.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:rw(d.message||o.trim())||`${He(r,a.label)} 已完成分析。`});let f=d.proposals.filter(Oh);if(f.length>0&&!i&&Ye(r,l,{lines:[`请进入要修改的 Goal,预览并确认具体变更。`]}),f.length>0&&i){let e=f.map(e=>({goalId:i.goalId,id:je.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));ye(t=>({...t,[r]:[...t[r]??[],...e]}))}if(r!==`manager`&&d.protected_action){let e=zC(r,n,d.protected_action);if(e)return e}}catch(e){if(Ie.current.delete(r)||t?.loopxMode&&e instanceof qh&&e.payload.error_code===`turn_interrupted`){let e={agentLabel:He(r,a.label),lines:[],pending:!1,sourceLabel:r===`manager`?`${_(`header.manager`)}会话`:`${a.label} 会话`,text:`已中断。你可以在当前会话继续发送消息。`};l===null?Je(r,e):Ye(r,l,e);return}let n=e instanceof qh?e.payload:null;n&&Ah(n)&&Me.current.delete(c),n?.error_code===`resume_failed`&&(Me.current.delete(c),Ne.current.add(c),V(r,{agentId:a.agentId,resumable:!1,sessionId:Se[r]?.sessionId??`resume-failed`,status:`resume_failed`}));let i=n?.gate,o=i&&typeof i==`object`?String(i.summary??``):``,s={agentLabel:He(r,a.label),lines:o?[o]:[],pending:!1,reconnect:n?.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:n?.error_code===`resume_failed`?`原 ${He(r,a.label)} 会话无法恢复。本地历史已经保留,请在运行详情里选择“重试恢复”或“开始新 Session”。`:e instanceof Error?e.message:`${He(r,a.label)} 会话暂时不可用。`};l===null?Je(r,s):Ye(r,l,s)}finally{Pe.current.delete(r),Fe.current.delete(r);let e=Me.current.get(c);e&&V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),xe(e=>e===r?null:e)}}async function Qe(e){let t=e?.goalId??N,n=Se[t],r=e?.agentId??n?.agentId??L.agentId,i=`${t}:${r}`,a=e?.sessionId??n?.sessionId??Me.current.get(i),o=e?.turnId??n?.turnId??Pe.current.get(t);if(!(!a||!o))try{Ie.current.add(t),await hg(a,o),Fe.current.get(t)?.abort()}catch(e){throw Ie.current.delete(t),e}finally{Pe.current.delete(t),V(t,{agentId:r,resumable:!0,sessionId:a,status:`ready`}),Fe.current.delete(t),xe(e=>e===t?null:e)}}async function $e(e){let t=e.goalId,n=`${t}:${e.agentId}`,r=e.sessionId??Se[t]?.sessionId??Me.current.get(n);if(r)try{let i=await Dg(r);Me.current.set(n,r),Ne.current.delete(n),V(t,{agentId:e.agentId,resumable:i.session.resumable,sessionId:r,status:i.session.status})}catch{V(t,{agentId:e.agentId,resumable:!1,sessionId:r,status:`resume_failed`})}}function et(e){let t=`${e.goalId}:${e.agentId}`;Me.current.delete(t),Ne.current.add(t),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:`new-session-pending`,status:`ready`})}async function tt(e){let t=`${e.goalId}:${e.agentId}`,n=e.sessionId??Se[e.goalId]?.sessionId??Me.current.get(t);n&&n!==`new-session-pending`&&await Eg(n),Me.current.delete(t),Ne.current.add(t),V(e.goalId,null)}function nt(e){re.some(t=>t.agentId===e&&t.available)&&(se(t=>({...t,[N]:e})),le(!1))}function rt(){i(``),pe(`chat`)}function it(e){i(e),pe(`chat`)}D&&tw[D.state],D&&(`${L.label}${D.state}`,We.length>0&&`${Ke}`,Ue.length>0&&`${Ue.length}`),D?.state===`需修复`||!D&&!c.ok?(D&&ow(D.agentId),D?.nextSentence,D?.agentSentence):D?.state===`等你`?(D.needsYouBlocking,D.needsYouBlocking,D.needsYou??D.nextSentence,D.needsYou):(D&&ow(D.agentId),D?.nextSentence);let at=[...!D&&Se.manager?.status===`resume_failed`?[{id:`run:manager:resume-failed`,kind:`run`,run:{agentId:Se.manager.agentId,agentLabel:ow(Se.manager.agentId),canInterrupt:!1,completedSteps:0,goalId:`manager`,goalTitle:`LoopX 管家`,latestActivity:`本地聊天记录已保留,点我查看恢复方式。`,resumable:!1,runId:`manager:resume-failed`,sessionId:Se.manager.sessionId,sessionStatus:`resume_failed`,status:`failed`,title:`上次会话需要恢复`,totalSteps:1,outputs:[]}}]:[],...D?we.map(e=>{let t=e.channel_id?.startsWith(`task.`)?e.channel_id.slice(5):void 0,n=D.agentTodos.find(e=>e.todoId===t),r=!!e.active_turn_id,i=Oe[e.session_id],a=i?.messages.some(e=>iw(e.role,e.text))===!0;return{id:`run:task:${e.session_id}`,kind:`run`,run:{agentId:e.agent_id,agentLabel:ow(e.agent_id),canInterrupt:r,completedSteps:n?.done||a?1:0,goalId:D.goalId,goalTitle:D.title,latestActivity:r?`Agent 正在执行,可进入 Session 查看过程或发送纠偏。`:a?`Agent 已返回结果,点击查看结果与完整运行记录。`:`执行 Session 已保留,可继续纠偏或恢复。`,resumable:e.resumable,runId:e.session_id,sessionId:e.session_id,sessionMessages:i?.messages.map(e=>({createdAt:e.created_at,messageId:e.message_id,role:e.role===`user`?`user`:iw(e.role,e.text)?`assistant`:`error`,text:e.role===`user`?e.text:rw(e.text)})),sessionStatus:a?`completed`:e.status,status:n?.done||a?`completed`:r?`running`:e.status===`resume_failed`?`failed`:`waiting`,title:n?.text??`Agent 执行任务`,todoId:t,totalSteps:1,turnId:e.active_turn_id??void 0}}}):[],...D&&(Se[D.goalId]?.turnId||D.runEvidence||qd(D))?[{id:`run:${D.goalId}`,kind:`run`,run:{agentId:Se[D.goalId]?.agentId??D.agentId,agentLabel:ow(Se[D.goalId]?.agentId??D.agentId),canInterrupt:!!Se[D.goalId]?.turnId,completedSteps:D.agentTodos.filter(e=>e.done).length,goalId:D.goalId,goalTitle:D.title,latestActivity:D.agentSentence,resumable:Se[D.goalId]?.resumable??!0,runId:`goal:${D.goalId}`,sessionId:Se[D.goalId]?.sessionId,sessionStatus:Se[D.goalId]?.status,status:Se[D.goalId]?.turnId?`running`:D.state===`需修复`?`failed`:`waiting`,title:D.nextSentence,totalSteps:D.agentTodos.length||1,turnId:Se[D.goalId]?.turnId,outputs:D.runEvidence?[{createdAt:D.runEvidence.generatedAt,kind:`evidence`,outputId:`${D.goalId}:latest-evidence`,title:D.runEvidence.label}]:[]}}]:[],...Ve.map(e=>({id:`message:${e.id}`,kind:`message`,message:{agentLabel:e.agentLabel,attachments:e.attachments,id:String(e.id),pending:e.pending,returnDelivery:e.returnDelivery,collaboration:e.collaboration,role:e.role,text:e.text||(e.pending?`Agent 正在处理…`:e.lines.join(` -`))}})),...(D?[D]:E.goals).flatMap(e=>e.runEvidence?[{id:`output:${e.goalId}:${e.runEvidence.generatedAt||`latest`}`,kind:`output`,output:{agentLabel:ow(e.agentId),createdAt:e.runEvidence.generatedAt,goalId:e.goalId,goalTitle:e.title,kind:`evidence`,outputId:`${e.goalId}:latest-evidence`,runId:e.runEvidence.runId??void 0,safePreview:e.runEvidence.safePreview,summary:e.runEvidence.summary,title:e.runEvidence.label,todoId:e.runEvidence.todoId??void 0}}]:[]),...D&&k?[{id:`output:${D.goalId}:report:${k.publication.publication_id}`,kind:`output`,output:{agentId:k.agent_id,agentLabel:ow(k.agent_id),createdAt:k.publication.delivered_at,goalId:D.goalId,goalTitle:D.title,kind:`report`,outputId:k.publication.publication_id,report:{addedCount:k.delta.added_count,changedCount:k.delta.changed_count,deliveredAt:k.publication.delivered_at,generationId:k.generation_id,items:k.delta.items.map(e=>({changeKind:e.change_kind,previousStatus:e.previous_status,sourceRef:e.source_ref,status:e.status,summary:e.summary,title:e.title})),periodEndAt:k.period_window.end_at,periodStartAt:k.period_window.start_at,predecessorPublicationId:k.publication.predecessor_publication_id,publicationId:k.publication.publication_id},safePreview:k.delta.items.map(e=>`${e.change_kind===`added`?`+`:`~`} ${e.title}\n${e.summary}`).join(` - -`),summary:k.summary,title:k.title}}]:[]],ot=f.connectionState===`connected`,st=new Map(E.goals.map(e=>[e.goalId,e.title])),ct=e=>nf(e,f.activeSource.statusUrl,ot&&!l?.errors[e.goalId],st.get(e.goalId)),lt={...Gd(E),userTodos:E.userTodos.map(ct),attentionHistory:(E.attentionHistory??E.userTodos).map(ct),periodicReports:{error:ee,loading:M},timeline:at};return(0,z.jsxs)(`div`,{className:p===`dark`?`dark`:``,"data-testid":`personal-goal-home`,children:[Ee?(0,z.jsx)(`p`,{role:`status`,className:`m-0 bg-amber-50 px-4 py-2 text-sm text-amber-900`,children:_(Ee===`partial`?`runs.discoveryPartial`:`runs.discoveryOffline`)}):null,(0,z.jsx)(_C,{agents:re.map(e=>({adapterKind:e.adapterKind,agentId:e.agentId,available:e.available,capability:e.capability,interrupt:e.interrupt,label:e.label,location:e.location,resume:e.resume,source:e.source,streaming:e.streaming,toolCalls:e.toolCalls,trustScope:e.trustScope,workspaceCompatibility:e.available?`当前 Goal 写入前验证`:`不可用,需先修复 Endpoint`})),callbacks:{onApplyAttention:e=>it(e.goalId),onCorrectRun:async(e,t)=>{if(!e.sessionId)throw Error(`这个 Run 还没有可纠偏的执行 Session。`);let n=await tg((await Qh({actionKind:`run.correct`,context:{kind:`run`,goal_id:e.goalId,todo_id:e.todoId},idempotencyKey:`workspace-run-correct-${e.sessionId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,message:t,session_id:e.sessionId},summary:`纠偏执行任务:${e.title}`})).proposal_id),r=typeof n.turn?.turn_id==`string`?n.turn.turn_id:void 0;if(V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:r?`running`:`ready`,turnId:r}),r){Pe.current.set(e.goalId,r);let t=new AbortController;Fe.current.set(e.goalId,t);let n=``,i=Je(e.goalId,{activity:[`正在把纠偏送入原执行 Session`],agentLabel:e.agentLabel,lines:[],pending:!0,sourceLabel:`${e.agentLabel} · 执行 Session`,text:``});try{let a=await Tg(e.sessionId,r,{signal:t.signal,onDelta:t=>{n+=t,Ye(e.goalId,i,{text:n})}});Ye(e.goalId,i,{activity:[],pending:!1,text:rw(a.response.message||n.trim())||`${e.agentLabel} 已完成纠偏。`})}catch(t){let n=Ie.current.delete(e.goalId);Ye(e.goalId,i,{activity:[],pending:!1,text:n?`已中断。你可以在当前会话继续发送消息。`:t instanceof Error?t.message:`纠偏回合失败。`})}finally{Pe.current.delete(e.goalId),Fe.current.delete(e.goalId),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:`ready`})}}},onCloseRunSession:tt,onInterruptRun:async e=>Qe(e),onOpenGoal:it,onOpenRunSession:async e=>{if(!e.sessionId)return;let t=e.sessionId,n=await cg(t);ke(e=>({...e,[t]:n})),it(e.goalId),_e(t=>({...t,[e.goalId]:n.messages.map(t=>({agentLabel:t.role===`user`?void 0:e.agentLabel,attachments:QC(t.attachments),id:Ae.current++,lines:[],role:t.role===`user`?`user`:`assistant`,sourceLabel:t.role===`user`?void 0:`${e.agentLabel} · 执行 Session`,text:t.role===`user`?t.text:rw(t.text)}))})),V(e.goalId,{agentId:e.agentId,resumable:n.session.resumable,sessionId:t,status:n.session.active_turn_id?`running`:n.session.status,turnId:n.session.active_turn_id??void 0})},onOpenOutput:e=>it(e.goalId),...b?{onPreviewGoalSubagentConfiguration:async e=>{let t=await Ag(e);return{changed:t.changed,configuration:{allowedDomains:t.after.orchestration.allowed_domains,codexHostCapacity:{configuredChildren:t.codex_host_capacity.configured_children,newSessionRequired:t.codex_host_capacity.new_session_required,requiredChildren:t.codex_host_capacity.required_children,status:t.codex_host_capacity.status,writeRequired:t.codex_host_capacity.write_required,written:t.codex_host_capacity.written},enabled:t.feature_summary.multi_subagent===`enabled`,executionConfig:t.after.orchestration.execution_config,maxChildren:t.after.orchestration.max_children,modelConfig:t.after.orchestration.model_config},previewId:t.preview_id}},onApplyGoalSubagentConfiguration:async({previewId:e,...t})=>{let n=await jg(t,e);return{allowedDomains:n.after.orchestration.allowed_domains,codexHostCapacity:{configuredChildren:n.codex_host_capacity.configured_children,newSessionRequired:n.codex_host_capacity.new_session_required,requiredChildren:n.codex_host_capacity.required_children,status:n.codex_host_capacity.status,writeRequired:n.codex_host_capacity.write_required,written:n.codex_host_capacity.written},enabled:n.feature_summary.multi_subagent===`enabled`,executionConfig:n.after.orchestration.execution_config,maxChildren:n.after.orchestration.max_children,modelConfig:n.after.orchestration.model_config}}}:{},...g?{onExecuteGoalLifecycle:async({goalId:e,operation:t,reason:n})=>{let r=await Tx(g,e,t,n);return{activationState:r.activation_state,projectionVerified:r.projection_verified}}}:{},onGoalActivationStateChange:n,onGoalDeleted:r,onReconcileStatus:a,onRetryGoalArchive:s,onExportOutput:async e=>{let t=[`# ${e.title}`,``,e.summary??``,``,e.safePreview??`此产出没有可用的公开安全预览。`,``,`Goal: ${e.goalId}`,`Todo: ${e.todoId??`unlinked`}`,`Run: ${e.runId??`unlinked`}`].join(` -`),n=URL.createObjectURL(new Blob([t],{type:`text/markdown;charset=utf-8`})),r=document.createElement(`a`);r.href=n,r.download=`${e.outputId.replace(/[^a-z0-9._-]+/gi,`-`)}.md`,r.click(),URL.revokeObjectURL(n)},onRefresh:o,onRetryResumeRun:$e,onSelectAgent:nt,onSelectGoal:e=>e?it(e):rt(),onSendMessage:async(e,t,n,r)=>Ze(e,{agentId:t,goalId:n,attachments:r}),onPrepareLoopX:(e,t)=>Xe(t,e),onStartLoopX:(e,t,n,r)=>{Ze(e===`start`?`开启 LoopX 模式,持续推进当前 Goal。`:`恢复 LoopX 模式。`,{agentId:t,goalId:n,loopxMode:{operation:e,settings:r}})},onStartNewRunSession:et},goalArchiveLoadState:e,managerChannelBinding:w,managerRuntime:S,conversationSessionId:Se[N]?.sessionId,model:lt,readOnly:h,selectedAgentId:L.agentId,selectedGoalId:D?.goalId??null,statusSourceControl:f})]})}function Pw({error:e,isLoading:t,onRetry:n,requestedUrl:r,theme:i,toggleTheme:a}){let o=!!(e&&/failed to fetch|networkerror|load failed/i.test(e)&&r.includes(`status.json`));return(0,z.jsx)(`div`,{className:i===`dark`?`dark`:``,children:(0,z.jsxs)(`main`,{className:`min-h-screen bg-[#f6f7f9] text-slate-950 dark:bg-[#09090b] dark:text-zinc-50`,children:[(0,z.jsxs)(`header`,{className:`flex min-h-16 flex-wrap items-center justify-between gap-3 border-b border-slate-200 bg-white px-4 py-3 dark:border-zinc-800 dark:bg-zinc-950 sm:px-6`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h1`,{className:`text-xl font-semibold`,children:`LoopX Workspace`}),(0,z.jsx)(`p`,{className:`mt-1 break-all text-sm text-slate-500 dark:text-zinc-400`,children:`Personal Workspace`})]}),(0,z.jsx)(Iy,{"aria-label":`切换主题`,onClick:a,size:`icon`,variant:`secondary`,children:i===`dark`?(0,z.jsx)(uh,{className:`h-4 w-4`}):(0,z.jsx)(Gm,{className:`h-4 w-4`})})]}),(0,z.jsxs)(`div`,{className:`grid min-h-[calc(100vh-80px)] sm:grid-cols-[240px_1fr]`,children:[(0,z.jsxs)(`aside`,{className:`hidden border-r border-slate-200 p-6 dark:border-zinc-800 sm:block`,"aria-label":`Workspace`,children:[(0,z.jsx)(`strong`,{children:`LoopX`}),(0,z.jsx)(`p`,{className:`mt-6 text-sm`,children:`Workspace`}),(0,z.jsx)(`p`,{className:`mt-8 text-xs text-slate-500`,children:`Goals`}),[1,2,3].map(e=>(0,z.jsx)(`div`,{className:`mt-4 h-8 rounded bg-slate-100 dark:bg-zinc-900`},e))]}),(0,z.jsx)(`div`,{className:`p-4 sm:p-8`,children:(0,z.jsx)(Ly,{"data-testid":`initial-status-state`,children:(0,z.jsx)(Ry,{className:`flex min-h-64 items-center justify-center p-6`,children:(0,z.jsxs)(`div`,{className:`max-w-xl text-center`,children:[e?(0,z.jsx)(ym,{className:`mx-auto h-6 w-6 text-rose-600 dark:text-rose-300`}):(0,z.jsx)(Qm,{className:`mx-auto h-6 w-6 animate-spin text-slate-500 dark:text-zinc-400`}),(0,z.jsx)(`p`,{className:`mt-3 text-sm font-medium`,children:e?`无法加载实时状态`:`正在加载实时状态`}),e?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`mt-2 break-words text-sm leading-6 text-slate-500 dark:text-zinc-400`,children:o?`本地状态服务暂时未连接。升级或启动期间可能短暂断开,请重试;仍失败时重新打开 LoopX App,或运行 loopx doctor。`:e}),o?(0,z.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-slate-400 dark:text-zinc-500`,children:`重新加载不会执行任务,也不会改变 Goal 配置。`}):null,(0,z.jsx)(`div`,{className:`mt-4 flex flex-wrap justify-center gap-2`,children:(0,z.jsxs)(Iy,{disabled:t,onClick:n,children:[(0,z.jsx)(Qm,{className:`h-4 w-4`}),`重试`]})})]}):(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-500 dark:text-zinc-400`,role:`status`,children:`正在连接 Workspace,Goal 列表将先出现,详细状态会逐个补齐。 / Connecting to your Workspace. Goals load independently.`})]})})})})]})]})})}function Fw(){let e=MT.useSearch(),t=MT.useNavigate(),[n,r]=(0,R.useState)(`light`),[i,a]=(0,R.useState)(null),o=(0,R.useRef)(null),s=(0,R.useRef)(e.goalId);s.current=e.goalId;let[c,l]=(0,R.useState)(Vp),[u,d]=(0,R.useState)({kind:`example`,label:`bundled example`}),[f,p]=(0,R.useState)(()=>AC(window.localStorage,window.location.href)),m=(0,R.useRef)(f);m.current=f;let[h,g]=(0,R.useState)(e.statusUrl),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)({error:null,phase:`idle`}),[C,w]=(0,R.useState)(e.statusUrl.trim()||null),[T,E]=(0,R.useState)(!1),D=(0,R.useRef)(null),O=(0,R.useRef)(k_(e.statusUrl.trim()||null)),k=!T&&u.kind===`example`?e.statusUrl.trim():``,A=C??k,ee=u.kind===`url`?u.label:BC,j=!!(_&&C),M=LC(f,C,ee,window.location.href),te=u.kind===`example`&&!T,ne=c.attention_queue,N=c.run_history,P=(0,R.useMemo)(()=>UC(N.goals,ne.items),[N.goals,ne.items]);function re(e,t,n=0){S({error:null,phase:`loading`}),VC(Sh(e,`stopped`,window.location.href)).then(r=>{if(!N_(O.current,t))return;let i=r.goal_projection?.registry_revision??null,a=t.registryRevision!==null&&t.registryRevision!==void 0&&i!==null&&t.registryRevision!==i;if(l(e=>nv(e,r)),a&&n<1){F(e,{background:!0,resyncAttempt:n+1});return}S(a?{error:`Goal 状态在加载历史时发生变化,请重试。`,phase:`error`}:{error:null,phase:`ready`})}).catch(e=>{N_(O.current,t)&&S({error:Bp(e),phase:`error`})})}function ie(){let e=u.kind===`url`?u.label:h||BC,t=j_(O.current,e,{background:!0});if(i){F(e);return}t&&re(e,t)}async function ae(e,n,r){if(r.background)return l(e=>nv(e,n)),!0;let i={kind:`url`,label:e};return O.current.loadedUrl=e,l(n),d(i),g(e),await t({search:t=>({...t,statusUrl:e})}),M_(O.current,r)?(O.current.requestedUrl=null,w(null),!0):!1}async function F(e,t={}){let n=e.trim(),r=t.background===!0;if(!n){r||v(`状态地址不能为空`);return}let c=j_(O.current,n,{background:r,selectionRevision:t.selectionRevision});if(!c)return;o.current?.abort();let d=new AbortController;o.current=d,r||(D.current=null,E(!1),w(n),b(!0),v(null),S({error:null,phase:`idle`}));try{let e=await Gp(n,window.location.href).catch(()=>null);if(!N_(O.current,c))return;if(e){let o=(t.retryOnly||t.reuseSnapshots)&&u.kind===`url`&&u.label===n?Up(i,e,{invalidateGoalIds:t.invalidateGoalIds}):{};a({directory:e,snapshots:o,errors:{}});let f={...e,goals:e.goals.filter(e=>!o[e.id])},p=!1,m=Kp(e);if(r)l(m);else if(!await ae(n,m,c))return;if(S({error:null,phase:`loading`}),await Jp(n,window.location.href,f,(e,t,n)=>{n===`revision`&&(p=!0),a(r=>r&&{...r,snapshots:t?{...r.snapshots,[e]:t}:r.snapshots,errors:n?{...r.errors,[e]:n}:r.errors})},()=>N_(O.current,c),()=>s.current,d.signal),p&&(t.resyncAttempt??0)<1&&N_(O.current,c)){await F(n,{resyncAttempt:1});return}N_(O.current,c)&&S({error:null,phase:`ready`});return}let o=await VC(Sh(n,`active`,window.location.href));if(!N_(O.current,c)||(a(null),c.registryRevision=o.goal_projection?.registry_revision??null,!await ae(n,o,c)))return;if(o.goal_projection?.scope!==`active`||o.goal_projection.complete){S({error:null,phase:`ready`});return}re(n,c,t.resyncAttempt??0)}catch(e){if(!M_(O.current,c))return;r||v(Bp(e))}finally{!r&&M_(O.current,c)&&b(!1)}}function oe(e,t={}){o.current?.abort();let n=A_(O.current,e.statusUrl);D.current=null,E(!1),w(e.statusUrl),b(!0),v(null),(async()=>{if(t.ensureTunnel&&e.kind===`ssh_tunnel`){let t=new URL(e.statusUrl,window.location.href).port;if(t)try{await wx(e.label,t)}catch{}}O.current.selectionRevision===n&&await F(e.statusUrl,{selectionRevision:n})})()}function I(e){m.current=e,p(e);try{jC(window.localStorage,e)}catch{}}let se={activeSource:M,connectionState:y?`loading`:j?`error`:`connected`,errorMessage:j?`未切换到 ${C??`所选来源`}:${_}`:null,onAdd:e=>{let t=NC(f,e,window.location.href);return`error`in t?{error:t.error}:(I(t.catalog),oe(t.source,{ensureTunnel:e.ensureTunnel}),{})},onConfiguredHostsLoaded:e=>{let t=m.current,n=MC(t,e);n!==t&&I(n)},onRemove:e=>{I(PC(f,e)),M.id===e&&oe(TC)},onSelect:e=>{let t=f.sources.find(t=>t.id===e);t&&oe(t,{ensureTunnel:t.kind===`ssh_tunnel`})},sources:M.id===`temporary`?[...f.sources,M]:f.sources};(0,R.useEffect)(()=>{let t=e.statusUrl.trim();if(t){if(D.current===t||C&&C!==t)return;(u.kind!==`url`||u.label!==t)&&F(t);return}D.current=null,!T&&(C||u.kind===`example`&&F(BC))},[T,C,e.statusUrl,u.kind,u.label]),(0,R.useEffect)(()=>{if(e.statusUrl&&u.kind===`example`)return;let n=new Set(P.map(e=>e.goal.id));if(P.length===0){e.goalId&&t({search:e=>({...e,goalId:``})});return}e.goalId&&!n.has(e.goalId)&&x.phase!==`loading`&&t({search:e=>({...e,goalId:``})})},[x.phase,P,t,e.goalId,e.statusUrl,u.kind]),(0,R.useEffect)(()=>{if(!i||y||!e.goalId||u.kind!==`url`)return;let t=i.directory.goals.find(t=>t.id===e.goalId);t?.activation_state===`stopped`&&!i.snapshots[t.id]&&!i.errors[t.id]&&F(u.label,{retryOnly:!0})},[e.goalId,y,i,u]);function L(e){t({search:t=>({...t,goalId:e})})}return te?(0,z.jsx)(Pw,{error:_,isLoading:y,onRetry:()=>void F(A||BC),requestedUrl:A||BC,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)}):(0,z.jsx)(Nw,{goalArchiveLoadState:x,isLoading:y,onGoalActivationStateChange:(e,t)=>{O.current.projectionRevision+=1,l(n=>Lp(n,e,t)),a(n=>n&&{...n,snapshots:Object.fromEntries(Object.entries(n.snapshots).map(([n,r])=>[n,Lp(r,e,t)]))})},onGoalDeleted:e=>{O.current.projectionRevision+=1,l(t=>Rp(t,e)),a(t=>t&&{...t,snapshots:Object.fromEntries(Object.entries(t.snapshots).filter(([t])=>t!==e))})},onSelectGoal:L,onReconcileStatus:e=>F(u.kind===`url`?u.label:h||BC,{background:!0,invalidateGoalIds:e?.invalidateGoalIds,reuseSnapshots:!0}),onRetryGoalArchive:ie,onRefresh:()=>F(u.kind===`url`?u.label:h||BC,{retryOnly:!!(i&&Object.keys(i.errors).length)}),payload:c,progress:i,rows:P,selectedGoalId:e.goalId,statusSourceControl:se,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)})}var Iw=sv(`inline-flex items-center gap-1 rounded-md border px-2 py-0.5 text-xs font-medium`,{variants:{variant:{neutral:`border-slate-200 bg-white text-slate-700 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-300`,success:`border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900 dark:bg-emerald-950 dark:text-emerald-200`,warning:`border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-200`,info:`border-sky-200 bg-sky-50 text-sky-800 dark:border-sky-900 dark:bg-sky-950 dark:text-sky-200`,danger:`border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-900 dark:bg-rose-950 dark:text-rose-200`}},defaultVariants:{variant:`neutral`}});function Lw({className:e,variant:t,...n}){return(0,z.jsx)(`span`,{className:Py(Iw({variant:t}),e),...n})}var Rw=[{label:`status payload`,source:`apps/presentation/dashboard/src/data/status.ts`,detail:`status_contract, attention_queue, local_dashboard_api, run_history`},{label:`channel projection`,source:`apps/presentation/dashboard/src/data/goal-channel-frontstage.ts`,detail:`decision_frame, todos, gates, leases, artifacts, truth_contract`},{label:`public showcase catalog`,source:`docs/showcases/showcase-catalog.json`,detail:`case metadata, visual hints, evidence boundaries, story beats`},{label:`route smoke`,source:`apps/presentation/dashboard/smoke/frontstage-route-smoke.ts`,detail:`static route contract, source guards, component expectations`}],zw=[{axis:`schema`,current:`goal_channel_projection_v0`,proposed:`new optional projection field`,gate:`parser default plus route smoke assertion`},{axis:`truth`,current:`event ledger and active state remain source of truth`,proposed:`derived UI state only`,gate:`truth_contract must stay read-only`},{axis:`privacy`,current:`compact source refs and warnings`,proposed:`public-safe fixture field`,gate:`loopx check and browser fake-private fixture`},{axis:`interaction`,current:`render, filter, select, inspect`,proposed:`no browser write by default`,gate:`write affordance requires explicit loopback capability`}],Bw=[{title:`Fixture sources`,body:`Use examples/status.example.json, browser-smoke fixtures, and docs/showcases/showcase-catalog.json.`},{title:`Required proof`,body:`Every projection addition needs parser coverage, route smoke assertions, and one browser or bundle check when UI output changes.`},{title:`Never include`,body:`Raw task text, trajectories, transcripts, local paths, private registry state, credentials, or internal document links.`}],Vw=[`npm --prefix apps/presentation/dashboard run smoke:frontstage-route`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-browser`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-share-bundle`,`npm --prefix apps/presentation/dashboard run build`,`loopx check --scan-path apps/presentation/dashboard --scan-path docs/status-data-contract.md`],Hw=[{name:`Projection lane`,badges:[`read-only`,`schema v0`],body:`Summarizes one compact projection lane without mutating the underlying LoopX state.`},{name:`Capability badge`,badges:[`loopback`,`dry-run`],body:`Shows an advertised local capability only after the status feed declares it.`},{name:`Boundary warning`,badges:[`public-safe`,`omitted`],body:`Names omitted private material and points contributors back to compact source references.`}];function Uw({children:e,icon:t,title:n}){return(0,z.jsxs)(`section`,{className:`rounded-lg border border-slate-200 bg-white shadow-sm`,children:[(0,z.jsx)(`div`,{className:`flex items-center justify-between gap-3 border-b border-slate-200 px-4 py-3`,children:(0,z.jsxs)(`h2`,{className:`flex items-center gap-2 text-sm font-semibold text-slate-950`,children:[(0,z.jsx)(t,{className:`h-4 w-4 text-slate-500`}),n]})}),e]})}function Ww(){return(0,z.jsx)(Uw,{icon:pm,title:`Status Contract Explorer`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-2`,"data-testid":`developer-contract-explorer`,children:Rw.map(e=>(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(Lw,{variant:`info`,children:e.label}),(0,z.jsx)(Lw,{variant:`neutral`,children:`public contract`})]}),(0,z.jsx)(`div`,{className:`mt-2 break-words font-mono text-xs text-slate-700`,children:e.source}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.detail})]},e.label))})})}function Gw(){return(0,z.jsx)(Uw,{icon:Nm,title:`Projection Diffing`,children:(0,z.jsx)(`div`,{className:`overflow-x-auto`,"data-testid":`developer-projection-diffing`,children:(0,z.jsxs)(`table`,{className:`min-w-full border-separate border-spacing-0 text-left text-sm`,children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{className:`bg-slate-50 text-xs uppercase tracking-normal text-slate-500`,children:[(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Axis`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Current`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Proposed`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Gate`})]})}),(0,z.jsx)(`tbody`,{children:zw.map(e=>(0,z.jsxs)(`tr`,{className:`align-top`,children:[(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 font-semibold text-slate-950`,children:e.axis}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.current}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.proposed}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.gate})]},e.axis))})]})})})}function Kw(){return(0,z.jsx)(Uw,{icon:km,title:`Fixture Generation`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-fixture-generation`,children:Bw.map(e=>(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:e.title}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.title))})})}function qw(){return(0,z.jsx)(Uw,{icon:xm,title:`Smoke Checklist`,children:(0,z.jsx)(`div`,{className:`space-y-2 p-4`,"data-testid":`developer-smoke-checklist`,children:Vw.map(e=>(0,z.jsxs)(`div`,{className:`flex items-start gap-3 rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(um,{className:`mt-0.5 h-4 w-4 shrink-0 text-emerald-600`}),(0,z.jsx)(`code`,{className:`break-all text-xs font-semibold leading-5 text-slate-700`,children:e})]},e))})})}function Jw(){return(0,z.jsx)(Uw,{icon:Sm,title:`Component Examples`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-3`,"data-testid":`developer-component-examples`,children:Hw.map(e=>(0,z.jsxs)(`article`,{className:`rounded-md border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.badges.map(e=>(0,z.jsx)(Lw,{variant:e===`read-only`||e===`public-safe`?`success`:`neutral`,children:e},e))}),(0,z.jsx)(`h3`,{className:`mt-3 text-sm font-semibold leading-6 text-slate-950`,children:e.name}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.name))})})}function Yw(){return(0,z.jsx)(`main`,{className:`min-h-screen bg-[#f7f7f4] px-4 py-4 text-slate-950 sm:px-5`,"data-testid":`frontstage-developer-cockpit`,children:(0,z.jsxs)(`div`,{className:`mx-auto grid max-w-[1500px] gap-4 xl:grid-cols-[260px_minmax(0,1fr)]`,children:[(0,z.jsxs)(`aside`,{className:`rounded-lg border border-slate-200 bg-white p-4 shadow-sm xl:sticky xl:top-4 xl:self-start`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-md border border-slate-200 bg-slate-950 text-white`,children:(0,z.jsx)(dh,{className:`h-4 w-4`})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold`,children:`Developer Cockpit`}),(0,z.jsx)(`div`,{className:`text-xs text-slate-500`,children:`Projection extension`})]})]}),(0,z.jsxs)(`div`,{className:`mt-4 grid gap-2`,children:[(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://loopx-project.github.io/loopx/`,children:[(0,z.jsx)(Lm,{className:`h-4 w-4`}),`LoopX home`]}),(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://loopx-project.github.io/loopx/docs/showcases/index.en.html`,children:[(0,z.jsx)(Dm,{className:`h-4 w-4`}),`Public cases`]}),(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md bg-slate-950 px-3 py-2 text-sm font-medium text-white`,href:`/chat/developers/projections/`,children:[(0,z.jsx)(Sm,{className:`h-4 w-4`}),`Developer cockpit`]})]}),(0,z.jsxs)(`div`,{className:`mt-5 space-y-2 rounded-md border border-emerald-200 bg-emerald-50 p-3 text-xs leading-5 text-emerald-950`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,z.jsx)(Lw,{variant:`success`,children:`read-only`}),(0,z.jsx)(Lw,{variant:`neutral`,children:`public fixtures`})]}),(0,z.jsx)(`p`,{children:`This route uses static public contracts only; live status feeds, registry files, and browser write APIs stay outside the cockpit.`})]})]}),(0,z.jsxs)(`section`,{className:`space-y-4`,children:[(0,z.jsx)(`div`,{className:`rounded-lg border border-slate-200 bg-white px-5 py-5 shadow-sm`,children:(0,z.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,z.jsx)(Lw,{variant:`info`,children:`developers/projections`}),(0,z.jsx)(Lw,{variant:`success`,children:`public-safe`}),(0,z.jsx)(Lw,{variant:`neutral`,children:`no browser writes`})]}),(0,z.jsx)(`h1`,{className:`mt-3 text-3xl font-semibold tracking-normal text-slate-950`,children:`LoopX Projection Developer Cockpit`}),(0,z.jsx)(`p`,{className:`mt-2 max-w-3xl text-sm leading-6 text-slate-600`,children:`A read-only contributor workbench for adding dashboard/frontstage projections without reverse-engineering the large operator page.`})]}),(0,z.jsxs)(`div`,{className:`grid min-w-[260px] gap-2 text-sm`,children:[(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Source of truth`}),(0,z.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`status contract + compact fixtures`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Boundary`}),(0,z.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`read-only extension surface`})]})]})]})}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,z.jsx)(Ww,{}),(0,z.jsx)(Gw,{})]}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,z.jsx)(Kw,{}),(0,z.jsx)(qw,{})]}),(0,z.jsx)(Jw,{}),(0,z.jsx)(Uw,{icon:oh,title:`Extension Boundary`,children:(0,z.jsxs)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-extension-boundary`,children:[(0,z.jsxs)(`div`,{className:`rounded-md border border-emerald-200 bg-emerald-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Allowed`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Versioned parser defaults, public fixtures, read-only route panels, and focused smoke assertions.`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-amber-200 bg-amber-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Review`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`New dashboard dependencies, status contract fields, loopback capability display, and browser-visible workflows.`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-rose-200 bg-rose-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Stop`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Credentials, private registry material, raw logs, transcripts, production actions, or default browser write authority.`})]})]})})]})]})})}var Xw=J({value:G().finite(),total:G().finite().positive().optional(),unit:W().optional(),higher_is_better:K()}).passthrough(),Zw=yd(W(),G().finite()).default({}),Qw=J({outcome_status:W().optional(),failure_class:W(),causal_summary:W(),expectedness:W(),implication:W(),next_probe:W(),confidence:W(),evidence_refs:q(W()).optional()}).passthrough(),$w=J({arm_id:W(),selected_run_id:W().nullable(),score_countable:K(),metrics:yd(W(),Xw),effort:Zw,insight:Qw.nullable().optional()}),eT=J({run_id:W(),case_id:W(),arm_id:W(),arm_role:W(),status:W(),protocol_id:W(),runner_revision:W().optional(),observed_at:W(),metrics:yd(W(),Xw),countability:J({integrity_qualified:K(),official_result_present:K(),score_countable:K()}).passthrough(),treatment_fidelity:W(),effort:Zw,redacted_insight:Qw.nullable().optional(),upload_provenance:J({producer_id:W(),producer_version:W(),observed_at:W(),source_revision:W()}).passthrough()}).passthrough(),tT=J({case_denominator:G().int().nonnegative(),value_sum:G().finite(),value_mean:G().finite().nullable(),value_median:G().finite().nullable(),value_min:G().finite().nullable(),value_max:G().finite().nullable(),case_macro_rate:G().finite().optional(),suite_micro_rate:G().finite().optional(),suite_micro_numerator:G().finite().optional(),suite_micro_denominator:G().finite().positive().optional()}).passthrough(),nT=J({arm_id:W(),arm_role:W(),factor_assignments:yd(W(),W()),protocol_counts:yd(W(),G().int().nonnegative()).default({}),runner_revision_counts:yd(W(),G().int().nonnegative()).default({}),orchestrator_runtime_counts:yd(W(),G().int().nonnegative()).default({}),intended_case_count:G().int().positive(),run_count:G().int().nonnegative(),terminal_run_count:G().int().nonnegative(),selected_score_countable_case_count:G().int().nonnegative(),coverage_rate:G().finite().min(0).max(1),metrics:yd(W(),tT),binary_outcomes:yd(W(),J({success_count:G().int().nonnegative(),case_denominator:G().int().nonnegative(),success_rate:G().finite().min(0).max(1).nullable()})),effort:yd(W(),J({denominator:G().int().nonnegative(),mean:G().finite().nullable(),median:G().finite().nullable()})),failure_class_counts:yd(W(),G().int().nonnegative())}).passthrough(),rT=J({baseline_value:G().finite(),candidate_value:G().finite(),delta:G().finite(),direction:Y([`improved`,`flat`,`regressed`]).optional()}).passthrough(),iT=J({comparison_id:W(),comparison_anchor_run_id:W(),candidate_run_id:W(),candidate_arm_id:W(),primary_metric:W(),matched_pair_countable:X(!0),metric_deltas:yd(W(),rT)}).passthrough(),aT=J({ok:X(!0),schema_version:X(`benchmark_study_dashboard_v0`),benchmark_id:W(),study_id:W(),status:Y([`complete`,`provisional`]),design:J({protocol_id:W(),comparison_protocol_id:W(),baseline_arm_id:W(),case_set:J({case_set_id:W(),case_ids:q(W())}),metric_catalog:q(J({metric_name:W(),role:Y([`primary`,`guardrail`,`supporting`]),unit:W().optional(),higher_is_better:K(),binary:K()})),labels:yd(W(),W())}).passthrough(),campaign:J({intended_case_count:G().int().positive(),intended_arm_count:G().int().positive(),intended_cell_denominator:G().int().positive(),selected_score_countable_cell_count:G().int().nonnegative(),selected_score_countable_coverage_rate:G().finite().min(0).max(1),complete_declared_design_case_count:G().int().nonnegative(),ambiguous_score_countable_cell_count:G().int().nonnegative(),in_flight_run_count:G().int().nonnegative(),matched_pair_countable_count:G().int().nonnegative(),factorial_contrast_count:G().int().nonnegative(),factorial_contrast_countable_count:G().int().nonnegative(),runtime_observation_count:G().int().nonnegative(),runtime_classification_counts:yd(W(),G().int().nonnegative())}),arms:q(nT),contrasts:yd(W(),J({matched_pair_denominator:G().int().nonnegative(),primary_metric_directions:J({improved:G().int().nonnegative(),flat:G().int().nonnegative(),regressed:G().int().nonnegative()}),binary_metric_transitions:yd(W(),J({"0_to_1":G().int().nonnegative(),"1_to_0":G().int().nonnegative(),same:G().int().nonnegative()}))})),cases:q(J({case_id:W(),complete_declared_design:K(),arms:q($w),eligible_comparisons:q(iT),largest_eligible_primary_contrast:iT.nullable()})),runs:q(eT),authority:J({score_source:W(),matched_comparison_source:W(),factorial_comparison_source:W().nullable(),manifest_changes_scores:X(!1),dashboard_is_execution_authority:X(!1)}),public_boundary:J({raw_task_recorded:X(!1),raw_trajectory_recorded:X(!1),hidden_evaluation_recorded:X(!1),raw_verifier_output_recorded:X(!1),credentials_recorded:X(!1),local_paths_recorded:X(!1)}),write_performed:X(!1),network_access_performed:X(!1)});function oT(e){return aT.parse(e)}function sT(e,t){let n=new URL(t),r=new URL(e||`/benchmark-study.example.json`,n);if(!new Set([`http:`,`https:`]).has(r.protocol))throw Error(`Benchmark dashboard source must use HTTP or HTTPS`);if(r.origin!==n.origin)throw Error(`Benchmark dashboard source must use same-origin local readback`);return r.toString()}var cT=[{id:`campaign`,label:`Campaign`},{id:`arms`,label:`Arms`},{id:`cases`,label:`Cases`},{id:`runs`,label:`Runs`}];function lT(e){return e==null?`—`:`${(e*100).toFixed(e>=.995?0:1)}%`}function uT(e){return e==null?`—`:new Intl.NumberFormat(`en`,{maximumFractionDigits:2,notation:`compact`}).format(e)}function dT(e){if(e==null)return`—`;let t=e/6e4;return t>=120?`${(t/60).toFixed(1)} h`:`${uT(t)} min`}function fT(e){let t=Object.entries(e);return t.length?t.map(([e,t])=>`${e} (${t})`).join(`, `):`—`}function pT(e){if(!e)return`—`;let t=e.total==null?uT(e.value):`${uT(e.value)}/${uT(e.total)}`;return e.unit?`${t} ${e.unit}`:t}function mT(e,t){let n=e.metrics[t];return!n||n.case_denominator===0?`—`:n.suite_micro_rate==null?`${uT(n.value_mean)} mean`:`${lT(n.suite_micro_rate)} · ${uT(n.suite_micro_numerator)}/${uT(n.suite_micro_denominator)}`}function hT(e,t){let n=e.largest_eligible_primary_contrast,r=n?.metric_deltas[t];if(!n||!r)return null;let i=r.delta>0?`+`:``;return{direction:r.direction,text:`${n.candidate_arm_id}: ${i}${uT(r.delta)}`}}function gT({children:e,tone:t=`neutral`}){return(0,z.jsx)(`span`,{className:`benchmark-state benchmark-state-${t}`,children:e})}function _T({packet:e,primaryMetric:t}){return(0,z.jsxs)(`div`,{className:`benchmark-view-stack`,children:[(0,z.jsxs)(`section`,{"aria-labelledby":`arm-summary-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`ARM SUMMARY`}),(0,z.jsx)(`h2`,{id:`arm-summary-title`,children:`Comparable outcomes, denominator first`})]}),(0,z.jsx)(`p`,{children:`Only one score-countable run per declared case × arm cell is selected.`})]}),(0,z.jsx)(`div`,{className:`benchmark-arm-grid`,children:e.arms.map(e=>{let n=Object.values(e.binary_outcomes)[0];return(0,z.jsxs)(`article`,{className:`benchmark-arm-card`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:e.arm_role}),(0,z.jsx)(`h3`,{children:e.arm_id})]}),(0,z.jsx)(gT,{tone:e.coverage_rate===1?`success`:`warning`,children:e.coverage_rate===1?`Complete`:`Provisional`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[`Primary · `,t]}),(0,z.jsx)(`dd`,{children:mT(e,t)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Score-countable coverage`}),(0,z.jsxs)(`dd`,{children:[e.selected_score_countable_case_count,`/`,e.intended_case_count]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Binary success`}),(0,z.jsx)(`dd`,{children:n?`${n.success_count}/${n.case_denominator}`:`Not declared`})]})]})]},e.arm_id)})})]}),(0,z.jsxs)(`section`,{"aria-labelledby":`contrast-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`MATCHED CONTRASTS`}),(0,z.jsx)(`h2`,{id:`contrast-title`,children:`Direction counts on eligible pairs`})]}),(0,z.jsx)(`p`,{children:`Raw run volume is never used as a comparison denominator.`})]}),(0,z.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Candidate arm`}),(0,z.jsx)(`th`,{children:`Matched denominator`}),(0,z.jsx)(`th`,{children:`Improved`}),(0,z.jsx)(`th`,{children:`Flat`}),(0,z.jsx)(`th`,{children:`Regressed`}),(0,z.jsx)(`th`,{children:`Binary transitions`})]})}),(0,z.jsxs)(`tbody`,{children:[Object.entries(e.contrasts).map(([e,t])=>(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`strong`,{children:e})}),(0,z.jsx)(`td`,{children:t.matched_pair_denominator}),(0,z.jsx)(`td`,{className:`benchmark-positive`,children:t.primary_metric_directions.improved}),(0,z.jsx)(`td`,{children:t.primary_metric_directions.flat}),(0,z.jsx)(`td`,{className:`benchmark-negative`,children:t.primary_metric_directions.regressed}),(0,z.jsx)(`td`,{children:Object.entries(t.binary_metric_transitions).map(([e,t])=>`${e}: 0→1 ${t[`0_to_1`]}, 1→0 ${t[`1_to_0`]}, same ${t.same}`).join(` · `)||`—`})]},e)),Object.keys(e.contrasts).length===0&&(0,z.jsx)(`tr`,{children:(0,z.jsx)(`td`,{colSpan:6,children:`No matched comparisons are countable yet.`})})]})]})})]}),(0,z.jsxs)(`section`,{"aria-labelledby":`runtime-health-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`RUNTIME HEALTH`}),(0,z.jsx)(`h2`,{id:`runtime-health-title`,children:`Qualified observations, without execution authority`})]}),(0,z.jsxs)(`p`,{children:[e.campaign.runtime_observation_count,` public-safe runtime observations.`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-runtime-list`,children:[Object.entries(e.campaign.runtime_classification_counts).map(([e,t])=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{children:e}),(0,z.jsx)(`strong`,{children:t})]},e)),e.campaign.runtime_observation_count===0&&(0,z.jsx)(`p`,{className:`benchmark-muted`,children:`No runtime observations uploaded.`})]})]})]})}function vT({packet:e}){return(0,z.jsx)(`div`,{className:`benchmark-detail-grid`,children:e.arms.map(t=>(0,z.jsxs)(`article`,{className:`benchmark-detail-card`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:t.arm_role}),(0,z.jsx)(`h2`,{children:t.arm_id})]}),(0,z.jsxs)(gT,{tone:t.coverage_rate===1?`success`:`warning`,children:[t.selected_score_countable_case_count,`/`,t.intended_case_count,` countable`]})]}),(0,z.jsx)(`div`,{className:`benchmark-factor-row`,children:Object.entries(t.factor_assignments).map(([e,t])=>(0,z.jsxs)(`span`,{children:[e,`: `,(0,z.jsx)(`strong`,{children:t})]},e))}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[e.design.metric_catalog.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[e.role,` · `,e.metric_name]}),(0,z.jsx)(`dd`,{children:mT(t,e.metric_name)})]},e.metric_name)),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runs terminal / observed`}),(0,z.jsxs)(`dd`,{children:[t.terminal_run_count,`/`,t.run_count]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Median duration`}),(0,z.jsx)(`dd`,{children:dT(t.effort.duration_ms?.median)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocols`}),(0,z.jsx)(`dd`,{children:fT(t.protocol_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revisions`}),(0,z.jsx)(`dd`,{children:fT(t.runner_revision_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Orchestrator runtimes`}),(0,z.jsxs)(`dd`,{children:[Object.keys(t.orchestrator_runtime_counts).length||0,` distinct`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Failure classes`}),(0,z.jsx)(`dd`,{children:fT(t.failure_class_counts)})]})]})]},t.arm_id))})}function yT({packet:e,primaryMetric:t,onOpenRun:n}){return(0,z.jsx)(`div`,{className:`benchmark-table-shell benchmark-wide-table`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Case`}),(0,z.jsx)(`th`,{children:`Design status`}),(0,z.jsx)(`th`,{children:`Largest eligible delta`}),e.arms.map(e=>(0,z.jsx)(`th`,{children:e.arm_id},e.arm_id))]})}),(0,z.jsx)(`tbody`,{children:e.cases.map(r=>{let i=hT(r,t);return(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`strong`,{children:r.case_id})}),(0,z.jsx)(`td`,{children:(0,z.jsx)(gT,{tone:r.complete_declared_design?`success`:`warning`,children:r.complete_declared_design?`Complete`:`Provisional`})}),(0,z.jsx)(`td`,{className:i?.direction===`improved`?`benchmark-positive`:i?.direction===`regressed`?`benchmark-negative`:void 0,children:i?.text??`—`}),r.arms.map(r=>(0,z.jsx)(`td`,{children:r.selected_run_id&&r.score_countable?(0,z.jsxs)(`button`,{className:`benchmark-cell-link`,onClick:()=>n(r.selected_run_id),type:`button`,children:[(0,z.jsxs)(`span`,{children:[t,`: `,pT(r.metrics[t])]}),e.design.metric_catalog.filter(e=>e.metric_name!==t).map(e=>(0,z.jsxs)(`small`,{className:`benchmark-cell-metric`,children:[e.metric_name,`: `,pT(r.metrics[e.metric_name])]},e.metric_name)),(0,z.jsxs)(`small`,{children:[`Countable · `,dT(r.effort.duration_ms),` `,(0,z.jsx)(sm,{"aria-hidden":`true`,size:12})]}),r.insight&&(0,z.jsxs)(`small`,{children:[r.insight.failure_class,` · `,r.insight.confidence]})]}):(0,z.jsx)(`span`,{className:`benchmark-muted`,children:`Not countable`})},r.arm_id))]},r.case_id)})})]})})}function bT({run:e,packet:t}){return(0,z.jsxs)(`aside`,{"aria-label":`Run detail for ${e.run_id}`,className:`benchmark-run-detail`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:`RUN DETAIL`}),(0,z.jsx)(`h2`,{children:e.run_id})]}),(0,z.jsx)(gT,{tone:e.countability.score_countable?`success`:`warning`,children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list benchmark-run-facts`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Case / arm`}),(0,z.jsxs)(`dd`,{children:[e.case_id,` · `,e.arm_id]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Lifecycle`}),(0,z.jsxs)(`dd`,{children:[e.status,` · `,e.observed_at]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocol`}),(0,z.jsx)(`dd`,{children:e.protocol_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Qualification`}),(0,z.jsxs)(`dd`,{children:[`Integrity `,e.countability.integrity_qualified?`qualified`:`not qualified`,` · result `,e.countability.official_result_present?`present`:`missing`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Treatment fidelity`}),(0,z.jsx)(`dd`,{children:e.treatment_fidelity})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Effort`}),(0,z.jsxs)(`dd`,{children:[dT(e.effort.duration_ms),` · `,uT(e.effort.agent_steps),` steps · `,uT(e.effort.token_count),` tokens`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revision`}),(0,z.jsx)(`dd`,{children:e.runner_revision??`—`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Upload provenance`}),(0,z.jsxs)(`dd`,{children:[e.upload_provenance.producer_id,` · `,e.upload_provenance.source_revision]})]})]}),(0,z.jsx)(`div`,{className:`benchmark-run-metrics`,children:t.design.metric_catalog.map(t=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{children:t.metric_name}),(0,z.jsx)(`strong`,{children:pT(e.metrics[t.metric_name])})]},t.metric_name))}),e.redacted_insight&&(0,z.jsxs)(`div`,{className:`benchmark-insight`,children:[(0,z.jsxs)(`span`,{className:`benchmark-mono`,children:[`REDACTED CASE INSIGHT · `,e.redacted_insight.confidence]}),(0,z.jsx)(`p`,{children:e.redacted_insight.causal_summary}),(0,z.jsxs)(`small`,{children:[`Implication: `,e.redacted_insight.implication]}),(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[`Next probe: `,e.redacted_insight.next_probe]}),!!e.redacted_insight.evidence_refs?.length&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[`Evidence: `,e.redacted_insight.evidence_refs.join(`, `)]})]})]})]})}function xT({packet:e,selectedRunId:t,onSelectRun:n}){let r=e.runs.find(e=>e.run_id===t)??e.runs[0];return(0,z.jsxs)(`div`,{className:`benchmark-runs-layout`,children:[(0,z.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Run`}),(0,z.jsx)(`th`,{children:`Case`}),(0,z.jsx)(`th`,{children:`Arm`}),(0,z.jsx)(`th`,{children:`Status`}),(0,z.jsx)(`th`,{children:`Countability`})]})}),(0,z.jsx)(`tbody`,{children:e.runs.map(e=>(0,z.jsxs)(`tr`,{"aria-selected":e.run_id===r?.run_id,children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`button`,{className:`benchmark-run-link`,onClick:()=>n(e.run_id),type:`button`,children:e.run_id})}),(0,z.jsx)(`td`,{children:e.case_id}),(0,z.jsx)(`td`,{children:e.arm_id}),(0,z.jsx)(`td`,{children:e.status}),(0,z.jsx)(`td`,{children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]},e.run_id))})]})}),r&&(0,z.jsx)(bT,{packet:e,run:r})]})}function ST(){let e=LT.useSearch(),t=LT.useNavigate(),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(null),[o,s]=(0,R.useState)(0),c=(0,R.useMemo)(()=>{let t=e.dashboardUrl||`/chat/benchmark-study.example.json`;try{return{url:sT(t,window.location.href),error:null}}catch(e){return{url:``,error:e instanceof Error?e.message:`Invalid dashboard source`}}},[e.dashboardUrl]);if((0,R.useEffect)(()=>{let e=!0;return r(null),a(null),c.error?(a(c.error),()=>{e=!1}):(fetch(c.url,{cache:`no-store`}).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status} while loading the dashboard packet`);return oT(await e.json())}).then(t=>{e&&r(t)}).catch(t=>{e&&a(t instanceof Error?t.message:`Unable to load dashboard packet`)}),()=>{e=!1})},[o,c]),(0,R.useEffect)(()=>{n&&(document.title=`${n.design.labels.title??n.study_id} · LoopX Benchmark`)},[n]),i)return(0,z.jsxs)(`main`,{className:`benchmark-page benchmark-loading`,children:[(0,z.jsx)(ym,{"aria-hidden":`true`}),(0,z.jsx)(`h1`,{children:`Dashboard packet unavailable`}),(0,z.jsx)(`p`,{children:i}),(0,z.jsxs)(`button`,{onClick:()=>s(e=>e+1),type:`button`,children:[(0,z.jsx)(Qm,{"aria-hidden":`true`,size:16}),` Retry readback`]})]});if(!n)return(0,z.jsxs)(`main`,{"aria-busy":`true`,className:`benchmark-page benchmark-loading`,children:[(0,z.jsx)(im,{"aria-hidden":`true`}),(0,z.jsx)(`h1`,{children:`Reading benchmark study`}),(0,z.jsx)(`p`,{children:`Validating the public-safe dashboard packet…`})]});let l=n.design.metric_catalog.find(e=>e.role===`primary`)?.metric_name??`primary`,u=(n,r=e.runId)=>t({search:e=>({...e,view:n,runId:r})}),d=new URL(c.url).pathname;return(0,z.jsxs)(`main`,{className:`benchmark-page`,children:[(0,z.jsxs)(`header`,{className:`benchmark-hero`,children:[(0,z.jsxs)(`div`,{className:`benchmark-hero-topline`,children:[(0,z.jsx)(`a`,{className:`benchmark-wordmark`,href:`/chat/`,children:`LoopX`}),(0,z.jsxs)(`div`,{className:`benchmark-readonly`,children:[(0,z.jsx)(oh,{"aria-hidden":`true`,size:15}),` Derived read-only projection`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-hero-grid`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`p`,{className:`benchmark-kicker`,children:[`BENCHMARK STUDY / `,n.benchmark_id]}),(0,z.jsxs)(`div`,{className:`benchmark-title-row`,children:[(0,z.jsx)(`h1`,{children:n.design.labels.title??n.study_id}),(0,z.jsx)(gT,{tone:n.status===`complete`?`success`:`warning`,children:n.status})]}),(0,z.jsx)(`p`,{className:`benchmark-lead`,children:`One declared study, explicit denominators, and the same countability rules from campaign summary to exact run.`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-identity`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Study`}),(0,z.jsx)(`dd`,{children:n.study_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocol`}),(0,z.jsx)(`dd`,{children:n.design.protocol_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Case set`}),(0,z.jsx)(`dd`,{children:n.design.case_set.case_set_id})]})]})]}),(0,z.jsxs)(`div`,{className:`benchmark-kpi-grid`,children:[(0,z.jsxs)(`article`,{children:[(0,z.jsx)(wm,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Score-countable cells`}),(0,z.jsxs)(`strong`,{children:[n.campaign.selected_score_countable_cell_count,(0,z.jsxs)(`small`,{children:[` / `,n.campaign.intended_cell_denominator]})]}),(0,z.jsxs)(`p`,{children:[lT(n.campaign.selected_score_countable_coverage_rate),` declared coverage`]})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(bm,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Complete designs`}),(0,z.jsxs)(`strong`,{children:[n.campaign.complete_declared_design_case_count,(0,z.jsxs)(`small`,{children:[` / `,n.campaign.intended_case_count]})]}),(0,z.jsx)(`p`,{children:`Cases with every declared arm`})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(sm,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Matched comparisons`}),(0,z.jsx)(`strong`,{children:n.campaign.matched_pair_countable_count}),(0,z.jsx)(`p`,{children:`Eligible pairs only`})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(im,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`In flight`}),(0,z.jsx)(`strong`,{children:n.campaign.in_flight_run_count}),(0,z.jsx)(`p`,{children:n.status===`provisional`?`Coverage remains provisional`:`Declared coverage complete`})]})]})]}),(0,z.jsxs)(`nav`,{"aria-label":`Benchmark dashboard views`,className:`benchmark-tabs`,children:[cT.map(t=>(0,z.jsx)(`button`,{"aria-current":e.view===t.id?`page`:void 0,onClick:()=>u(t.id),type:`button`,children:t.label},t.id)),(0,z.jsxs)(`button`,{className:`benchmark-refresh`,onClick:()=>s(e=>e+1),type:`button`,children:[(0,z.jsx)(Qm,{"aria-hidden":`true`,size:14}),` Refresh local readback`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-content`,children:[e.view===`campaign`&&(0,z.jsx)(_T,{packet:n,primaryMetric:l}),e.view===`arms`&&(0,z.jsx)(vT,{packet:n}),e.view===`cases`&&(0,z.jsx)(yT,{onOpenRun:e=>u(`runs`,e),packet:n,primaryMetric:l}),e.view===`runs`&&(0,z.jsx)(xT,{onSelectRun:e=>u(`runs`,e),packet:n,selectedRunId:e.runId})]}),(0,z.jsxs)(`footer`,{className:`benchmark-footer`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(oh,{"aria-hidden":`true`,size:16}),(0,z.jsxs)(`span`,{children:[`Scores: `,n.authority.score_source]}),(0,z.jsx)(`span`,{children:`Dashboard cannot launch, grade, or mutate runs.`})]}),(0,z.jsxs)(`code`,{title:d,children:[`local`,d]})]})]})}var CT=J({goalId:W().optional().default(``),statusUrl:W().optional().default(``)}),wT=J({goalId:W().optional().default(``),mode:Y([`showcase`,`developer`,`ops`]).optional().default(`showcase`),statusUrl:W().optional().default(``),todoLane:Y([`all`,`user`,`agent`]).optional().default(`all`),todoQuery:W().optional().default(``)}),TT=wT.omit({mode:!0}),ET=J({dashboardUrl:W().optional().default(``),view:Y([`campaign`,`arms`,`cases`,`runs`]).optional().default(`campaign`),runId:W().optional().default(``)});function DT(){let e=`https://loopx-project.github.io/loopx/docs/showcases/index.en.html`;return(0,R.useEffect)(()=>{window.location.replace(e)},[]),(0,z.jsx)(`a`,{href:e,children:`Open LoopX cases / 浏览案例`})}function OT({goalId:e,statusUrl:t}){let n=t?bh(t,window.location.href):null;return n?.error?(0,z.jsx)(`main`,{role:`alert`,children:n.error}):(0,z.jsx)(ii,{replace:!0,to:`/`,search:{goalId:e,statusUrl:t}})}function kT(){let e=NT.useSearch();return e.mode===`ops`?(0,z.jsx)(OT,{...e}):e.mode===`developer`?(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`}):(0,z.jsx)(DT,{})}function AT(){return(0,z.jsx)(OT,{...PT.useSearch()})}var jT=Ci({component:()=>(0,z.jsx)(Mi,{}),errorComponent:()=>(0,z.jsxs)(`main`,{role:`alert`,className:`p-8`,children:[(0,z.jsx)(`h1`,{children:`页面暂时无法显示 / Page unavailable`}),(0,z.jsx)(`p`,{children:`请重新加载页面;这不会执行任务。 / Reloading does not execute tasks.`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>window.location.reload(),children:`重新加载 / Reload`})]})}),MT=xi({getParentRoute:()=>jT,path:`/`,validateSearch:e=>CT.parse(e),component:Fw}),NT=xi({getParentRoute:()=>jT,path:`/frontstage`,validateSearch:e=>wT.parse(e),component:kT}),PT=xi({getParentRoute:()=>jT,path:`/deprecated/frontstage/ops`,validateSearch:e=>TT.parse(e),component:AT}),FT=xi({getParentRoute:()=>jT,path:`/frontstage/developer`,component:()=>(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`})}),IT=xi({getParentRoute:()=>jT,path:`/developers/projections`,component:Yw}),LT=xi({getParentRoute:()=>jT,path:`/benchmarks/study`,validateSearch:e=>ET.parse(e),component:ST}),RT=jT.addChildren([MT,NT,PT,FT,IT,LT]);function zT(e){return!e||e===`/`||e===`./`?`/`:(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}var BT=Li({routeTree:RT,basepath:zT(`/chat/`),trailingSlash:`preserve`}),VT=document.getElementById(`root`);if(!VT)throw Error(`Root element not found`);var HT=new je({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1,staleTime:1e4}}});(0,Vi.createRoot)(VT).render((0,z.jsx)(Fe,{client:HT,children:(0,z.jsx)(qi,{children:(0,z.jsx)(Bi,{router:BT})})})); \ No newline at end of file diff --git a/loopx/web/chat/assets/index-CFEaAATG.js b/loopx/web/chat/assets/index-CFEaAATG.js deleted file mode 100644 index 14b088ac03..0000000000 --- a/loopx/web/chat/assets/index-CFEaAATG.js +++ /dev/null @@ -1,141 +0,0 @@ -var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(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},c=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));(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),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l=o((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&&ee(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&&ee(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}}}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 ee(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,ee(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}}}})),u=o(((e,t)=>{t.exports=l()})),d=o((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 ee(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function j(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 M(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,M(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ee(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),M(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=d()})),p=o((e=>{var t=f();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=p()})),h=o((e=>{var t=u(),n=f(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1ae||(e.current=ie[ae],ie[ae]=null,ae--)}function I(e,t){ae++,ie[ae]=e.current,e.current=t}var se=F(null),L=F(null),ce=F(null),le=F(null);function ue(e,t){switch(I(ce,t),I(L,e),I(se,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Wd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Wd(t),e=Gd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}oe(se),I(se,e)}function de(){oe(se),oe(L),oe(ce)}function fe(e){e.memoizedState!==null&&I(le,e);var t=se.current,n=Gd(t,e.type);t!==n&&(I(L,e),I(se,n))}function pe(e){L.current===e&&(oe(se),oe(L)),le.current===e&&(oe(le),tp._currentValue=re)}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,R=t.unstable_setDisableYieldValue,z=null,Pe=null;function Fe(e){if(typeof Ne==`function`&&R(e),Pe&&typeof Pe.setStrictMode==`function`)try{Pe.setStrictMode(z,e)}catch{}}var Ie=Math.clz32?Math.clz32:B,Le=Math.log,Re=Math.LN2;function B(e){return e>>>=0,e===0?32:31-(Le(e)/Re|0)|0}var ze=256,Be=262144,Ve=4194304;function He(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 Ue(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=He(n))):i=He(o):i=He(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=He(n))):i=He(o)):i=He(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 We(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Ge(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 Ke(){var e=Ve;return Ve<<=1,!(Ve&62914560)&&(Ve=4194304),e}function qe(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function V(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Je(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),sn=!1;if(on)try{var cn={};Object.defineProperty(cn,"passive",{get:function(){sn=!0}}),window.addEventListener(`test`,cn,cn),window.removeEventListener(`test`,cn,cn)}catch{sn=!1}var ln=null,un=null,dn=null;function fn(){if(dn)return dn;var e,t=un,n=t.length,r,i=`value`in ln?ln.value:ln.textContent,a=i.length;for(e=0;e=Wn),qn=` `,Jn=!1;function Yn(e,t){switch(e){case`keyup`:return Hn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function Xn(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var Zn=!1;function Qn(e,t){switch(e){case`compositionend`:return Xn(t);case`keypress`:return t.which===32?(Jn=!0,qn):null;case`textInput`:return e=t.data,e===qn&&Jn?null:e;default:return null}}function $n(e,t){if(Zn)return e===`compositionend`||!Un&&Yn(e,t)?(e=fn(),dn=un=ln=null,Zn=!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=xr(n)}}function Cr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Cr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function wr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Nt(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=Nt(e.document)}return t}function Tr(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 Er=on&&`documentMode`in document&&11>=document.documentMode,Dr=null,Or=null,kr=null,Ar=!1;function jr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ar||Dr==null||Dr!==Nt(r)||(r=Dr,`selectionStart`in r&&Tr(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}),kr&&br(kr,r)||(kr=r,r=Od(Or,`onSelect`),0>=o,i-=o,Ci=1<<32-Ie(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),Mi&&Ti(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),Mi&&Ti(a,g),u;if(h===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 Mi&&Ti(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),Mi&&Ti(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){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===O&&wa(l)===r.type){n(e,r.sibling),c=a(r,o.props),ja(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===y?(c=ui(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=li(o.type,o.key,o.props,null,e.mode,c),ja(c,o),c.return=e,e=c)}return s(e);case v: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}n(e,r);break}t(e,r),r=r.sibling}c=pi(o,e.mode,c),c.return=e,e=c}return s(e);case O:return o=wa(o),b(e,r,o,c)}if(ne(o))return h(e,r,o,c);if(j(o)){if(l=j(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Aa(o),c);if(o.$$typeof===C)return b(e,r,$i(e,o),c);Ma(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=di(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{ka=0;var i=b(e,t,n,r);return Oa=null,i}catch(t){if(t===ya||t===xa)throw t;var a=ai(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Pa=Na(!0),Fa=Na(!1),Ia=!1;function La(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ra(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 za(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ba(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Vl&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=ni(e),ti(e,null,n),t}return Qr(e,r,t,n),ni(e)}function Va(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,Xe(e,n)}}function Ha(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 Ua=!1;function Wa(){if(Ua){var e=ua;if(e!==null)throw e}}function Ga(e,t,n,r){Ua=!1;var i=e.updateQueue;Ia=!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 f=s.lane&-536870913,p=f!==s.lane;if(p?(Wl&f)===f:(r&f)===f){f!==0&&f===la&&(Ua=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(m=g.payload,typeof m==`function`){d=m.call(_,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=g.payload,f=typeof m==`function`?m.call(_,d,f):m,f==null)break a;d=h({},d,f);break a;case 2:Ia=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,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),Ql|=o,e.lanes=o,e.memoizedState=d}}function Ka(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function qa(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=N.T,s={};N.T=s,Ps(e,!1,t,n);try{var c=i(),l=N.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ns(e,t,pa(c,r),bu(e)):Ns(e,t,r,bu(e))}catch(n){Ns(e,t,{then:function(){},status:`rejected`,reason:n},bu())}finally{P.p=a,o!==null&&s.types!==null&&(o.types=s.types),N.T=o}}function Cs(){}function ws(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Ts(e).queue;Ss(e,a,t,re,n===null?Cs:function(){return Es(e),n(r)})}function Ts(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:re,baseState:re,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fo,lastRenderedState:re},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fo,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Es(e){var t=Ts(e);t.next===null&&(t=e.alternate.memoizedState),Ns(e,t.next.queue,{},bu())}function Ds(){return H(tp)}function Os(){return Ao().memoizedState}function ks(){return Ao().memoizedState}function As(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=bu();e=za(n);var r=Ba(t,e,n);r!==null&&(Su(r,t,n),Va(r,t,n)),t={cache:aa()},e.payload=t;return}t=t.return}}function js(e,t,n){var r=bu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Fs(e)?Is(t,n):(n=$r(e,t,n,r),n!==null&&(Su(n,e,r),Ls(n,t,r)))}function Ms(e,t,n){Ns(e,t,n,bu())}function Ns(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fs(e))Is(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,yr(s,o))return Qr(e,t,i,0),Hl===null&&Zr(),!1}catch{}if(n=$r(e,t,i,r),n!==null)return Su(n,e,r),Ls(n,t,r),!0}return!1}function Ps(e,t,n,r){if(r={lane:2,revertLane:md(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Fs(e)){if(t)throw Error(i(479))}else t=$r(e,n,r,2),t!==null&&Su(t,e,2)}function Fs(e){var t=e.alternate;return e===lo||t!==null&&t===lo}function Is(e,t){mo=po=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ls(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Xe(e,n)}}var Rs={readContext:H,use:No,useCallback:bo,useContext:bo,useEffect:bo,useImperativeHandle:bo,useLayoutEffect:bo,useInsertionEffect:bo,useMemo:bo,useReducer:bo,useRef:bo,useState:bo,useDebugValue:bo,useDeferredValue:bo,useTransition:bo,useSyncExternalStore:bo,useId:bo,useHostTransitionStatus:bo,useFormState:bo,useActionState:bo,useOptimistic:bo,useMemoCache:bo,useCacheRefresh:bo};Rs.useEffectEvent=bo;var zs={readContext:H,use:No,useCallback:function(e,t){return ko().memoizedState=[e,t===void 0?null:t],e},useContext:H,useEffect:ls,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),ss(4194308,4,hs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ss(4194308,4,e,t)},useInsertionEffect:function(e,t){ss(4,2,e,t)},useMemo:function(e,t){var n=ko();t=t===void 0?null:t;var r=e();if(ho){Fe(!0);try{e()}finally{Fe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=ko();if(n!==void 0){var i=n(t);if(ho){Fe(!0);try{n(t)}finally{Fe(!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=js.bind(null,lo,e),[r.memoizedState,e]},useRef:function(e){var t=ko();return e={current:e},t.memoizedState=e},useState:function(e){e=Go(e);var t=e.queue,n=Ms.bind(null,lo,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:_s,useDeferredValue:function(e,t){return bs(ko(),e,t)},useTransition:function(){var e=Go(!1);return e=Ss.bind(null,lo,e.queue,!0,!1),ko().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=lo,a=ko();if(Mi){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Hl===null)throw Error(i(349));Wl&127||Bo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,ls(Ho.bind(null,r,o,e),[e]),r.flags|=2048,as(9,{destroy:void 0},Vo.bind(null,r,o,n,t),null),n},useId:function(){var e=ko(),t=Hl.identifierPrefix;if(Mi){var n=wi,r=Ci;n=(r&~(1<<32-Ie(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=go++,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[rt]=t,o[it]=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(Ld(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&&Nc(t)}}return Rc(t),Pc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Nc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=ce.current,zi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Ai,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[rt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Pd(e.nodeValue,n)),e||Ii(t,!0)}else e=Ud(e).createTextNode(r),e[rt]=t,t.stateNode=e}return Rc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=zi(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[rt]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),e=!1}else n=Vi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(ao(t),t):(ao(t),null);if(t.flags&128)throw Error(i(558))}return Rc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=zi(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[rt]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),a=!1}else a=Vi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(ao(t),t):(ao(t),null)}return ao(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),Ic(t,t.updateQueue),Rc(t),null);case 4:return de(),e===null&&wd(t.stateNode.containerInfo),Rc(t),null;case 10:return qi(t.type),Rc(t),null;case 19:if(oe(oo),r=t.memoizedState,r===null)return Rc(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null){if(a)Lc(r,!1);else{if(Zl!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=so(e),o!==null){for(t.flags|=128,Lc(r,!1),e=o.updateQueue,t.updateQueue=e,Ic(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)ci(n,e),n=n.sibling;return I(oo,oo.current&1|2),Mi&&Ti(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ee()>cu&&(t.flags|=128,a=!0,Lc(r,!1),t.lanes=4194304)}}else{if(!a){if(e=so(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Ic(t,e),Lc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!Mi)return Rc(t),null}else 2*Ee()-r.renderingStartTime>cu&&n!==536870912&&(t.flags|=128,a=!0,Lc(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?(Rc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ee(),e.sibling=null,n=oo.current,I(oo,a?n&1|2:n&1),Mi&&Ti(t,r.treeForkCount),e);case 22:case 23:return ao(t),Qa(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Rc(t),t.subtreeFlags&6&&(t.flags|=8192)):Rc(t),n=t.updateQueue,n!==null&&Ic(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&&oe(ha),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),qi(ia),Rc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Oi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return qi(ia),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(ao(t),t.alternate===null)throw Error(i(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(ao(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return oe(oo),null;case 4:return de(),null;case 10:return qi(t.type),null;case 22:case 23:return ao(t),Qa(),e!==null&&oe(ha),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return qi(ia),null;case 25:return null;default:return null}}function Vc(e,t){switch(Oi(t),t.tag){case 3:qi(ia),de();break;case 26:case 27:case 5:pe(t);break;case 4:de();break;case 31:t.memoizedState!==null&&ao(t);break;case 13:ao(t);break;case 19:oe(oo);break;case 10:qi(t.type);break;case 22:case 23:ao(t),Qa(),e!==null&&oe(ha);break;case 24:qi(ia)}}function Hc(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){Zu(t,t.return,e)}}function Uc(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){Zu(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Zu(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{qa(t,n)}catch(t){Zu(e,e.return,t)}}}function Gc(e,t,n){n.props=Ks(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Zu(e,t,n)}}function Kc(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){Zu(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Zu(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){Zu(e,t,n)}else n.current=null}}function Jc(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){Zu(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Rd(r,e.type,n,t),r[it]=t}catch(t){Zu(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&ef(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(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&&ef(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 Qc(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=Xt));else if(r!==4&&(r===27&&ef(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(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&&ef(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Ld(t,r,n),t[rt]=e,t[it]=n}catch(t){Zu(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Vd=up,e=wr(e),Tr(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(Hd={focusedElem:e,selectionRange:n},up=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,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`))),Ld(o,r,n),o[rt]=e,gt(o),r=o;break a;case`link`:var s=Wf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=Sr(s,h),v=Sr(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,N.T=null,n=gu,gu=null;var o=fu,s=mu;if(du=0,pu=fu=null,mu=0,Vl&6)throw Error(i(331));var c=Vl;if(Vl|=4,Il(o.current),Ol(o,o.current,s,n),Vl=c,q(0,!1),Pe&&typeof Pe.onPostCommitFiberRoot==`function`)try{Pe.onPostCommitFiberRoot(z,o)}catch{}return!0}finally{P.p=a,N.T=r,qu(e,t)}}function Xu(e,t,n){t=hi(n,t),t=Qs(e.stateNode,t,2),e=Ba(e,t,2),e!==null&&(V(e,2),cd(e))}function Zu(e,t,n){if(e.tag===3)Xu(e,e,n);else for(;t!==null;){if(t.tag===3){Xu(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(uu===null||!uu.has(r))){e=hi(n,e),n=$s(2),r=Ba(t,n,2),r!==null&&(ec(n,r,t,e),V(r,2),cd(r));break}}t=t.return}}function Qu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Bl;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)||(Yl=!0,i.add(n),e=G.bind(null,e,t,n),t.then(e,e))}function G(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Hl===e&&(Wl&n)===n&&(Zl===4||Zl===3&&(Wl&62914560)===Wl&&300>Ee()-ou?!(Vl&2)&&ku(e,0):eu|=n,nu===Wl&&(nu=0)),cd(e)}function $u(e,t){t===0&&(t=Ke()),e=ei(e,t),e!==null&&(V(e,t),cd(e))}function ed(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),$u(e,n)}function td(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),$u(e,n)}function K(e,t){return Se(e,t)}var nd=null,rd=null,id=!1,ad=!1,od=!1,sd=0;function cd(e){e!==rd&&e.next===null&&(rd===null?nd=rd=e:rd=rd.next=e),ad=!0,id||(id=!0,pd())}function q(e,t){if(!od&&ad){od=!0;do for(var n=!1,r=nd;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-Ie(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,fd(r,a))}else a=Wl,a=Ue(r,r===Hl?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||We(r,a)||(n=!0,fd(r,a))}r=r.next}while(n);od=!1}}function ld(){J()}function J(){ad=id=!1;var e=0;sd!==0&&Jd()&&(e=sd);for(var t=Ee(),n=null,r=nd;r!==null;){var i=r.next,a=ud(r,t);a===0?(r.next=null,n===null?nd=i:n.next=i,i===null&&(rd=n)):(n=r,(e!==0||a&3)&&(ad=!0)),r=i}du!==0&&du!==5||q(e,!1),sd!==0&&(sd=0)}function ud(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&&zd(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function wf(e,t,n){var r=Cf;if(r&&typeof t==`string`&&t){var i=Ft(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),vf.has(i)||(vf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Ld(t,`link`,e),gt(t),r.head.appendChild(t)))}}function Tf(e){bf.D(e),wf(`dns-prefetch`,e,null)}function Ef(e,t){bf.C(e,t),wf(`preconnect`,e,t)}function Df(e,t,n){bf.L(e,t,n);var r=Cf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Ft(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Ft(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Ft(n.imageSizes)+`"]`)):i+=`[href="`+Ft(e)+`"]`;var a=i;switch(t){case`style`:a=Nf(e);break;case`script`:a=Lf(e)}_f.has(a)||(e=h({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),_f.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Pf(a))||t===`script`&&r.querySelector(Rf(a))||(t=r.createElement(`link`),Ld(t,`link`,e),gt(t),r.head.appendChild(t)))}}function Of(e,t){bf.m(e,t);var n=Cf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Ft(r)+`"][href="`+Ft(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Lf(e)}if(!_f.has(a)&&(e=h({rel:`modulepreload`,href:e},t),_f.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Rf(a)))return}r=n.createElement(`link`),Ld(r,`link`,e),gt(r),n.head.appendChild(r)}}}function kf(e,t,n){bf.S(e,t,n);var r=Cf;if(r&&e){var i=ht(r).hoistableStyles,a=Nf(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Pf(a)))s.loading=5;else{e=h({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=_f.get(a))&&Vf(e,n);var c=o=r.createElement(`link`);gt(c),Ld(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,Bf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Af(e,t){bf.X(e,t);var n=Cf;if(n&&e){var r=ht(n).hoistableScripts,i=Lf(e),a=r.get(i);a||(a=n.querySelector(Rf(i)),a||(e=h({src:e,async:!0},t),(t=_f.get(i))&&Hf(e,t),a=n.createElement(`script`),gt(a),Ld(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function jf(e,t){bf.M(e,t);var n=Cf;if(n&&e){var r=ht(n).hoistableScripts,i=Lf(e),a=r.get(i);a||(a=n.querySelector(Rf(i)),a||(e=h({src:e,async:!0,type:`module`},t),(t=_f.get(i))&&Hf(e,t),a=n.createElement(`script`),gt(a),Ld(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mf(e,t,n,r){var a=(a=ce.current)?yf(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=Nf(n.href),n=ht(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=Nf(n.href);var o=ht(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(Pf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),_f.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},_f.set(e,n),o||If(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=Lf(n),n=ht(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 Nf(e){return`href="`+Ft(e)+`"`}function Pf(e){return`link[rel="stylesheet"][`+e+`]`}function Ff(e){return h({},e,{"data-precedence":e.precedence,precedence:null})}function If(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}),Ld(t,`link`,n),gt(t),e.head.appendChild(t))}function Lf(e){return`[src="`+Ft(e)+`"]`}function Rf(e){return`script[async]`+e}function zf(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Ft(n.href)+`"]`);if(r)return t.instance=r,gt(r),r;var a=h({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),gt(r),Ld(r,`style`,a),Bf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Nf(n.href);var o=e.querySelector(Pf(a));if(o)return t.state.loading|=4,t.instance=o,gt(o),o;r=Ff(n),(a=_f.get(a))&&Vf(r,a),o=(e.ownerDocument||e).createElement(`link`),gt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Ld(o,`link`,r),t.state.loading|=4,Bf(o,n.precedence,e),t.instance=o;case`script`:return o=Lf(n.src),(a=e.querySelector(Rf(o)))?(t.instance=a,gt(a),a):(r=n,(a=_f.get(o))&&(r=h({},n),Hf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),gt(a),Ld(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,Bf(r,n.precedence,e));return t.instance}function Bf(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 Kf(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 qf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Jf(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=Nf(r.href),a=t.querySelector(Pf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Zf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,gt(a);return}a=t.ownerDocument||t,r=Ff(r),(i=_f.get(i))&&Vf(r,i),a=a.createElement(`link`),gt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Ld(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=Zf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Yf=0;function Xf(e,t){return e.stylesheets&&e.count===0&&$f(e,e.stylesheets),0Yf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Zf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)$f(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Qf=null;function $f(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Qf=new Map,t.forEach(ep,e),Qf=null,Zf.call(e))}function ep(e,t){if(!(t.state.loading&4)){var n=Qf.get(e);if(n)var r=n.get(null);else{n=new Map,Qf.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=h()})),_=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},v=new class extends _{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},y={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},b=new class{#e=y;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function x(e){setTimeout(e,0)}var S=typeof window>`u`||`Deno`in globalThis;function C(){}function w(e,t){return typeof e==`function`?e(t):e}function T(e){return typeof e==`number`&&e>=0&&e!==1/0}function E(e,t){return Math.max(e+(t||0)-Date.now(),0)}function D(e,t){return typeof e==`function`?e(t):e}function O(e,t){return typeof e==`function`?e(t):e}function k(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==ee(o,t.options))return!1}else if(!M(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function A(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(j(t.options.mutationKey)!==j(a))return!1}else if(!M(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function ee(e,t){return(t?.queryKeyHashFn||j)(e)}function j(e){return JSON.stringify(e,(e,t)=>P(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function M(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>M(e[n],t[n])):!1}var te=Object.prototype.hasOwnProperty;function ne(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=N(e)&&N(t);if(!r&&!(P(e)&&P(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{b.setTimeout(t,e)})}function ae(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:ne(e,t)}function F(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function oe(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var I=Symbol();function se(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===I?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function L(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var ce=(()=>{let e=()=>S;return{isServer(){return e()},setIsServer(t){e=t}}})();function le(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var ue=x;function de(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=ue,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var fe=de(),pe=new class extends _{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function me(e){return Math.min(1e3*2**e,3e4)}function he(e){return(e??`online`)!==`online`||pe.isOnline()}var ge=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function _e(e){let t=!1,n=0,r,i=le(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new ge(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>v.isFocused()&&(e.networkMode===`always`||pe.isOnline())&&e.canRun(),u=()=>he(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(ce.isServer()?0:3),o=e.retryDelay??me,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var ve=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),T(this.gcTime)&&(this.#e=b.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(ce.isServer()?1/0:3e5))}clearGcTimeout(){this.#e!==void 0&&(b.clearTimeout(this.#e),this.#e=void 0)}};function ye(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{L(e,()=>t.signal,()=>n=!0)},u=se(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?oe:F;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?xe:be,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:be(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):l}}}function be(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function xe(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Se=class extends ve{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=Te(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Te(this.options);e.data!==void 0&&(this.setState(we(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=ae(this.state.data,e,this.options);return this.#l({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#l({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(C).catch(C):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>O(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===I||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>D(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!E(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#s||this.#c()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#c(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#l({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)})},i=()=>{let e=se(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?ye(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#l({type:`fetch`,meta:a.fetchOptions?.meta}),this.#a=_e({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof ge&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#l({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#l({type:`pause`})},onContinue:()=>{this.#l({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#a.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof ge){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#l({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#l(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...Ce(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...we(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),fe.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function Ce(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:he(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function we(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Te(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Ee=class extends ve{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||De(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=_e({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){let t=t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}};this.state=t(this.state),fe.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function De(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Oe=class extends _{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new Ee({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t);if(n){if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}return!0}runNext(e){let t=ke(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){fe.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>A(t,e))}findAll(e={}){return this.getAll().filter(t=>A(e,t))}notify(e){fe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return fe.batch(()=>Promise.all(e.map(e=>e.continue().catch(C))))}};function ke(e){return e.options.scope?.id}var Ae=class extends _{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??ee(r,t),a=this.get(i);return a||(a=new Se({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){fe.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>k(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>k(e,t)):t}notify(e){fe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){fe.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){fe.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},je=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Ae,this.#t=e.mutationCache||new Oe,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=v.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=pe.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(D(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=w(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return fe.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;fe.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return fe.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=fe.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(C).catch(C)}invalidateQueries(e,t={}){return fe.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=fe.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(C)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(C)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(D(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(C).catch(C)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(C).catch(C)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return pe.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(j(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{M(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(j(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{M(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=ee(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===I&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Me=o((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})),Ne=o(((e,t)=>{t.exports=Me()})),R=c(f(),1),z=Ne(),Pe=R.createContext(void 0),Fe=({client:e,children:t})=>(R.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,z.jsx)(Pe.Provider,{value:e,children:t})),Ie=typeof window<`u`?R.useLayoutEffect:R.useEffect;function Le(e){let t=R.useRef({value:e,prev:null}),n=t.current.value;return e!==n&&(t.current={value:e,prev:n}),t.current.prev}function Re(e,t,n={},r={}){R.useEffect(()=>{if(!e.current||r.disabled||typeof IntersectionObserver!=`function`)return;let i=new IntersectionObserver(([e])=>{t(e)},n);return i.observe(e.current),()=>{i.disconnect()}},[t,n,r.disabled,e])}function B(e){let t=R.useRef(null);return R.useImperativeHandle(e,()=>t.current,[]),t}function ze(e){return e[e.length-1]}function Be(e){return typeof e==`function`}function Ve(e,t){return Be(e)?e(t):e}var He=Object.prototype.hasOwnProperty,Ue=Object.prototype.propertyIsEnumerable;function We(e){for(let t in e)if(He.call(e,t))return!0;return!1}var Ge=()=>Object.create(null),Ke=(e,t)=>qe(e,t,Ge);function qe(e,t,n=()=>({}),r=0){if(e===t)return e;if(r>500)return t;let i=t,a=Xe(e)&&Xe(i);if(!a&&!(Je(e)&&Je(i)))return i;let o=a?e:V(e);if(!o)return i;let s=a?i:V(i);if(!s)return i;let c=o.length,l=s.length,u=a?Array(l):n(),d=0;for(let t=0;ti||!Ze(e[o],t[o],n)))return!1;return i===a}return!1}function Qe(e){let t,n,r=new Promise((e,r)=>{t=e,n=r});return r.status=`pending`,r.resolve=n=>{r.status=`resolved`,r.value=n,t(n),e?.(n)},r.reject=e=>{r.status=`rejected`,n(e)},r}function $e(e){return!!(e&&typeof e==`object`&&typeof e.then==`function`)}function et(e){return e.replace(/[\x00-\x1f\x7f]/g,``)}function tt(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return et(t)}var nt=[`http:`,`https:`,`mailto:`,`tel:`];function rt(e,t){if(!e)return!1;try{let n=new URL(e);return!t.has(n.protocol)}catch{return!1}}function it(e){if(!e||!/[%\\\x00-\x1f\x7f]/.test(e)&&!e.startsWith(`//`))return{path:e,handledProtocolRelativeURL:!1};let t=/%25|%5C/gi,n=0,r=``,i;for(;(i=t.exec(e))!==null;)r+=tt(e.slice(n,i.index))+i[0],n=t.lastIndex;r+=tt(n?e.slice(n):e);let a=!1;return r.startsWith(`//`)&&(a=!0,r=`/`+r.replace(/^\/+/,``)),{path:r,handledProtocolRelativeURL:a}}function at(e){return/\s|[^\u0000-\u007F]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function ot(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n{e.next&&(e.prev?(e.prev.next=e.next,e.next.prev=e.prev,e.next=void 0,r&&(r.next=e,e.prev=r)):(e.next.prev=void 0,n=e.next,e.next=void 0,r&&(e.prev=r,r.next=e)),r=e)};return{get(e){let n=t.get(e);if(n)return i(n),n.value},set(a,o){if(t.size>=e&&n){let e=n;t.delete(e.key),e.next&&(n=e.next,e.next.prev=void 0),e===r&&(r=void 0)}let s=t.get(a);if(s)s.value=o,i(s);else{let e={key:a,value:o,prev:r};r&&(r.next=e),r=e,n||=e,t.set(a,e)}},clear(){t.clear(),n=void 0,r=void 0}}}var lt=4,ut=5;function dt(e){let t=e.indexOf(`{`);if(t===-1)return null;let n=e.indexOf(`}`,t);return n===-1||t+1>=e.length?null:[t,n]}function ft(e,t,n=new Uint16Array(6)){let r=e.indexOf(`/`,t),i=r===-1?e.length:r,a=e.substring(t,i);if(!a||!a.includes(`$`))return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n;if(a===`$`){let r=e.length;return n[0]=2,n[1]=t,n[2]=t,n[3]=r,n[4]=r,n[5]=r,n}if(a.charCodeAt(0)===36)return n[0]=1,n[1]=t,n[2]=t+1,n[3]=i,n[4]=i,n[5]=i,n;let o=dt(a);if(o){let[r,s]=o,c=a.charCodeAt(r+1);if(c===45){if(r+2!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=_t(1,n.fullPath??n.from,f,p,m);o=e,e.depth=a,e.parent=i,i.dynamic??=[],i.dynamic.push(e)}break}case 3:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.optional?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=_t(3,n.fullPath??n.from,f,p,m);o=e,e.parent=i,e.depth=a,i.optional??=[],i.optional.push(e)}break}case 2:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),l=c&&!!(t||s),f=t?l?t:t.toLowerCase():void 0,p=s?l?s:s.toLowerCase():void 0,m=_t(2,n.fullPath??n.from,l,f,p);o=m,m.parent=i,m.depth=a,i.wildcard??=[],i.wildcard.push(m)}}i=o}if(l&&n.children&&!n.isRoot&&n.id&&n.id.charCodeAt(n.id.lastIndexOf(`/`)+1)===95){let e=gt(n.fullPath??n.from);e.kind=ut,e.parent=i,a++,e.depth=a,i.pathless??=[],i.pathless.push(e),i=e}let u=(n.path||!n.children)&&!n.isRoot;if(u&&r.endsWith(`/`)){let e=gt(n.fullPath??n.from);e.kind=lt,e.parent=i,a++,e.depth=a,i.index=e,i=e}i.parse=l??null,i.priority=n.options?.params?.priority??0,u&&!i.route&&(i.route=n,i.fullPath=n.fullPath??n.from)}if(n.children)for(let r of n.children)pt(e,t,r,s,i,a,o)}function mt(e,t){if(e.parse&&!t.parse)return-1;if(!e.parse&&t.parse)return 1;if(e.parse&&t.parse&&(e.priority||t.priority))return t.priority-e.priority;if(e.prefix&&t.prefix&&e.prefix!==t.prefix){if(e.prefix.startsWith(t.prefix))return-1;if(t.prefix.startsWith(e.prefix))return 1}if(e.suffix&&t.suffix&&e.suffix!==t.suffix){if(e.suffix.endsWith(t.suffix))return-1;if(t.suffix.endsWith(e.suffix))return 1}return e.prefix&&!t.prefix?-1:!e.prefix&&t.prefix?1:e.suffix&&!t.suffix?-1:!e.suffix&&t.suffix?1:e.caseSensitive&&!t.caseSensitive?-1:!e.caseSensitive&&t.caseSensitive?1:0}function ht(e){if(e.pathless)for(let t of e.pathless)ht(t);if(e.static)for(let t of e.static.values())ht(t);if(e.staticInsensitive)for(let t of e.staticInsensitive.values())ht(t);if(e.dynamic?.length){e.dynamic.sort(mt);for(let t of e.dynamic)ht(t)}if(e.optional?.length){e.optional.sort(mt);for(let t of e.optional)ht(t)}if(e.wildcard?.length){e.wildcard.sort(mt);for(let t of e.wildcard)ht(t)}}function gt(e){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:e,parent:null,parse:null,priority:0}}function _t(e,t,n,r,i){return{kind:e,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:t,parent:null,parse:null,priority:0,caseSensitive:n,prefix:r,suffix:i}}function vt(e,t){let n=gt(`/`),r=new Uint16Array(6);for(let t of e)pt(!1,r,t,1,n,0);ht(n),t.masksTree=n,t.flatCache=ct(1e3)}function yt(e,t){e||=`/`;let n=t.flatCache.get(e);if(n)return n;let r=wt(e,t.masksTree);return t.flatCache.set(e,r),r}function bt(e,t,n,r,i){e||=`/`,r||=`/`;let a=t?`case\0${e}`:e,o=i.singleCache.get(a);return o||(o=gt(`/`),pt(t,new Uint16Array(6),{from:e},1,o,0),i.singleCache.set(a,o)),wt(r,o,n)}function xt(e,t,n=!1){let r=n?e:`nofuzz\0${e}`,i=t.matchCache.get(r);if(i!==void 0)return i;e||=`/`;let a;try{a=wt(e,t.segmentTree,n)}catch(e){if(e instanceof URIError)a=null;else throw e}return a&&(a.branch=Et(a.route)),t.matchCache.set(r,a),a}function St(e){return e===`/`?e:e.replace(/\/{1,}$/,``)}function Ct(e,t=!1,n){let r=gt(e.fullPath),i=new Uint16Array(6),a={},o={},s=0;return pt(t,i,e,1,r,0,e=>{if(n?.(e,s),e.id in a&&st(),a[e.id]=e,s!==0&&e.path){let t=St(e.fullPath);(!o[t]||e.fullPath.endsWith(`/`))&&(o[t]=e)}s++}),ht(r),{processedTree:{segmentTree:r,singleCache:ct(1e3),matchCache:ct(1e3),flatCache:null,masksTree:null},routesById:a,routesByPath:o}}function wt(e,t,n=!1){let r=e.split(`/`),i=Ot(e,r,t,n);if(!i)return null;let[a]=Tt(e,r,i);return{route:i.node.route,rawParams:a}}function Tt(e,t,n){let r=Dt(n.node),i=null,a=Object.create(null),o=n.extract?.part??0,s=n.extract?.node??0,c=n.extract?.path??0,l=n.extract?.segment??0;for(;s=0;e--){let n=i.wildcard[e],{prefix:r,suffix:a}=n;if(!(r&&(v||!(n.caseSensitive?y:b??=y.toLowerCase()).startsWith(r)))){if(a){if(v)continue;let e=t.slice(u).join(`/`).slice(-a.length);if((n.caseSensitive?e:e.toLowerCase())!==a)continue}s.push({node:n,index:o,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}if(i.optional){let e=d|1<=0;n--){let r=i.optional[n];s.push({node:r,index:u,skipped:e,depth:t,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v)for(let e=i.optional.length-1;e>=0;e--){let n=i.optional[e],{prefix:r,suffix:a}=n;if(r||a){let e=n.caseSensitive?y:b??=y.toLowerCase();if(r&&!e.startsWith(r)||a&&!e.endsWith(a))continue}s.push({node:n,index:u+1,skipped:d,depth:t,statics:p,dynamics:m,optionals:h+kt(o,u),extract:g,rawParams:_})}}if(!v&&i.dynamic&&y)for(let e=i.dynamic.length-1;e>=0;e--){let t=i.dynamic[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?y:b??=y.toLowerCase();if(n&&!e.startsWith(n)||r&&!e.endsWith(r))continue}s.push({node:t,index:u+1,skipped:d,depth:f+1,statics:p,dynamics:m+kt(o,u),optionals:h,extract:g,rawParams:_})}if(!v&&i.staticInsensitive){let e=i.staticInsensitive.get(b??=y.toLowerCase());e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+kt(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v&&i.static){let e=i.static.get(y);e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+kt(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(i.pathless){let e=f+1;for(let t=i.pathless.length-1;t>=0;t--){let n=i.pathless[t];s.push({node:n,index:u,skipped:d,depth:e,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}}if(l)return l;if(r&&c){let n=c.index;for(let e=0;ee.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===lt)>(e.node.kind===lt)||t.node.kind===lt==(e.node.kind===lt)&&t.depth>e.depth)))}function Nt(e){return Pt(e.filter(e=>e!==void 0).join(`/`))}function Pt(e){return e.replace(/\/{2,}/g,`/`)}function Ft(e){return e===`/`?e:e.replace(/^\/{1,}/,``)}function It(e){let t=e.length;return t>1&&e[t-1]===`/`?e.replace(/\/{1,}$/,``):e}function Lt(e){return It(Ft(e))}function Rt(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function zt(e,t,n){return Rt(e,n)===Rt(t,n)}function Bt({base:e,to:t,trailingSlash:n=`never`,cache:r}){let i=t.startsWith(`/`),a=!i&&t===`.`,o;if(r){o=i?t:a?e:e+`\0`+t;let n=r.get(o);if(n)return n}let s;if(a)s=e.split(`/`);else if(i)s=t.split(`/`);else{for(s=e.split(`/`);s.length>1&&ze(s)===``;)s.pop();let n=t.split(`/`);for(let e=0,t=n.length;e1&&(ze(s)===``?n===`never`&&s.pop():n===`always`&&s.push(``));let c=Pt(s.join(`/`))||`/`;return o&&r&&r.set(o,c),c}function Vt(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=Array.from(t.keys()).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),r=new RegExp(n,`g`);return e=>e.replace(r,e=>t.get(e)??e)}function Ht(e,t,n){let r=t[e];return typeof r==`string`?e===`_splat`?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split(`/`).map(e=>Wt(e,n)).join(`/`):Wt(r,n):r}function Ut({path:e,params:t,decoder:n,...r}){let i=!1,a=Object.create(null);if(!e||e===`/`)return{interpolatedPath:`/`,usedParams:a,isMissingParams:i};if(!e.includes(`$`))return{interpolatedPath:e,usedParams:a,isMissingParams:i};let o=e.length,s=0,c,l=``;for(;s{t[0]===`?`&&(t=t.substring(1));let n=Jt(t);for(let t in n){let r=n[t];if(typeof r==`string`)try{n[t]=e(r)}catch{}}return n}}function Qt(e,t){let n=typeof t==`function`;function r(r){if(typeof r==`object`&&r)try{return e(r)}catch{}else if(n&&typeof r==`string`)try{return t(r),e(r)}catch{}return r}return e=>{let t=Kt(e,r);return t?`?${t}`:``}}var $t=`__root__`;function en(e){if(e.statusCode=e.statusCode||e.code||307,!e._builtLocation&&!e.reloadDocument&&typeof e.href==`string`)try{new URL(e.href),e.reloadDocument=!0}catch{}let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function tn(e){return e instanceof Response&&!!e.options}var nn=e=>{if(!e.rendered)return e.rendered=!0,e.onReady?.()},rn=e=>e.stores.matchesId.get().some(t=>e.stores.matchStores.get(t)?.get()._forcePending),an=(e,t)=>!!(e.preload&&!e.router.stores.matchStores.has(t)),on=(e,t,n=!0)=>{let r={...e.router.options.context??{}},i=n?t:t-1;for(let t=0;t<=i;t++){let n=e.matches[t];if(!n)continue;let i=e.router.getMatch(n.id);i&&Object.assign(r,i.__routeContext,i.__beforeLoadContext)}return r},sn=(e,t)=>{if(!e.matches.length)return;let n=t.routeId,r=e.matches.findIndex(t=>t.routeId===e.router.routeTree.id),i=r>=0?r:0,a=n?e.matches.findIndex(e=>e.routeId===n):e.firstBadMatchIndex??e.matches.length-1;a<0&&(a=i);for(let t=a;t>=0;t--){let n=e.matches[t];if(e.router.looseRoutesById[n.routeId].options.notFoundComponent)return t}return n?a:i},cn=(e,t,n)=>{if(!(!tn(n)&&!Gt(n)))throw tn(n)&&n.redirectHandled&&!n.options.reloadDocument?n:(t&&(t._nonReactive.beforeLoadPromise?.resolve(),t._nonReactive.loaderPromise?.resolve(),t._nonReactive.beforeLoadPromise=void 0,t._nonReactive.loaderPromise=void 0,t._nonReactive.error=n,e.updateMatch(t.id,r=>({...r,status:tn(n)?`redirected`:Gt(n)?`notFound`:r.status===`pending`?`success`:r.status,context:on(e,t.index),isFetching:!1,error:n})),Gt(n)&&!n.routeId&&(n.routeId=t.routeId),t._nonReactive.loadPromise?.resolve()),tn(n)&&(e.rendered=!0,n.options._fromLocation=e.location,n.redirectHandled=!0,n=e.router.resolveRedirect(n)),n)},ln=(e,t)=>{let n=e.router.getMatch(t);return!!(!n||n._nonReactive.dehydrated)},un=(e,t,n)=>{let r=on(e,n);e.updateMatch(t,e=>({...e,context:r}))},dn=(e,t,n)=>{let{id:r,routeId:i}=e.matches[t],a=e.router.looseRoutesById[i];if(n instanceof Promise)throw n;e.firstBadMatchIndex??=t,cn(e,e.router.getMatch(r),n);try{a.options.onError?.(n)}catch(t){n=t,cn(e,e.router.getMatch(r),n)}e.updateMatch(r,e=>(e._nonReactive.beforeLoadPromise?.resolve(),e._nonReactive.beforeLoadPromise=void 0,e._nonReactive.loadPromise?.resolve(),{...e,error:n,status:`error`,isFetching:!1,updatedAt:Date.now(),abortController:new AbortController})),!e.preload&&!tn(n)&&!Gt(n)&&(e.serialError??=n)},fn=(e,t,n,r)=>{if(r._nonReactive.pendingTimeout!==void 0)return;let i=n.options.pendingMs??e.router.options.defaultPendingMs;if(e.onReady&&!an(e,t)&&(n.options.loader||n.options.beforeLoad||Cn(n))&&typeof i==`number`&&i!==1/0&&(n.options.pendingComponent??e.router.options?.defaultPendingComponent)){let t=setTimeout(()=>{nn(e)},i);r._nonReactive.pendingTimeout=t}},pn=(e,t,n)=>{let r=e.router.getMatch(t);if(!r._nonReactive.beforeLoadPromise&&!r._nonReactive.loaderPromise)return;fn(e,t,n,r);let i=()=>{let n=e.router.getMatch(t);n.preload&&(n.status===`redirected`||n.status===`notFound`)&&cn(e,n,n.error)};return r._nonReactive.beforeLoadPromise?r._nonReactive.beforeLoadPromise.then(i):i()},mn=(e,t,n,r)=>{let i=e.router.getMatch(t),a=i._nonReactive.loadPromise;i._nonReactive.loadPromise=Qe(()=>{a?.resolve(),a=void 0});let{paramsError:o,searchError:s}=i;o&&dn(e,n,o),s&&dn(e,n,s),fn(e,t,r,i);let c=new AbortController,l=!1,u=()=>{l||(l=!0,e.updateMatch(t,e=>({...e,isFetching:`beforeLoad`,fetchCount:e.fetchCount+1,abortController:c})))},d=()=>{i._nonReactive.beforeLoadPromise?.resolve(),i._nonReactive.beforeLoadPromise=void 0,e.updateMatch(t,e=>({...e,isFetching:!1}))};if(!r.options.beforeLoad){e.router.batch(()=>{u(),d()});return}i._nonReactive.beforeLoadPromise=Qe();let f={...on(e,n,!1),...i.__routeContext},{search:p,params:m,cause:h}=i,g=an(e,t),_={search:p,abortController:c,params:m,preload:g,context:f,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),buildLocation:e.router.buildLocation,cause:g?`preload`:h,matches:e.matches,routeId:r.id,...e.router.options.additionalContext},v=r=>{if(r===void 0){e.router.batch(()=>{u(),d()});return}(tn(r)||Gt(r))&&(u(),dn(e,n,r)),e.router.batch(()=>{u(),e.updateMatch(t,e=>({...e,__beforeLoadContext:r})),d()})},y;try{if(y=r.options.beforeLoad(_),$e(y))return u(),y.catch(t=>{dn(e,n,t)}).then(v)}catch(t){u(),dn(e,n,t)}v(y)},hn=(e,t)=>{let{id:n,routeId:r}=e.matches[t],i=e.router.looseRoutesById[r],a=()=>s(),o=()=>mn(e,n,t,i),s=()=>{if(ln(e,n))return;let t=pn(e,n,i);return $e(t)?t.then(o):o()};return a()},gn=(e,t,n)=>{let r=e.router.getMatch(t);if(!r||!n.options.head&&!n.options.scripts&&!n.options.headers)return;let i={ssr:e.router.options.ssr,matches:e.matches,match:r,params:r.params,loaderData:r.loaderData};return Promise.all([n.options.head?.(i),n.options.scripts?.(i),n.options.headers?.(i)]).then(([e,t,n])=>({meta:e?.meta,links:e?.links,headScripts:e?.scripts,headers:n,scripts:t,styles:e?.styles}))},_n=(e,t,n,r,i)=>{let a=t[r-1],{params:o,loaderDeps:s,abortController:c,cause:l}=e.router.getMatch(n),u=on(e,r),d=an(e,n);return{params:o,deps:s,preload:!!d,parentMatchPromise:a,abortController:c,context:u,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),cause:d?`preload`:l,route:i,...e.router.options.additionalContext}},vn=async(e,t,n,r,i)=>{try{let a=e.router.getMatch(n);try{Sn(i);let o=i.options.loader,s=typeof o==`function`?o:o?.handler,c=s?.(_n(e,t,n,r,i)),l=!!s&&$e(c);if((l||i._lazyPromise||i._componentsPromise||i.options.head||i.options.scripts||i.options.headers||a._nonReactive.minPendingPromise)&&e.updateMatch(n,e=>({...e,isFetching:`loader`})),s){let t=l?await c:c;cn(e,e.router.getMatch(n),t),t!==void 0&&e.updateMatch(n,e=>({...e,loaderData:t}))}i._lazyPromise&&await i._lazyPromise;let u=a._nonReactive.minPendingPromise;u&&await u,i._componentsPromise&&await i._componentsPromise,e.updateMatch(n,t=>({...t,error:void 0,context:on(e,r),status:`success`,isFetching:!1,updatedAt:Date.now()}))}catch(t){let o=t;if(o?.name===`AbortError`){if(a.abortController.signal.aborted){a._nonReactive.loaderPromise?.resolve(),a._nonReactive.loaderPromise=void 0;return}e.updateMatch(n,t=>({...t,status:t.status===`pending`?`success`:t.status,isFetching:!1,context:on(e,r)}));return}let s=a._nonReactive.minPendingPromise;s&&await s,Gt(t)&&await i.options.notFoundComponent?.preload?.(),cn(e,e.router.getMatch(n),t);try{i.options.onError?.(t)}catch(t){o=t,cn(e,e.router.getMatch(n),t)}!tn(o)&&!Gt(o)&&await Sn(i,[`errorComponent`]),e.updateMatch(n,t=>({...t,error:o,context:on(e,r),status:`error`,isFetching:!1}))}}catch(t){let r=e.router.getMatch(n);r&&(r._nonReactive.loaderPromise=void 0),cn(e,r,t)}},yn=async(e,t,n)=>{async function r(r,a,c,l,d){let f=Date.now()-a.updatedAt,p=r?d.options.preloadStaleTime??e.router.options.defaultPreloadStaleTime??3e4:d.options.staleTime??e.router.options.defaultStaleTime??0,m=d.options.shouldReload,h=typeof m==`function`?m(_n(e,t,i,n,d)):m,{status:g,invalid:_}=l,v=f>=p&&(!!e.forceStaleReload||l.cause===`enter`||c!==void 0&&c!==l.id);o=g===`success`&&(_||(h??v)),r&&d.options.preload===!1||(o&&!e.sync&&u?(s=!0,(async()=>{try{await vn(e,t,i,n,d);let r=e.router.getMatch(i);r._nonReactive.loaderPromise?.resolve(),r._nonReactive.loadPromise?.resolve(),r._nonReactive.loaderPromise=void 0,r._nonReactive.loadPromise=void 0}catch(t){tn(t)&&await e.router.navigate(t.options)}})()):g!==`success`||o?await vn(e,t,i,n,d):un(e,i,n))}let{id:i,routeId:a}=e.matches[n],o=!1,s=!1,c=e.router.looseRoutesById[a],l=c.options.loader,u=((typeof l==`function`?void 0:l?.staleReloadMode)??e.router.options.defaultStaleReloadMode)!==`blocking`;if(ln(e,i)){if(!e.router.getMatch(i))return e.matches[n];un(e,i,n)}else{let t=e.router.getMatch(i),o=e.router.stores.matchesId.get()[n],s=(o&&e.router.stores.matchStores.get(o)||null)?.routeId===a?o:e.router.stores.matches.get().find(e=>e.routeId===a)?.id,l=an(e,i);if(t._nonReactive.loaderPromise){if(t.status===`success`&&!e.sync&&!t.preload&&u)return t;await t._nonReactive.loaderPromise;let n=e.router.getMatch(i),a=n._nonReactive.error||n.error;a&&cn(e,n,a),n.status===`pending`&&await r(l,t,s,n,c)}else{let n=l&&!e.router.stores.matchStores.has(i),a=e.router.getMatch(i);a._nonReactive.loaderPromise=Qe(),n!==a.preload&&e.updateMatch(i,e=>({...e,preload:n})),await r(l,t,s,a,c)}}let d=e.router.getMatch(i);s||(d._nonReactive.loaderPromise?.resolve(),d._nonReactive.loadPromise?.resolve(),d._nonReactive.loadPromise=void 0),clearTimeout(d._nonReactive.pendingTimeout),d._nonReactive.pendingTimeout=void 0,s||(d._nonReactive.loaderPromise=void 0),d._nonReactive.dehydrated=void 0;let f=s?d.isFetching:!1;return f!==d.isFetching||d.invalid!==!1?(e.updateMatch(i,e=>({...e,isFetching:f,invalid:!1})),e.router.getMatch(i)):d};async function bn(e){let t=e,n=[];rn(t.router)&&nn(t);let r;for(let e=0;e({...e,...a?{status:`success`,globalNotFound:!0,error:void 0}:{status:`notFound`,error:l},isFetching:!1})),u=e,await Sn(r,[`notFoundComponent`])}else if(!t.preload){let e=t.matches[0];e.globalNotFound||t.router.getMatch(e.id)?.globalNotFound&&t.updateMatch(e.id,e=>({...e,globalNotFound:!1,error:void 0}))}if(t.serialError&&t.firstBadMatchIndex!==void 0){let e=t.router.looseRoutesById[t.matches[t.firstBadMatchIndex].routeId];await Sn(e,[`errorComponent`])}for(let e=0;e<=u;e++){let{id:n,routeId:r}=t.matches[e],i=t.router.looseRoutesById[r];try{let e=gn(t,n,i);if(e){let r=await e;t.updateMatch(n,e=>({...e,...r}))}}catch(e){console.error(`Error executing head for route ${r}:`,e)}}let d=nn(t);if($e(d)&&await d,l)throw l;if(t.serialError&&!t.preload&&!t.onReady)throw t.serialError;return t.matches}function xn(e,t){let n=t.map(t=>e.options[t]?.preload?.()).filter(Boolean);if(n.length!==0)return Promise.all(n)}function Sn(e,t=wn){!e._lazyLoaded&&e._lazyPromise===void 0&&(e.lazyFn?e._lazyPromise=e.lazyFn().then(t=>{let{id:n,...r}=t.options;Object.assign(e.options,r),e._lazyLoaded=!0,e._lazyPromise=void 0}):e._lazyLoaded=!0);let n=()=>e._componentsLoaded?void 0:t===wn?(()=>{if(e._componentsPromise===void 0){let t=xn(e,wn);t?e._componentsPromise=t.then(()=>{e._componentsLoaded=!0,e._componentsPromise=void 0}):e._componentsLoaded=!0}return e._componentsPromise})():xn(e,t);return e._lazyPromise?e._lazyPromise.then(n):n()}function Cn(e){for(let t of wn)if(e.options[t]?.preload)return!0;return!1}var wn=[`component`,`errorComponent`,`pendingComponent`,`notFoundComponent`];function Tn(e){return{input:({url:t})=>{for(let n of e)t=Dn(n,t);return t},output:({url:t})=>{for(let n=e.length-1;n>=0;n--)t=On(e[n],t);return t}}}function En(e){let t=Lt(e.basepath),n=`/${t}`,r=e.caseSensitive?n:n.toLowerCase(),i=`${r}/`;return{input:({url:t})=>{let a=e.caseSensitive?t.pathname:t.pathname.toLowerCase();return a===r?t.pathname=`/`:a.startsWith(i)&&(t.pathname=t.pathname.slice(n.length)),t},output:({url:e})=>(e.pathname=Nt([`/`,t,e.pathname]),e)}}function Dn(e,t){let n=e?.input?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function On(e,t){let n=e?.output?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function kn(e,t){let{createMutableStore:n,createReadonlyStore:r,batch:i,init:a}=t,o=new Map,s=new Map,c=new Map,l=n(e.status),u=n(e.loadedAt),d=n(e.isLoading),f=n(e.isTransitioning),p=n(e.location),m=n(e.resolvedLocation),h=n(e.statusCode),g=n(e.redirect),_=n([]),v=n([]),y=n([]),b=r(()=>An(o,_.get())),x=r(()=>An(s,v.get())),S=r(()=>An(c,y.get())),C=r(()=>_.get()[0]),w=r(()=>_.get().some(e=>o.get(e)?.get().status===`pending`)),T=r(()=>({locationHref:p.get().href,resolvedLocationHref:m.get()?.href,status:l.get()})),E=r(()=>({status:l.get(),loadedAt:u.get(),isLoading:d.get(),isTransitioning:f.get(),matches:b.get(),location:p.get(),resolvedLocation:m.get(),statusCode:h.get(),redirect:g.get()})),D=ct(64);function O(e){let t=D.get(e);return t||(t=r(()=>{let t=_.get();for(let n of t){let t=o.get(n);if(t&&t.routeId===e)return t.get()}}),D.set(e,t)),t}let k={status:l,loadedAt:u,isLoading:d,isTransitioning:f,location:p,resolvedLocation:m,statusCode:h,redirect:g,matchesId:_,pendingIds:v,cachedIds:y,matches:b,pendingMatches:x,cachedMatches:S,firstId:C,hasPending:w,matchRouteDeps:T,matchStores:o,pendingMatchStores:s,cachedMatchStores:c,__store:E,getRouteMatchStore:O,setMatches:A,setPending:ee,setCached:j};A(e.matches),a?.(k);function A(e){jn(e,o,_,n,i)}function ee(e){jn(e,s,v,n,i)}function j(e){jn(e,c,y,n,i)}return k}function An(e,t){let n=[];for(let r of t){let t=e.get(r);t&&n.push(t.get())}return n}function jn(e,t,n,r,i){let a=e.map(e=>e.id),o=new Set(a);i(()=>{for(let e of t.keys())o.has(e)||t.delete(e);for(let n of e){let e=t.get(n.id);if(!e){let e=r(n);e.routeId=n.routeId,t.set(n.id,e);continue}e.routeId=n.routeId,e.get()!==n&&e.set(n)}ot(n.get(),a)||n.set(a)})}var Mn=`__TSR_index`,Nn=`popstate`,Pn=`beforeunload`;function Fn(e){let t=e.getLocation(),n=new Set,r=r=>{t=e.getLocation(),n.forEach(e=>e({location:t,action:r}))},i=n=>{e.notifyOnIndexChange??!0?r(n):t=e.getLocation()},a=async({task:n,navigateOpts:r,...i})=>{if(r?.ignoreBlocker??!1){n();return}let a=e.getBlockers?.()??[],o=i.type===`PUSH`||i.type===`REPLACE`;if(typeof document<`u`&&a.length&&o)for(let n of a){let r=zn(i.path,i.state);if(await n.blockerFn({currentLocation:t,nextLocation:r,action:i.type})){e.onBlocked?.();return}}n()};return{get location(){return t},get length(){return e.getLength()},subscribers:n,subscribe:e=>(n.add(e),()=>{n.delete(e)}),push:(n,i,o)=>{let s=t.state[Mn];i=In(s+1,i),a({task:()=>{e.pushState(n,i),r({type:`PUSH`})},navigateOpts:o,type:`PUSH`,path:n,state:i})},replace:(n,i,o)=>{let s=t.state[Mn];i=In(s,i),a({task:()=>{e.replaceState(n,i),r({type:`REPLACE`})},navigateOpts:o,type:`REPLACE`,path:n,state:i})},go:(t,n)=>{a({task:()=>{e.go(t),i({type:`GO`,index:t})},navigateOpts:n,type:`GO`})},back:t=>{a({task:()=>{e.back(t?.ignoreBlocker??!1),i({type:`BACK`})},navigateOpts:t,type:`BACK`})},forward:t=>{a({task:()=>{e.forward(t?.ignoreBlocker??!1),i({type:`FORWARD`})},navigateOpts:t,type:`FORWARD`})},canGoBack:()=>t.state[Mn]!==0,createHref:t=>e.createHref(t),block:t=>{if(!e.setBlockers)return()=>{};let n=e.getBlockers?.()??[];return e.setBlockers([...n,t]),()=>{let n=e.getBlockers?.()??[];e.setBlockers?.(n.filter(e=>e!==t))}},flush:()=>e.flush?.(),destroy:()=>e.destroy?.(),notify:r}}function In(e,t){t||={};let n=Bn();return{...t,key:n,__TSR_key:n,[Mn]:e}}function Ln(e){let t=e?.window??(typeof document<`u`?window:void 0),n=t.history.pushState,r=t.history.replaceState,i=[],a=()=>i,o=e=>i=e,s=e?.createHref??(e=>e),c=e?.parseLocation??(()=>zn(`${t.location.pathname}${t.location.search}${t.location.hash}`,t.history.state));if(!t.history.state?.__TSR_key&&!t.history.state?.key){let e=Bn();t.history.replaceState({[Mn]:0,key:e,__TSR_key:e},``)}let l=c(),u,d=!1,f=!1,p=!1,m=!1,h=()=>l,g,_,v=()=>{g&&(C._ignoreSubscribers=!0,(g.isPush?t.history.pushState:t.history.replaceState)(g.state,``,g.href),C._ignoreSubscribers=!1,g=void 0,_=void 0,u=void 0)},y=(e,t,n)=>{let r=s(t);_||(u=l),l=zn(t,n),g={href:r,state:n,isPush:g?.isPush||e===`push`},_||=Promise.resolve().then(()=>v())},b=e=>{l=c(),C.notify({type:e})},x=async()=>{if(f){f=!1;return}let e=c(),n=e.state[Mn]-l.state[Mn],r=n===1,i=n===-1,o=!r&&!i||d;d=!1;let s=o?`GO`:i?`BACK`:`FORWARD`,u=o?{type:`GO`,index:n}:{type:i?`BACK`:`FORWARD`};if(p)p=!1;else{let n=a();if(typeof document<`u`&&n.length){for(let r of n)if(await r.blockerFn({currentLocation:l,nextLocation:e,action:s})){f=!0,t.history.go(1),C.notify(u);return}}}l=c(),C.notify(u)},S=e=>{if(m){m=!1;return}let t=!1,n=a();if(typeof document<`u`&&n.length)for(let e of n){let n=e.enableBeforeUnload??!0;if(n===!0){t=!0;break}if(typeof n==`function`&&n()===!0){t=!0;break}}if(t)return e.preventDefault(),e.returnValue=``},C=Fn({getLocation:h,getLength:()=>t.history.length,pushState:(e,t)=>y(`push`,e,t),replaceState:(e,t)=>y(`replace`,e,t),back:e=>(e&&(p=!0),m=!0,t.history.back()),forward:e=>{e&&(p=!0),m=!0,t.history.forward()},go:e=>{d=!0,t.history.go(e)},createHref:e=>s(e),flush:v,destroy:()=>{t.history.pushState=n,t.history.replaceState=r,t.removeEventListener(Pn,S,{capture:!0}),t.removeEventListener(Nn,x)},onBlocked:()=>{u&&l!==u&&(l=u)},getBlockers:a,setBlockers:o,notifyOnIndexChange:!1});return t.addEventListener(Pn,S,{capture:!0}),t.addEventListener(Nn,x),t.history.pushState=function(...e){let r=n.apply(t.history,e);return C._ignoreSubscribers||b(`PUSH`),r},t.history.replaceState=function(...e){let n=r.apply(t.history,e);return C._ignoreSubscribers||b(`REPLACE`),n},C}function Rn(e){let t=e.replace(/[\x00-\x1f\x7f]/g,``);return t.startsWith(`//`)&&(t=`/`+t.replace(/^\/+/,``)),t}function zn(e,t){let n=Rn(e),r=n.indexOf(`#`),i=n.indexOf(`?`),a=Bn();return{href:n,pathname:n.substring(0,r>0?i>0?Math.min(r,i):r:i>0?i:n.length),hash:r>-1?n.substring(r):``,search:i>-1?n.slice(i,r===-1?void 0:r):``,state:t||{[Mn]:0,key:a,__TSR_key:a}}}function Bn(){return(Math.random()+1).toString(36).substring(7)}function Vn(e,t){let n=t,r=e;return{fromLocation:n,toLocation:r,pathChanged:n?.pathname!==r.pathname,hrefChanged:n?.href!==r.href,hashChanged:n?.hash!==r.hash}}var Hn=new WeakMap,Un=class{constructor(e,t){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this.resetNextScroll=!0,this.shouldViewTransition=void 0,this.isViewTransitionTypesSupported=void 0,this.subscribers=new Set,this.isScrollRestoring=!1,this.isScrollRestorationSetup=!1,this.routeBranchCache=new WeakMap,this.startTransition=e=>e(),this.update=e=>{let t=this.options,n=this.basepath??t?.basepath??`/`,r=this.basepath===void 0,i=t?.rewrite;if(this.options={...t,...e},this.isServer=this.options.isServer??typeof document>`u`,this.protocolAllowlist=new Set(this.options.protocolAllowlist),this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=Vt(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.history=this.options.history?this.options.history:Ln()),this.origin=this.options.origin,this.origin||=window?.origin&&window.origin!==`null`?window.origin:`http://localhost`,this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let e;this.resolvePathCache=ct(1e3),e=this.buildRouteTree(),this.setRoutes(e)}if(!this.stores&&this.latestLocation){let e=this.getStoreConfig(this);this.batch=e.batch,this.stores=kn(Kn(this.latestLocation),e),fr(this)}let a=!1,o=this.options.basepath??`/`,s=this.options.rewrite;if(r||n!==o||i!==s){this.basepath=o;let e=[],t=Lt(o);t&&t!==`/`&&e.push(En({basepath:o})),s&&e.push(s),this.rewrite=e.length===0?void 0:e.length===1?e[0]:Tn(e),this.history&&this.updateLatestLocation(),a=!0}a&&this.stores&&this.stores.location.set(this.latestLocation),typeof window<`u`&&`CSS`in window&&typeof window.CSS?.supports==`function`&&(this.isViewTransitionTypesSupported=window.CSS.supports(`selector(:active-view-transition-type(a))`))},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{let e=Ct(this.routeTree,this.options.caseSensitive,(e,t)=>{e.init({originalIndex:t})});return this.options.routeMasks&&vt(this.options.routeMasks,e.processedTree),e},this.subscribe=(e,t)=>{let n={eventType:e,fn:t};return this.subscribers.add(n),()=>{this.subscribers.delete(n)}},this.emit=e=>{this.subscribers.forEach(t=>{t.eventType===e.type&&t.fn(e)})},this.parseLocation=(e,t)=>{let n=({pathname:e,search:n,hash:r,href:i,state:a})=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(e)){let i=this.options.parseSearch(n),o=this.options.stringifySearch(i);return{href:e+o+r,publicHref:e+o+r,pathname:it(e).path,external:!1,searchStr:o,search:Ke(t?.search,i),hash:it(r.slice(1)).path,state:qe(t?.state,a)}}let o=new URL(i,this.origin),s=Dn(this.rewrite,o),c=this.options.parseSearch(s.search),l=this.options.stringifySearch(c);return s.search=l,{href:s.href.replace(s.origin,``),publicHref:i,pathname:it(s.pathname).path,external:!!this.rewrite&&s.origin!==this.origin,searchStr:l,search:Ke(t?.search,c),hash:it(s.hash.slice(1)).path,state:qe(t?.state,a)}},r=n(e),{__tempLocation:i,__tempKey:a}=r.state;if(i&&(!a||a===this.tempLocationKey)){let e=n(i);return e.state.key=r.state.key,e.state.__TSR_key=r.state.__TSR_key,delete e.state.__tempLocation,{...e,maskedLocation:r}}return r},this.resolvePathWithBase=(e,t)=>Bt({base:e,to:t.includes(`//`)?Pt(t):t,trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(e,t,n)=>typeof e==`string`?this.matchRoutesInternal({pathname:e,search:t},n):this.matchRoutesInternal(e,t),this.getMatchedRoutes=e=>Jn({pathname:e,routesById:this.routesById,processedTree:this.processedTree}),this.cancelMatch=e=>{let t=this.getMatch(e);t&&(t.abortController.abort(),clearTimeout(t._nonReactive.pendingTimeout),t._nonReactive.pendingTimeout=void 0)},this.cancelMatches=()=>{this.stores.pendingIds.get().forEach(e=>{this.cancelMatch(e)}),this.stores.matchesId.get().forEach(e=>{if(this.stores.pendingMatchStores.has(e))return;let t=this.stores.matchStores.get(e)?.get();t&&(t.status===`pending`||t.isFetching===`loader`)&&this.cancelMatch(e)})},this.buildLocation=e=>{let t=(t={})=>{let n=t._fromLocation||this.pendingBuiltLocation||this.latestLocation,r=this.matchRoutesLightweight(n);t.from;let i=t.unsafeRelative===`path`?n.pathname:t.from??r.fullPath,a=t.to?`${t.to}`:void 0,o=r.search,s=Object.assign(Object.create(null),r.params),c=a?.charCodeAt(0)===47?`/`:this.resolvePathWithBase(i,`.`),l=a?this.resolvePathWithBase(c,a):c,u=t.params===!1||t.params===null?Object.create(null):(t.params??!0)===!0?s:Object.assign(s,Ve(t.params,s)),d=this.routesByPath[It(l)],f;if(d)f=this.getRouteBranch(d);else if(l.includes(`$`))f=[];else{let e=this.getMatchedRoutes(l);f=e.matchedRoutes,this.options.notFoundRoute&&(!e.foundRoute||e.foundRoute.path!==`/`&&e.routeParams[`**`])&&(f=[...f,this.options.notFoundRoute])}if(f.length&&We(u))for(let e of f){let t=e.options.params?.stringify??e.options.stringifyParams;if(t)try{Object.assign(u,t(u))}catch{}}let p=e.leaveParams?l:it(Ut({path:l,params:u,decoder:this.pathParamsDecoder,server:this.isServer}).interpolatedPath).path,m=o;if(e._includeValidateSearch&&this.options.search?.strict){let e={};f.forEach(t=>{if(t.options.validateSearch)try{Object.assign(e,qn(t.options.validateSearch,{...e,...m}))}catch{}}),m=e}m=Yn({search:m,dest:t,destRoutes:f,_includeValidateSearch:e._includeValidateSearch}),m=Ke(o,m);let h=this.options.stringifySearch(m),g=t.hash===!0?n.hash:t.hash?Ve(t.hash,n.hash):void 0,_=g?`#${g}`:``,v=t.state===!0?n.state:t.state?Ve(t.state,n.state):{};v=qe(n.state,v);let y=`${p}${h}${_}`,b,x,S=!1;if(this.rewrite){let e=new URL(y,this.origin),t=On(this.rewrite,e);b=e.href.replace(e.origin,``),t.origin===this.origin?x=t.pathname+t.search+t.hash:(x=t.href,S=!0)}else b=at(y),x=b;return{publicHref:x,href:b,pathname:p,search:m,searchStr:h,state:v,hash:g??``,external:S,unmaskOnReload:t.unmaskOnReload}},n=(n={},r)=>{let i=t(n),a=r?t(r):void 0;if(!a){let n=Object.create(null);if(this.options.routeMasks){let o=yt(i.pathname,this.processedTree);if(o){Object.assign(n,o.rawParams);let{from:i,params:s,...c}=o.route,l=s===!1||s===null?Object.create(null):(s??!0)===!0?n:Object.assign(n,Ve(s,n));r={from:e.from,...c,params:l},a=t(r)}}}return a&&(i.maskedLocation=a),i};return e.mask?n(e,{from:e.from,...e.mask}):n(e)},this.commitLocation=async({viewTransition:e,ignoreBlocker:t,...n})=>{let r,i=()=>{let e=[`key`,`__TSR_key`,`__TSR_index`,`__hashScrollIntoViewOptions`];e.forEach(e=>{n.state[e]=this.latestLocation.state[e]});let t=Ze(n.state,this.latestLocation.state);return e.forEach(e=>{delete n.state[e]}),t},a=It(this.latestLocation.href)===It(n.href),o=this.commitLocationPromise;if(this.commitLocationPromise=Qe(()=>{o?.resolve(),o=void 0}),a&&i())this.load();else{let{maskedLocation:i,hashScrollIntoView:a,...o}=n;i&&(o={...i,state:{...i.state,__tempKey:void 0,__tempLocation:{...o,search:o.searchStr,state:{...o.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(o.unmaskOnReload??this.options.unmaskOnReload??!1)&&(o.state.__tempKey=this.tempLocationKey)),o.state.__hashScrollIntoViewOptions=a??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=e,r=n.replace?`REPLACE`:`PUSH`,this.history[r===`REPLACE`?`replace`:`push`](o.publicHref,o.state,{ignoreBlocker:t})}return this.resetNextScroll=n.resetScroll??!0,this.history.subscribers.size||this.load(r?{action:{type:r}}:void 0),this.commitLocationPromise},this.buildAndCommitLocation=({replace:e,resetScroll:t,hashScrollIntoView:n,viewTransition:r,ignoreBlocker:i,href:a,...o}={})=>{if(a){let t=this.history.location.state.__TSR_index,n=zn(a,{__TSR_index:e?t:t+1}),r=new URL(n.pathname,this.origin);o.to=Dn(this.rewrite,r).pathname,o.search=this.options.parseSearch(n.search),o.hash=n.hash.slice(1)}let s=this.buildLocation({...o,_includeValidateSearch:!0});this.pendingBuiltLocation=s;let c=this.commitLocation({...s,viewTransition:r,replace:e,resetScroll:t,hashScrollIntoView:n,ignoreBlocker:i});return Promise.resolve().then(()=>{this.pendingBuiltLocation===s&&(this.pendingBuiltLocation=void 0)}),c},this.navigate=async({to:e,reloadDocument:t,href:n,publicHref:r,...i})=>{let a=!1;if(n)try{new URL(`${n}`),a=!0}catch{}if(a&&!t&&(t=!0),t){if(e!==void 0||!n){let t=this.buildLocation({to:e,...i});n??=t.publicHref,r??=t.publicHref}let t=!a&&r?r:n;if(rt(t,this.protocolAllowlist))return Promise.resolve();if(!i.ignoreBlocker){let e=this.history.getBlockers?.()??[];for(let t of e)if(t?.blockerFn&&await t.blockerFn({currentLocation:this.latestLocation,nextLocation:this.latestLocation,action:`PUSH`}))return Promise.resolve()}return i.replace?window.location.replace(t):window.location.href=t,Promise.resolve()}return this.buildAndCommitLocation({...i,href:n,to:e,_isNavigate:!0})},this.beforeLoad=()=>{this.cancelMatches(),this.updateLatestLocation();let e=this.matchRoutes(this.latestLocation),t=this.stores.cachedMatches.get().filter(t=>!e.some(e=>e.id===t.id));this.batch(()=>{this.stores.status.set(`pending`),this.stores.statusCode.set(200),this.stores.isLoading.set(!0),this.stores.location.set(this.latestLocation),this.stores.setPending(e),this.stores.setCached(t)})},this.load=async e=>{let t=e?.action?.type,n,r,i,a=this.stores.resolvedLocation.get()??this.stores.location.get();for(i=new Promise(o=>{this.startTransition(async()=>{try{this.beforeLoad(),t?Hn.set(this.latestLocation,t):Hn.delete(this.latestLocation);let n=this.latestLocation,r=Vn(n,this.stores.resolvedLocation.get());this.stores.redirect.get()||this.emit({type:`onBeforeNavigate`,...r}),this.emit({type:`onBeforeLoad`,...r}),await bn({router:this,sync:e?.sync,forceStaleReload:a.href===n.href,matches:this.stores.pendingMatches.get(),location:n,updateMatch:this.updateMatch,onReady:async()=>{this.startTransition(()=>{this.startViewTransition(async()=>{let e=null,t=null,n=null,r=null;this.batch(()=>{let i=this.stores.pendingMatches.get(),a=i.length,o=this.stores.matches.get();e=a?o.filter(e=>!this.stores.pendingMatchStores.has(e.id)):null;let s=new Set;for(let e of this.stores.pendingMatchStores.values())e.routeId&&s.add(e.routeId);let c=new Set;for(let e of this.stores.matchStores.values())e.routeId&&c.add(e.routeId);t=a?o.filter(e=>!s.has(e.routeId)):null,n=a?i.filter(e=>!c.has(e.routeId)):null,r=a?i.filter(e=>c.has(e.routeId)):o,this.stores.isLoading.set(!1),this.stores.loadedAt.set(Date.now()),a&&(this.stores.setMatches(i),this.stores.setPending([]),this.stores.setCached([...this.stores.cachedMatches.get(),...e.filter(e=>e.status!==`error`&&e.status!==`notFound`&&e.status!==`redirected`)]),this.clearExpiredCache())});for(let[e,i]of[[t,`onLeave`],[n,`onEnter`],[r,`onStay`]])if(e)for(let t of e)this.looseRoutesById[t.routeId].options[i]?.(t)})})}})}catch(e){tn(e)?(n=e,this.navigate({...n.options,replace:!0,ignoreBlocker:!0})):Gt(e)&&(r=e);let t=n?n.status:r?404:this.stores.matches.get().some(e=>e.status===`error`)?500:200;this.batch(()=>{this.stores.statusCode.set(t),this.stores.redirect.set(n)})}this.latestLoadPromise===i&&(this.commitLocationPromise?.resolve(),this.latestLoadPromise=void 0,this.commitLocationPromise=void 0),o()})}),this.latestLoadPromise=i,await i;this.latestLoadPromise&&i!==this.latestLoadPromise;)await this.latestLoadPromise;let o;this.hasNotFoundMatch()?o=404:this.stores.matches.get().some(e=>e.status===`error`)&&(o=500),o!==void 0&&this.stores.statusCode.set(o)},this.startViewTransition=e=>{let t=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,t&&typeof document<`u`&&`startViewTransition`in document&&typeof document.startViewTransition==`function`){let n;if(typeof t==`object`&&this.isViewTransitionTypesSupported){let r=this.latestLocation,i=this.stores.resolvedLocation.get(),a=typeof t.types==`function`?t.types(Vn(r,i)):t.types;if(a===!1){e();return}n={update:e,types:a}}else n=e;document.startViewTransition(n)}else e()},this.updateMatch=(e,t)=>{this.startTransition(()=>{let n=this.stores.pendingMatchStores.get(e);if(n){n.set(t);return}let r=this.stores.matchStores.get(e);if(r){r.set(t);return}let i=this.stores.cachedMatchStores.get(e);if(i){let n=t(i.get());n.status===`redirected`?this.stores.cachedMatchStores.delete(e)&&this.stores.cachedIds.set(t=>t.filter(t=>t!==e)):i.set(n)}})},this.getMatch=e=>this.stores.cachedMatchStores.get(e)?.get()??this.stores.pendingMatchStores.get(e)?.get()??this.stores.matchStores.get(e)?.get(),this.invalidate=e=>{let t=t=>e?.filter?.(t)??!0?{...t,invalid:!0,...e?.forcePending||t.status===`error`||t.status===`notFound`?{status:`pending`,error:void 0}:void 0}:t;return this.batch(()=>{this.stores.setMatches(this.stores.matches.get().map(t)),this.stores.setCached(this.stores.cachedMatches.get().map(t)),this.stores.setPending(this.stores.pendingMatches.get().map(t))}),this.shouldViewTransition=!1,this.load({sync:e?.sync})},this.getParsedLocationHref=e=>e.publicHref||`/`,this.resolveRedirect=e=>{let t=e.headers.get(`Location`);if(!e.options.href||e.options._builtLocation){let t=e.options._builtLocation??this.buildLocation(e.options),n=this.getParsedLocationHref(t);e.options.href=n,e.headers.set(`Location`,n)}else if(t)try{let n=new URL(t);if(this.origin&&n.origin===this.origin){let t=n.pathname+n.search+n.hash;e.options.href=t,e.headers.set(`Location`,t)}}catch{}if(e.options.href&&!e.options._builtLocation&&rt(e.options.href,this.protocolAllowlist))throw Error(`Redirect blocked: unsafe protocol`);return e.headers.get(`Location`)||e.headers.set(`Location`,e.options.href),e},this.clearCache=e=>{let t=e?.filter;t===void 0?this.stores.setCached([]):this.stores.setCached(this.stores.cachedMatches.get().filter(e=>!t(e)))},this.clearExpiredCache=()=>{let e=Date.now();this.clearCache({filter:t=>{let n=this.looseRoutesById[t.routeId];if(!n.options.loader)return!0;let r=(t.preload?n.options.preloadGcTime??this.options.defaultPreloadGcTime:n.options.gcTime??this.options.defaultGcTime)??3e5;return t.status===`error`||e-t.updatedAt>=r}})},this.loadRouteChunk=Sn,this.preloadRoute=async e=>{let t=e._builtLocation??this.buildLocation(e),n=this.matchRoutes(t,{throwOnError:!0,preload:!0,dest:e}),r=new Set([...this.stores.matchesId.get(),...this.stores.pendingIds.get()]),i=new Set([...r,...this.stores.cachedIds.get()]),a=n.filter(e=>!i.has(e.id));if(a.length){let e=this.stores.cachedMatches.get();this.stores.setCached([...e,...a])}try{return n=await bn({router:this,matches:n,location:t,preload:!0,updateMatch:(e,t)=>{r.has(e)?n=n.map(n=>n.id===e?t(n):n):this.updateMatch(e,t)}}),n}catch(e){if(tn(e))return e.options.reloadDocument?void 0:await this.preloadRoute({...e.options,_fromLocation:t});Gt(e)||console.error(e);return}},this.matchRoute=(e,t)=>{let n={...e,to:e.to?this.resolvePathWithBase(e.from||``,e.to):void 0,params:e.params||{},leaveParams:!0},r=this.buildLocation(n);if(t?.pending&&this.stores.status.get()!==`pending`)return!1;let i=(t?.pending===void 0?!this.stores.isLoading.get():t.pending)?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),a=bt(r.pathname,t?.caseSensitive??!1,t?.fuzzy??!1,i.pathname,this.processedTree);return!a||e.params&&!Ze(a.rawParams,e.params,{partial:!0})?!1:t?.includeSearch??!0?Ze(i.search,r.search,{partial:!0})?a.rawParams:!1:a.rawParams},this.hasNotFoundMatch=()=>this.stores.matches.get().some(e=>e.status===`notFound`||e.globalNotFound),this.getStoreConfig=t,this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...e,caseSensitive:e.caseSensitive??!1,notFoundMode:e.notFoundMode??`fuzzy`,stringifySearch:e.stringifySearch??Xt,parseSearch:e.parseSearch??Yt,protocolAllowlist:e.protocolAllowlist??nt}),typeof document<`u`&&(self.__TSR_ROUTER__=this)}isShell(){return!!this.options.isShell}isPrerendering(){return!!this.options.isPrerendering}get state(){return this.stores.__store.get()}setRoutes({routesById:e,routesByPath:t,processedTree:n}){this.routesById=e,this.routesByPath=t,this.processedTree=n;let r=this.options.notFoundRoute;r&&(r.init({originalIndex:99999999999}),this.routesById[r.id]=r)}getRouteBranch(e){let t=this.routeBranchCache.get(e);return t||(t=Et(e),this.routeBranchCache.set(e,t)),t}get looseRoutesById(){return this.routesById}getParentContext(e){return e?.id?e.context??this.options.context??void 0:this.options.context??void 0}matchRoutesInternal(e,t){let n=this.getMatchedRoutes(e.pathname),{foundRoute:r,routeParams:i}=n,{matchedRoutes:a}=n,o=!1;(r?r.path!==`/`&&i[`**`]:It(e.pathname))&&(this.options.notFoundRoute?a=[...a,this.options.notFoundRoute]:o=!0);let s=o?Zn(this.options.notFoundMode,a):void 0,c=Array(a.length),l=new Map;for(let e of this.stores.matchStores.values())e.routeId&&l.set(e.routeId,e.get());for(let n=0;nthis.navigate({...t,_fromLocation:e}),buildLocation:this.buildLocation,cause:n.cause,abortController:n.abortController,preload:!!n.preload,matches:c,routeId:r.id};n.__routeContext=r.options.context(t)??void 0}n.context={...a,...n.__routeContext,...n.__beforeLoadContext}}}return c}matchRoutesLightweight(e){let{matchedRoutes:t,routeParams:n}=this.getMatchedRoutes(e.pathname),r=ze(t),i={...e.search};for(let e of t)try{Object.assign(i,qn(e.options.validateSearch,i))}catch{}let a=ze(this.stores.matchesId.get()),o=a&&this.stores.matchStores.get(a)?.get(),s=o&&o.routeId===r.id&&o.pathname===e.pathname,c;if(s)c=o.params;else{let e=Object.assign(Object.create(null),n);for(let n of t)try{Qn(n,e)}catch{}c=e}return{matchedRoutes:t,fullPath:r.fullPath,search:i,params:c}}},Wn=class extends Error{},Gn=class extends Error{};function Kn(e){return{loadedAt:0,isLoading:!1,isTransitioning:!1,status:`idle`,resolvedLocation:void 0,location:e,matches:[],statusCode:200}}function qn(e,t){if(e==null)return{};if(`~standard`in e){let n=e[`~standard`].validate(t);if(n instanceof Promise)throw new Wn(`Async validation not supported`);if(n.issues)throw new Wn(JSON.stringify(n.issues,void 0,2),{cause:n});return n.value}return`parse`in e?e.parse(t):typeof e==`function`?e(t):{}}function Jn({pathname:e,routesById:t,processedTree:n}){let r=Object.create(null),i=It(e),a,o=xt(i,n,!0);return o&&(a=o.route,Object.assign(r,o.rawParams)),{matchedRoutes:o?.branch||[t.__root__],routeParams:r,foundRoute:a}}function Yn({search:e,dest:t,destRoutes:n,_includeValidateSearch:r}){return Xn(n)(e,t,r??!1)}function Xn(e){let t={dest:null,_includeValidateSearch:!1,middlewares:[]};for(let n of e)`search`in n.options?n.options.search?.middlewares&&t.middlewares.push(...n.options.search.middlewares):(n.options.preSearchFilters||n.options.postSearchFilters)&&t.middlewares.push(({search:e,next:t})=>{let r=e;`preSearchFilters`in n.options&&n.options.preSearchFilters&&(r=n.options.preSearchFilters.reduce((e,t)=>t(e),e));let i=t(r);return`postSearchFilters`in n.options&&n.options.postSearchFilters?n.options.postSearchFilters.reduce((e,t)=>t(e),i):i}),n.options.validateSearch&&t.middlewares.push(({search:e,next:r})=>{let i=r(e);if(!t._includeValidateSearch)return i;try{return{...i,...qn(n.options.validateSearch,i)??void 0}}catch{return i}});t.middlewares.push(({search:e})=>{let n=t.dest;return n.search?n.search===!0?e:Ve(n.search,e):{}});let n=(e,t,r)=>{if(e>=r.length)return t;let i=r[e];return i({search:t,next:t=>n(e+1,t,r)})};return function(e,r,i){return t.dest=r,t._includeValidateSearch=i,n(0,e,t.middlewares)}}function Zn(e,t){if(e!==`root`)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.children)return n.id}return $t}function Qn(e,t){let n=e.options.params?.parse??e.options.parseParams;if(n){let e=n(t);if(e===!1)throw Error(`Route params.parse returned false for a matched route`);Object.assign(t,e)}}function $n(){try{return sessionStorage}catch{return}}var er=`tsr-scroll-restoration-v1_3`,tr=$n();function nr(){try{return JSON.parse(tr?.getItem(`tsr-scroll-restoration-v1_3`)||`{}`)}catch{return{}}}function rr(){try{tr?.setItem(er,JSON.stringify(ir))}catch{}}var ir=nr(),ar=`data-scroll-restoration-id`,or=e=>e.state.__TSR_key||e.href;function sr(e){let t=e.getAttribute(ar);if(t)return`[${ar}="${t}"]`;let n=``,r=e,i;for(;i=r.parentNode;){let e=1,t=r;for(;t=t.previousElementSibling;)e++;let a=`${r.localName}:nth-child(${e})`;n=n?`${a} > ${n}`:a,r=i}return n}var cr=!1,lr=`window`;function ur(e){try{return typeof e==`function`?e():document.querySelector(e)}catch{}}function dr(e){let t=[];for(let n of e){if(n===lr)continue;let e=ur(n);e&&t.push(e)}return t}function fr(e,t){if((t??e.options.scrollRestoration)&&(e.isScrollRestoring=!0),e.isScrollRestorationSetup)return;e.isScrollRestorationSetup=!0,cr=!1;let n=e.options.getScrollRestorationKey||or,r=new Map,i=(e,t,n)=>{let i=r.get(e)||{};i.scrollX=t,i.scrollY=n,r.set(e,i)};history.scrollRestoration=`manual`;let a=t=>{if(!(cr||!e.isScrollRestoring)){if(t.target===document)i(lr,scrollX,scrollY);else{let e=t.target;i(e,e.scrollLeft,e.scrollTop)}}},o=t=>{if(!e.isScrollRestoring)return;let n=ir[t]||={};for(let[e,t]of r)e===lr?n[lr]=t:e.isConnected&&(n[sr(e)]=t)};document.addEventListener(`scroll`,a,!0),e.subscribe(`onBeforeLoad`,e=>{e.fromLocation&&o(n(e.fromLocation)),r.clear()}),addEventListener(`pagehide`,()=>{o(n(e.stores.resolvedLocation.get()??e.stores.location.get())),rr()}),e.subscribe(`onRendered`,t=>{let i=e.options.scrollRestorationBehavior,a=e.options.scrollToTopSelectors,o=e.resetNextScroll,s;if(r.clear(),o||(e.resetNextScroll=!0),typeof e.options.scrollRestoration==`function`&&!e.options.scrollRestoration({location:e.latestLocation}))return;let c=n(t.toLocation),l=t.fromLocation&&n(t.fromLocation);if(e.isScrollRestoring&&l&&l!==c){let e=ir[l];if(e){let t=ir[c];for(let n in e){if(n===lr){if(o)continue}else{let e=ur(n);if(!e||o&&a&&(s??=dr(a),s.includes(e)))continue}t||=ir[c]={},t[n]??=e[n]}}}cr=!0;try{let n=t.toLocation.hash,r=t.toLocation.state.__hashScrollIntoViewOptions??!0,l=!1;if(o){let o=Hn.get(t.toLocation),u=n&&r&&(o===`PUSH`||o===`REPLACE`),d=e.isScrollRestoring?ir[c]:void 0;if(d)for(let e in d){let{scrollX:t,scrollY:n}=d[e];if(e===lr){if(u)continue;scrollTo({top:n,left:t,behavior:i}),l=!0}else{let r=ur(e);r&&(r.scrollLeft=t,r.scrollTop=n)}}if(!l&&!n){let e={top:0,left:0,behavior:i};if(scrollTo(e),a){s??=dr(a);for(let t of s)t.scrollTo(e)}}}!l&&n&&r&&document.getElementById(n)?.scrollIntoView(r)}finally{cr=!1}})}var pr=`Error preloading route! ☝️`,mr=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e.originalIndex;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=$t:this.parentRoute||st();let r=n?$t:t?.path;r&&r!==`/`&&(r=Ft(r));let i=t?.id||r,a=n?$t:Nt([this.parentRoute.id===`__root__`?``:this.parentRoute.id,i]);r===`__root__`&&(r=`/`),a!==`__root__`&&(a=Nt([`/`,a]));let o=a===`__root__`?`/`:Nt([this.parentRoute.fullPath,r]);this._path=r,this._id=a,this._fullPath=o,this._to=It(o)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>en({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},hr=class extends mr{constructor(e){super(e)}};function gr(e){let t=e.errorComponent??vr;return(0,z.jsx)(_r,{getResetKey:e.getResetKey,onCatch:e.onCatch,children:({error:n,reset:r})=>n?R.createElement(t,{error:n,reset:r}):e.children})}var _r=class extends R.Component{constructor(...e){super(...e),this.state={error:null}}static getDerivedStateFromProps(e,t){let n=e.getResetKey();return t.error&&t.resetKey!==n?{resetKey:n,error:null}:{resetKey:n}}static getDerivedStateFromError(e){return{error:e}}reset(){this.setState({error:null})}componentDidCatch(e,t){this.props.onCatch&&this.props.onCatch(e,t)}render(){return this.props.children({error:this.state.error,reset:()=>{this.reset()}})}};function vr({error:e}){let[t,n]=R.useState(!1);return(0,z.jsxs)(`div`,{style:{padding:`.5rem`,maxWidth:`100%`},children:[(0,z.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`.5rem`},children:[(0,z.jsx)(`strong`,{style:{fontSize:`1rem`},children:`Something went wrong!`}),(0,z.jsx)(`button`,{style:{appearance:`none`,fontSize:`.6em`,border:`1px solid currentColor`,padding:`.1rem .2rem`,fontWeight:`bold`,borderRadius:`.25rem`},onClick:()=>n(e=>!e),children:t?`Hide Error`:`Show Error`})]}),(0,z.jsx)(`div`,{style:{height:`.25rem`}}),t?(0,z.jsx)(`div`,{children:(0,z.jsx)(`pre`,{style:{fontSize:`.7em`,border:`1px solid red`,borderRadius:`.25rem`,padding:`.3rem`,color:`red`,overflow:`auto`},children:e.message?(0,z.jsx)(`code`,{children:e.message}):null})}):null]})}function yr({children:e,fallback:t=null}){return br()?(0,z.jsx)(R.Fragment,{children:e}):(0,z.jsx)(R.Fragment,{children:t})}function br(){return R.useSyncExternalStore(xr,()=>!0,()=>!1)}function xr(){return()=>{}}var Sr=R.createContext(null);function Cr(e){return R.useContext(Sr)}var wr=R.createContext(void 0),Tr=R.createContext(void 0),Er=(e=>(e[e.None=0]=`None`,e[e.Mutable=1]=`Mutable`,e[e.Watching=2]=`Watching`,e[e.RecursedCheck=4]=`RecursedCheck`,e[e.Recursed=8]=`Recursed`,e[e.Dirty=16]=`Dirty`,e[e.Pending=32]=`Pending`,e))(Er||{});function Dr({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(!0)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(!0)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function Or(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var kr=[],Ar=0,{link:jr,unlink:Mr,propagate:Nr,checkDirty:Pr,shallowPropagate:Fr}=Dr({update(e){return e._update()},notify(e){kr[Lr++]=e,e.flags&=~Er.Watching},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=Er.Mutable|Er.Dirty,Vr(e))}}),Ir=0,Lr=0,Rr,zr=0;function Br(e){try{++zr,e()}finally{--zr||Hr()}}function Vr(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Mr(n,e)}function Hr(){if(!(zr>0)){for(;Ir{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=Rr,o=t?.compare??Object.is;if(n)Rr=i,++Ar,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=Er.Mutable|Er.RecursedCheck);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{Rr=a,n&&(i.flags&=~Er.RecursedCheck),Vr(i)}}};return n?(i.flags=Er.Mutable|Er.Dirty,i.get=function(){let e=i.flags;if(e&Er.Dirty||e&Er.Pending&&Pr(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Fr(e)}}else e&Er.Pending&&(i.flags=e&~Er.Pending);return Rr!==void 0&&jr(i,Rr,Ar),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(Nr(e),Fr(e),Hr())}},i}function Wr(e){let t=()=>{let t=Rr;Rr=n,++Ar,n.depsTail=void 0,n.flags=Er.Watching|Er.RecursedCheck;try{return e()}finally{Rr=t,n.flags&=~Er.RecursedCheck,Vr(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:Er.Watching|Er.RecursedCheck,notify(){let e=this.flags;e&Er.Dirty||e&Er.Pending&&Pr(this.deps,this)?t():this.flags=Er.Watching},stop(){this.flags=Er.None,this.depsTail=void 0,Vr(this)}};return t(),n}var Gr=o((e=>{var t=f();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})),Kr=o(((e,t)=>{t.exports=Gr()})),qr=o((e=>{var t=f(),n=Kr();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useSyncExternalStore,o=t.useRef,s=t.useEffect,c=t.useMemo,l=t.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,u){var d=o(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=c(function(){function e(e){if(!a){if(a=!0,o=e,e=r(e),u!==void 0&&f.hasValue){var t=f.value;if(u(t,e))return s=t}return s=e}if(t=s,i(o,e))return t;var n=r(e);return u!==void 0&&u(t,n)?(o=e,t):(o=e,s=n)}var a=!1,o,s,c=n===void 0?null:n;return[function(){return e(t())},c===null?void 0:function(){return e(c())}]},[t,n,r,u]);var p=a(e,d[0],d[1]);return s(function(){f.hasValue=!0,f.value=p},[p]),l(p),p}})),Jr=o(((e,t)=>{t.exports=qr()}))();function Yr(e,t){return e===t}function Xr(e,t,n=Yr){let r=(0,R.useCallback)(t=>{if(!e)return()=>{};let{unsubscribe:n}=e.subscribe(t);return n},[e]),i=(0,R.useCallback)(()=>e?.get(),[e]);return(0,Jr.useSyncExternalStoreWithSelector)(r,i,i,t,n)}var Zr={get:()=>void 0,subscribe:()=>({unsubscribe:()=>{}})};function Qr(e){let t=Cr(),n=R.useContext(e.from?Tr:wr),r=e.from??n,i=r?e.from?t.stores.getRouteMatchStore(r):t.stores.matchStores.get(r):void 0,a=R.useRef(void 0);return Xr(i??Zr,n=>{if((e.shouldThrow??!0)&&!n&&st(),n===void 0)return;let r=e.select?e.select(n):n;if(e.structuralSharing??t.options.defaultStructuralSharing){let e=qe(a.current,r);return a.current=e,e}return r})}function $r(e){return Qr({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function ei(e){let{select:t,...n}=e;return Qr({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function ti(e){return Qr({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function ni(e){return Qr({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}function ri(e){let t=Cr();return R.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}function ii(e){let t=Cr(),n=ri(),r=R.useRef(null);return Ie(()=>{r.current!==e&&(n(e),r.current=e)},[t,e,n]),null}function ai(e){return Qr({...e,select:t=>e.select?e.select(t.context):t.context})}var oi=m();function si(e,t){let n=Cr(),r=B(t),{activeProps:i,inactiveProps:a,activeOptions:o,to:s,preload:c,preloadDelay:l,preloadIntentProximity:u,hashScrollIntoView:d,replace:f,startTransition:p,resetScroll:m,viewTransition:h,children:g,target:_,disabled:v,style:y,className:b,onClick:x,onBlur:S,onFocus:C,onMouseEnter:w,onMouseLeave:T,onTouchStart:E,ignoreBlocker:D,params:O,search:k,hash:A,state:ee,mask:j,reloadDocument:M,unsafeRelative:te,from:ne,_fromLocation:N,...P}=e,re=br(),ie=R.useMemo(()=>e,[n,e.from,e._fromLocation,e.hash,e.to,e.search,e.params,e.state,e.mask,e.unsafeRelative]),ae=Xr(n.stores.location,e=>e,(e,t)=>e.href===t.href),F=R.useMemo(()=>{let e={_fromLocation:ae,...ie};return n.buildLocation(e)},[n,ae,ie]),oe=F.maskedLocation?F.maskedLocation.publicHref:F.publicHref,I=F.maskedLocation?F.maskedLocation.external:F.external,se=R.useMemo(()=>gi(oe,I,n.history,v),[v,I,oe,n.history]),L=R.useMemo(()=>{if(se?.external)return rt(se.href,n.protocolAllowlist)?void 0:se.href;if(!_i(s)&&typeof s==`string`&&s.indexOf(`:`)!==-1)try{return new URL(s),rt(s,n.protocolAllowlist)?void 0:s}catch{}},[s,se,n.protocolAllowlist]),ce=R.useMemo(()=>{if(L)return!1;if(o?.exact){if(!zt(ae.pathname,F.pathname,n.basepath))return!1}else{let e=Rt(ae.pathname,n.basepath),t=Rt(F.pathname,n.basepath);if(!(e.startsWith(t)&&(e.length===t.length||e[t.length]===`/`)))return!1}return(o?.includeSearch??!0)&&!Ze(ae.search,F.search,{partial:!o?.exact,ignoreUndefined:!o?.explicitUndefined})?!1:!o?.includeHash||re&&ae.hash===F.hash},[o?.exact,o?.explicitUndefined,o?.includeHash,o?.includeSearch,ae,L,re,F.hash,F.pathname,F.search,n.basepath]),le=ce?Ve(i,{})??li:ci,ue=ce?ci:Ve(a,{})??ci,de=[b,le.className,ue.className].filter(Boolean).join(` `),fe=(y||le.style||ue.style)&&{...y,...le.style,...ue.style},[pe,me]=R.useState(!1),he=R.useRef(!1),ge=e.reloadDocument||L?!1:c??n.options.defaultPreload,_e=l??n.options.defaultPreloadDelay??0,ve=R.useCallback(()=>{n.preloadRoute({...ie,_builtLocation:F}).catch(e=>{console.warn(e),console.warn(pr)})},[n,ie,F]);Re(r,R.useCallback(e=>{e?.isIntersecting&&ve()},[ve]),mi,{disabled:!!v||ge!==`viewport`}),R.useEffect(()=>{he.current||!v&&ge===`render`&&(ve(),he.current=!0)},[v,ve,ge]);let ye=e=>{let t=e.currentTarget.getAttribute(`target`),r=_===void 0?t:_;if(!v&&!yi(e)&&!e.defaultPrevented&&(!r||r===`_self`)&&e.button===0){e.preventDefault(),(0,oi.flushSync)(()=>{me(!0)});let t=n.subscribe(`onResolved`,()=>{t(),me(!1)});n.navigate({...ie,replace:f,resetScroll:m,hashScrollIntoView:d,startTransition:p,viewTransition:h,ignoreBlocker:D})}};if(L)return{...P,ref:r,href:L,...g&&{children:g},..._&&{target:_},...v&&{disabled:v},...y&&{style:y},...b&&{className:b},...x&&{onClick:x},...S&&{onBlur:S},...C&&{onFocus:C},...w&&{onMouseEnter:w},...T&&{onMouseLeave:T},...E&&{onTouchStart:E}};let be=e=>{if(v||ge!==`intent`)return;if(!_e){ve();return}let t=e.currentTarget;if(pi.has(t))return;let n=setTimeout(()=>{pi.delete(t),ve()},_e);pi.set(t,n)},xe=e=>{v||ge!==`intent`||ve()},Se=e=>{if(v||!ge||!_e)return;let t=e.currentTarget,n=pi.get(t);n&&(clearTimeout(n),pi.delete(t))};return{...P,...le,...ue,href:se?.href,ref:r,onClick:hi([x,ye]),onBlur:hi([S,Se]),onFocus:hi([C,be]),onMouseEnter:hi([w,be]),onMouseLeave:hi([T,Se]),onTouchStart:hi([E,xe]),disabled:!!v,target:_,...fe&&{style:fe},...de&&{className:de},...v&&ui,...ce&&di,...re&&pe&&fi}}var ci={},li={className:`active`},ui={role:`link`,"aria-disabled":!0},di={"data-status":`active`,"aria-current":`page`},fi={"data-transitioning":`transitioning`},pi=new WeakMap,mi={rootMargin:`100px`},hi=e=>t=>{for(let n of e)if(n){if(t.defaultPrevented)return;n(t)}};function gi(e,t,n,r){if(!r)return t?{href:e,external:!0}:{href:n.createHref(e)||`/`,external:!1}}function _i(e){if(typeof e!=`string`)return!1;let t=e.charCodeAt(0);return t===47?e.charCodeAt(1)!==47:t===46}var vi=R.forwardRef((e,t)=>{let{_asChild:n,...r}=e,{type:i,...a}=si(r,t),o=typeof r.children==`function`?r.children({isActive:a[`data-status`]===`active`}):r.children;if(!n){let{disabled:e,...t}=a;return R.createElement(`a`,t,o)}return R.createElement(n,a,o)});function yi(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}var bi=class extends mr{constructor(e){super(e),this.useMatch=e=>Qr({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>ai({...e,from:this.id}),this.useSearch=e=>ni({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>ti({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>ei({...e,from:this.id}),this.useLoaderData=e=>$r({...e,from:this.id}),this.useNavigate=()=>ri({from:this.fullPath}),this.Link=R.forwardRef((e,t)=>(0,z.jsx)(vi,{ref:t,from:this.fullPath,...e}))}};function xi(e){return new bi(e)}var Si=class extends hr{constructor(e){super(e),this.useMatch=e=>Qr({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>ai({...e,from:this.id}),this.useSearch=e=>ni({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>ti({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>ei({...e,from:this.id}),this.useLoaderData=e=>$r({...e,from:this.id}),this.useNavigate=()=>ri({from:this.fullPath}),this.Link=R.forwardRef((e,t)=>(0,z.jsx)(vi,{ref:t,from:this.fullPath,...e}))}};function Ci(e){return new Si(e)}function wi(e){let t=Cr(),n=`not-found-${Xr(t.stores.location,e=>e.pathname)}-${Xr(t.stores.status,e=>e)}`;return(0,z.jsx)(gr,{getResetKey:()=>n,onCatch:(t,n)=>{if(Gt(t))e.onCatch?.(t,n);else throw t},errorComponent:({error:t})=>{if(Gt(t))return e.fallback?.(t);throw t},children:e.children})}function Ti(){return(0,z.jsx)(`p`,{children:`Not Found`})}function Ei(e){return(0,z.jsx)(z.Fragment,{children:e.children})}function Di(e,t,n){return t.options.notFoundComponent?(0,z.jsx)(t.options.notFoundComponent,{...n}):e.options.defaultNotFoundComponent?(0,z.jsx)(e.options.defaultNotFoundComponent,{...n}):(0,z.jsx)(Ti,{})}var Oi=R.memo(function({matchId:e}){let t=Cr(),n=t.stores.matchStores.get(e);n||st();let r=Xr(t.stores.loadedAt,e=>e),i=Xr(n,e=>e);return(0,z.jsx)(ki,{router:t,matchId:e,resetKey:r,matchState:R.useMemo(()=>{let e=i.routeId,n=t.routesById[e].parentRoute?.id;return{routeId:e,ssr:i.ssr,_displayPending:i._displayPending,parentRouteId:n}},[i._displayPending,i.routeId,i.ssr,t.routesById])})});function ki({router:e,matchId:t,resetKey:n,matchState:r}){let i=e.routesById[r.routeId],a=i.options.pendingComponent??e.options.defaultPendingComponent,o=a?(0,z.jsx)(a,{}):null,s=i.options.errorComponent??e.options.defaultErrorComponent,c=i.options.onCatch??e.options.defaultOnCatch,l=i.isRoot?i.options.notFoundComponent??e.options.notFoundRoute?.options.component:i.options.notFoundComponent,u=r.ssr===!1||r.ssr===`data-only`,d=(!i.isRoot||i.options.wrapInSuspense||u)&&(i.options.wrapInSuspense??a??(i.options.errorComponent?.preload||u))?R.Suspense:Ei,f=s?gr:Ei,p=l?wi:Ei;return(0,z.jsxs)(i.isRoot?i.options.shellComponent??Ei:Ei,{children:[(0,z.jsx)(wr.Provider,{value:t,children:(0,z.jsx)(d,{fallback:o,children:(0,z.jsx)(f,{getResetKey:()=>n,errorComponent:s||vr,onCatch:(e,t)=>{if(Gt(e))throw e.routeId??=r.routeId,e;c?.(e,t)},children:(0,z.jsx)(p,{fallback:e=>{if(e.routeId??=r.routeId,!l||e.routeId&&e.routeId!==r.routeId||!e.routeId&&!i.isRoot)throw e;return R.createElement(l,e)},children:u||r._displayPending?(0,z.jsx)(yr,{fallback:o,children:(0,z.jsx)(ji,{matchId:t})}):(0,z.jsx)(ji,{matchId:t})})})})}),r.parentRouteId===`__root__`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Ai,{resetKey:n}),(e.options.scrollRestoration,null)]}):null]})}function Ai({resetKey:e}){let t=Cr(),n=R.useRef(void 0);return Ie(()=>{let e=t.latestLocation.href;(n.current===void 0||n.current!==e)&&(t.emit({type:`onRendered`,...Vn(t.stores.location.get(),t.stores.resolvedLocation.get())}),n.current=e)},[t.latestLocation.state.__TSR_key,e,t]),null}var ji=R.memo(function({matchId:e}){let t=Cr(),n=(e,n)=>t.getMatch(e.id)?._nonReactive[n]??e._nonReactive[n],r=t.stores.matchStores.get(e);r||st();let i=Xr(r,e=>e),a=i.routeId,o=t.routesById[a],s=R.useMemo(()=>{let e=(t.routesById[a].options.remountDeps??t.options.defaultRemountDeps)?.({routeId:a,loaderDeps:i.loaderDeps,params:i._strictParams,search:i._strictSearch});return e?JSON.stringify(e):void 0},[a,i.loaderDeps,i._strictParams,i._strictSearch,t.options.defaultRemountDeps,t.routesById]),c=R.useMemo(()=>{let e=o.options.component??t.options.defaultComponent;return e?(0,z.jsx)(e,{},s):(0,z.jsx)(Mi,{})},[s,o.options.component,t.options.defaultComponent]);if(i._displayPending)throw n(i,`displayPendingPromise`);if(i._forcePending)throw n(i,`minPendingPromise`);if(i.status===`pending`){let e=o.options.pendingMinMs??t.options.defaultPendingMinMs;if(e){let n=t.getMatch(i.id);if(n&&!n._nonReactive.minPendingPromise){let t=Qe();n._nonReactive.minPendingPromise=t,setTimeout(()=>{t.resolve(),n._nonReactive.minPendingPromise=void 0},e)}}throw n(i,`loadPromise`)}if(i.status===`notFound`)return Gt(i.error)||st(),Di(t,o,i.error);if(i.status===`redirected`)throw tn(i.error)||st(),n(i,`loadPromise`);if(i.status===`error`)throw i.error;return c}),Mi=R.memo(function(){let e=Cr(),t=R.useContext(wr),n,r=!1,i;{let a=t?e.stores.matchStores.get(t):void 0;[n,r]=Xr(a,e=>[e?.routeId,e?.globalNotFound??!1]),i=Xr(e.stores.matchesId,e=>e[e.findIndex(e=>e===t)+1])}let a=n?e.routesById[n]:void 0,o=e.options.defaultPendingComponent?(0,z.jsx)(e.options.defaultPendingComponent,{}):null;if(r)return a||st(),Di(e,a,void 0);if(!i)return null;let s=(0,z.jsx)(Oi,{matchId:i});return n===`__root__`?(0,z.jsx)(R.Suspense,{fallback:o,children:s}):s});function Ni(){let e=Cr(),t=R.useRef({router:e,mounted:!1}),[n,r]=R.useState(!1),i=Xr(e.stores.isLoading,e=>e),a=Xr(e.stores.hasPending,e=>e),o=Le(i),s=i||n||a,c=Le(s),l=i||a,u=Le(l);return e.startTransition=e=>{r(!0),R.startTransition(()=>{e(),r(!1)})},R.useEffect(()=>{let t=e.history.subscribe(e.load),n=e.buildLocation({to:e.latestLocation.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});return It(e.latestLocation.publicHref)!==It(n.publicHref)&&e.commitLocation({...n,replace:!0}),()=>{t()}},[e,e.history]),Ie(()=>{typeof window<`u`&&e.ssr||t.current.router===e&&t.current.mounted||(t.current={router:e,mounted:!0},(async()=>{try{await e.load()}catch(e){console.error(e)}})())},[e]),Ie(()=>{o&&!i&&e.emit({type:`onLoad`,...Vn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[o,e,i]),Ie(()=>{u&&!l&&e.emit({type:`onBeforeRouteMount`,...Vn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[l,u,e]),Ie(()=>{if(c&&!s){let t=Vn(e.stores.location.get(),e.stores.resolvedLocation.get());e.emit({type:`onResolved`,...t}),Br(()=>{e.stores.status.set(`idle`),e.stores.resolvedLocation.set(e.stores.location.get())})}},[s,c,e]),null}function Pi(){let e=Cr(),t=e.routesById.__root__.options.pendingComponent??e.options.defaultPendingComponent,n=t?(0,z.jsx)(t,{}):null,r=(0,z.jsxs)(typeof document<`u`&&e.ssr?Ei:R.Suspense,{fallback:n,children:[(0,z.jsx)(Ni,{}),(0,z.jsx)(Fi,{})]});return e.options.InnerWrap?(0,z.jsx)(e.options.InnerWrap,{children:r}):r}function Fi(){let e=Cr(),t=Xr(e.stores.firstId,e=>e),n=Xr(e.stores.loadedAt,e=>e),r=t?(0,z.jsx)(Oi,{matchId:t}):null;return(0,z.jsx)(wr.Provider,{value:t,children:e.options.disableGlobalCatchBoundary?r:(0,z.jsx)(gr,{getResetKey:()=>n,errorComponent:vr,onCatch:void 0,children:r})})}var Ii=e=>({createMutableStore:Ur,createReadonlyStore:Ur,batch:Br}),Li=e=>new Ri(e),Ri=class extends Un{constructor(e){super(e,Ii)}};function zi({router:e,children:t,...n}){We(n)&&e.update({...e.options,...n,context:{...e.options.context,...n.context}});let r=(0,z.jsx)(Sr.Provider,{value:e,children:t});return e.options.Wrap?(0,z.jsx)(e.options.Wrap,{children:r}):r}function Bi({router:e,...t}){return(0,z.jsx)(zi,{router:e,...t,children:(0,z.jsx)(Pi,{})})}var Vi=g(),Hi=(0,R.createContext)(null),Ui=`loopx-pw-locale`,Wi={en:{"acceptance.connected":`Connected`,"acceptance.mapped":`Project mapped`,"acceptance.refreshed":`State refreshed`,"acceptance.inspected":`Adapter inspected`,"acceptance.recorded":`Run recorded`,"acceptance.judged":`Feedback recorded`,"acceptance.approved":`Approval recorded`,"acceptance.ready":`Controller readiness recorded`,"acceptance.attentionSource":`Current status`,"acceptance.visionSource":`Agent acceptance criteria`,"acceptance.todoSource":`Task state`,"acceptance.runSource":`Fresh run evidence`,"acceptance.title":`Acceptance observations`,"acceptance.unavailable":`Acceptance observations are unavailable. Goal completion is unknown.`,"acceptance.partial":`Partial observations only. Completed tasks and an empty gap list do not prove Goal acceptance.`,"acceptance.gaps":`Evidence still required`,"acceptance.reasonUnknown":`Reason not provided by the source`,"acceptance.unknown":`Unknown`,"acceptance.required":`Required evidence or condition`,"acceptance.observed":`Observed at`,"acceptance.noGaps":`No gaps in the available observations. Full acceptance has not been assessed.`,"acceptance.guards":`Pending gates`,"acceptance.noGuards":`No pending gates in the available observations.`,"acceptance.scope":`Decision scope`,"acceptance.next":`Next action from current status`,"acceptance.historical_progress":`Recorded progress`,"acceptance.historical":`Historical lifecycle observations do not grant permission or certify acceptance.`,"acceptance.missing":`Sources not available:`,"acceptance.truncated":`Only the first 12 observations are shown.`,"common.actions":`Actions`,"common.agent":`Agent`,"common.allMessages":`All messages`,"common.cancel":`Cancel`,"common.close":`Close`,"common.closeActionReceipt":`Close action receipt`,"common.confirm":`Confirm`,"common.export":`Export`,"common.failed":`Failed`,"common.goal":`Goal`,"common.loading":`Loading…`,"common.none":`None`,"common.off":`Off`,"common.on":`On`,"common.open":`Open`,"common.owner":`Owner`,"common.readOnly":`Read only`,"common.recently":`Just now`,"common.status":`Status`,"common.task":`Task`,"common.you":`You`,"common.waiting":`Waiting`,"composer.addImage":`Add image`,"composer.agentProgress":`Ask Agent for a progress report`,"composer.blockers":`Ask what blocks`,"composer.agentProgressPrompt":`Give me a progress report for this Goal: completed, running, blocked, and next steps.`,"composer.attachImageHint":`Choose, paste, or drag an image`,"composer.clarifyDefer":`Deferring a Todo requires a deterministic resume condition. Add todo_done:, pr_merged:[owner/repo]#, capacity_available:, or resume_at:.`,"composer.clarifySingleAction":`This message contains multiple operations that may change state. Describe one operation at a time so each confirmation preview can be reviewed separately.`,"composer.createGoal":`Create Goal`,"composer.createGoalDraft":`Goal draft`,"composer.createGoalDraftDescription":`Complete the draft and send it. LoopX will show a confirmation preview first.`,"composer.createGoalDraftLead":`Create a long-term Goal:`,"composer.createGoalTemplate":`Create a long-term Goal: -Objective: -Completion criteria: -Execution boundary (optional): -Related repository (optional): -Notification method (optional):`,"composer.createGoalHint":`Insert a Goal template to review before creation`,"composer.evidence":`Check what is proven`,"composer.globalProgress":`Summarize all Goal progress`,"composer.globalProgressPrompt":`Summarize the latest progress and blockers for all active Goals.`,"composer.globalTasks":`Ask about global priorities`,"composer.globalTasksPrompt":`Which Goals need me, and what should I handle first?`,"composer.goalMessageHint":`Your message is delivered to {agent} in this Goal session.`,"composer.goalRunningHint":`{count} conversations are running in this Goal · your message goes to the current {agent} conversation`,"composer.goalPlaceholder":`Ask or guide {goal}…`,"composer.imageAnalysisPrompt":`Analyze these images in the context of the current Goal and tell me the next step.`,"composer.imageCountError":`You can add up to {count} images.`,"composer.imagePicker":`Image file picker`,"composer.imageReadError":`Could not read image {name}.`,"composer.imageReadGenericError":`Could not read the image.`,"composer.imageSizeError":`Each image must be {size} MB or smaller.`,"composer.imageTypeError":`PNG, JPEG, WebP, and GIF images are supported.`,"composer.imagesPending":`Images to send`,"composer.managerMessageHint":`Your message goes to the LoopX Manager across Goals for global questions or Goal creation.`,"composer.managerPlaceholder":`Ask the LoopX Manager, or describe a new Goal…`,"composer.monitor":`Configure scheduled check`,"composer.monitorGoalQuestion":`Which Goal should receive the scheduled check?`,"composer.monitorTemplate":`Add a scheduled check for the current Goal: -Check target: -Frequency (supports 30 minutes / 2 hours / daily): Every 2 hours -Stop condition: Goal completes`,"composer.monitorShortcutTemplate":`Add a scheduled check for the current Goal: -Check target: {target} -Frequency: Every 2 hours -Stop condition: Goal completes`,"composer.monitorTemplateWithoutGoal":`Configure a scheduled check: -Goal: -Check target: -Frequency: Every 2 hours -Stop condition: Goal completes`,"composer.heartbeatGoalQuestion":`Which Goal should receive the Heartbeat?`,"composer.heartbeatTemplate":`Set a Heartbeat for the current Goal: -Frequency: Daily -Stop condition: Goal completes -Notification: Only notify me when needed`,"composer.heartbeatTemplateWithoutGoal":`Set up a Heartbeat: -Goal: -Frequency: Daily -Stop condition: Goal completes -Notification: Only notify me when needed`,"composer.nextAction":`Ask what’s next`,"composer.nextActionPrompt":`What should I do next?`,"composer.send":`Send`,"composer.sendMessage":`Send a message to LoopX`,"composer.sendMessageHint":`Send message`,"composer.sentImageAlt":`Remove image {name}`,"conversation.agentPending":`Working…`,"conversation.close":`Close conversation receipt`,"conversation.convertHint":`Turn the Agent’s latest reply into a Task draft`,"conversation.full":`View full conversation`,"conversation.receipt":`Conversation receipt`,"conversation.replying":`Replying`,"conversation.title":`Manager conversation`,"conversation.toTask":`Convert to Task`,"digest.away":`Runs since your previous visit`,"digest.completed":`new completions`,"digest.failed":`new failed/interrupted runs`,"digest.needsYou":`currently need confirmation`,"feedback.applying":`Running: {title}`,"feedback.cancelFailed":`Cancel failed: {error}`,"feedback.completed":`Completed: {title}`,"feedback.executionFailed":`Execution failed: {error}`,"feedback.gateRequired":`Your confirmation is required: {summary}`,"feedback.notCompleted":`Not completed: {status}`,"feedback.goalRefreshFailed":`The Goal opened, but its latest state could not be refreshed. Use Refresh to try again.`,"feedback.preparingPreview":`Preparing confirmation preview: {title}`,"feedback.previewFailed":`Could not prepare the confirmation preview: {error}`,"feedback.sendFailed":`Send failed: {error}`,"feedback.sendGenericError":`Could not send the message. Try again later.`,"feedback.stale":`State changed, so nothing was applied. Generate a new confirmation preview.`,"feedback.taskDraftCreated":`Created a Task draft from the reply. Edit and send it to review the confirmation preview.`,"goal.defaultTitle":`New personal Goal`,"goal.initialTodo":`Work toward the completion criteria: {criteria}`,"goal.objectiveBoundary":`Execution boundary: {boundary}`,"goal.objectiveCompletion":`Completion criteria: {criteria}`,"drawer.advancedDiagnostics":`Advanced diagnostics`,"drawer.agentWorking":`Agent is continuing; the record updates automatically.`,"drawer.analysis":`Analyzing`,"drawer.apply":`Confirm and apply`,"drawer.applying":`Applying…`,"drawer.attentionBlocking":`Blocking an Agent`,"drawer.attentionWaiting":`Waiting for your decision`,"drawer.autoNotify":`Human-gate auto notifications`,"drawer.branch":`Branch`,"drawer.closeDetail":`Close details and return to {context}`,"drawer.connected":`Connected`,"drawer.correctionDescription":`The message keeps the current Goal, Todo, and Agent Session context.`,"drawer.correctionLabel":`Guide {agent}`,"drawer.correctionPlaceholder":`For example: focus on permission risks first and do not commit yet…`,"drawer.correctionSend":`Send guidance`,"drawer.correctionTextarea":`Enter guidance for Goal {goal}, Agent {agent}, Run {run}`,"drawer.copyRepository":`Copy repository identity`,"drawer.copyRepositoryDone":`Repository identity copied`,"drawer.copyRepositoryError":`Copy failed. Check browser clipboard permission.`,"drawer.copyRepositorySuccess":`Copied. You can paste it into another tool.`,"drawer.cost":`Cost 24h / 7d`,"drawer.costShort":`Cost`,"drawer.durationShort":`Duration`,"drawer.period24h":`24h`,"drawer.period7d":`7d`,"drawer.tokens":`Tokens 24h / 7d`,"drawer.tokensShort":`tokens`,"drawer.usageNotMeasured":`Not measured`,"drawer.currentGoal":`Current Goal`,"attentionDetail.title":`Request details`,"attentionDetail.request":`What is requested`,"attentionDetail.decision":`Decision requested`,"attentionDetail.unknownRequest":`Not specified; review the source before deciding`,"attentionDetail.open":`Open in current projection`,"attentionDetail.closed":`Closed`,"attentionDetail.deferred":`Deferred`,"attentionDetail.superseded":`Replaced`,"attentionDetail.unknown":`Status not provided`,"attentionDetail.unavailable":`The source has not confirmed this item; refresh before acting`,"attentionDetail.unknownReason":`The source has not provided a reason.`,"attentionDetail.targetTodo":`Linked Todo to unblock`,"attentionDetail.targetAgent":`Agent named by the request`,"attentionDetail.scope":`Declared decision scope`,"attentionDetail.notProvided":`Not provided`,"attentionDetail.replacement":`Replacement Todo`,"attentionDetail.openReplacement":`Open replacement`,"attentionDetail.boundary":`Reading this detail does not resolve a gate or grant authority. Available decisions require a fresh preview.`,"drawer.decisionDefaultEvidence":`No additional public-safe evidence is attached. The next step will still show a Preview first.`,"drawer.decisionDefaultReason":`This decision affects the next step of the current Todo.`,"drawer.decisionDefer":`Decide later`,"drawer.decisionMore":`More decisions`,"drawer.decisionReject":`Reject`,"drawer.decisionReview":`Review impact and decide`,"drawer.dependencies":`Dependencies`,"drawer.detailsAndActions":`Details & actions`,"drawer.duration":`Duration 24h / 7d`,"drawer.evidence":`Evidence`,"drawer.executionHistory":`Execution history`,"drawer.executionRecord":`Run record`,"drawer.executionRecordAndResult":`Execution & result`,"drawer.explainDecision":`Explain this decision`,"drawer.gateApproveHint":`Run one command in the terminal to complete approval:`,"drawer.gateRejectHint":`Replace approve with reject at the end to decline. This notice disappears after the command runs.`,"drawer.gateRequiresHost":`Host confirmation required`,"drawer.gateRequiresHostDescription":`This page cannot approve this protected permission change. Nothing was written by your click.`,"drawer.goalAutoRun":`Automatic runs for this Goal`,"drawer.goalChanges":`Pending changes for this Goal`,"drawer.goalDetails":`Goal details`,"drawer.group":`Group`,"drawer.inspectorFull":`Switch to full screen`,"drawer.inspectorFullView":`Full-screen view`,"drawer.inspectorHalf":`Switch to half screen`,"drawer.inspectorHalfView":`Half-screen view`,"drawer.lastNotification":`Latest notification`,"drawer.larkConfigure":`Configure Lark connection`,"drawer.larkConnect":`Connect Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`Not configured`,"drawer.larkNotConfiguredDescription":`After setup, LoopX sends a Feishu notification when this Goal needs your confirmation.`,"drawer.managerChanges":`Pending Manager changes`,"drawer.moreActions":`More actions`,"drawer.moreRunActions":`More run actions`,"drawer.nextTransition":`Next transition`,"drawer.validationRevision":`Validation revision`,"drawer.validationDigest":`Validation declaration digest`,"drawer.validationRevisionActor":`Revised by`,"drawer.noExecutionHistory":`No execution history yet.`,"drawer.noRun":`Execution Session has not started`,"drawer.noRunDescription":`Run records will appear here after an Agent starts execution.`,"drawer.notAssigned":`Unassigned`,"drawer.notLinked":`Not linked`,"drawer.notSet":`Not set`,"drawer.outputDetails":`Output details`,"drawer.outputRecorded":`This output is recorded on the current Goal.`,"drawer.outputSafePreview":`Public-safe output preview`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`Outputs from this run`,"drawer.previewUnavailable":`No public-safe inline preview is available for this output.`,"drawer.priority":`Priority`,"drawer.progress":`Progress`,"drawer.proposalApplied":`Applied. LoopX state will refresh.`,"drawer.proposalApplyFailed":`Apply failed. No changes were written.`,"drawer.proposalApplyFailedHint":`Refresh the Goal state and regenerate. If it still fails, keep this page open and inspect advanced diagnostics.`,"drawer.proposalClose":`Close`,"drawer.proposalDefer":`Later`,"drawer.proposalDeferred":`Deferred. You can apply it later or regenerate it.`,"drawer.proposalEnterGoal":`Open new Goal`,"drawer.proposalExplainer":`After confirmation, LoopX applies this change and shows the write result. Closing or canceling changes nothing.`,"drawer.proposalRecheck":`Recheck against latest state`,"drawer.proposalRegenerate":`Retry with latest state`,"drawer.proposalRejected":`Rejected. This change will not be written.`,"drawer.proposalStale":`Source state changed. Recheck against the latest state.`,"drawer.proposalViewGoal":`View updated Goal`,"drawer.reassign":`Reassign to`,"drawer.reassignSummary":`Reassign: {task}`,"drawer.reason":`Reason`,"drawer.recoveryDescription":`Local history is preserved. Choose a recovery path.`,"drawer.recoveryFailed":`Upstream Session recovery failed`,"drawer.recoveryNewSession":`Start a new Session with context`,"drawer.recoveryRetry":`Retry recovery`,"drawer.repositoryRole":`Execution workspace`,"drawer.repository":`Repository`,"drawer.replyMode":`Reply mode`,"drawer.subagentApplied":`Applied and verified against the shared Goal state.`,"drawer.subagentAppliedRestart":`Applied and verified. The raised Codex child-agent limit takes effect in new Sessions.`,"drawer.subagentAppliedRefreshFailed":`Applied and verified. The status view could not refresh; retry the page refresh later.`,"drawer.subagentApplying":`Applying and verifying shared-state readback…`,"drawer.subagentApplyFailed":`Could not apply the sub-agent setting.`,"drawer.subagentChildLimit":`Current limit`,"drawer.subagentConfirmDisable":`Confirm turning off sub-agent execution`,"drawer.subagentConfirmEnable":`Confirm turning on sub-agent execution`,"drawer.subagentCurrentBoundary":`Current task-domain restriction`,"drawer.subagentDescription":`Allows the runtime to create temporary child agents for independent tasks only after Todo, quota, capability, and write-scope gates pass. It does not force parallel work or grant durable authority.`,"drawer.subagentDisable":`Preview turning off sub-agent execution`,"drawer.subagentDisableSummary":`New child-agent execution will be disabled for this Goal. Existing Todo ownership and execution records stay unchanged.`,"drawer.subagentDomainInvalid":`The selected task-domain restriction is invalid.`,"drawer.subagentDomainTodoCount":`{count} matching open Todos`,"drawer.subagentDomains":`Task-domain restriction (optional)`,"drawer.subagentDomainsEmpty":`No open advancement Todo declares task_domain. Leave this empty to keep child execution unrestricted by task domain.`,"drawer.subagentDomainsHint":`Leave every option clear to apply no task-domain filter. Selecting domains admits only matching typed Todos; all other execution gates still apply.`,"drawer.subagentDomainsUnrestricted":`No task-domain restriction`,"drawer.subagentEnable":`Preview turning on sub-agent execution`,"drawer.subagentLabel":`Per-Goal execution boundary`,"drawer.subagentModel":`Child model`,"drawer.subagentEffort":`Child reasoning effort`,"drawer.subagentModelDefault":`Host default`,"drawer.subagentLunaPreset":`Use Luna / max`,"drawer.subagentClearModel":`Clear model preference`,"drawer.subagentModelHint":`Use Preview configuration update to save this preference. It can be saved while execution is off; host support is checked at launch.`,"drawer.subagentModelRequired":`Choose a child model before setting reasoning effort.`,"drawer.subagentExecutionConfig":`Delegation bindings`,"drawer.subagentExecutionConfigHint":`Optional repo-relative ignored JSON under .loopx/config/. Planning sees only authorized route status; the file remains the execution-grant owner.`,"drawer.subagentExecutionConfigNone":`Not configured`,"drawer.subagentMaxChildren":`Maximum child agents`,"drawer.subagentHostCapacityImplicit":`implicit default`,"drawer.subagentHostCapacityRaise":`Confirming also raises the Codex child-agent limit to at least {required} (currently {configured}). Existing higher values are preserved; new Sessions are required.`,"drawer.subagentHostCapacityReady":`Codex child-agent capacity ({configured}) already satisfies this Goal ({required}).`,"drawer.subagentNoChange":`The current Goal already matches this setting; nothing was written.`,"drawer.subagentPending":`Pending confirmation`,"drawer.subagentPreviewBoundary":`Preview configuration update`,"drawer.subagentPreviewFailed":`Could not create the sub-agent setting preview.`,"drawer.subagentPreviewing":`Checking the latest Goal state…`,"drawer.subagentPreviewReady":`Preview locked. Confirm to apply this Goal setting.`,"drawer.subagentPreviewSummary":`Allow up to {count} child agents. Task-domain restriction: {domains}.`,"drawer.subagentRemoteReadOnly":`This source is read only. Open the Goal on its host to change the setting.`,"drawer.subagentTitle":`Adaptive sub-agent execution`,"drawer.remoteDetailsDescription":`SSH sources expose public-safe status only and do not read connection settings from the source host.`,"drawer.remoteDetailsUnavailable":`Remote details are not projected`,"drawer.resumeNo":`No`,"drawer.resumeYes":`Yes`,"drawer.runDetails":`Execution Session`,"drawer.runInterrupt":`Interrupt this run`,"drawer.runLatest":`View latest execution`,"drawer.runNewSession":`Start new Session`,"drawer.runCloseSession":`Close Session`,"drawer.runRecordEmpty":`No run record yet. The Agent has not started this execution. Check waiting conditions or resume the Session under Details & actions.`,"drawer.runRecordProjected":`No step-by-step record is available. LoopX read {completed}/{total} projected steps{outputs}; inspect the Session under Details & actions.`,"drawer.runRecordProjectedOutputs":` and {count} outputs`,"drawer.runRoleAssistant":`Completed`,"drawer.runRoleSystem":`Needs review`,"drawer.runRoleUser":`Task received`,"drawer.runView":`Session views`,"drawer.scheduleAdd":`Add scheduled check`,"drawer.scheduleDefaultNotification":`Notify only when you are needed`,"drawer.scheduleDefaultStop":`Goal completes or owner stops it`,"drawer.scheduleDefaultTarget":`Wake according to this Goal’s LoopX schedule.`,"drawer.scheduleEdit":`Change to every 2 hours`,"drawer.scheduleLast":`Last run`,"drawer.scheduleLocalTimezone":`Local timezone`,"drawer.scheduleNext":`Next run`,"drawer.scheduleNeverRun":`Not run yet`,"drawer.scheduleNotification":`Notification`,"drawer.schedulePause":`Pause`,"drawer.schedulePending":`Waiting for schedule`,"drawer.scheduleResume":`Resume`,"drawer.scheduleRunNow":`Run now`,"drawer.scheduleStop":`Stop {kind}`,"drawer.scheduleStopCondition":`Stop condition`,"drawer.scheduleTimezone":`Timezone`,"drawer.sessionRecoverable":`Resumable`,"drawer.sessionStatus":`Session status`,"drawer.setupHeartbeat":`Set up Heartbeat`,"drawer.taskActions":`Pending Todo actions`,"drawer.taskAdvancement":`Advancement task`,"drawer.taskBlock":`Mark blocked`,"drawer.taskComplete":`Mark complete`,"drawer.taskCompletedNote":`This task is retained as a read-only record.`,"drawer.taskCompletedTitle":`Task completed`,"drawer.taskDefer":`Defer`,"drawer.taskDeferCondition":`Todo defer resume condition`,"drawer.taskDeferInvalid":`Unsupported condition format; use one of the deterministic conditions below.`,"drawer.taskDeferPlaceholder":`For example, resume_at:2026-09-14T09:00:00+08:00`,"drawer.taskDeferReview":`Review defer`,"drawer.taskDeferSupported":`Supports todo_done, pr_merged, capacity_available, and timezone-aware resume_at conditions.`,"drawer.taskPriority":`Priority`,"drawer.taskPriorityChoose":`Choose priority`,"drawer.taskPriorityClear":`No priority`,"drawer.taskDeferUntil":`Defer until`,"drawer.taskDetails":`Todo details`,"drawer.taskInfo":`Task information`,"drawer.taskManage":`Manage task`,"drawer.taskNextCompleted":`Create a follow-up task`,"drawer.taskNextOpen":`Advance or update status`,"drawer.taskOrdinary":`Task`,"drawer.taskStatusBlocked":`Blocked`,"drawer.taskStatusDeferred":`Deferred`,"drawer.resumeWhen":`Resume condition`,"drawer.resumeState":`Resume state`,"drawer.resumePending":`Waiting for condition`,"drawer.resumeReady":`Ready to resume`,"drawer.resumeReceipt":`Resume receipt`,"drawer.taskNextDeferred":`Wait for the resume condition, then reassess`,"drawer.taskNextResumeReady":`Resume condition met; awaiting lifecycle replan`,"drawer.taskStatusCompleted":`Completed`,"drawer.taskStatusOpen":`Ready`,"drawer.taskSuccessor":`Create follow-up Todo`,"drawer.taskSuccessorNote":`Owner marked this blocked while waiting for more context.`,"drawer.taskSuccessorSummary":`Create follow-up Todo: {task}`,"drawer.taskSuccessorText":`Follow-up work for {task}`,"drawer.taskType":`Task type`,"drawer.topic":`Topic`,"drawer.trigger":`Trigger`,"drawer.titleAttention":`Needs you`,"drawer.titleOutput":`Output details`,"drawer.titleProposalApplied":`Execution result`,"drawer.titleProposalConfirm":`Confirm execution`,"drawer.titleSchedule":`Scheduled check`,"drawer.unconfigured":`Not configured`,"drawer.workspaceCandidates":`Available workspaces`,"files.emptySummary":`Public-safe output`,"files.empty":`No files, outputs, or verified reports yet.`,"files.loadingReports":`Loading verified milestone reports…`,"files.reportDelta":`+{added} added · {changed} changed`,"files.reportAdded":`added`,"files.reportChanged":`changed`,"files.reportGeneration":`Generation`,"files.reportLoadFailed":`Could not load verified reports`,"files.reportPublication":`Publication`,"files.title":`Files & Outputs`,"files.verifiedReport":`Verified milestone report`,"header.agentUnavailable":`Unavailable`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} work Agents`,"header.overview":`Overview`,"header.chat":`Chat`,"header.files":`Files`,"header.goalCapabilities":`Capability settings`,"header.goalCapabilitiesDescription":`Manage overrides and inherited machine defaults.`,"header.goalDetails":`Goal details`,"header.goalDetailsDescription":`Review status, usage, repository, notifications, and sessions.`,"header.goalSettings":`Goal settings`,"header.goalSettingsDescription":`Configure this Goal’s capabilities`,"header.goalNavigation":`Goal navigation`,"header.goalView":`Goal view`,"header.live":`Live`,"header.manager":`LoopX Manager`,"header.managerDescription":`Your personal workspace across Goals`,"header.managerRuntime":`{profile} · {sandbox}`,"header.managerRuntimeFallback":`Configuration invalid; fell back to {profile} · {sandbox}. Repair it in Machine capabilities.`,"header.managerExecutorKindIndividual":`individual CLI login`,"header.managerExecutorKindManaged":`operator credential`,"header.managerExecutorKindRegistered":`registered endpoint`,"header.managerExecutionUnavailable":`Selected {executor} cannot start here; this channel does not fall back to an individual CLI login.`,"header.managerExecutionUnavailableCredential":`Selected {executor} needs the operator credential {credential} before this channel can start it.`,"header.managerExecutionUnavailableRuntime":`Selected {executor} cannot start here because its runtime is not installed on this machine.`,"header.managerExecutionUnavailableEffort":`Selected {executor} rejected the configured reasoning effort; set a supported effort and reload.`,"header.managerExecutionUnavailableOutputBudget":`Selected {executor} has an invalid per-request output-token limit; set a positive integer and reload.`,"header.managerEndpointStewardDefault":`Runs {executor}, the steward channel's shipped default. Select an executor explicitly to move it.`,"header.managerOutputTokenBudget":`{tokens} tok/request`,"header.managerAllocation":`Selection: {policy} · {reason}`,"header.managerSelectionPreferred":`preferred`,"header.managerSelectionPinned":`pinned`,"header.managerSelectionFlexible":`flexible pool`,"header.managerAllocationUser":`explicit user choice`,"header.managerAllocationPinned":`pinned by machine configuration`,"header.managerAllocationFallback":`primary unavailable; used an eligible fallback`,"header.managerAllocationUnavailable":`no eligible route is currently available`,"header.managerAllocationPrimary":`primary route is available`,"header.managerAllocationProductDefault":`product default`,"header.managerAllocationService":`service environment override`,"header.managerAllocationConfigured":`configured route`,"header.managerOverview":`Overview`,"header.managerView":`Manager view`,"header.openGoalNavigation":`Open Goal navigation`,"header.readOnlySourceDescription":`{source} is displayed read-only through an SSH tunnel`,"header.refresh":`Refresh status`,"header.refreshDone":`Updated just now`,"header.refreshFailed":`Refresh failed`,"header.refreshing":`Refreshing`,"header.selectAgent":`Select Agent`,"header.selectChatRuntime":`Select chat runtime`,"header.tasks":`Tasks`,"header.themeBrutal":`Switch to brutal theme`,"header.themePaper":`Switch to default theme`,"home.blockingSummary":`{count} are blocking an Agent.`,"home.completedGoals":`Completed Goals`,"home.empty":`Nothing here`,"startup.goalLoading":`Loading status…`,"startup.goalError":`Could not load status`,"startup.progress":`{loaded} of {total} active Goals loaded`,"startup.partial":`Goal states are updating. Counts are incomplete.`,"startup.independent":`Other Goals remain available while this Goal loads.`,"startup.error.timeout":`The request timed out. Retry when the local service is ready.`,"startup.error.network":`The connection was interrupted. Retry to reconnect.`,"startup.error.service":`The Goal status could not be read. Retry later; if the problem continues, check the status source.`,"startup.error.access":`The status source cannot access files or runtime directories required for this Goal. Check the permissions of the account running that source, then retry.`,"startup.error.revision":`The Goal directory changed during loading. Refresh to synchronize.`,"startup.error.scope":`This Goal is no longer available in the selected source. Refresh the directory.`,"startup.error.invalid":`The status response could not be read. Refresh or check for a LoopX update.`,"startup.retry":`Retry`,"startup.retryFailed":`Retry failed Goals`,"startup.failedCount":`{count} Goals could not be loaded. Ready Goals remain available.`,"home.greeting":`Hi, I’m your LoopX Manager`,"home.history":`History`,"home.lane.needsYou":`Needs you`,"home.lane.needsYouDescription":`Waiting for your decision, authorization, or context`,"home.lane.observing":`Observing`,"home.lane.observingDescription":`Monitoring continuously and notifying you when something changes`,"home.lane.running":`Running`,"home.lane.runningDescription":`Agents are making progress and reporting back`,"home.lane.scheduled":`Scheduled`,"home.lane.scheduledDescription":`Queued until its time or prerequisite arrives`,"home.noActivity":`No activity yet`,"home.noFirstActivity":`Waiting for first activity`,"home.noCompletedGoals":`No completed Goals yet`,"home.preservedState":`State is preserved and can be resumed`,"home.stopped":`Stopped`,"home.systemHealth":`System health: {summary}`,"home.taskCount":`{count} Tasks`,"home.todayAt":`Today {time}`,"home.waitingCount":`You have {count} items to handle.`,"home.workspace":`Goal workspace`,"lark.allMessages":`All messages in this topic`,"lark.allTopicMessages":`All topic messages`,"lark.agentIngress":`Agent ingress`,"lark.agentAppPermissions":`Every selected Agent needs a Lark App that is ready for group mentions and replies.`,"lark.agentApps":`Lark App per Agent`,"lark.agentAppsDescription":`The default App is preselected. Assign a different compatible App when an Agent needs its own bot identity.`,"lark.agentAppSelection":`Lark App for {agent}`,"lark.appCreated":`App created`,"lark.appCreateFailed":`Creation failed`,"lark.appLoading":`Loading available Lark Apps…`,"lark.appPermissions":`This App can send connection messages, but lacks the bot permissions required to receive group mentions or reply automatically. Enable im:message.group_at_msg:readonly, im:message.send_as_bot, and the im.message.receive_v1 event, publish a new version, then refresh.`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`Auto reply unavailable`,"lark.autoReplyReady":`Auto reply ready`,"lark.bindGoal":`Bind to Goal`,"lark.cancel":`Cancel`,"lark.cardinality":`One Lark App · many Goals · one isolated route per Agent`,"lark.capture":`Capture`,"lark.captureAddressed":`Only messages that mention or reply to the App`,"lark.captureAll":`All messages in this Goal topic`,"lark.captureScope":`Capture scope`,"lark.captureScopeDescription":`Controls which Topic messages enter LoopX without expanding Agent permissions.`,"lark.closeConnection":`Close connection dialog`,"lark.closeCreate":`Close create dialog`,"lark.closeSettings":`Close Lark settings`,"lark.connect":`Connect`,"lark.connectAllAgents":`Connect every registered Agent`,"lark.connectAllAgentsAction":`Connect {count} Agents`,"lark.connectAllAgentsDescription":`Create {count} isolated Agent Topics in one guided action. Send requests inside the matching Topic; each Agent keeps its own route and inbox.`,"lark.connectApp":`Connect Lark App`,"lark.connection":`Connection`,"lark.connections":`Connections`,"lark.configuration":`Lark configuration`,"lark.continueFeishu":`Continue in Feishu`,"lark.createAutomatically":`Create Goal topic automatically`,"lark.createAutomaticallyDescription":`A dedicated, Agent-labelled Topic will be created for every selected Agent.`,"lark.defaultAgentAppDescription":`Used to find the target group and as the default for every selected Agent. Per-Agent choices below override it.`,"lark.description":`Manage reusable Lark Apps and connect group chats to Goals through dedicated topics.`,"lark.editConnection":`Edit Lark Connection`,"lark.goalConnections":`{count} Goal connections`,"lark.goalTopicConnections":`Lark Goal Topic connections`,"lark.groupChat":`Group chat`,"lark.groupEmpty":`This bot has not joined a group that can be connected. Add it to a Feishu group first, then return to refresh or search.`,"lark.groupLoading":`Reading groups joined by this bot…`,"lark.groupSearch":`Search groups joined by this bot`,"lark.historyPermission":`Group-history permission (separate capability)`,"lark.health.contextCaptured":`Group context captured`,"lark.health.contextCapturedDetail":`The message is retained as non-authoritative context. It did not start or steer a Manager turn; send a direct @ mention or verified reply when action is required.`,"lark.health.eventProcessed":`{events} events processed, {replies} replies sent.`,"lark.health.eventUnverified":`Event subscription needs verification`,"lark.health.eventUnverifiedDetail":`The provider listener is ready, but no event has arrived. Enable im.message.receive_v1 and group mention permissions, publish a new version, then send a new @ mention inside this Agent Topic. Group-level messages fail closed when multiple Agent routes exist.`,"lark.health.ignoredSelf":`The bot’s own message was ignored to prevent duplicate replies.`,"lark.health.invalidRouting":`Invalid routing configuration`,"lark.health.invalidRoutingDetail":`The connection was safely disabled. Select a processing mode again and save.`,"lark.health.lastStatus":`Latest event status: {status}`,"lark.health.listening":`Listening`,"lark.health.messageContextPermission":`Message permission required`,"lark.health.messageContextPermissionDetail":`A message event arrived, but group context could not be read. Publish and authorize group message read access for this App.`,"lark.health.notAddressed":`Latest message did not directly @ the bot`,"lark.health.notAddressedDetail":`Listening is healthy. This connection only responds to direct @ mentions or replies to the bot.`,"lark.health.notStarted":`Listener not started`,"lark.health.notStartedDetail":`Refresh the connection or restart LoopX, then try again.`,"lark.health.processingFailed":`Message processing failed`,"lark.health.processingFailedDetail":`The message event arrived, but Agent processing failed. Review local diagnostics and retry.`,"lark.health.queued":`Queued in the Agent inbox`,"lark.health.queuedDetail":`The message will be processed asynchronously by {agent} without starting a general Chat Session.`,"lark.health.sourceDisconnected":`Event connection disconnected`,"lark.health.sourceDisconnectedDetail":`The event consumer exited unexpectedly. Check that the app profile uses Feishu for Feishu apps or Lark for international Lark, then inspect connection and subscription errors. LoopX is retrying; successful history queries do not prove live delivery.`,"lark.health.retrying":`Retrying listener`,"lark.health.retryingDetail":`Event listening was interrupted and LoopX is retrying automatically.`,"lark.health.routeAmbiguous":`Message matches multiple Goals`,"lark.health.routeAmbiguousDetail":`The same bot and group have multiple full-group capture connections. Use a separate bot for each Agent or keep only one full-group connection.`,"lark.health.routeMismatch":`Message did not match this Goal Topic`,"lark.health.routeMismatchDetail":`The event came from another group or Topic. Reconnect this Goal to the correct group, then send a new @ mention.`,"lark.health.routeUnavailable":`Message cannot be routed to the Goal`,"lark.health.routeUnavailableDetail":`Connection data is incomplete. Reconnect this Goal, then send a new @ mention.`,"lark.health.starting":`Starting`,"lark.health.startingDetail":`LoopX is starting message event listening for this App.`,"lark.health.unavailable":`Auto reply unavailable`,"lark.health.waiting":`Waiting`,"lark.incomingMessages":`Incoming messages`,"lark.ingressAsync":`Async inbox`,"lark.ingressAsyncDescription":`Write to the Agent private inbox for a later explicit drain.`,"lark.editPreservesIdentity":`Saving preserves this App, group and Topic. Old connections upgrade to the Agent inbox by default.`,"lark.conversationKind":`Connection purpose`,"lark.managerConversation":`Manager · live conversation`,"lark.workerConversation":`Worker Agent · background tasks`,"lark.managerConversationDescription":`The built-in manager responds as you chat and delegates long-running work to background Agents. Group and private conversations keep separate histories.`,"lark.ingressLegacy":`Upgrade available`,"lark.ingressLegacyDescription":`Save this connection to upgrade to the Agent inbox. Existing messages remain in the same Topic.`,"lark.ingressQueue":`Queuing`,"lark.ingressQueueDescription":`Enter the same Agent Session's bounded FIFO queue and run after the current Turn.`,"lark.ingressSteering":`Steering`,"lark.ingressSteeringDescription":`Deliver to the active Turn and reject safely when no exact active Turn exists.`,"lark.loading":`Loading Lark configuration…`,"lark.management":`Lark management`,"lark.openEventSettings":`Open Feishu event settings`,"lark.mentions":`Mentions`,"lark.mentionsOnly":`Mentions only`,"lark.needsMessagePermissions":`Needs message permissions`,"lark.needsSetup":`Needs setup`,"lark.newApp":`New Lark App`,"lark.noAgentConfigured":`No Agent configured`,"lark.noConnections":`No matching connections.`,"lark.noProfiles":`No lark-cli App profiles are available yet.`,"lark.profileName":`Profile name`,"lark.profileValidation":`Profile can contain only letters, numbers, periods, underscores, and hyphens.`,"lark.processing":`Processing`,"lark.region":`Region`,"lark.registerAnother":`+ Register another Lark App — Create through Feishu`,"lark.reopenFeishu":`Reopen Feishu`,"lark.settingsConfigure":`Configure {goal}`,"lark.settingsDisconnect":`Disconnect {goal}`,"lark.replyMode":`Reply mode`,"lark.replyModeDescription":`Replies are limited to the source Topic to prevent cross-group or cross-Goal delivery.`,"lark.reusableApps":`{count} reusable Apps`,"lark.reusableWorkspaceApp":`Reusable workspace App`,"lark.routesUnverified":`{count} Lark routes pending verification`,"lark.saveConnection":`Save connection`,"lark.searchConnections":`Search Lark connections`,"lark.searchPlaceholder":`Search Apps, groups, Goals, or topics`,"lark.setupCopy":`LoopX opens the official Feishu creation page through lark-cli. App credentials stay in the system Keychain; LoopX stores only the profile reference.`,"lark.someoneMentions":`Someone mentions the Agent`,"lark.targetAgent":`Target Agent`,"lark.targetAgentDescription":`Choose a registered Agent in this Goal. This connection delivers to one Agent; it does not broadcast or grant permissions. Steering and Queuing require that Agent's exact active Session.`,"lark.agentUnavailable":`{agent} · no longer available`,"lark.selectRegisteredAgent":`Select an available registered Agent before connecting. The previous Agent will not be replaced automatically.`,"lark.topicPreview":`Topic preview`,"lark.topicReply":`Topic reply`,"lark.trigger":`Trigger`,"lark.waitingFeishu":`Waiting for Feishu`,"lark.waitingFeishuDescription":`Complete Feishu authorization in the new window. This page updates automatically when it is ready.`,"lark.waitingLink":`Generating the official Feishu creation link…`,"lark.error.appCreate":`Lark App creation failed`,"lark.error.appRequired":`Select a Lark App profile.`,"lark.error.bind":`Connection failed`,"lark.error.bindPreview":`Connection preview failed`,"lark.error.configuration":`Could not load Lark configuration`,"lark.error.groupLookup":`Could not read groups joined by this bot. Check the bot status and try again.`,"lark.error.groupLoad":`Could not load group chats`,"lark.error.invalidApp":`The Lark App profile is unavailable or has not completed authorization.`,"lark.error.messagePermissions":`This App lacks the bot permissions required for automatic replies. Enable im:message.group_at_msg:readonly and im:message:send_as_bot, publish a new version, then refresh.`,"lark.error.provider":`The Feishu API call failed without a verified receipt. Try again later.`,"lark.error.setupPoll":`Could not read creation status`,"lark.error.setupStart":`Could not start Lark App creation`,"lark.error.cliExecutable":`The configured lark-cli was found but cannot run. Check the installation or launch arguments.`,"lark.error.cliMissing":`lark-cli was not found. Install lark-cli and restart LoopX.`,"lark.error.cliStart":`lark-cli failed to start. Check the installation and restart LoopX.`,"lark.error.disconnect":`Disconnect failed`,"notifications.autoNotify":`Send automatically when your confirmation is required`,"notifications.bind":`Bind notification group`,"notifications.bindConfirm":`Bind “{goal}” to “{target}”. LoopX will verify that the bot is in the group and send a confirmation message.`,"notifications.bindFailed":`Binding failed`,"notifications.bound":`Bound`,"notifications.confirmBind":`Confirm binding`,"notifications.description":`Send Goal changes that need your confirmation to a Feishu group. Bindings and automatic delivery use the existing channel.`,"notifications.disabled":`Disabled`,"notifications.group":`Notification group: {target}`,"notifications.loadFailed":`Could not load notification groups`,"notifications.noTargets":`No notification groups are available. Group delivery uses a private bot identity; configure one from the terminal first:`,"notifications.notBound":`Not bound`,"notifications.recent":`Latest {time}`,"notifications.sentCount":`{count} sent`,"notifications.settings":`Goal notification bindings`,"notifications.setupFailed":`Could not update settings`,"notifications.title":`Feishu group notifications`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`Frequency`,"proposal.field.completionCriteria":`Completion criteria`,"proposal.field.executionBoundary":`Execution boundary`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`Initial tasks`,"proposal.field.objective":`Objective`,"proposal.field.operation":`Operation`,"proposal.field.operationState":`Operation state`,"proposal.field.resultDelivery":`Result delivery`,"proposal.field.confirmationBoundary":`Confirmation boundary`,"proposal.field.expiresAt":`Expires at`,"proposal.field.permission":`Permission`,"proposal.field.reason":`Reason`,"proposal.field.stopCondition":`Stop condition`,"proposal.field.target":`Check target`,"proposal.field.timezone":`Timezone`,"proposal.field.title":`Title`,"proposal.field.workspace":`Execution workspace`,"actionReview.targetChanged":`The preview target does not match the requested Goal and operation. Generate a new preview.`,"actionReview.ready_stop":`Pausing is reversible. This validated preview can apply directly; completion still requires verified readback.`,"actionReview.resume_review":`Review before restoring automatic scheduling. Quota, gates and Todo constraints still apply.`,"actionReview.delete_review":`Review removal of this stopped Goal from the registries. Project files and history are preserved.`,"actionReview.action_review":`Review the target and impact before applying this proposal.`,"actionReview.protected_action":`This action needs explicit review. Confirmation cannot replace required authority.`,"actionReview.unknown_permission":`The permission classification is not recognized. Recheck the proposal before continuing.`,"actionReview.unknown_action":`This lifecycle operation is not recognized. Recheck the proposal before continuing.`,"actionReview.incomplete_proposal":`The preview is missing validation or an available apply transition. Generate a new preview.`,"actionReview.authority_gate":`A gate prevents execution. Resolve its requirements, then recheck the proposal.`,"actionReview.stale_proposal":`The source state changed. Generate a new preview; the previous decision no longer applies.`,"actionReview.apply_pending":`Execution is in progress. Wait for its result before retrying.`,"actionReview.readback_verified":`The action completed and its resulting state was verified.`,"actionReview.readback_unverified":`The action returned without verified readback. Completion is not confirmed; recheck the state.`,"actionReview.operation_group_confirmation":`This exact request can only be confirmed on its original card in the bound Feishu group. The Dashboard does not expose a local execution control.`,"actionReview.operation_result_delivery_pending":`The operation outcome was recorded, but the original group result card has not passed readback verification yet.`,"drawer.recoverEditResult":`Recover operation result`,"drawer.retryOriginal":`Retry original operation`,"actionReview.canonical_update_retry":`The edit is not yet verified. Retry this operation to recover its result.`,"actionReview.canonical_update_projection_pending":`The operation was committed; display delivery is pending. Retry this operation to restore the current view.`,"actionReview.apply_failed":`Execution did not complete. Check the failure and regenerate the preview before retrying.`,"actionReview.inactive_proposal":`This proposal is no longer ready to execute. Recheck it before continuing.`,"proposal.gate.default":`Host confirmation required`,"proposal.impact.goalCreate":`After confirmation, LoopX will create the Goal and its initial Todo, then let the selected Agent start the first run.`,"proposal.impact.lifecycleDelete":`After confirmation, this stopped Goal is removed from the source and global registries. Project files, history state, and backups are preserved.`,"proposal.impact.lifecycleResume":`After confirmation, the Goal becomes eligible for automatic scheduling and returns to Active Goals. Actual execution still follows quota, Gate, and Todo constraints.`,"proposal.impact.lifecycleStop":`After confirmation, automatic progress stops and the Goal moves to the collapsed Stopped list. History, Todos, and evidence remain available for resuming.`,"proposal.impact.protected":`This action must be completed through the protected LoopX write service.`,"proposal.impact.operation":`The exact terms are read-only here. Confirm or reject the same immutable request in the bound Feishu group; confirmation consumes one canonical claim.`,"proposal.primary.apply":`Confirm and apply`,"proposal.primary.goalCreate":`Create Goal and start first run`,"proposal.primary.lifecycleDelete":`Delete Goal`,"proposal.primary.lifecycleResume":`Resume Goal`,"proposal.primary.lifecycleStop":`Stop Goal`,"proposal.primary.todoStart":`Create task and start execution`,"proposal.primary.operationGroup":`Confirm in Feishu group`,"proposal.primary.operationResultPending":`Result card delivery pending`,"proposal.primary.operationResultVerified":`Verified result`,"proposal.resultDelivery.verified":`Verified in the original group card`,"proposal.resultDelivery.pending":`Pending verified return to the original group card`,"proposal.summary.goalCreate":`Create Goal: {title}`,"proposal.summary.heartbeat":`Set a Heartbeat for the current Goal`,"proposal.summary.lifecycleDelete":`Delete Goal: {title}`,"proposal.summary.lifecycleResume":`Resume Goal: {title}`,"proposal.summary.lifecycleStop":`Stop Goal: {title}`,"proposal.summary.monitor":`Create a scheduled check for the current Goal: {target}`,"proposal.teamPlan.gapReason.capabilityNotGranted":`Required capability not granted`,"proposal.teamPlan.gapReason.audienceNotAuthorized":`Required access not authorized`,"proposal.teamPlan.pending":`Pending`,"proposal.teamPlan.assignedHint":`Assignment recorded. See the Goal for execution progress.`,"proposal.teamPlan.recoveredHint":`No new tasks created. See the Goal for current progress.`,"proposal.teamPlan.originalPlan":`View original plan`,"proposal.teamPlan.viewResult":`View result`,"proposal.teamPlan.openGoal":`Open Goal`,"proposal.teamPlan.resultTitle":`Assignment result`,"proposal.teamPlan.retry":`Retry assignment`,"proposal.teamPlan.retryHint":`Retry this assignment to recover its result without duplicating tasks.`,"proposal.summary.teamPlan":`Assign {count} tasks for {goal}`,"proposal.impact.teamPlan":`Confirm to assign the ready tasks. Unavailable assignments stay pending.`,"proposal.primary.teamPlan":`Confirm assignment`,"proposal.field.laneGaps":`Unstaffed lanes`,"proposal.field.quotaEnvelope":`Quota envelope`,"proposal.teamPlan.acceptanceShort":`acceptance reference`,"proposal.teamPlan.advisory":`planning context; not enforced by this confirmation`,"proposal.teamPlan.appliedPartially":`{created} assigned · {gaps} pending`,"proposal.teamPlan.appliedAlreadyPresent":`Original assignment recovered`,"proposal.teamPlan.applied":`{count} tasks assigned`,"proposal.teamPlan.gapLane":`unstaffed`,"proposal.teamPlan.laneUnstaffed":`staffing gap, no first Todo`,"proposal.teamPlan.gapReason.agentNotRegistered":`the Agent is not registered for this Goal`,"proposal.teamPlan.gapReason.actionKindNotSupported":`this host does not ship that action kind`,"proposal.workspace.current":`Current local workspace (no Repository bound)`,"proposal.workspace.named":`{workspace} (execution environment only; does not bind a repository)`,"proposal.workspaceGate.agentImpact":`Bind an Agent identity, then recheck the original action. No Goal has been written.`,"proposal.workspaceGate.agentTitle":`Bind an Agent first`,"proposal.workspaceGate.defaultSummary":`Select the Goal workspace.`,"proposal.workspaceGate.selectionImpact":`After selecting a workspace, LoopX will show the confirmation preview again. The selection itself does not write state.`,"proposal.workspaceGate.selectionTitle":`Select Goal workspace`,"projection.agentAdvancingGoal":`Agent is advancing the current Goal`,"projection.agentIdle":`Nothing needs your attention`,"projection.agentNeedsDecision":`Agent is waiting for your decision`,"projection.agentPreparingNextStep":`Agent is preparing the next step`,"projection.agentStopped":`Stopped by you; history, Todos, and evidence are preserved`,"projection.agentWaitingExternal":`Waiting for an external condition`,"projection.confirmAgentDecision":`Confirm the permission or decision the Agent needs next`,"projection.events24h":`{count} events in the last 24 hours`,"projection.firstReadOnlyAdapterCheck":`Run the first read-only adapter check and save progress`,"projection.goalVerified":`Goal state, Todos, and registration information verified`,"projection.latestRun":`Latest run`,"projection.latestValidation":`Latest validation`,"projection.nextUpdatePending":`Waiting for LoopX to update the next step`,"projection.publicSafeProjection":`Public-safe status projection`,"projection.refreshState":`Refresh LoopX status and confirm the current progress is still valid`,"projection.runEvidenceAvailable":`Run evidence is available`,"projection.runRecorded":`The latest LoopX run is recorded`,"projection.statusRefreshNeeded":`LoopX status needs to be refreshed`,"projection.todoStatusUpdated":`Todo status updated; confirming the next step`,"projection.validationRecorded":`The latest validation is recorded`,"runs.completed":`Completed`,"runs.failed":`Needs review`,"runs.interrupted":`Interrupted`,"runs.queued":`Scheduled`,"runs.ready":`Ready`,"runs.resumeFailed":`Recovery failed`,"runs.running":`Running`,"runs.unknown":`Unknown`,"runs.waiting":`Waiting`,"schedule.active":`Running`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`Scheduled & continuous task`,"schedule.paused":`Paused`,"schedule.summary":`Continuously checked under LoopX scheduling constraints`,"schedule.defaultTarget":`Check the current Goal for blockers, progress, and new outputs`,"schedule.unsupportedCalendar":`Scheduled checks do not currently support an exact weekday or time. Use a fixed interval such as “Every 30 minutes,” “Every 2 hours,” or “Daily.” The draft was preserved and no confirmation preview was created.`,"source.add":`Add source`,"source.addConfigured":`Add read-only source`,"source.addMethod":`Source setup method`,"source.addSsh":`Add SSH source`,"source.closeForm":`Close source form`,"source.configured":`Configured SSH`,"source.configuredCount":`Local SSH Hosts · {count}`,"source.configuredGroup":`Configured SSH Hosts · {count} (select to add)`,"source.connected":`Connected`,"source.connecting":`Connecting`,"source.controlPlane":`Control plane source`,"source.copy":`Copy`,"source.copyCommand":`Copy SSH tunnel command`,"source.copyError":`Could not copy the command. Copy it manually below.`,"source.copied":`Copied`,"source.description":`All explicit Hosts are loaded, including Include files. Wildcards are not listed. Run the command first; LoopX never reads SSH keys or configuration details.`,"source.host":`Local SSH Host`,"source.hostEmpty":`No explicit SSH Hosts are available in ~/.ssh/config.`,"source.hostLoadError":`Could not read local SSH Hosts.`,"source.hostPlaceholder":`Enter or search for a Host`,"source.invalid":`The SSH source settings are invalid.`,"source.loadingHosts":`Loading…`,"source.localInteractive":`Local interactive`,"source.localPort":`Local port`,"source.manual":`Manual URL`,"source.manualDescription":`Remote sources always remain read-only projections and never inherit local write permissions.`,"source.name":`Name`,"source.namePlaceholder":`Remote development machine`,"source.notAvailable":`Unavailable`,"source.readOnly":`SSH tunnel · read only`,"source.readOnlyNoticeDescription":`You can view Goals, Tasks, evidence, and run status. Writes, guidance, and Agent sessions remain on the source host.`,"source.readOnlyNoticeTitle":`Remote read-only projection`,"source.readOnlyWriteError":`Remote SSH tunnel sources are read-only projections and cannot perform control-plane writes.`,"source.refreshHosts":`Reload SSH Hosts`,"source.remove":`Remove source {source}`,"source.removeCurrent":`Remove current source`,"source.select":`Select control plane source`,"source.selectHost":`Select a configured SSH Host.`,"source.statusUrl":`Local forwarded URL`,"source.tunnelCommandPending":`Select a Host to generate the tunnel command`,"machine.absent":`Not configured`,"machine.action.create":`Create machine policy`,"machine.action.delete":`Remove machine policy`,"machine.action.unchanged":`No write required`,"machine.action.update":`Update machine policy`,"machine.applied":`Machine policy applied and read back successfully.`,"machine.applyError":`Machine policy could not be applied.`,"machine.applyPreview":`Apply reviewed preview`,"machine.changedNamespaces":`Changed namespaces`,"machine.capabilityCatalog":`Machine capability catalog`,"machine.capabilityEmpty":`No machine-configurable capabilities are registered.`,"machine.configured":`Configured`,"machine.confirmRollback":`Confirm rollback`,"machine.currentRevision":`Current revision`,"machine.currentValue":`Current machine value`,"machine.description":`Browse the same capability catalog as Goal settings. Configure supported machine defaults here; Goal-only capabilities are labeled explicitly.`,"capabilities.rawJson":`Advanced: raw JSON`,"machine.goalOnly":`This capability currently supports Goal configuration only. Open a Goal’s capability settings to configure it; no machine-wide default is applied.`,"machine.desiredRevision":`Desired revision`,"machine.editorUnavailable":`No editor is installed for this namespace`,"machine.editorUnavailableDescription":`The namespace remains visible in the registry. Install or upgrade its Dashboard editor before changing it.`,"machine.editorMode":`Editor mode`,"machine.liveDefault":`Live default; Goal override wins`,"machine.liveDefaultDescription":`Goals without an explicit override read the current machine policy at the capability’s next decision point. Changes and removal affect those existing Goals immediately; an explicit Goal override stays pinned.`,"machine.credentialTitle":`Operator model credential`,"machine.credentialDescription":`The key and endpoint the steward channel and the managed host authenticate with on this machine. The key is stored in its own owner-only file, never in the machine configuration that is projected here, and it is never read back — only its fingerprint is.`,"machine.credentialApiKey":`API key`,"machine.credentialApiKeyPlaceholder":`Paste a key to store it; leave blank to keep the stored one`,"machine.credentialBaseUrl":`Endpoint base URL`,"machine.credentialBaseUrlPlaceholder":`https://endpoint.example/v1 (blank keeps the endpoint default)`,"machine.credentialStore":`Store credential`,"machine.credentialClearKey":`Clear stored key`,"machine.credentialClearUrl":`Clear stored endpoint`,"machine.credentialConfigured":`configured`,"machine.credentialAbsent":`not configured`,"machine.credentialInvalid":`unreadable — repair required`,"machine.credentialSourceMachine":`this machine's stored credential`,"machine.credentialSourceEnvironment":`the service environment`,"machine.credentialSourceUnset":`no source`,"machine.credentialFingerprint":`fingerprint`,"machine.credentialStored":`Credential stored. The next turn uses it; no restart is needed.`,"machine.credentialCleared":`Stored credential cleared.`,"machine.credentialError":`The credential could not be stored.`,"machine.credentialBoundary":`Storing a credential grants no authority: it does not select an executor, model, or reasoning effort.`,"machine.genericNamespaceDescription":`Edit this registered namespace as JSON. LoopX validates it with the capability-owned schema before previewing any write.`,"machine.jsonConfiguration":`Namespace configuration (JSON)`,"machine.jsonConfigurationHelp":`Only this namespace is updated. Other machine configuration is preserved, and Apply remains locked to the reviewed preview revision.`,"machine.jsonEditor":`JSON`,"machine.editJson":`Edit JSON`,"capabilities.jsonConfiguration":`Goal configuration (JSON)`,"capabilities.jsonHelp":`Edit registered fields for this Goal. Changes require a new preview before applying.`,"capabilities.jsonInvalid":`Enter a valid JSON object using only registered editable fields.`,"machine.backToForm":`Back to form`,"machine.jsonInvalid":`Enter one valid JSON object before previewing changes.`,"machine.loadError":`Machine configuration could not be loaded.`,"machine.invalidStoredConfiguration":`Stored machine configuration needs repair`,"machine.invalidStoredConfigurationDescription":`Stored values are hidden because they no longer match the installed contract. Review the affected capability, then Preview and Apply its replacement; unrelated namespaces remain unchanged.`,"machine.machinePolicy":`Machine policy`,"machine.namespaceCount":`Registered namespaces`,"machine.namespaces":`Configuration namespaces`,"machine.periodicReport":`Periodic reports`,"machine.periodicReportDescription":`Default report policy for every Goal without an explicit override. Goal scheduling and delivery consume the effective configuration.`,"machine.periodicReportActivation":`Enabled means automatic delivery at validated stage boundaries`,"machine.periodicReportActivationDescription":`This is not a weekly timer. When LoopX validates a Goal stage completion, an Agent prepares and freezes the report, then automatically delivers it through the configured Goal Channel. The enabled subscription is standing delivery authority; failures and route drift stop closed for repair.`,"machine.changeQualityActivation":`Qualification is a quality gate, not new authority`,"machine.changeQualityActivationDescription":`Goals that inherit this policy qualify their exact final diff. safe_fix allows at most one bounded fix pass inside existing write authority; this setting never grants file, permission, or merge authority.`,"machine.replanCadenceActivation":`Review cadence changes timing, not execution authority`,"machine.replanCadenceActivationDescription":`Goals without an explicit override read this threshold before the next review decision. It does not create Turns, spend quota, or grant authority.`,"machine.preview":`Review exact machine change`,"machine.previewChanges":`Preview changes`,"machine.previewError":`A machine-policy preview could not be created.`,"machine.previewLocked":`Apply is locked to this exact revision. If machine state changes, LoopX requires a new preview.`,"machine.previewRollback":`Preview rollback`,"machine.previewRemoval":`Preview removal`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`A capability-owned preset, such as weekly-progress.`,"machine.registry":`Typed registry`,"machine.requiredFields":`Enable requires a profile preset, Goal Channel route, and valid timezone.`,"machine.revision":`Machine revision`,"machine.revisionLockedReady":`All changes require a preview and apply only while that exact machine revision remains current.`,"machine.rollbackAvailable":`Rollback is available for the last apply`,"machine.rollbackDescription":`Preview the stored prior revision before restoring it.`,"machine.rollbackError":`The rollback could not be completed.`,"machine.rollbackPreviewDescription":`The prior revision is ready to restore. Confirm to apply this rollback.`,"machine.rolledBack":`The prior machine policy was restored and verified.`,"machine.removed":`Machine policy removed and the resulting configuration read back successfully.`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`Use a public route alias; credentials and provider identifiers never enter this form.`,"machine.timezone":`Timezone`,"machine.timezoneHelp":`Use an IANA timezone, for example Asia/Shanghai.`,"machine.title":`Machine configuration`,"machine.unchanged":`Machine policy already matches this preview; nothing was written.`,"machine.visualEditor":`Guided`,"capabilities.atomicOverride":`Goal override is atomic`,"capabilities.atomicOverrideDescription":`A complete Goal value wins over the machine default. LoopX never mixes individual fields across scopes.`,"capabilities.applyFailed":`Goal capability changes were not applied.`,"capabilities.applyPreview":`Apply preview`,"capabilities.catalog":`Goal capability catalog`,"capabilities.chooseGoal":`Choose a Goal before inspecting its capabilities.`,"capabilities.defaultValue":`Declared default`,"capabilities.description":`Inspect the capabilities available to this Goal and the exact scope of each setting.`,"capabilities.editorPrepared":`Typed editor contract available`,"capabilities.effectiveSource":`Effective source`,"capabilities.empty":`No capability descriptors are available for this Goal.`,"capabilities.fields":`Registered fields`,"capabilities.goalPolicy":`Goal capability policy`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`Current Goal value`,"capabilities.loadFailed":`Could not load Goal capabilities`,"capabilities.larkInboxNotificationDescription":`This switch controls automatic group messages for human gates. Incoming Lark events remain available when it is off.`,"capabilities.larkInboxNotificationSetting":`Human-gate group notifications`,"capabilities.loading":`Loading Goal capabilities…`,"capabilities.machineOnly":`This capability is configured only at machine scope.`,"capabilities.machineValue":`Live machine default`,"capabilities.machineScope":`Machine`,"capabilities.previewOnly":`Inspection is live. Goal writes remain unavailable until the revision-locked preview and apply path is connected.`,"capabilities.preview":`Revision-locked preview`,"capabilities.previewChanges":`Preview changes`,"capabilities.restoreInheritance":`Restore machine-default inheritance`,"capabilities.previewFailed":`Could not preview Goal capability changes.`,"capabilities.previewLocked":`Apply will re-check this exact plan revision and reject stale changes.`,"capabilities.partialWrite":`Goal value saved; shared projection needs reconciliation`,"capabilities.partialWriteDescription":`The source Goal configuration was written and read back. Its shared runtime projection did not synchronize, so do not submit the change again.`,"capabilities.hostCapacityPartialWrite":`Goal value saved; Codex host capacity still needs alignment`,"capabilities.hostCapacityPartialWriteDescription":`The Goal configuration and shared projection were verified, but the Codex host limit was not updated. Refresh the preview after repairing the host configuration; do not resubmit the Goal change.`,"capabilities.refreshSource":`Refresh source value`,"capabilities.readOnly":`Read-only capability`,"capabilities.revisionLockedReady":`Changes require a preview and are applied only when its exact revision is still current.`,"capabilities.retry":`Retry`,"capabilities.source.capability_default":`Capability default`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`Live machine default`,"capabilities.source.not_configured":`Not configured`,"capabilities.title":`Goal capabilities`,"settings.close":`Close settings`,"settings.appearance":`Appearance`,"settings.appearanceDescription":`Manage workspace display preferences in this browser.`,"settings.appearanceTabDescription":`Theme and display preferences`,"settings.capabilitiesTabDescription":`Capability overrides for this Goal`,"settings.back":`Back to workspace`,"settings.categories":`Settings categories`,"settings.description":`Manage workspace preferences and integrations.`,"settings.eyebrow":`Workspace preferences`,"settings.general":`General`,"settings.goalConnections":`Goal connections`,"settings.language":`Language`,"settings.modelProvider":`Model provider`,"settings.globalCapabilities":`Global capabilities`,"settings.languageDescription":`Choose the language used by the LoopX desktop workspace.`,"settings.languageEnglishDescription":`Use English for navigation, settings, and workspace controls.`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`Use Simplified Chinese for navigation, settings, and workspace controls.`,"settings.languageSimplifiedChinese":`Simplified Chinese`,"settings.languageStoredLocally":`This preference is stored only on this device.`,"settings.languageTabDescription":`Interface language for this device`,"settings.larkTabDescription":`Apps, group chats, and Goal Topic connections`,"settings.machineTabDescription":`Typed defaults shared by capabilities on this machine`,"settings.notifications":`Notifications`,"settings.open":`Settings`,"settings.themeDefault":`Paper`,"settings.themeDefaultDescription":`Calm and lightweight for long-running work.`,"settings.themeDescription":`Choose the workspace visual style. This preference is stored in the current browser.`,"settings.themeHighContrast":`High contrast`,"settings.themeHighContrastDescription":`Stronger borders and more prominent state blocks.`,"settings.themeLoopx":`LoopX standard`,"settings.themeLoopxDescription":`Precise monochrome surfaces, Geist type, and quiet hairline structure.`,"settings.title":`Settings`,"settings.workspaceDisplay":`Workspace display`,"settings.workspaceTheme":`Workspace theme`,"session.closeRecord":`Exit run record`,"session.details":`Session details`,"session.record":`Execution Session · Run record`,"session.recordDescription":`The timeline now shows messages and Turn records from this Session.`,"sidebar.createGoal":`Create Goal`,"sidebar.delete":`Delete`,"sidebar.deleteGoal":`Delete Goal`,"sidebar.manager":`LoopX Manager`,"sidebar.notifications":`Settings`,"sidebar.owner":`Personal workspace`,"sidebar.product":`Personal Agent workspace`,"sidebar.resume":`Resume`,"sidebar.resumeGoal":`Resume Goal`,"sidebar.stop":`Stop`,"tasks.historyLoading":`Loading history…`,"tasks.historyError":`History could not be loaded.`,"tasks.historyExpired":`History snapshot expired. Reload to continue.`,"tasks.historyRetry":`Reload`,"tasks.historyEnd":`End of completed history`,"tasks.historyMore":`Load more`,"tasks.historyLocalOnly":`Open this machine’s Dashboard to browse full history.`,"sidebar.sortGoals":`Reorder Goals`,"sidebar.dragGoal":`Drag to reorder, or use Reorder Goals`,"sidebar.moveUp":`Move {goal} up`,"sidebar.moveDown":`Move {goal} down`,"sidebar.goalMoved":`{goal} moved to position {position}`,"sidebar.orderNotSaved":`Order changed for this visit; browser storage is unavailable.`,"sidebar.stopGoal":`Stop Goal`,"sidebar.stopped":`Stopped`,"sidebar.stoppedLoading":`Loading stopped Goals`,"sidebar.stoppedLoadFailed":`Stopped Goals could not be loaded. Active Goals remain available.`,"sidebar.retryStopped":`Retry`,"state.completed":`Completed`,"state.needsRepair":`Needs repair`,"state.needsYou":`Needs you`,"state.quiet":`Quiet`,"state.running":`Running`,"state.stopped":`Stopped`,"state.waiting":`Waiting`,"tasks.blocked":`Blocked`,"tasks.agentLane":`Work Agent`,"tasks.agentLaneDescription":`Filter this Goal's projected work lanes`,"tasks.agentLaneFilter":`Filter by work Agent`,"tasks.allAgentLanes":`All Agents ({count})`,"tasks.chatAgentReplied":`New conversation reply`,"tasks.chatPending":`Conversation in progress`,"tasks.chatReturn":`Collaboration receipt`,"tasks.chatPendingDescription":`Processing. Tasks update only after a task operation is confirmed.`,"tasks.chatRecent":`Recent conversation`,"tasks.chatUnchangedDescription":`This conversation did not directly change Tasks. Convert the reply to a Task draft and confirm it when execution is needed.`,"tasks.chatViewReply":`View reply`,"tasks.convertToTask":`Draft a Task`,"tasks.completed":`Completed`,"runs.discoveryPartial":`Some execution details are unavailable. Reconnecting; task summaries are not live execution status.`,"runs.discoveryOffline":`Execution service unavailable. Reconnecting; retained task summaries may be stale.`,"files.openConversation":`Go to conversation`,"files.exportSummary":`Export summary`,"tasks.viewDescription":`Decisions first, then work and recent completions`,"tasks.viewLabel":`Task view`,"tasks.listView":`List`,"tasks.boardView":`Board`,"tasks.completedSummary":`{count} tasks completed. Recent details are projected by the control plane when needed.`,"tasks.emptyCompleted":`No completed tasks yet.`,"tasks.emptyConfirm":`No tasks waiting for confirmation.`,"tasks.emptyRunning":`No queued or running tasks.`,"tasks.emptySchedules":`No scheduled tasks.`,"tasks.emptyGoal":`This Goal has no tasks yet. Describe the next step below and LoopX will show a confirmation preview first.`,"tasks.markComplete":`Mark complete: {name}`,"tasks.moreActions":`More actions: {name}`,"tasks.openExecution":`View execution: {name}`,"tasks.pending":`Pending`,"tasks.pendingAndRunning":`Queued / Running`,"tasks.scheduled":`Scheduled & continuous`,"tasks.sessionError":`Session issue`,"tasks.waiting":`Queued`,"tasks.waitingAge":`Waiting {age}`,"tasks.viewExecution":`View execution`,"tasks.viewResult":`View result`,"time.days":`{count} days`,"time.hours":`{count} hours`,"timeline.emptyGoal":`This Goal has no new activity`,"timeline.emptyGoalDescription":`Ask for progress or send new guidance.`,"timeline.emptyWorkspace":`Your workspace is quiet today`,"timeline.emptyWorkspaceDescription":`Describe a Goal to the LoopX Manager, or ask what deserves attention today.`,"timeline.gateHistory":`{count} historical Gates`,"timeline.pending":`Working…`,"returnDelivery.queued":`Return queued`,"returnDelivery.verifying":`Verifying delivery without resending`,"returnDelivery.delivered":`Delivered to the original audience`,"returnDelivery.reconciled":`Delivery verified after recovery`,"returnDelivery.unverified":`Delivery remains explicitly unverified`,"timeline.runCompleted":`{run}: completed`,"timeline.review":`Review`,"timeline.reviewAndConfirm":`Review and confirm`,"timeline.waitingConfirmation":`Needs your confirmation`},"zh-CN":{"acceptance.connected":`已连接`,"acceptance.mapped":`已建立项目映射`,"acceptance.refreshed":`已刷新状态`,"acceptance.inspected":`已检查适配器`,"acceptance.recorded":`已记录执行`,"acceptance.judged":`已记录反馈`,"acceptance.approved":`已记录批准`,"acceptance.ready":`已记录控制器就绪`,"acceptance.attentionSource":`当前状态`,"acceptance.visionSource":`Agent 验收条件`,"acceptance.todoSource":`任务状态`,"acceptance.runSource":`最新执行证据`,"acceptance.title":`验收观察`,"acceptance.unavailable":`验收观测不可用,Goal 是否达成仍未知。`,"acceptance.partial":`当前仅有部分观测。任务完成或缺口列表为空,都不能证明 Goal 已通过验收。`,"acceptance.gaps":`仍需补充的证据`,"acceptance.reasonUnknown":`来源未提供原因`,"acceptance.unknown":`未知`,"acceptance.required":`所需证据或条件`,"acceptance.observed":`观测时间`,"acceptance.noGaps":`现有观测中没有缺口,尚未评估完整验收条件。`,"acceptance.guards":`待处理的门禁决策`,"acceptance.noGuards":`现有观测中没有待处理的门禁决策。`,"acceptance.scope":`决策范围`,"acceptance.next":`当前状态给出的下一步`,"acceptance.historical_progress":`已记录的历史进展`,"acceptance.historical":`历史生命周期记录不授予权限,也不代表通过验收。`,"acceptance.missing":`未获取的来源:`,"acceptance.truncated":`仅展示前 12 条观测。`,"common.actions":`操作`,"common.agent":`Agent`,"common.allMessages":`所有消息`,"common.cancel":`取消`,"common.close":`关闭`,"common.closeActionReceipt":`关闭操作回执`,"common.confirm":`确认`,"common.export":`导出`,"common.failed":`失败`,"common.goal":`Goal`,"common.loading":`加载中…`,"common.none":`无`,"common.off":`关闭`,"common.on":`开启`,"common.open":`打开`,"common.owner":`Owner`,"common.readOnly":`只读`,"common.recently":`刚刚`,"common.status":`状态`,"common.task":`Task`,"common.you":`你`,"common.waiting":`等待中`,"composer.addImage":`添加图片`,"composer.agentProgress":`向 Agent 获取进度报告`,"composer.agentProgressPrompt":`请给我一份当前 Goal 的进度报告:已完成、执行中、阻塞和下一步。`,"composer.blockers":`看阻塞`,"composer.attachImageHint":`选择、粘贴或拖入图片`,"composer.clarifyDefer":`暂缓 Todo 需要可自动判断的恢复条件。请补充 todo_done:、pr_merged:[owner/repo]#、capacity_available: 或 resume_at:<带时区 RFC3339 时间>。`,"composer.clarifySingleAction":`这句话包含多个可能修改状态的操作。请一次描述一项操作,我会逐项展示确认预览。`,"composer.evidence":`查证据`,"composer.createGoal":`创建新 Goal`,"composer.createGoalDraft":`Goal 草稿`,"composer.createGoalDraftDescription":`补充内容后发送,LoopX 会先展示待确认操作。`,"composer.createGoalDraftLead":`我想创建一个长期 Goal:`,"composer.createGoalTemplate":`我想创建一个长期 Goal: -目标: -完成标准: -执行边界(可选): -关联仓库(可选): -通知方式(可选):`,"composer.createGoalHint":`填入 Goal 模板草稿,检查后再创建`,"composer.globalProgress":`汇总所有 Goal 进展`,"composer.globalProgressPrompt":`请帮我汇总所有活跃 Goal 的最新进展与阻塞。`,"composer.globalTasks":`询问全局待办`,"composer.globalTasksPrompt":`有哪些 Goal 正在等我?我现在该优先处理什么?`,"composer.goalMessageHint":`你的消息由 {agent} 在本 Goal 的会话中接收`,"composer.goalRunningHint":`本项目有 {count} 段会话正在运行 · 消息发往当前 {agent} 对话`,"composer.goalPlaceholder":`询问或纠偏 {goal}…`,"composer.imageAnalysisPrompt":`请结合这些图片分析当前 Goal,并告诉我下一步。`,"composer.imageCountError":`最多添加 {count} 张图片。`,"composer.imagePicker":`图片文件选择器`,"composer.imageReadError":`无法读取图片 {name}`,"composer.imageReadGenericError":`图片读取失败。`,"composer.imageSizeError":`单张图片不能超过 {size}MB。`,"composer.imageTypeError":`支持 PNG、JPEG、WebP 和 GIF 图片。`,"composer.imagesPending":`待发送图片`,"composer.managerMessageHint":`你的消息由 LoopX 管家跨 Goal 接收,支持全局询问与创建 Goal`,"composer.managerPlaceholder":`问问 LoopX 管家,或描述一个新 Goal…`,"composer.monitor":`配置定时检查`,"composer.monitorGoalQuestion":`为哪个 Goal 添加定时检查?`,"composer.monitorTemplate":`为当前 Goal 添加定时检查: -检查内容: -频率(支持 30 分钟 / 2 小时 / 每天):每 2 小时 -停止条件:Goal 完成`,"composer.monitorShortcutTemplate":`为当前 Goal 添加定时检查: -检查内容:{target} -频率:每 2 小时 -停止条件:Goal 完成`,"composer.monitorTemplateWithoutGoal":`配置定时检查: -Goal: -检查内容: -频率:每 2 小时 -停止条件:Goal 完成`,"composer.heartbeatGoalQuestion":`为哪个 Goal 设置 Heartbeat?`,"composer.heartbeatTemplate":`为当前 Goal 设置 Heartbeat: -频率:每天 -停止条件:Goal 完成 -通知:仅在需要我时`,"composer.heartbeatTemplateWithoutGoal":`设置 Heartbeat: -Goal: -频率:每天 -停止条件:Goal 完成 -通知:仅在需要我时`,"composer.nextAction":`询问下一步`,"composer.nextActionPrompt":`我现在该做什么?`,"composer.send":`发送`,"composer.sendMessage":`向 LoopX 发送消息`,"composer.sendMessageHint":`发送消息`,"composer.sentImageAlt":`移除图片 {name}`,"conversation.agentPending":`正在整理…`,"conversation.close":`关闭对话回执`,"conversation.convertHint":`将 Agent 最新回复转为 Task 草稿`,"conversation.full":`查看完整对话`,"conversation.receipt":`对话回执`,"conversation.replying":`正在回复`,"conversation.title":`管家对话`,"conversation.toTask":`转为 Task`,"digest.away":`自上次访问以来的运行记录`,"digest.completed":`新增完成运行`,"digest.failed":`新增失败或中断`,"digest.needsYou":`当前待确认`,"feedback.applying":`正在执行:{title}`,"feedback.cancelFailed":`取消失败:{error}`,"feedback.completed":`已完成:{title}`,"feedback.executionFailed":`执行失败:{error}`,"feedback.gateRequired":`需要你确认:{summary}`,"feedback.notCompleted":`操作未完成:{status}`,"feedback.goalRefreshFailed":`已打开 Goal,但暂时无法刷新最新状态。请点击刷新重试。`,"feedback.preparingPreview":`正在准备确认预览:{title}`,"feedback.previewFailed":`无法准备确认预览:{error}`,"feedback.sendFailed":`发送失败:{error}`,"feedback.sendGenericError":`消息发送失败,请稍后重试。`,"feedback.stale":`状态已变化,操作未执行,请重新生成确认预览。`,"feedback.taskDraftCreated":`已根据回复生成 Task 草稿。编辑后发送,LoopX 会先展示确认预览。`,"goal.defaultTitle":`新的个人 Goal`,"goal.initialTodo":`按完成标准推进:{criteria}`,"goal.objectiveBoundary":`执行边界:{boundary}`,"goal.objectiveCompletion":`完成标准:{criteria}`,"drawer.advancedDiagnostics":`高级诊断`,"drawer.agentWorking":`Agent 正在继续执行,记录会自动更新。`,"drawer.analysis":`正在分析`,"drawer.apply":`确认并应用`,"drawer.applying":`正在应用…`,"drawer.attentionBlocking":`正在阻塞 Agent`,"drawer.attentionWaiting":`等待你的决定`,"drawer.autoNotify":`Human-gate 自动通知`,"drawer.branch":`分支`,"drawer.closeDetail":`关闭详情:返回{context}`,"drawer.connected":`已连接`,"drawer.correctionDescription":`消息会沿用当前 Goal、Todo 与 Agent Session 上下文。`,"drawer.correctionLabel":`与 {agent} 纠偏`,"drawer.correctionPlaceholder":`例如:先关注权限风险,暂时不要提交…`,"drawer.correctionSend":`发送纠偏`,"drawer.correctionTextarea":`输入纠偏信息:Goal {goal},Agent {agent},Run {run}`,"drawer.copyRepository":`复制仓库标识`,"drawer.copyRepositoryDone":`已复制仓库标识`,"drawer.copyRepositoryError":`复制失败,请检查浏览器剪贴板权限。`,"drawer.copyRepositorySuccess":`已复制,可粘贴到其他工具。`,"drawer.cost":`成本 24h / 7d`,"drawer.costShort":`成本`,"drawer.durationShort":`时长`,"drawer.period24h":`24 小时`,"drawer.period7d":`7 天`,"drawer.tokens":`Token 24 小时 / 7 天`,"drawer.tokensShort":`Token`,"drawer.usageNotMeasured":`未采集`,"drawer.currentGoal":`当前 Goal`,"attentionDetail.title":`事项说明`,"attentionDetail.request":`需要你做什么`,"attentionDetail.decision":`需要作出决定`,"attentionDetail.unknownRequest":`来源未明确,请先查看来源再判断`,"attentionDetail.open":`当前投影中待处理`,"attentionDetail.closed":`已关闭`,"attentionDetail.deferred":`已推迟`,"attentionDetail.superseded":`已被替代`,"attentionDetail.unknown":`来源未提供状态`,"attentionDetail.unavailable":`来源尚未确认当前事项,请刷新后再操作`,"attentionDetail.unknownReason":`来源尚未提供原因。`,"attentionDetail.targetTodo":`关联的待解锁 Todo`,"attentionDetail.targetAgent":`事项指定的 Agent`,"attentionDetail.scope":`声明的决策范围`,"attentionDetail.notProvided":`来源未提供`,"attentionDetail.replacement":`替代 Todo`,"attentionDetail.openReplacement":`打开替代事项`,"attentionDetail.boundary":`阅读详情不会关闭 gate 或授予权限;作出决定前仍需新的操作预览。`,"drawer.decisionDefaultEvidence":`当前状态没有附加公开安全证据;下一步仍会先展示 Preview。`,"drawer.decisionDefaultReason":`该决定会影响当前 Todo 的下一步执行。`,"drawer.decisionDefer":`稍后决定`,"drawer.decisionMore":`更多决定`,"drawer.decisionReject":`拒绝`,"drawer.decisionReview":`查看影响并决定`,"drawer.dependencies":`依赖`,"drawer.detailsAndActions":`详情与操作`,"drawer.duration":`运行时长 24h / 7d`,"drawer.evidence":`证据`,"drawer.executionHistory":`执行历史`,"drawer.executionRecord":`运行记录`,"drawer.executionRecordAndResult":`执行过程与结果`,"drawer.explainDecision":`解释此决定`,"drawer.gateApproveHint":`在终端执行一条命令即可完成审批:`,"drawer.gateRejectHint":`不同意就把末尾的 approve 换成 reject。执行后这条提醒会自动消失。`,"drawer.gateRequiresHost":`需要宿主确认`,"drawer.gateRequiresHostDescription":`页面无权直接批准这类权限变更,你的点击没有写入任何内容。`,"drawer.goalAutoRun":`当前 Goal 的自动运行`,"drawer.goalChanges":`当前 Goal 的待确认变更`,"drawer.goalDetails":`Goal 详情`,"drawer.group":`群聊`,"drawer.inspectorFull":`切换到全屏`,"drawer.inspectorFullView":`全屏查看`,"drawer.inspectorHalf":`切换到半屏`,"drawer.inspectorHalfView":`半屏查看`,"drawer.lastNotification":`最近通知`,"drawer.larkConfigure":`管理 Lark connection`,"drawer.larkConnect":`连接 Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`未配置`,"drawer.larkNotConfiguredDescription":`配置后,当这个 Goal 出现需要你确认的变更时,会自动发飞书通知。`,"drawer.managerChanges":`管家待确认变更`,"drawer.moreActions":`更多操作`,"drawer.moreRunActions":`更多运行操作`,"drawer.nextTransition":`下一转换`,"drawer.validationRevision":`验证声明修订`,"drawer.validationDigest":`验证声明摘要`,"drawer.validationRevisionActor":`修订者`,"drawer.noExecutionHistory":`暂无执行记录。`,"drawer.noRun":`尚未启动执行 Session`,"drawer.noRunDescription":`Agent 开始执行后,运行记录会稳定显示在这里。`,"drawer.notAssigned":`未分配`,"drawer.notLinked":`未关联`,"drawer.notSet":`未设置`,"drawer.outputDetails":`产出详情`,"drawer.outputRecorded":`该产出已记录到当前 Goal。`,"drawer.outputSafePreview":`公开安全产出预览`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`本次运行产出`,"drawer.previewUnavailable":`此产出没有可用的公开安全内联预览。`,"drawer.priority":`优先级`,"drawer.progress":`进度`,"drawer.proposalApplied":`已应用,LoopX 状态将刷新。`,"drawer.proposalApplyFailed":`应用失败,没有写入任何变更。`,"drawer.proposalApplyFailedHint":`请刷新 Goal 状态后重新生成;若仍失败,可保留此页并查看高级诊断。`,"drawer.proposalClose":`关闭`,"drawer.proposalDefer":`稍后`,"drawer.proposalDeferred":`已暂缓,可稍后继续应用或重新生成。`,"drawer.proposalEnterGoal":`进入新 Goal`,"drawer.proposalExplainer":`确认后,LoopX 会执行这项变更并显示写入结果。关闭或取消不会修改任何状态。`,"drawer.proposalRecheck":`按最新状态重新检查`,"drawer.proposalRegenerate":`基于最新状态重试`,"drawer.proposalRejected":`已拒绝,这项变更不会写入。`,"drawer.proposalStale":`来源状态已变化,请按最新状态重新检查。`,"drawer.proposalViewGoal":`查看更新后的 Goal`,"drawer.reassign":`改派给`,"drawer.reassignSummary":`重新分配:{task}`,"drawer.reason":`原因`,"drawer.recoveryDescription":`本地历史已经保留,请选择恢复路径。`,"drawer.recoveryFailed":`上游 Session 恢复失败`,"drawer.recoveryNewSession":`携带上下文开始新 Session`,"drawer.recoveryRetry":`重试恢复`,"drawer.repositoryRole":`执行工作区`,"drawer.repository":`仓库`,"drawer.replyMode":`回复方式`,"drawer.subagentApplied":`已写入,并通过共享 Goal 状态读回校验。`,"drawer.subagentAppliedRestart":`已写入并完成读回校验;提升后的 Codex 子 Agent 上限将在新 Session 中生效。`,"drawer.subagentAppliedRefreshFailed":`已写入并通过共享 Goal 状态读回;状态投影刷新失败,可稍后手动刷新。`,"drawer.subagentApplying":`正在写入并校验共享状态读回…`,"drawer.subagentApplyFailed":`子代理设置写入失败。`,"drawer.subagentChildLimit":`当前上限`,"drawer.subagentConfirmDisable":`确认关闭子代理执行`,"drawer.subagentConfirmEnable":`确认开启子代理执行`,"drawer.subagentCurrentBoundary":`当前任务领域限制`,"drawer.subagentDescription":`仅在 Todo、配额、能力和写入范围门禁全部通过后,允许运行时为相互独立的任务临时创建子代理;不会强制并行,也不会授予持久权限。`,"drawer.subagentDisable":`预览关闭子代理执行`,"drawer.subagentDisableSummary":`这个 Goal 将不再创建新的子代理;现有 Todo 归属和执行记录不受影响。`,"drawer.subagentDomainInvalid":`所选任务领域限制无效。`,"drawer.subagentDomainTodoCount":`匹配 {count} 个开放 Todo`,"drawer.subagentDomains":`任务领域限制(可选)`,"drawer.subagentDomainsEmpty":`当前没有开放的 advancement Todo 声明 task_domain;保持为空即可不按任务领域限制子代理执行。`,"drawer.subagentDomainsHint":`全部不选表示不按任务领域过滤;选择后只放行匹配且已声明领域的 Todo,其他执行门禁始终生效。`,"drawer.subagentDomainsUnrestricted":`不限制任务领域`,"drawer.subagentEnable":`预览开启子代理执行`,"drawer.subagentLabel":`Per-Goal 执行边界`,"drawer.subagentModel":`子 Agent 模型`,"drawer.subagentEffort":`子 Agent 推理档位`,"drawer.subagentModelDefault":`宿主默认`,"drawer.subagentLunaPreset":`使用 Luna / max`,"drawer.subagentClearModel":`清除模型偏好`,"drawer.subagentModelHint":`填写后通过“预览配置调整”保存,执行关闭时也可保存偏好;启动时须核验宿主支持情况。`,"drawer.subagentModelRequired":`设置推理档位前请先指定子 Agent 模型。`,"drawer.subagentExecutionConfig":`委托执行绑定`,"drawer.subagentExecutionConfigHint":`可选;填写 .loopx/config/ 下仓库相对、已忽略的 JSON。规划只读取已授权路由状态,执行授权仍由该文件持有。`,"drawer.subagentExecutionConfigNone":`未配置`,"drawer.subagentMaxChildren":`最多子代理数`,"drawer.subagentHostCapacityImplicit":`隐式默认值`,"drawer.subagentHostCapacityRaise":`确认后还会把 Codex 子 Agent 上限从当前 {configured} 提升到至少 {required};已有更高值不会降低,并需新建 Session 生效。`,"drawer.subagentHostCapacityReady":`Codex 子 Agent 容量({configured})已满足该 Goal({required})。`,"drawer.subagentNoChange":`当前 Goal 已是这个设置,没有写入任何内容。`,"drawer.subagentPending":`待确认`,"drawer.subagentPreviewBoundary":`预览配置调整`,"drawer.subagentPreviewFailed":`无法生成子代理设置预览。`,"drawer.subagentPreviewing":`正在核对最新 Goal 状态…`,"drawer.subagentPreviewReady":`预览已锁定,确认后才会写入这个 Goal。`,"drawer.subagentPreviewSummary":`最多允许创建 {count} 个子代理;任务领域限制:{domains}。`,"drawer.subagentRemoteReadOnly":`当前来源只读,请在 Goal 所在主机上修改。`,"drawer.subagentTitle":`自适应子代理执行`,"drawer.remoteDetailsDescription":`SSH 来源只展示公开安全状态,不读取来源主机上的连接配置。`,"drawer.remoteDetailsUnavailable":`远端详情未投影`,"drawer.resumeNo":`否`,"drawer.resumeYes":`是`,"drawer.runDetails":`执行 Session`,"drawer.runInterrupt":`中断本次运行`,"drawer.runLatest":`查看最近执行过程`,"drawer.runNewSession":`开始新 Session`,"drawer.runCloseSession":`关闭 Session`,"drawer.runRecordEmpty":`还没有运行记录。Agent 尚未开始这次执行;请在“详情与操作”查看等待条件或恢复 Session。`,"drawer.runRecordProjected":`当前没有可展示的逐步运行记录。LoopX 已读取到 {completed}/{total} 的投影进度{outputs};请在“详情与操作”检查 Session 状态。`,"drawer.runRecordProjectedOutputs":`和 {count} 项产出`,"drawer.runRoleAssistant":`已完成`,"drawer.runRoleSystem":`需检查`,"drawer.runRoleUser":`收到任务`,"drawer.runView":`Session 视图`,"drawer.scheduleAdd":`添加定时检查`,"drawer.scheduleDefaultNotification":`仅在需要你时通知`,"drawer.scheduleDefaultStop":`Goal 完成或 owner 停止`,"drawer.scheduleDefaultTarget":`由 LoopX 调度器按 Goal 配置唤醒。`,"drawer.scheduleEdit":`改为每 2 小时`,"drawer.scheduleLast":`上次执行`,"drawer.scheduleLocalTimezone":`本地时区`,"drawer.scheduleNext":`下次执行`,"drawer.scheduleNeverRun":`尚未执行`,"drawer.scheduleNotification":`通知`,"drawer.schedulePause":`暂停`,"drawer.schedulePending":`等待调度`,"drawer.scheduleResume":`恢复`,"drawer.scheduleRunNow":`立即运行`,"drawer.scheduleStop":`停止{kind}`,"drawer.scheduleStopCondition":`停止条件`,"drawer.scheduleTimezone":`时区`,"drawer.sessionRecoverable":`可恢复`,"drawer.sessionStatus":`会话状态`,"drawer.setupHeartbeat":`设置 Heartbeat`,"drawer.taskActions":`Todo 待确认操作`,"drawer.taskAdvancement":`推进任务`,"drawer.taskBlock":`标记阻塞`,"drawer.taskComplete":`标记完成`,"drawer.taskCompletedNote":`该任务保留为只读记录。`,"drawer.taskCompletedTitle":`任务已完成`,"drawer.taskDefer":`暂缓`,"drawer.taskDeferCondition":`Todo 暂缓恢复条件`,"drawer.taskDeferInvalid":`条件格式不受支持;请使用下列可判定条件。`,"drawer.taskDeferPlaceholder":`例如 resume_at:2026-09-14T09:00:00+08:00`,"drawer.taskDeferReview":`检查暂缓`,"drawer.taskDeferSupported":`支持 todo_done、pr_merged、capacity_available 与带时区的 resume_at 条件。`,"drawer.taskPriority":`优先级`,"drawer.taskPriorityChoose":`选择优先级`,"drawer.taskPriorityClear":`不设优先级`,"drawer.taskDeferUntil":`暂缓至`,"drawer.taskDetails":`Todo 详情`,"drawer.taskInfo":`任务信息`,"drawer.taskManage":`管理任务`,"drawer.taskNextCompleted":`可创建后续任务`,"drawer.taskNextOpen":`推进或更新状态`,"drawer.taskOrdinary":`普通任务`,"drawer.taskStatusBlocked":`受阻`,"drawer.taskStatusDeferred":`已延期`,"drawer.resumeWhen":`恢复条件`,"drawer.resumeState":`恢复状态`,"drawer.resumePending":`等待条件满足`,"drawer.resumeReady":`可恢复`,"drawer.resumeReceipt":`恢复回执`,"drawer.taskNextDeferred":`等待恢复条件满足后重新评估`,"drawer.taskNextResumeReady":`恢复条件已满足,等待生命周期重新规划`,"drawer.taskStatusCompleted":`已完成`,"drawer.taskStatusOpen":`待执行`,"drawer.taskSuccessor":`创建后续 Todo`,"drawer.taskSuccessorNote":`Owner 标记为阻塞,等待补充上下文。`,"drawer.taskSuccessorSummary":`创建后续 Todo:{task}`,"drawer.taskSuccessorText":`{task} 的后续工作`,"drawer.taskType":`任务类型`,"drawer.topic":`Topic`,"drawer.trigger":`触发方式`,"drawer.titleAttention":`需要你`,"drawer.titleOutput":`产出详情`,"drawer.titleProposalApplied":`执行结果`,"drawer.titleProposalConfirm":`确认执行`,"drawer.titleSchedule":`定时检查`,"drawer.unconfigured":`未配置`,"drawer.workspaceCandidates":`可选择的工作区`,"files.emptySummary":`公开安全产出`,"files.empty":`还没有文件、产出或已验证的阶段周报。`,"files.loadingReports":`正在加载已验证的阶段周报…`,"files.reportDelta":`+{added} 新增 · {changed} 变化`,"files.reportAdded":`新增`,"files.reportChanged":`变化`,"files.reportGeneration":`生成批次`,"files.reportLoadFailed":`无法加载已验证周报`,"files.reportPublication":`发布批次`,"files.title":`Files & Outputs`,"files.verifiedReport":`已验证阶段周报`,"header.agentUnavailable":`不可用`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} 个工作 Agent`,"header.overview":`概览`,"header.chat":`对话`,"header.files":`成果`,"header.goalCapabilities":`能力配置`,"header.goalCapabilitiesDescription":`管理 Goal override 与继承的本机默认值。`,"header.goalDetails":`Goal 详情`,"header.goalDetailsDescription":`查看状态、用量、仓库、通知与 Session。`,"header.goalSettings":`Goal 设置`,"header.goalSettingsDescription":`配置此 Goal 的能力`,"header.goalNavigation":`Goal 导航`,"header.goalView":`Goal 视图`,"header.live":`实时`,"header.manager":`LoopX 管家`,"header.managerDescription":`跨 Goal 的个人工作入口`,"header.managerRuntime":`{profile} · {sandbox}`,"header.managerRuntimeFallback":`配置无效,已回退到 {profile} · {sandbox};请在机器能力设置中修复。`,"header.managerExecutorKindIndividual":`个人 CLI 登录`,"header.managerExecutorKindManaged":`operator 凭据`,"header.managerExecutorKindRegistered":`注册端点`,"header.managerExecutionUnavailable":`所选执行器 {executor} 无法在本机启动;该通道不会回落到个人 CLI 登录。`,"header.managerExecutionUnavailableCredential":`所选执行器 {executor} 需要 operator 凭据 {credential},配置后该通道才能启动它。`,"header.managerExecutionUnavailableRuntime":`所选执行器 {executor} 无法在本机启动:本机未安装其 runtime。`,"header.managerExecutionUnavailableEffort":`所选执行器 {executor} 拒绝了当前配置的推理档位;请改为受支持的档位后刷新。`,"header.managerExecutionUnavailableOutputBudget":`所选执行器 {executor} 的每请求输出 token 上限无效;请设置为正整数后刷新。`,"header.managerEndpointStewardDefault":`当前运行 {executor},管家通道的出货默认值;如需改指请显式选择执行器。`,"header.managerOutputTokenBudget":`每次请求 {tokens} token`,"header.managerAllocation":`选择:{policy} · {reason}`,"header.managerSelectionPreferred":`偏好`,"header.managerSelectionPinned":`锁定`,"header.managerSelectionFlexible":`灵活资源池`,"header.managerAllocationUser":`用户明确选择`,"header.managerAllocationPinned":`由本机配置锁定`,"header.managerAllocationFallback":`首选不可用,使用池内合格替代`,"header.managerAllocationUnavailable":`当前没有可用的合格路径`,"header.managerAllocationPrimary":`首选路径可用`,"header.managerAllocationProductDefault":`产品默认路径`,"header.managerAllocationService":`服务环境覆盖`,"header.managerAllocationConfigured":`按已配置路径`,"header.managerOverview":`总览`,"header.managerView":`管家视图`,"header.openGoalNavigation":`打开 Goal 导航`,"header.readOnlySourceDescription":`{source} 通过 SSH 隧道只读展示`,"header.refresh":`刷新状态`,"header.refreshDone":`刚刚更新`,"header.refreshFailed":`刷新失败`,"header.refreshing":`刷新中`,"header.selectAgent":`选择 Agent`,"header.selectChatRuntime":`选择聊天 Runtime`,"header.tasks":`任务`,"header.themeBrutal":`切换到野兽主题`,"header.themePaper":`切换到默认主题`,"home.blockingSummary":`其中 {count} 项正在阻塞 Agent。`,"home.completedGoals":`已完成的 Goal`,"home.empty":`当前没有`,"startup.goalLoading":`正在加载状态…`,"startup.goalError":`状态加载失败`,"startup.progress":`已加载 {loaded} / {total} 个活跃 Goal`,"startup.partial":`Goal 状态正在逐个更新,当前统计尚不完整。`,"startup.independent":`此 Goal 的加载不会阻塞其他 Goal,你可以先查看已加载的内容。`,"startup.error.timeout":`读取超时,可在本地服务就绪后重试。`,"startup.error.network":`连接中断,请重试以重新连接。`,"startup.error.service":`Goal 状态读取失败。请稍后重试;若问题持续,请检查状态来源。`,"startup.error.access":`状态来源无法访问此 Goal 所需的文件或运行时目录。请检查该来源运行账户的访问权限,修复后重试。`,"startup.error.revision":`加载期间 Goal 目录发生变化,请刷新以同步。`,"startup.error.scope":`该 Goal 已不在当前来源中,请刷新目录。`,"startup.error.invalid":`无法解析状态响应,请刷新或检查 LoopX 更新。`,"startup.retry":`重试`,"startup.retryFailed":`重试失败的 Goal`,"startup.failedCount":`{count} 个 Goal 加载失败,已加载的 Goal 可继续使用。`,"home.greeting":`你好,我是 LoopX 管家`,"home.history":`历史`,"home.lane.needsYou":`需要你`,"home.lane.needsYouDescription":`等待你的决定、授权或补充信息`,"home.lane.observing":`观察中`,"home.lane.observingDescription":`持续监控,出现变化时再提醒你`,"home.lane.running":`执行中`,"home.lane.runningDescription":`Agent 正在推进并持续回传进展`,"home.lane.scheduled":`已安排`,"home.lane.scheduledDescription":`已经安排,等待时间或前置条件`,"home.noActivity":`尚无活动`,"home.noFirstActivity":`等待首次活动`,"home.noCompletedGoals":`还没有已完成的 Goal`,"home.preservedState":`保留状态,可随时恢复`,"home.stopped":`已停止`,"home.systemHealth":`系统健康:{summary}`,"home.taskCount":`{count} 个 Task`,"home.todayAt":`今天 {time}`,"home.waitingCount":`你有 {count} 项需要处理。`,"home.workspace":`Goal 工作区`,"lark.allMessages":`此 Topic 中的所有消息`,"lark.allTopicMessages":`所有 Topic 消息`,"lark.agentIngress":`Agent 入站方式`,"lark.agentAppPermissions":`每个选中的 Agent 都需要一个已具备群聊提及和回复能力的 Lark App。`,"lark.agentApps":`每个 Agent 的 Lark App`,"lark.agentAppsDescription":`默认使用上方 App;需要独立机器人身份时,可为 Agent 选择另一个兼容 App。`,"lark.agentAppSelection":`{agent} 的 Lark App`,"lark.appCreated":`App 已创建`,"lark.appCreateFailed":`创建失败`,"lark.appLoading":`正在加载可用的 Lark Apps…`,"lark.appPermissions":`该 App 能发送建联消息,但缺少接收群聊 @ 消息或自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly、im:message.send_as_bot 和事件 im.message.receive_v1,发布新版后刷新。`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`自动回复暂不可用`,"lark.autoReplyReady":`自动回复可用`,"lark.bindGoal":`绑定到 Goal`,"lark.cancel":`取消`,"lark.cardinality":`一个 Lark App · 多个 Goal · 每个 Agent 一条隔离路由`,"lark.capture":`接收范围`,"lark.captureAddressed":`仅接收提及 App 或回复 App 的消息`,"lark.captureAll":`接收此 Goal Topic 中的所有消息`,"lark.captureScope":`接收范围`,"lark.captureScopeDescription":`决定哪些 Topic 消息会进入 LoopX;不会扩大 Agent 权限。`,"lark.closeConnection":`关闭连接弹窗`,"lark.closeCreate":`关闭创建弹窗`,"lark.closeSettings":`关闭 Lark 设置`,"lark.connect":`连接`,"lark.connectAllAgents":`连接全部已注册 Agent`,"lark.connectAllAgentsAction":`一键连接 {count} 个 Agent`,"lark.connectAllAgentsDescription":`一次引导创建 {count} 个隔离的 Agent Topic;请在对应 Topic 内发送请求,每个 Agent 保留独立路由和收件箱。`,"lark.connectApp":`连接 Lark App`,"lark.connection":`连接`,"lark.connections":`连接`,"lark.configuration":`Lark 配置`,"lark.continueFeishu":`在飞书中继续`,"lark.createAutomatically":`自动创建 Goal Topic`,"lark.createAutomaticallyDescription":`将为每个选中的 Agent 创建带 Agent 标识的专属 Topic。`,"lark.defaultAgentAppDescription":`用于查找目标群聊,并作为所有选中 Agent 的默认 App;下方的逐 Agent 选择可覆盖它。`,"lark.description":`管理可复用的 Lark App,并用独立 Topic 将群聊连接到 Goal。`,"lark.editConnection":`编辑 Lark 连接`,"lark.goalConnections":`{count} 个 Goal 连接`,"lark.goalTopicConnections":`Lark Goal Topic 连接`,"lark.groupChat":`群聊`,"lark.groupEmpty":`该机器人尚未加入可连接的群。请先在飞书群设置中添加这个机器人,再回来刷新或搜索。`,"lark.groupLoading":`正在读取该机器人已加入的群…`,"lark.groupSearch":`搜索该机器人已加入的群`,"lark.historyPermission":`历史补读权限(独立能力)`,"lark.health.contextCaptured":`已捕获群聊上下文`,"lark.health.contextCapturedDetail":`该消息仅作为非权威上下文保留,不会启动或引导管家 Turn;需要执行时请直接 @ 机器人或回复机器人的消息。`,"lark.health.eventProcessed":`已处理 {events} 条事件,成功回复 {replies} 条。`,"lark.health.eventUnverified":`事件订阅待验证`,"lark.health.eventUnverifiedDetail":`Provider listener 已就绪,但尚未收到消息事件。请启用 im.message.receive_v1、开通群聊 @ 消息权限并发布新版,然后在这个 Agent Topic 内发送新的 @ 消息;存在多条 Agent 路由时,群顶层消息会 fail closed。`,"lark.health.ignoredSelf":`已忽略机器人自身发送的消息,避免重复回复。`,"lark.health.invalidRouting":`路由配置无效`,"lark.health.invalidRoutingDetail":`连接已安全停用,请重新选择处理方式并保存。`,"lark.health.lastStatus":`最近事件状态:{status}`,"lark.health.listening":`监听中`,"lark.health.messageContextPermission":`消息权限不足`,"lark.health.messageContextPermissionDetail":`已收到消息事件,但无法读取群消息上下文。请发布并授权该 App 的群消息读取权限。`,"lark.health.notAddressed":`最近消息未直接 @ 机器人`,"lark.health.notAddressedDetail":`监听正常;当前连接只响应直接 @ 机器人或对机器人的回复。`,"lark.health.notStarted":`监听未启动`,"lark.health.notStartedDetail":`请刷新连接或重新启动 LoopX 后再试。`,"lark.health.processingFailed":`消息处理失败`,"lark.health.processingFailedDetail":`已收到消息事件,但 Agent 处理失败。请查看本地诊断后重试。`,"lark.health.queued":`已进入 Agent 收件箱`,"lark.health.queuedDetail":`消息由 {agent} 异步处理,不会启动通用 Chat Session。`,"lark.health.sourceDisconnected":`实时消息连接断开`,"lark.health.sourceDisconnectedDetail":`消息监听进程意外退出。请核对应用档案的平台:飞书应用选飞书,国际版 Lark 应用选 Lark,再检查连接及订阅错误。LoopX 正在重试;历史消息能读取,不代表能实时收消息。`,"lark.health.retrying":`监听重试中`,"lark.health.retryingDetail":`事件监听暂时中断,LoopX 正在自动重试。`,"lark.health.routeAmbiguous":`消息匹配多个 Goal`,"lark.health.routeAmbiguousDetail":`同一 Bot 和群聊存在多个完整群捕获连接。请让每个 Agent 使用独立 Bot,或只保留一个完整群连接。`,"lark.health.routeMismatch":`消息未匹配当前 Goal Topic`,"lark.health.routeMismatchDetail":`事件来自其他群聊或 Topic。请重新选择群聊并连接该 Goal,然后发送一条新的 @ 消息。`,"lark.health.routeUnavailable":`消息无法路由到 Goal`,"lark.health.routeUnavailableDetail":`当前连接信息不完整。请重新连接该 Goal 后再发送一条新的 @ 消息。`,"lark.health.starting":`正在启动`,"lark.health.startingDetail":`LoopX 正在启动该 App 的消息事件监听。`,"lark.health.unavailable":`自动回复不可用`,"lark.health.waiting":`等待处理`,"lark.incomingMessages":`接收消息`,"lark.ingressAsync":`异步收件箱`,"lark.ingressAsyncDescription":`写入 Agent 私有收件箱,等待后续显式处理。`,"lark.editPreservesIdentity":`保存会保留此 App、群和 Topic;旧连接默认升级为 Agent 异步收件箱。`,"lark.conversationKind":`连接用途`,"lark.managerConversation":`管家 · 同步对话`,"lark.workerConversation":`工作 Agent · 后台任务`,"lark.managerConversationDescription":`内置管家即时回应对话,长任务交给后台 Agent。群聊与私聊分别保存上下文。`,"lark.ingressLegacy":`待升级`,"lark.ingressLegacyDescription":`保存连接即可升级为 Agent 异步收件箱,已有消息保留在原 Topic 中。`,"lark.ingressQueue":`排队`,"lark.ingressQueueDescription":`进入同一 Agent Session 的有界 FIFO 队列,当前 Turn 完成后处理。`,"lark.ingressSteering":`实时引导`,"lark.ingressSteeringDescription":`投到当前活跃 Turn;没有精确活跃 Turn 时安全拒绝。`,"lark.loading":`加载 Lark 配置…`,"lark.management":`Lark 管理`,"lark.openEventSettings":`查看飞书事件配置`,"lark.mentions":`提及机器人`,"lark.mentionsOnly":`仅提及消息`,"lark.needsMessagePermissions":`需要消息权限`,"lark.needsSetup":`需要设置`,"lark.newApp":`新建 Lark App`,"lark.noAgentConfigured":`未配置 Agent`,"lark.noConnections":`暂无匹配的连接。`,"lark.noProfiles":`还没有可用的 lark-cli App profile。`,"lark.profileName":`Profile 名称`,"lark.profileValidation":`Profile 只能包含字母、数字、点、下划线和连字符。`,"lark.processing":`处理方式`,"lark.region":`区域`,"lark.registerAnother":`+ 注册另一个 Lark App — 通过飞书创建`,"lark.reopenFeishu":`重新打开飞书`,"lark.settingsConfigure":`配置 {goal}`,"lark.settingsDisconnect":`解绑 {goal}`,"lark.replyMode":`回复方式`,"lark.replyModeDescription":`当前只支持在来源 Topic 内回复,避免跨群或跨 Goal 投递。`,"lark.reusableApps":`{count} 个可复用 App`,"lark.reusableWorkspaceApp":`可复用工作区 App`,"lark.routesUnverified":`{count} 条 Lark 路由尚未验证`,"lark.saveConnection":`保存连接`,"lark.searchConnections":`搜索 Lark 连接`,"lark.searchPlaceholder":`搜索 App、群、Goal 或 Topic`,"lark.setupCopy":`LoopX 将通过 lark-cli 打开飞书官方创建页面。应用凭证保存在系统 Keychain,LoopX 只保留 profile 引用。`,"lark.someoneMentions":`有人提及 Agent`,"lark.targetAgent":`目标 Agent`,"lark.targetAgentDescription":`选择该 Goal 内已注册的 Agent。此连接只投递给一个 Agent,不广播、不授予新权限。实时引导与排队需要该 Agent 的精确活跃 Session。`,"lark.agentUnavailable":`{agent} · 已不可用`,"lark.selectRegisteredAgent":`请先选择可用的已注册 Agent;不会自动替换原先的接收者。`,"lark.topicPreview":`Topic 预览`,"lark.topicReply":`Topic 回复`,"lark.trigger":`触发方式`,"lark.waitingFeishu":`等待飞书完成创建`,"lark.waitingFeishuDescription":`请在新窗口中完成飞书授权,完成后会自动回到这里。`,"lark.waitingLink":`正在生成飞书官方创建链接…`,"lark.error.appCreate":`Lark App 创建失败`,"lark.error.appRequired":`请选择一个 Lark App profile。`,"lark.error.bind":`绑定失败`,"lark.error.bindPreview":`绑定预览失败`,"lark.error.configuration":`Lark 配置加载失败`,"lark.error.groupLookup":`无法读取该机器人已加入的群。请检查机器人状态后重试。`,"lark.error.groupLoad":`群聊加载失败`,"lark.error.invalidApp":`Lark App profile 不可用或尚未完成授权。`,"lark.error.messagePermissions":`该 App 缺少自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly 和 im:message:send_as_bot,发布新版后回来刷新重试。`,"lark.error.provider":`飞书 API 调用失败,且没有生成已验证回执。请稍后重试。`,"lark.error.setupPoll":`创建状态查询失败`,"lark.error.setupStart":`无法启动 Lark App 创建流程`,"lark.error.cliExecutable":`已找到配置的 lark-cli,但当前无法执行。请检查安装或启动参数。`,"lark.error.cliMissing":`未发现 lark-cli。请先安装 lark-cli,然后重新启动 LoopX。`,"lark.error.cliStart":`lark-cli 启动失败。请检查安装状态,然后重新启动 LoopX。`,"lark.error.disconnect":`解绑失败`,"notifications.autoNotify":`需要你确认时自动推送到群里`,"notifications.bind":`绑定到通知群`,"notifications.bindConfirm":`将把「{goal}」绑定到通知群「{target}」,绑定时会验证机器人在群内并发送一条确认消息。`,"notifications.bindFailed":`绑定失败`,"notifications.bound":`已绑定`,"notifications.confirmBind":`确认绑定`,"notifications.description":`把 Goal 里需要你确认的变更推送到飞书群。绑定和开关在这里完成,推送逻辑沿用现有通道。`,"notifications.disabled":`已停用`,"notifications.group":`通知群:{target}`,"notifications.loadFailed":`通知群列表加载失败`,"notifications.noTargets":`还没有可用的通知群。通知群涉及机器人私有身份,请先在终端配置一次:`,"notifications.notBound":`未绑定`,"notifications.recent":`最近 {time}`,"notifications.sentCount":`已发送 {count} 条`,"notifications.settings":`Goal 通知绑定`,"notifications.setupFailed":`设置失败`,"notifications.title":`飞书群通知`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`频率`,"proposal.field.completionCriteria":`完成标准`,"proposal.field.executionBoundary":`执行边界`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`首个任务`,"proposal.field.objective":`目标`,"proposal.field.operation":`操作`,"proposal.field.operationState":`操作状态`,"proposal.field.resultDelivery":`结果回传`,"proposal.field.confirmationBoundary":`确认边界`,"proposal.field.expiresAt":`过期时间`,"proposal.field.permission":`权限`,"proposal.field.reason":`原因`,"proposal.field.stopCondition":`停止条件`,"proposal.field.target":`检查内容`,"proposal.field.timezone":`时区`,"proposal.field.title":`标题`,"proposal.field.workspace":`执行工作区`,"actionReview.targetChanged":`预览目标与请求的 Goal 或操作不一致,请重新生成预览。`,"actionReview.ready_stop":`暂停可恢复。此预览已通过检查,可直接执行;完成仍需要读回验证。`,"actionReview.resume_review":`恢复自动调度前需要确认。实际执行仍受额度、Gate 和 Todo 约束。`,"actionReview.delete_review":`请确认从注册表移除这个已停止 Goal。项目文件与历史记录会保留。`,"actionReview.action_review":`执行前请检查此提案的目标与影响。`,"actionReview.protected_action":`此操作需要明确审阅。确认不能替代所需授权。`,"actionReview.unknown_permission":`无法识别权限分类。请重新检查提案后再继续。`,"actionReview.unknown_action":`无法识别此生命周期操作。请重新检查提案后再继续。`,"actionReview.incomplete_proposal":`预览缺少验证信息或可执行转换。请重新生成预览。`,"actionReview.authority_gate":`Gate 阻止执行。请满足其要求后重新检查提案。`,"actionReview.stale_proposal":`来源状态已变化。请重新生成预览,原决定不再适用。`,"actionReview.apply_pending":`正在执行,请等待读回结果后再重试。`,"actionReview.readback_verified":`操作已完成,结果状态已通过读回验证。`,"actionReview.readback_unverified":`操作返回但未通过读回验证。尚不能确认完成,请重新检查状态。`,"actionReview.operation_group_confirmation":`这份精确请求只能在已绑定飞书群的原始卡片确认;Dashboard 不提供本地执行入口。`,"actionReview.operation_result_delivery_pending":`操作结果已经记录,但原群结果卡尚未通过回读核验。`,"drawer.recoverEditResult":`恢复操作结果`,"drawer.retryOriginal":`重试原操作`,"actionReview.canonical_update_retry":`编辑结果尚未确认。重试此操作以恢复原结果。`,"actionReview.canonical_update_projection_pending":`操作已提交,展示尚未同步。重试此操作以恢复当前视图。`,"actionReview.apply_failed":`执行未完成。请检查失败原因并重新生成预览后再试。`,"actionReview.inactive_proposal":`此提案当前不可执行。请重新检查后再继续。`,"proposal.gate.default":`需要宿主确认`,"proposal.impact.goalCreate":`确认后会创建 Goal 和首个 Todo,并让选定 Agent 开始首轮推进。`,"proposal.impact.lifecycleDelete":`确认后会从 source registry 和 global registry 移除这个已停止 Goal;项目文件、历史状态文件和备份不会被删除。`,"proposal.impact.lifecycleResume":`确认后会恢复 Goal 的自动调度资格并移回 Active Goals;实际执行仍受 quota、Gate 和 Todo 约束。`,"proposal.impact.lifecycleStop":`确认后会停止自动推进,并将 Goal 移入折叠的「已停止」列表;历史、Todo 和证据都会保留,可随时恢复。`,"proposal.impact.protected":`该操作需要通过受保护的 LoopX 写入服务完成。`,"proposal.impact.operation":`这里仅展示同一份不可变条款。请在已绑定的飞书群确认或拒绝;确认只会消费一个规范 claim。`,"proposal.primary.apply":`确认并应用`,"proposal.primary.goalCreate":`创建 Goal 并开始首轮`,"proposal.primary.lifecycleDelete":`删除 Goal`,"proposal.primary.lifecycleResume":`恢复 Goal`,"proposal.primary.lifecycleStop":`停止 Goal`,"proposal.primary.todoStart":`创建任务并开始执行`,"proposal.primary.operationGroup":`前往飞书群确认`,"proposal.primary.operationResultPending":`结果卡回传待恢复`,"proposal.primary.operationResultVerified":`结果已核验`,"proposal.resultDelivery.verified":`已在原群卡片完成回读核验`,"proposal.resultDelivery.pending":`等待回传并核验原群卡片`,"proposal.summary.goalCreate":`创建 Goal:{title}`,"proposal.summary.heartbeat":`为当前 Goal 设置 Heartbeat`,"proposal.summary.lifecycleDelete":`删除 Goal:{title}`,"proposal.summary.lifecycleResume":`恢复 Goal:{title}`,"proposal.summary.lifecycleStop":`停止 Goal:{title}`,"proposal.summary.monitor":`为当前 Goal 创建定时检查:{target}`,"proposal.teamPlan.gapReason.capabilityNotGranted":`尚未授予所需能力`,"proposal.teamPlan.gapReason.audienceNotAuthorized":`尚未获得所需访问权限`,"proposal.teamPlan.pending":`待安排`,"proposal.teamPlan.assignedHint":`分配已记录,执行进度请查看目标。`,"proposal.teamPlan.recoveredHint":`未新增任务,当前进度请查看目标。`,"proposal.teamPlan.originalPlan":`查看原计划`,"proposal.teamPlan.viewResult":`查看结果`,"proposal.teamPlan.openGoal":`打开目标`,"proposal.teamPlan.resultTitle":`分配结果`,"proposal.teamPlan.retry":`重试分配`,"proposal.teamPlan.retryHint":`重试会恢复本次分配结果,不会重复创建任务。`,"proposal.summary.teamPlan":`为 {goal} 分配 {count} 项任务`,"proposal.impact.teamPlan":`确认后分配可安排的任务,其余保留为待安排。`,"proposal.primary.teamPlan":`确认分配`,"proposal.field.laneGaps":`未配齐的 lane`,"proposal.field.quotaEnvelope":`配额包络`,"proposal.teamPlan.acceptanceShort":`验收参考`,"proposal.teamPlan.advisory":`计划参考;本次确认不执行该约束`,"proposal.teamPlan.appliedPartially":`已分配 {created} 项,{gaps} 项待安排`,"proposal.teamPlan.appliedAlreadyPresent":`已恢复原分配结果`,"proposal.teamPlan.applied":`已分配 {count} 项任务`,"proposal.teamPlan.gapLane":`待安排`,"proposal.teamPlan.laneUnstaffed":`待安排,尚无任务`,"proposal.teamPlan.gapReason.agentNotRegistered":`尚未加入此目标`,"proposal.teamPlan.gapReason.actionKindNotSupported":`当前环境不支持此任务类型`,"proposal.workspace.current":`当前本地工作区(未绑定 Repository)`,"proposal.workspace.named":`{workspace}(仅提供执行环境,不会自动关联仓库)`,"proposal.workspaceGate.agentImpact":`先完成 Agent 身份绑定,再重新检查原操作;当前没有写入 Goal。`,"proposal.workspaceGate.agentTitle":`先绑定 Agent`,"proposal.workspaceGate.defaultSummary":`请选择 Goal 所属工作区。`,"proposal.workspaceGate.selectionImpact":`选择工作区后会重新展示待确认操作,选择本身不会写入状态。`,"proposal.workspaceGate.selectionTitle":`选择 Goal 工作区`,"projection.agentAdvancingGoal":`Agent 正在推进当前 Goal`,"projection.agentIdle":`暂无需要你处理`,"projection.agentNeedsDecision":`Agent 等待你的决定`,"projection.agentPreparingNextStep":`Agent 正在整理下一步`,"projection.agentStopped":`已由你停止;历史、Todo 和证据仍保留`,"projection.agentWaitingExternal":`正在等待外部条件`,"projection.confirmAgentDecision":`请确认 Agent 下一步需要的权限或决策`,"projection.events24h":`24 小时内 {count} 个事件`,"projection.firstReadOnlyAdapterCheck":`执行首次只读适配检查并保存进度`,"projection.goalVerified":`Goal 状态、Todo 与注册信息已验证`,"projection.latestRun":`最近运行`,"projection.latestValidation":`最近验证`,"projection.nextUpdatePending":`等待 LoopX 更新下一步`,"projection.publicSafeProjection":`公开安全状态投影`,"projection.refreshState":`刷新 LoopX 状态,确认当前进度仍然有效`,"projection.runEvidenceAvailable":`存在可查看的运行证据`,"projection.runRecorded":`最近一次 LoopX 运行已经记录`,"projection.statusRefreshNeeded":`LoopX 状态需要刷新`,"projection.todoStatusUpdated":`Todo 状态已经更新,正在确认下一步`,"projection.validationRecorded":`最近验证已经记录`,"runs.completed":`已完成`,"runs.failed":`需检查`,"runs.interrupted":`已中断`,"runs.queued":`已安排`,"runs.ready":`可继续`,"runs.resumeFailed":`恢复失败`,"runs.running":`执行中`,"runs.unknown":`状态未知`,"runs.waiting":`等待条件`,"schedule.active":`执行中`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`定时与持续任务`,"schedule.paused":`已暂停`,"schedule.summary":`按 LoopX 调度约束持续检查`,"schedule.defaultTarget":`检查当前 Goal 的阻塞、进度与新产出`,"schedule.unsupportedCalendar":`当前定时检查不支持精确到星期或时刻的日历计划。请改用固定间隔,例如“每 30 分钟”“每 2 小时”或“每天”;草稿已保留,没有生成待确认操作。`,"source.add":`添加来源`,"source.addConfigured":`添加只读来源`,"source.addMethod":`来源添加方式`,"source.addSsh":`添加 SSH 隧道来源`,"source.closeForm":`关闭来源表单`,"source.configured":`已配置 SSH`,"source.configuredCount":`本机 SSH Host · {count} 个`,"source.configuredGroup":`已配置 SSH Host · {count}(点击快速添加)`,"source.connected":`已连接`,"source.connecting":`连接中`,"source.controlPlane":`控制面来源`,"source.copy":`复制`,"source.copyCommand":`复制 SSH 隧道命令`,"source.copyError":`无法复制命令,请手动复制下方命令。`,"source.copied":`已复制`,"source.description":`已读取全部显式 Host(含 Include);通配规则不会作为具体来源。先运行命令,LoopX 不读取密钥或配置细节。`,"source.host":`本机 SSH Host`,"source.hostEmpty":`~/.ssh/config 中没有可直接选择的显式 Host。`,"source.hostLoadError":`无法读取本机 SSH Host。`,"source.hostPlaceholder":`输入或搜索 Host`,"source.invalid":`SSH 来源参数无效。`,"source.loadingHosts":`正在读取…`,"source.localInteractive":`本机交互`,"source.localPort":`本地端口`,"source.manual":`手动 URL`,"source.manualDescription":`远端来源始终按只读投影处理,不继承本机写权限。`,"source.name":`名称`,"source.namePlaceholder":`远程开发机`,"source.notAvailable":`不可用`,"source.readOnly":`SSH 隧道 · 只读`,"source.readOnlyNoticeDescription":`你可以查看 Goal、Task、证据与运行状态;写入、纠偏和 Agent 会话仍留在来源主机。`,"source.readOnlyNoticeTitle":`远端只读投影`,"source.readOnlyWriteError":`远端 SSH 隧道来源是只读投影,不能执行控制面写入。`,"source.refreshHosts":`重新读取 SSH Host`,"source.remove":`移除来源 {source}`,"source.removeCurrent":`移除当前来源`,"source.select":`选择控制面来源`,"source.selectHost":`请选择已配置的 SSH Host。`,"source.statusUrl":`本地转发 URL`,"source.tunnelCommandPending":`选择 Host 后生成隧道命令`,"machine.absent":`尚未配置`,"machine.action.create":`创建机器策略`,"machine.action.delete":`移除机器策略`,"machine.action.unchanged":`无需写入`,"machine.action.update":`更新机器策略`,"machine.applied":`机器策略已应用,并通过回读校验。`,"machine.applyError":`无法应用机器策略。`,"machine.applyPreview":`应用已审阅预览`,"machine.changedNamespaces":`变更的 Namespace`,"machine.capabilityCatalog":`机器能力目录`,"machine.capabilityEmpty":`当前没有注册可在机器作用域配置的能力。`,"machine.configured":`已配置`,"machine.confirmRollback":`确认回滚`,"machine.currentRevision":`当前 Revision`,"machine.currentValue":`当前机器值`,"machine.description":`与 Goal 设置共用能力目录。在这里管理受支持的机器默认值;仅支持 Goal 配置的能力会明确标注。`,"capabilities.rawJson":`高级:原始 JSON`,"machine.goalOnly":`此能力目前仅支持 Goal 级配置。请打开具体 Goal 的能力设置进行配置;这里不会设置机器级默认值。`,"machine.desiredRevision":`目标 Revision`,"machine.editorUnavailable":`当前版本未安装此 Namespace 的编辑器`,"machine.editorUnavailableDescription":`它仍会显示在 Registry 中;安装或升级对应的 Dashboard 编辑器后才能修改。`,"machine.editorMode":`编辑模式`,"machine.liveDefault":`实时默认值;Goal 显式覆盖优先`,"machine.liveDefaultDescription":`没有显式覆盖的 Goal 会在该能力下一次决策时读取当前机器策略。修改或移除策略会立即影响这些已有 Goal;显式 Goal 覆盖保持固定。`,"machine.credentialTitle":`操作者模型凭据`,"machine.credentialDescription":`管家通道与托管宿主在本机认证用的 key 与 endpoint。key 单独存放于仅属主可读的文件,不会进入这里展示的机器配置,也不会被回读——回读的是它的指纹。`,"machine.credentialApiKey":`API key`,"machine.credentialApiKeyPlaceholder":`粘贴 key 以保存;留空则保留已存的 key`,"machine.credentialBaseUrl":`Endpoint base URL`,"machine.credentialBaseUrlPlaceholder":`https://endpoint.example/v1(留空则使用 endpoint 默认值)`,"machine.credentialStore":`保存凭据`,"machine.credentialClearKey":`清除已存 key`,"machine.credentialClearUrl":`清除已存 endpoint`,"machine.credentialConfigured":`已配置`,"machine.credentialAbsent":`未配置`,"machine.credentialInvalid":`无法读取——需要修复`,"machine.credentialSourceMachine":`本机已存凭据`,"machine.credentialSourceEnvironment":`服务环境变量`,"machine.credentialSourceUnset":`无来源`,"machine.credentialFingerprint":`指纹`,"machine.credentialStored":`凭据已保存。下一轮即生效,无需重启。`,"machine.credentialCleared":`已清除本机存储的凭据。`,"machine.credentialError":`凭据保存失败。`,"machine.credentialBoundary":`保存凭据不授予任何权限:它不会选择执行器、模型或推理强度。`,"machine.genericNamespaceDescription":`使用 JSON 编辑这个已注册 Namespace。LoopX 会先按 capability 自己拥有的 schema 校验,再允许预览写入。`,"machine.jsonConfiguration":`Namespace 配置(JSON)`,"machine.jsonConfigurationHelp":`只更新当前 Namespace;其他机器配置会保留,Apply 仍锁定到已审阅的 Preview Revision。`,"machine.jsonEditor":`JSON`,"machine.editJson":`编辑 JSON`,"capabilities.jsonConfiguration":`Goal 配置(JSON)`,"capabilities.jsonHelp":`仅编辑当前 Goal 的已注册字段。修改后需重新预览才能应用。`,"capabilities.jsonInvalid":`请输入合法的 JSON 对象,且仅包含已注册的可编辑字段。`,"machine.backToForm":`返回表单`,"machine.jsonInvalid":`请先填写一个合法的 JSON object,再预览变更。`,"machine.loadError":`无法读取机器配置。`,"machine.invalidStoredConfiguration":`已保存的机器配置需要修复`,"machine.invalidStoredConfigurationDescription":`已保存值不再符合当前契约,因此不会在这里显示。请检查已定位的能力,并通过“预览”和“应用”替换它;无关 namespace 保持不变。`,"machine.machinePolicy":`机器策略`,"machine.namespaceCount":`已注册 Namespace`,"machine.namespaces":`配置 Namespace`,"machine.periodicReport":`周期报告`,"machine.periodicReportDescription":`为所有未显式覆盖的 Goal 提供默认报告策略;Goal 调度与发送消费解析后的有效配置。`,"machine.periodicReportActivation":`开启后将在已验证的阶段节点自动投递`,"machine.periodicReportActivationDescription":`这不是每周定时器。当 LoopX 验证 Goal 已完成一个阶段时,Agent 会生成并冻结报告,随后通过配置的 Goal Channel 自动发送。启用此订阅即授予持续投递权;发送失败或路由漂移会 fail closed 并进入修复。`,"machine.changeQualityActivation":`质量验证是质量门禁,不是新增授权`,"machine.changeQualityActivationDescription":`继承该策略的 Goal 会验证最终精确 diff。safe_fix 只允许在既有写入权限内执行至多一次有界修复;此设置不会授予文件、权限或合并权。`,"machine.replanCadenceActivation":`复核周期只改变时机,不改变执行权限`,"machine.replanCadenceActivationDescription":`没有显式覆盖的 Goal 会在下一次复核决策前读取此阈值;它不会创建 Turn、消耗配额或授予权限。`,"machine.preview":`审阅机器配置变更`,"machine.previewChanges":`预览变更`,"machine.previewError":`无法生成机器策略预览。`,"machine.previewLocked":`应用操作锁定到当前 Revision;若机器状态变化,LoopX 会要求重新预览。`,"machine.previewRollback":`预览回滚`,"machine.previewRemoval":`预览移除`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`由 capability 管理的 preset,例如 weekly-progress。`,"machine.registry":`Typed Registry`,"machine.requiredFields":`开启后必须填写 profile preset、Goal Channel route 与有效时区。`,"machine.revision":`机器 Revision`,"machine.revisionLockedReady":`所有变更必须先预览;只有对应的机器 Revision 仍然有效时才会应用。`,"machine.rollbackAvailable":`可回滚上一次应用`,"machine.rollbackDescription":`先预览已保存的前一 Revision,再决定是否恢复。`,"machine.rollbackError":`无法完成回滚。`,"machine.rollbackPreviewDescription":`前一 Revision 已准备恢复,请确认执行本次回滚。`,"machine.rolledBack":`已恢复前一版机器策略,并通过校验。`,"machine.removed":`机器策略已移除,并通过回读校验。`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`只填写公开 route alias;凭据与 provider identifier 不会进入此表单。`,"machine.timezone":`时区`,"machine.timezoneHelp":`填写 IANA 时区,例如 Asia/Shanghai。`,"machine.title":`机器配置`,"machine.unchanged":`机器策略已与预览一致,本次没有写入。`,"machine.visualEditor":`引导式`,"capabilities.atomicOverride":`Goal override 按完整配置生效`,"capabilities.atomicOverrideDescription":`Goal 的完整配置优先于机器默认值;LoopX 不会在两个作用域之间逐字段拼接。`,"capabilities.applyFailed":`Goal 能力变更未写入。`,"capabilities.applyPreview":`应用此预览`,"capabilities.catalog":`Goal 能力目录`,"capabilities.chooseGoal":`请先选择一个 Goal,再查看它的能力配置。`,"capabilities.defaultValue":`声明的默认值`,"capabilities.description":`查看当前 Goal 可用的能力,以及每项配置的准确作用域。`,"capabilities.editorPrepared":`已注册 typed editor contract`,"capabilities.effectiveSource":`当前生效来源`,"capabilities.empty":`当前 Goal 没有可用的能力描述。`,"capabilities.fields":`已注册字段`,"capabilities.goalPolicy":`Goal 能力策略`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`当前 Goal 值`,"capabilities.loadFailed":`无法加载 Goal 能力`,"capabilities.larkInboxNotificationDescription":`此开关只控制遇到人工 Gate 时是否自动发群消息;关闭后仍会保留飞书事件收件箱能力。`,"capabilities.larkInboxNotificationSetting":`Gate 群通知`,"capabilities.loading":`正在加载 Goal 能力…`,"capabilities.machineOnly":`此能力只能在机器作用域配置。`,"capabilities.machineValue":`实时机器默认值`,"capabilities.machineScope":`机器`,"capabilities.previewOnly":`当前读取结果来自真实配置;在 revision-locked preview/apply 路径接通前,Dashboard 不会提供 Goal 写入控件。`,"capabilities.preview":`锁定 revision 的变更预览`,"capabilities.previewChanges":`预览变更`,"capabilities.restoreInheritance":`恢复继承机器默认值`,"capabilities.previewFailed":`无法预览 Goal 能力变更。`,"capabilities.previewLocked":`应用时会重新校验这一个 plan revision;过期变更将被拒绝。`,"capabilities.partialWrite":`Goal 值已保存;共享投影仍需修复`,"capabilities.partialWriteDescription":`源 Goal 配置已经写入并回读,但共享 runtime 投影尚未同步;请勿重复提交本次变更。`,"capabilities.hostCapacityPartialWrite":`Goal 值已保存;Codex 宿主容量仍待对齐`,"capabilities.hostCapacityPartialWriteDescription":`Goal 配置与共享投影均已校验,但 Codex 宿主上限尚未更新。修复宿主配置后请重新预览容量对齐,不要重复提交 Goal 变更。`,"capabilities.refreshSource":`刷新源配置`,"capabilities.readOnly":`只读能力`,"capabilities.revisionLockedReady":`所有变更必须先预览;只有对应的精确 revision 仍然有效时才会写入。`,"capabilities.retry":`重试`,"capabilities.source.capability_default":`能力默认值`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`实时机器默认值`,"capabilities.source.not_configured":`未配置`,"capabilities.title":`Goal 能力`,"settings.close":`关闭设置`,"settings.appearance":`外观`,"settings.appearanceDescription":`管理当前浏览器里的工作区显示偏好。`,"settings.appearanceTabDescription":`主题和显示偏好`,"settings.capabilitiesTabDescription":`当前 Goal 的能力覆盖配置`,"settings.back":`返回工作区`,"settings.categories":`设置分类`,"settings.description":`管理工作区偏好与集成。`,"settings.eyebrow":`工作区偏好`,"settings.general":`通用`,"settings.goalConnections":`Goal 连接`,"settings.language":`语言`,"settings.modelProvider":`模型 Provider 配置`,"settings.globalCapabilities":`全局能力配置`,"settings.languageDescription":`选择 LoopX Desktop 工作区使用的界面语言。`,"settings.languageEnglishDescription":`使用英文显示导航、设置和工作区控件。`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`使用简体中文显示导航、设置和工作区控件。`,"settings.languageSimplifiedChinese":`简体中文`,"settings.languageStoredLocally":`此偏好仅保存在当前设备。`,"settings.languageTabDescription":`当前设备的界面语言`,"settings.larkTabDescription":`App、群聊和 Goal Topic 连接`,"settings.machineTabDescription":`本机各 Capability 共享的 typed defaults`,"settings.notifications":`通知`,"settings.open":`设置`,"settings.themeDefault":`纸张`,"settings.themeDefaultDescription":`安静、轻量,适合长期查看。`,"settings.themeDescription":`选择工作区的视觉风格。设置会保存在当前浏览器本地。`,"settings.themeHighContrast":`高对比`,"settings.themeHighContrastDescription":`更强边框和更醒目的状态块。`,"settings.themeLoopx":`LoopX 标准`,"settings.themeLoopxDescription":`精确的黑白界面、Geist 字体与安静的细线结构。`,"settings.title":`设置`,"settings.workspaceDisplay":`工作区显示`,"settings.workspaceTheme":`工作区主题`,"session.closeRecord":`退出运行记录`,"session.details":`Session 详情`,"session.record":`执行 Session · 运行记录`,"session.recordDescription":`当前时间线已切换到这次 Session 的消息与 Turn 记录。`,"sidebar.createGoal":`创建 Goal`,"sidebar.delete":`删除`,"sidebar.deleteGoal":`删除 Goal`,"sidebar.manager":`LoopX 管家`,"sidebar.notifications":`设置`,"sidebar.owner":`个人工作区`,"sidebar.product":`个人 Agent 工作区`,"sidebar.resume":`恢复`,"sidebar.resumeGoal":`恢复 Goal`,"sidebar.stop":`停止`,"tasks.historyLoading":`正在加载历史…`,"tasks.historyError":`历史加载失败,已显示的内容仍可查看。`,"tasks.historyExpired":`历史快照已过期,重新加载后可继续查看。`,"tasks.historyRetry":`重新加载`,"tasks.historyEnd":`已显示全部完成记录`,"tasks.historyMore":`加载更多`,"tasks.historyLocalOnly":`请打开这台机器的 Dashboard 查看完整历史。`,"sidebar.sortGoals":`调整 Goal 顺序`,"sidebar.dragGoal":`拖拽调整顺序,或使用列表排序按钮`,"sidebar.moveUp":`上移 {goal}`,"sidebar.moveDown":`下移 {goal}`,"sidebar.goalMoved":`{goal} 已移至第 {position} 位`,"sidebar.orderNotSaved":`顺序已在本次页面生效;浏览器存储不可用,无法保存。`,"sidebar.stopGoal":`停止 Goal`,"sidebar.stopped":`已停止`,"sidebar.stoppedLoading":`正在加载已停止 Goal`,"sidebar.stoppedLoadFailed":`已停止 Goal 加载失败,其他 Goal 仍可使用。`,"sidebar.retryStopped":`重试`,"state.completed":`已完成`,"state.needsRepair":`需修复`,"state.needsYou":`等你`,"state.quiet":`安静运行`,"state.running":`推进中`,"state.stopped":`已停止`,"state.waiting":`等待条件`,"tasks.blocked":`受阻`,"tasks.agentLane":`工作 Agent`,"tasks.agentLaneDescription":`筛选这个 Goal 下的工作泳道`,"tasks.agentLaneFilter":`按工作 Agent 筛选`,"tasks.allAgentLanes":`全部 Agent({count})`,"tasks.chatAgentReplied":`对话有新回复`,"tasks.chatPending":`对话处理中`,"tasks.chatReturn":`协作回执`,"tasks.chatPendingDescription":`正在处理;只有经过确认的任务操作才会更新 Tasks。`,"tasks.chatRecent":`最近对话`,"tasks.chatUnchangedDescription":`本次对话没有直接修改 Tasks。需要执行时,可先转成 Task 草稿并确认。`,"tasks.chatViewReply":`查看回复`,"tasks.convertToTask":`转为任务草稿`,"tasks.completed":`已完成`,"runs.discoveryPartial":`部分执行详情暂不可用,正在重连;任务摘要不代表实时执行状态。`,"runs.discoveryOffline":`执行服务暂不可用,正在重连;保留的任务摘要可能已过时。`,"files.openConversation":`前往会话`,"files.exportSummary":`导出摘要`,"tasks.viewDescription":`先处理待确认,再查看工作与完成记录`,"tasks.viewLabel":`任务视图`,"tasks.listView":`列表`,"tasks.boardView":`看板`,"tasks.completedSummary":`已完成 {count} 项,近期完成明细由控制面按需投影。`,"tasks.emptyCompleted":`还没有完成的任务。`,"tasks.emptyConfirm":`没有待确认的任务。`,"tasks.emptyRunning":`没有待执行或进行中的任务。`,"tasks.emptySchedules":`没有定时任务。`,"tasks.emptyGoal":`这个 Goal 还没有任务。用下面的输入框描述下一步,LoopX 会先展示待确认操作。`,"tasks.markComplete":`标记完成:{name}`,"tasks.moreActions":`更多操作:{name}`,"tasks.openExecution":`查看执行过程:{name}`,"tasks.pending":`待处理`,"tasks.pendingAndRunning":`待执行 / 进行中`,"tasks.scheduled":`定时与持续`,"tasks.sessionError":`Session 异常`,"tasks.waiting":`待执行`,"tasks.waitingAge":`已等待 {age}`,"tasks.viewExecution":`查看执行过程`,"tasks.viewResult":`查看结果`,"time.days":`{count} 天`,"time.hours":`{count} 小时`,"timeline.emptyGoal":`这个 Goal 还没有新动态`,"timeline.emptyGoalDescription":`你可以直接询问进度或下发新的纠偏信息。`,"timeline.emptyWorkspace":`今天的工作区很安静`,"timeline.emptyWorkspaceDescription":`向 LoopX 管家描述一个 Goal,或询问今天最值得关注的事情。`,"timeline.gateHistory":`{count} 项历史 Gate`,"timeline.pending":`正在整理…`,"returnDelivery.queued":`结论等待回传`,"returnDelivery.verifying":`正在核验送达,不会重复发送`,"returnDelivery.delivered":`已送达原受众`,"returnDelivery.reconciled":`恢复后已核验送达`,"returnDelivery.unverified":`送达仍明确未核验`,"timeline.runCompleted":`{run}:已完成`,"timeline.review":`查看处理方式`,"timeline.reviewAndConfirm":`查看并确认`,"timeline.waitingConfirmation":`待你确认`}};function Gi(e,t){return t?Object.entries(t).reduce((e,[t,n])=>e.replaceAll(`{${t}}`,String(n)),e):e}function Ki(){try{return window.localStorage.getItem(`loopx-pw-locale`)===`en`?`en`:`zh-CN`}catch{return`zh-CN`}}function qi({children:e}){let[t,n]=(0,R.useState)(Ki);function r(e){n(e);try{window.localStorage.setItem(Ui,e)}catch{}}(0,R.useEffect)(()=>{document.documentElement.lang=t},[t]);let i=(0,R.useMemo)(()=>({locale:t,setLocale:r,t:(e,n)=>Gi(Wi[t][e],n)}),[t]);return(0,z.jsx)(Hi.Provider,{value:i,children:e})}function Ji(){let e=(0,R.useContext)(Hi);if(!e)throw Error(`useWorkspaceI18n must be used within WorkspaceI18nProvider`);return e}function Yi(e,t){let n={安静运行:`state.quiet`,等你:`state.needsYou`,等待条件:`state.waiting`,推进中:`state.running`,需修复:`state.needsRepair`,已完成:`state.completed`,已停止:`state.stopped`}[e];return n?Wi[t][n]:e}function Xi(e,t){let n={busy:`runs.running`,completed:`runs.completed`,failed:`runs.failed`,queued:`runs.queued`,ready:`runs.ready`,resume_failed:`runs.resumeFailed`,running:`runs.running`,waiting:`runs.waiting`};return e?n[e]?t(n[e]):e:t(`runs.unknown`)}function Zi(e,t){if(!e)return null;let n=new Date(e).getTime();if(Number.isNaN(n))return null;let r=Date.now()-n;if(r<36e5)return null;let i=Math.floor(r/864e5);return i>=1?t(`time.days`,{count:i}):t(`time.hours`,{count:Math.floor(r/36e5)})}var Qi;function H(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;en?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}var $i=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},ea=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Qi=globalThis).__zod_globalConfig??(Qi.__zod_globalConfig={});var ta=globalThis.__zod_globalConfig;function na(e){return e&&Object.assign(ta,e),ta}function ra(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function ia(e,t){return typeof t==`bigint`?t.toString():t}function aa(e){return{get value(){{let t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function oa(e){return e==null}function sa(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function ca(e,t){let n=e/t,r=Math.round(n),i=2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r){};function ga(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var _a=aa(()=>{if(ta.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function va(e){if(ga(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return ga(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function ya(e){return va(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var ba=new Set([`string`,`number`,`symbol`]);function xa(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Sa(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function U(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function Ca(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var wa={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Ta(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return da(this,`shape`,e),e},checks:[]}))}function Ea(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return da(this,`shape`,r),r},checks:[]}))}function Da(e,t){if(!va(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function Oa(e,t){if(!va(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function ka(e,t){if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return da(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function Aa(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return da(this,`shape`,i),i},checks:[]}))}function ja(e,t,n){return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return da(this,`shape`,i),i}}))}function Ma(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function Fa(e){return typeof e==`string`?e:e?.message}function Ia(e,t,n){let r=e.message?e.message:Fa(e.inst?._zod.def?.error?.(e))??Fa(t?.error?.(e))??Fa(n.customError?.(e))??Fa(n.localeError?.(e))??`Invalid input`,{inst:i,continue:a,input:o,...s}=e;return s.path??=[],s.message=r,t?.reportInput&&(s.input=o),s}function La(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function Ra(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}var za=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,ia,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},Ba=H(`$ZodError`,za),Va=H(`$ZodError`,za,{Parent:Error});function Ha(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Ua(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i(t,n,r,i)=>{let a=r?{...r,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new $i;if(o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ga=e=>async(t,n,r,i)=>{let a=r?{...r,async:!0}:{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ka=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new $i;return a.issues.length?{success:!1,error:new(e??Ba)(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},qa=Ka(Va),Ja=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},Ya=Ja(Va),Xa=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Wa(e)(t,n,i)},Za=e=>(t,n,r)=>Wa(e)(t,n,r),Qa=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ga(e)(t,n,i)},$a=e=>async(t,n,r)=>Ga(e)(t,n,r),eo=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ka(e)(t,n,i)},to=e=>(t,n,r)=>Ka(e)(t,n,r),no=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ja(e)(t,n,i)},ro=e=>async(t,n,r)=>Ja(e)(t,n,r),io=/^[cC][0-9a-z]{6,}$/,ao=/^[0-9a-z]+$/,oo=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,so=/^[0-9a-vA-V]{20}$/,co=/^[A-Za-z0-9]{27}$/,lo=/^[a-zA-Z0-9_-]{21}$/,uo=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,fo=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,po=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,mo=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,ho=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function go(){return new RegExp(ho,`u`)}var _o=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,vo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,yo=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,bo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,xo=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,So=/^[A-Za-z0-9_-]*$/,Co=/^https?$/,wo=/^\+[1-9]\d{6,14}$/,To=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,Eo=RegExp(`^${To}$`);function Do(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Oo(e){return RegExp(`^${Do(e)}$`)}function ko(e){let t=Do({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${To}T(?:${r})$`)}var Ao=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},jo=/^-?\d+$/,Mo=/^-?\d+(?:\.\d+)?$/,No=/^(?:true|false)$/i,Po=/^null$/i,Fo=/^[^A-Z]*$/,Io=/^[^a-z]*$/,Lo=H(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Ro={number:`number`,bigint:`bigint`,object:`date`},zo=H(`$ZodCheckLessThan`,(e,t)=>{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value{(t.inclusive?r.value<=t.value:r.value{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Vo=H(`$ZodCheckMultipleOf`,(e,t)=>{Lo.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):ca(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Ho=H(`$ZodCheckNumberFormat`,(e,t)=>{Lo.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=wa[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=jo)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}sa&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),Uo=H(`$ZodCheckMaxLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum{let r=n.value;if(r.length<=t.maximum)return;let i=La(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Wo=H(`$ZodCheckMinLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=La(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Go=H(`$ZodCheckLengthEquals`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=La(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Ko=H(`$ZodCheckStringFormat`,(e,t)=>{var n,r;Lo.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),qo=H(`$ZodCheckRegex`,(e,t)=>{Ko.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Jo=H(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Fo,Ko.init(e,t)}),Yo=H(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=Io,Ko.init(e,t)}),Xo=H(`$ZodCheckIncludes`,(e,t)=>{Lo.init(e,t);let n=xa(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),Zo=H(`$ZodCheckStartsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`^${xa(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),Qo=H(`$ZodCheckEndsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`.*${xa(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),$o=H(`$ZodCheckOverwrite`,(e,t)=>{Lo.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),es=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(` -`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.args,n=[...(this?.content??[``]).map(e=>` ${e}`)];return new e(...t,n.join(` -`))}},ts={major:4,minor:4,patch:3},ns=H(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=ts;let r=[...e._zod.def.checks??[]];e._zod.traits.has(`$ZodCheck`)&&r.unshift(e);for(let t of r)for(let n of t._zod.onattach)n(e);if(r.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(e,t,n)=>{let r=Ma(e),i;for(let a of t){if(a._zod.def.when){if(Na(e)||!a._zod.def.when(e))continue}else if(r)continue;let t=e.issues.length,o=a._zod.check(e);if(o instanceof Promise&&n?.async===!1)throw new $i;if(i||o instanceof Promise)i=(i??Promise.resolve()).then(async()=>{await o,e.issues.length!==t&&(r||=Ma(e,t))});else{if(e.issues.length===t)continue;r||=Ma(e,t)}}return i?i.then(()=>e):e},n=(n,i,a)=>{if(Ma(n))return n.aborted=!0,n;let o=t(i,r,a);if(o instanceof Promise){if(a.async===!1)throw new $i;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(i,a)=>{if(a.skipChecks)return e._zod.parse(i,a);if(a.direction===`backward`){let t=e._zod.parse({value:i.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,i,a)):n(t,i,a)}let o=e._zod.parse(i,a);if(o instanceof Promise){if(a.async===!1)throw new $i;return o.then(e=>t(e,r,a))}return t(o,r,a)}}ua(e,`~standard`,()=>({validate:t=>{try{let n=qa(e,t);return n.success?{value:n.data}:{issues:n.error?.issues}}catch{return Ya(e,t).then(e=>e.success?{value:e.data}:{issues:e.error?.issues})}},vendor:`zod`,version:1}))}),rs=H(`$ZodString`,(e,t)=>{ns.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??Ao(e._zod.bag),e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),is=H(`$ZodStringFormat`,(e,t)=>{Ko.init(e,t),rs.init(e,t)}),as=H(`$ZodGUID`,(e,t)=>{t.pattern??=fo,is.init(e,t)}),os=H(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=po(e)}else t.pattern??=po();is.init(e,t)}),ss=H(`$ZodEmail`,(e,t)=>{t.pattern??=mo,is.init(e,t)}),cs=H(`$ZodURL`,(e,t)=>{is.init(e,t),e._zod.check=n=>{try{let r=n.value.trim();if(!t.normalize&&t.protocol?.source===Co.source&&!/^https?:\/\//i.test(r)){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}let i=new URL(r);t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(i.hostname)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(i.protocol.endsWith(`:`)?i.protocol.slice(0,-1):i.protocol)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort})),n.value=t.normalize?i.href:r;return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),ls=H(`$ZodEmoji`,(e,t)=>{t.pattern??=go(),is.init(e,t)}),us=H(`$ZodNanoID`,(e,t)=>{t.pattern??=lo,is.init(e,t)}),ds=H(`$ZodCUID`,(e,t)=>{t.pattern??=io,is.init(e,t)}),fs=H(`$ZodCUID2`,(e,t)=>{t.pattern??=ao,is.init(e,t)}),ps=H(`$ZodULID`,(e,t)=>{t.pattern??=oo,is.init(e,t)}),ms=H(`$ZodXID`,(e,t)=>{t.pattern??=so,is.init(e,t)}),hs=H(`$ZodKSUID`,(e,t)=>{t.pattern??=co,is.init(e,t)}),gs=H(`$ZodISODateTime`,(e,t)=>{t.pattern??=ko(t),is.init(e,t)}),_s=H(`$ZodISODate`,(e,t)=>{t.pattern??=Eo,is.init(e,t)}),vs=H(`$ZodISOTime`,(e,t)=>{t.pattern??=Oo(t),is.init(e,t)}),ys=H(`$ZodISODuration`,(e,t)=>{t.pattern??=uo,is.init(e,t)}),bs=H(`$ZodIPv4`,(e,t)=>{t.pattern??=_o,is.init(e,t),e._zod.bag.format=`ipv4`}),xs=H(`$ZodIPv6`,(e,t)=>{t.pattern??=vo,is.init(e,t),e._zod.bag.format=`ipv6`,e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}}),Ss=H(`$ZodCIDRv4`,(e,t)=>{t.pattern??=yo,is.init(e,t)}),Cs=H(`$ZodCIDRv6`,(e,t)=>{t.pattern??=bo,is.init(e,t),e._zod.check=n=>{let r=n.value.split(`/`);try{if(r.length!==2)throw Error();let[e,t]=r;if(!t)throw Error();let n=Number(t);if(`${n}`!==t||n<0||n>128)throw Error();new URL(`http://[${e}]`)}catch{n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}}});function ws(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var Ts=H(`$ZodBase64`,(e,t)=>{t.pattern??=xo,is.init(e,t),e._zod.bag.contentEncoding=`base64`,e._zod.check=n=>{ws(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}});function Es(e){if(!So.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return ws(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var Ds=H(`$ZodBase64URL`,(e,t)=>{t.pattern??=So,is.init(e,t),e._zod.bag.contentEncoding=`base64url`,e._zod.check=n=>{Es(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),Os=H(`$ZodE164`,(e,t)=>{t.pattern??=wo,is.init(e,t)});function ks(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var As=H(`$ZodJWT`,(e,t)=>{is.init(e,t),e._zod.check=n=>{ks(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),js=H(`$ZodNumber`,(e,t)=>{ns.init(e,t),e._zod.pattern=e._zod.bag.pattern??Mo,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:`Infinity`:void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),Ms=H(`$ZodNumberFormat`,(e,t)=>{Ho.init(e,t),js.init(e,t)}),Ns=H(`$ZodBoolean`,(e,t)=>{ns.init(e,t),e._zod.pattern=No,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),Ps=H(`$ZodNull`,(e,t)=>{ns.init(e,t),e._zod.pattern=Po,e._zod.values=new Set([null]),e._zod.parse=(t,n)=>{let r=t.value;return r===null||t.issues.push({expected:`null`,code:`invalid_type`,input:r,inst:e}),t}}),Fs=H(`$ZodUnknown`,(e,t)=>{ns.init(e,t),e._zod.parse=e=>e}),Is=H(`$ZodNever`,(e,t)=>{ns.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function Ls(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}var Rs=H(`$ZodArray`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!Array.isArray(i))return n.issues.push({expected:`array`,code:`invalid_type`,input:i,inst:e}),n;n.value=Array(i.length);let a=[];for(let e=0;eLs(t,n,e))):Ls(s,n,e)}return a.length?Promise.all(a).then(()=>n):n}});function zs(e,t,n,r,i,a){let o=n in r;if(e.issues.length){if(i&&a&&!o)return;t.issues.push(...Pa(n,e.issues))}if(!o&&!i){e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]});return}e.value===void 0?o&&(t.value[n]=void 0):t.value[n]=e.value}function Bs(e){let t=Object.keys(e.shape);for(let n of t)if(!e.shape?.[n]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${n}": expected a Zod schema`);let n=Ca(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(n)}}function Vs(e,t,n,r,i,a){let o=[],s=i.keySet,c=i.catchall._zod,l=c.def.type,u=c.optin===`optional`,d=c.optout===`optional`;for(let i in t){if(i===`__proto__`||s.has(i))continue;if(l===`never`){o.push(i);continue}let a=c.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>zs(e,n,i,t,u,d))):zs(a,n,i,t,u,d)}return o.length&&n.issues.push({code:`unrecognized_keys`,keys:o,input:t,inst:a}),e.length?Promise.all(e).then(()=>n):n}var Hs=H(`$ZodObject`,(e,t)=>{if(ns.init(e,t),!Object.getOwnPropertyDescriptor(t,`shape`)?.get){let e=t.shape;Object.defineProperty(t,"shape",{get:()=>{let n={...e};return Object.defineProperty(t,"shape",{value:n}),n}})}let n=aa(()=>Bs(t));ua(e._zod,`propValues`,()=>{let e=t.shape,n={};for(let t in e){let r=e[t]._zod;if(r.values){n[t]??(n[t]=new Set);for(let e of r.values)n[t].add(e)}}return n});let r=ga,i=t.catchall,a;e._zod.parse=(t,o)=>{a??=n.value;let s=t.value;if(!r(s))return t.issues.push({expected:`object`,code:`invalid_type`,input:s,inst:e}),t;t.value={};let c=[],l=a.shape;for(let e of a.keys){let n=l[e],r=n._zod.optin===`optional`,i=n._zod.optout===`optional`,a=n._zod.run({value:s[e],issues:[]},o);a instanceof Promise?c.push(a.then(n=>zs(n,t,e,s,r,i))):zs(a,t,e,s,r,i)}return i?Vs(c,s,t,o,n.value,e):c.length?Promise.all(c).then(()=>t):t}}),Us=H(`$ZodObjectJIT`,(e,t)=>{Hs.init(e,t);let n=e._zod.parse,r=aa(()=>Bs(t)),i=e=>{let t=new es([`shape`,`payload`,`ctx`]),n=r.value,i=e=>{let t=pa(e);return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`};t.write(`const input = payload.value;`);let a=Object.create(null),o=0;for(let e of n.keys)a[e]=`key_${o++}`;t.write(`const newResult = {};`);for(let r of n.keys){let n=a[r],o=pa(r),s=e[r],c=s?._zod?.optin===`optional`,l=s?._zod?.optout===`optional`;t.write(`const ${n} = ${i(r)};`),c&&l?t.write(` - if (${n}.issues.length) { - if (${o} in input) { - payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ - ...iss, - path: iss.path ? [${o}, ...iss.path] : [${o}] - }))); - } - } - - if (${n}.value === undefined) { - if (${o} in input) { - newResult[${o}] = undefined; - } - } else { - newResult[${o}] = ${n}.value; - } - - `):c?t.write(` - if (${n}.issues.length) { - payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ - ...iss, - path: iss.path ? [${o}, ...iss.path] : [${o}] - }))); - } - - if (${n}.value === undefined) { - if (${o} in input) { - newResult[${o}] = undefined; - } - } else { - newResult[${o}] = ${n}.value; - } - - `):t.write(` - const ${n}_present = ${o} in input; - if (${n}.issues.length) { - payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ - ...iss, - path: iss.path ? [${o}, ...iss.path] : [${o}] - }))); - } - if (!${n}_present && !${n}.issues.length) { - payload.issues.push({ - code: "invalid_type", - expected: "nonoptional", - input: undefined, - path: [${o}] - }); - } - - if (${n}_present) { - if (${n}.value === undefined) { - newResult[${o}] = undefined; - } else { - newResult[${o}] = ${n}.value; - } - } - - `)}t.write(`payload.value = newResult;`),t.write(`return payload;`);let s=t.compile();return(t,n)=>s(e,t,n)},a,o=ga,s=!ta.jitless,c=s&&_a.value,l=t.catchall,u;e._zod.parse=(d,f)=>{u??=r.value;let p=d.value;return o(p)?s&&c&&f?.async===!1&&f.jitless!==!0?(a||=i(t.shape),d=a(d,f),l?Vs([],p,d,f,u,e):d):n(d,f):(d.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),d)}});function Ws(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!Ma(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>Ia(e,r,na())))}),t)}var Gs=H(`$ZodUnion`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.options.some(e=>e._zod.optin===`optional`)?`optional`:void 0),ua(e._zod,`optout`,()=>t.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),ua(e._zod,`values`,()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),ua(e._zod,`pattern`,()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>sa(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>Ws(t,r,e,i)):Ws(o,r,e,i)}}),Ks=H(`$ZodDiscriminatedUnion`,(e,t)=>{t.inclusive=!1,Gs.init(e,t);let n=e._zod.parse;ua(e._zod,`propValues`,()=>{let e={};for(let n of t.options){let r=n._zod.propValues;if(!r||Object.keys(r).length===0)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(n)}"`);for(let[t,n]of Object.entries(r)){e[t]||(e[t]=new Set);for(let r of n)e[t].add(r)}}return e});let r=aa(()=>{let e=t.options,n=new Map;for(let r of e){let e=r._zod.propValues?.[t.discriminator];if(!e||e.size===0)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(r)}"`);for(let t of e){if(n.has(t))throw Error(`Duplicate discriminator value "${String(t)}"`);n.set(t,r)}}return n});e._zod.parse=(i,a)=>{let o=i.value;if(!ga(o))return i.issues.push({code:`invalid_type`,expected:`object`,input:o,inst:e}),i;let s=r.value.get(o?.[t.discriminator]);return s?s._zod.run(i,a):t.unionFallback||a.direction===`backward`?n(i,a):(i.issues.push({code:`invalid_union`,errors:[],note:`No matching discriminator`,discriminator:t.discriminator,options:Array.from(r.value.keys()),input:o,path:[t.discriminator],inst:e}),i)}}),qs=H(`$ZodIntersection`,(e,t)=>{ns.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>Ys(e,t,n)):Ys(e,i,a)}});function Js(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(va(e)&&va(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=Js(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;re.l&&e.r).map(([e])=>e);if(a.length&&i&&e.issues.push({...i,keys:a}),Ma(e))return e;let o=Js(t.value,n.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return e.value=o.data,e}var Xs=H(`$ZodTuple`,(e,t)=>{ns.init(e,t);let n=t.items;e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({input:a,inst:e,expected:`tuple`,code:`invalid_type`}),r;r.value=[];let o=[],s=Zs(n,`optin`),c=Zs(n,`optout`);if(!t.rest){if(a.lengthn.length&&r.issues.push({code:`too_big`,maximum:n.length,inclusive:!0,input:a,inst:e,origin:`array`})}let l=Array(n.length);for(let e=0;e{l[e]=t})):l[e]=t}if(t.rest){let e=n.length-1,s=a.slice(n.length);for(let n of s){e++;let a=t.rest._zod.run({value:n,issues:[]},i);a instanceof Promise?o.push(a.then(t=>Qs(t,r,e))):Qs(a,r,e)}}return o.length?Promise.all(o).then(()=>$s(l,r,n,a,c)):$s(l,r,n,a,c)}});function Zs(e,t){for(let n=e.length-1;n>=0;n--)if(e[n]._zod[t]!==`optional`)return n+1;return 0}function Qs(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}function $s(e,t,n,r,i){for(let a=0;a=i){t.value.length=a;break}t.issues.push(...Pa(a,n.issues))}t.value[a]=n.value}for(let e=t.value.length-1;e>=r.length&&n[e]._zod.optout===`optional`&&t.value[e]===void 0;e--)t.value.length=e;return t}var ec=H(`$ZodRecord`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!va(i))return n.issues.push({expected:`record`,code:`invalid_type`,input:i,inst:e}),n;let a=[],o=t.keyType._zod.values;if(o){n.value={};let s=new Set;for(let c of o)if(typeof c==`string`||typeof c==`number`||typeof c==`symbol`){s.add(typeof c==`number`?c.toString():c);let o=t.keyType._zod.run({value:c,issues:[]},r);if(o instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(o.issues.length){n.issues.push({code:`invalid_key`,origin:`record`,issues:o.issues.map(e=>Ia(e,r,na())),input:c,path:[c],inst:e});continue}let l=o.value,u=t.valueType._zod.run({value:i[c],issues:[]},r);u instanceof Promise?a.push(u.then(e=>{e.issues.length&&n.issues.push(...Pa(c,e.issues)),n.value[l]=e.value})):(u.issues.length&&n.issues.push(...Pa(c,u.issues)),n.value[l]=u.value)}let c;for(let e in i)s.has(e)||(c??=[],c.push(e));c&&c.length>0&&n.issues.push({code:`unrecognized_keys`,input:i,inst:e,keys:c})}else{n.value={};for(let o of Reflect.ownKeys(i)){if(o===`__proto__`||!Object.prototype.propertyIsEnumerable.call(i,o))continue;let s=t.keyType._zod.run({value:o,issues:[]},r);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof o==`string`&&Mo.test(o)&&s.issues.length){let e=t.keyType._zod.run({value:Number(o),issues:[]},r);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(s=e)}if(s.issues.length){t.mode===`loose`?n.value[o]=i[o]:n.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>Ia(e,r,na())),input:o,path:[o],inst:e});continue}let c=t.valueType._zod.run({value:i[o],issues:[]},r);c instanceof Promise?a.push(c.then(e=>{e.issues.length&&n.issues.push(...Pa(o,e.issues)),n.value[s.value]=e.value})):(c.issues.length&&n.issues.push(...Pa(o,c.issues)),n.value[s.value]=c.value)}}return a.length?Promise.all(a).then(()=>n):n}}),tc=H(`$ZodEnum`,(e,t)=>{ns.init(e,t);let n=ra(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>ba.has(typeof e)).map(e=>typeof e==`string`?xa(e):e.toString()).join(`|`)})$`),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),nc=H(`$ZodLiteral`,(e,t)=>{if(ns.init(e,t),t.values.length===0)throw Error(`Cannot create literal schema with no valid values`);let n=new Set(t.values);e._zod.values=n,e._zod.pattern=RegExp(`^(${t.values.map(e=>typeof e==`string`?xa(e):e?xa(e.toString()):String(e)).join(`|`)})$`),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),rc=H(`$ZodTransform`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n.fallback=!0,n));if(i instanceof Promise)throw new $i;return n.value=i,n.fallback=!0,n}});function ic(e,t){return t===void 0&&(e.issues.length||e.fallback)?{issues:[],value:void 0}:e}var ac=H(`$ZodOptional`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.optout=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(t.innerType._zod.optin===`optional`){let r=e.value,i=t.innerType._zod.run(e,n);return i instanceof Promise?i.then(e=>ic(e,r)):ic(i,r)}return e.value===void 0?e:t.innerType._zod.run(e,n)}}),oc=H(`$ZodExactOptional`,(e,t)=>{ac.init(e,t),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`pattern`,()=>t.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),sc=H(`$ZodNullable`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.innerType._zod.optin),ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)}|null)$`):void 0}),ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),cc=H(`$ZodDefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>lc(e,t)):lc(r,t)}});function lc(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var uc=H(`$ZodPrefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),dc=H(`$ZodNonOptional`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>fc(t,e)):fc(i,e)}});function fc(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}var pc=H(`$ZodCatch`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)}}),mc=H(`$ZodPipe`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>t.in._zod.values),ua(e._zod,`optin`,()=>t.in._zod.optin),ua(e._zod,`optout`,()=>t.out._zod.optout),ua(e._zod,`propValues`,()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>hc(e,t.in,n)):hc(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>hc(e,t.out,n)):hc(r,t.out,n)}});function hc(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues,fallback:e.fallback},n)}var gc=H(`$ZodReadonly`,(e,t)=>{ns.init(e,t),ua(e._zod,`propValues`,()=>t.innerType._zod.propValues),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`optin`,()=>t.innerType?._zod?.optin),ua(e._zod,`optout`,()=>t.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(_c):_c(r)}});function _c(e){return e.value=Object.freeze(e.value),e}var vc=H(`$ZodCustom`,(e,t)=>{Lo.init(e,t),ns.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>yc(t,n,r,e));yc(i,n,r,e)}});function yc(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(Ra(e))}}var bc,xc=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function Sc(){return new xc}(bc=globalThis).__zod_globalRegistry??(bc.__zod_globalRegistry=Sc());var Cc=globalThis.__zod_globalRegistry;function wc(e,t){return new e({type:`string`,...U(t)})}function Tc(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...U(t)})}function Ec(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...U(t)})}function Dc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...U(t)})}function Oc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...U(t)})}function kc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...U(t)})}function Ac(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...U(t)})}function jc(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...U(t)})}function Mc(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...U(t)})}function Nc(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...U(t)})}function Pc(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...U(t)})}function Fc(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...U(t)})}function Ic(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...U(t)})}function Lc(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...U(t)})}function Rc(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...U(t)})}function zc(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...U(t)})}function Bc(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...U(t)})}function Vc(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...U(t)})}function Hc(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...U(t)})}function Uc(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...U(t)})}function Wc(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...U(t)})}function Gc(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...U(t)})}function Kc(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...U(t)})}function qc(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...U(t)})}function Jc(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...U(t)})}function Yc(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...U(t)})}function Xc(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...U(t)})}function Zc(e,t){return new e({type:`number`,checks:[],...U(t)})}function Qc(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...U(t)})}function $c(e,t){return new e({type:`boolean`,...U(t)})}function el(e,t){return new e({type:`null`,...U(t)})}function tl(e){return new e({type:`unknown`})}function nl(e,t){return new e({type:`never`,...U(t)})}function rl(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!1})}function il(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!0})}function al(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!1})}function ol(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!0})}function sl(e,t){return new Vo({check:`multiple_of`,...U(t),value:e})}function cl(e,t){return new Uo({check:`max_length`,...U(t),maximum:e})}function ll(e,t){return new Wo({check:`min_length`,...U(t),minimum:e})}function ul(e,t){return new Go({check:`length_equals`,...U(t),length:e})}function dl(e,t){return new qo({check:`string_format`,format:`regex`,...U(t),pattern:e})}function fl(e){return new Jo({check:`string_format`,format:`lowercase`,...U(e)})}function pl(e){return new Yo({check:`string_format`,format:`uppercase`,...U(e)})}function ml(e,t){return new Xo({check:`string_format`,format:`includes`,...U(t),includes:e})}function hl(e,t){return new Zo({check:`string_format`,format:`starts_with`,...U(t),prefix:e})}function gl(e,t){return new Qo({check:`string_format`,format:`ends_with`,...U(t),suffix:e})}function _l(e){return new $o({check:`overwrite`,tx:e})}function vl(e){return _l(t=>t.normalize(e))}function yl(){return _l(e=>e.trim())}function bl(){return _l(e=>e.toLowerCase())}function xl(){return _l(e=>e.toUpperCase())}function Sl(){return _l(e=>ma(e))}function Cl(e,t,n){return new e({type:`array`,element:t,...U(n)})}function wl(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...U(n)})}function Tl(e,t){let n=El(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(Ra(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,r.input??=t.value,r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(Ra(r))}},e(t.value,t)),t);return n}function El(e,t){let n=new Lo({check:`custom`,...U(t)});return n._zod.check=e,n}function Dl(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??Cc,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,external:e?.external??void 0}}function Ol(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o);let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,Ol(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Object.assign(o.schema,c),t.io===`input`&&jl(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function kl(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${a}`}}if(t[1]===n)return{ref:`#`};let i=`#/${r}/`,a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+a}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/ - -Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function Al(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,o[e.defId]=e.def)}e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Nl(t,`input`,e.processors),output:Nl(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function jl(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return jl(r.element,n);if(r.type===`set`)return jl(r.valueType,n);if(r.type===`lazy`)return jl(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`)return jl(r.innerType,n);if(r.type===`intersection`)return jl(r.left,n)||jl(r.right,n);if(r.type===`record`||r.type===`map`)return jl(r.keyType,n)||jl(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:jl(r.in,n)||jl(r.out,n);if(r.type===`object`){for(let e in r.shape)if(jl(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(jl(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(jl(e,n))return!0;return!!(r.rest&&jl(r.rest,n))}return!1}var Ml=(e,t={})=>n=>{let r=Dl({...n,processors:t});return Ol(e,r),kl(r,e),Al(r,e)},Nl=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=Dl({...i??{},target:a,io:t,processors:n});return Ol(e,o),kl(o,e),Al(o,e)},Pl={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Fl=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Pl[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Il=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;i.type=typeof s==`string`&&s.includes(`int`)?`integer`:`number`;let d=typeof u==`number`&&u>=(a??-1/0),f=typeof l==`number`&&l<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;d?p?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l:typeof o==`number`&&(i.maximum=o),typeof c==`number`&&(i.multipleOf=c)},Ll=(e,t,n,r)=>{n.type=`boolean`},Rl=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},zl=(e,t,n,r)=>{n.not={}},Bl=(e,t,n,r)=>{let i=e._zod.def,a=ra(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Vl=(e,t,n,r)=>{let i=e._zod.def,a=[];for(let e of i.values)if(e===void 0){if(t.unrepresentable===`throw`)throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof e==`bigint`){if(t.unrepresentable===`throw`)throw Error(`BigInt literals cannot be represented in JSON Schema`);a.push(Number(e))}else a.push(e);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},Hl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},Ul=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},Wl=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=Ol(a.element,t,{...r,path:[...r.path,`items`]})},Gl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=Ol(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=Ol(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Kl=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>Ol(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},ql=(e,t,n,r)=>{let i=e._zod.def,a=Ol(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=Ol(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},Jl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>Ol(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?Ol(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null;t.target===`draft-2020-12`?(i.prefixItems=c,l&&(i.items=l)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),i.minItems=c.length,l||(i.maxItems=c.length)):(i.items=c,l&&(i.additionalItems=l));let{minimum:u,maximum:d}=e._zod.bag;typeof u==`number`&&(i.minItems=u),typeof d==`number`&&(i.maxItems=d)},Yl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=o._zod.bag?.patterns;if(a.mode===`loose`&&s&&s.size>0){let e=Ol(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)i.patternProperties[t.source]=e}else(t.target===`draft-07`||t.target===`draft-2020-12`)&&(i.propertyNames=Ol(a.keyType,t,{...r,path:[...r.path,`propertyNames`]})),i.additionalProperties=Ol(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]});let c=o._zod.values;if(c){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e)}},Xl=(e,t,n,r)=>{let i=e._zod.def,a=Ol(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Zl=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Ql=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},$l=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},eu=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},tu=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;Ol(o,t,r);let s=t.seen.get(e);s.ref=o},nu=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},ru=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},iu=H(`ZodISODateTime`,(e,t)=>{gs.init(e,t),Mu.init(e,t)});function au(e){return qc(iu,e)}var ou=H(`ZodISODate`,(e,t)=>{_s.init(e,t),Mu.init(e,t)});function su(e){return Jc(ou,e)}var cu=H(`ZodISOTime`,(e,t)=>{vs.init(e,t),Mu.init(e,t)});function lu(e){return Yc(cu,e)}var uu=H(`ZodISODuration`,(e,t)=>{ys.init(e,t),Mu.init(e,t)});function du(e){return Xc(uu,e)}var fu=(e,t)=>{Ba.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>Ua(e,t)},flatten:{value:t=>Ha(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,ia,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,ia,2)}},isEmpty:{get(){return e.issues.length===0}}})},pu=H(`ZodError`,fu),mu=H(`ZodError`,fu,{Parent:Error}),hu=Wa(mu),gu=Ga(mu),_u=Ka(mu),vu=Ja(mu),yu=Xa(mu),bu=Za(mu),xu=Qa(mu),Su=$a(mu),Cu=eo(mu),wu=to(mu),Tu=no(mu),Eu=ro(mu),Du=new WeakMap;function Ou(e,t,n){let r=Object.getPrototypeOf(e),i=Du.get(r);if(i||(i=new Set,Du.set(r,i)),!i.has(t)){i.add(t);for(let e in n){let t=n[e];Object.defineProperty(r,e,{configurable:!0,enumerable:!1,get(){let n=t.bind(this);return Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:n}),n},set(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:t})}})}}}var ku=H(`ZodType`,(e,t)=>(ns.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:Nl(e,`input`),output:Nl(e,`output`)}}),e.toJSONSchema=Ml(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{value:t}),e.parse=(t,n)=>hu(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>_u(e,t,n),e.parseAsync=async(t,n)=>gu(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>vu(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>yu(e,t,n),e.decode=(t,n)=>bu(e,t,n),e.encodeAsync=async(t,n)=>xu(e,t,n),e.decodeAsync=async(t,n)=>Su(e,t,n),e.safeEncode=(t,n)=>Cu(e,t,n),e.safeDecode=(t,n)=>wu(e,t,n),e.safeEncodeAsync=async(t,n)=>Tu(e,t,n),e.safeDecodeAsync=async(t,n)=>Eu(e,t,n),Ou(e,`ZodType`,{check(...e){let t=this.def;return this.clone(fa(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Sa(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Ud(e,t))},superRefine(e,t){return this.check(Wd(e,t))},overwrite(e){return this.check(_l(e))},optional(){return Td(this)},exactOptional(){return Dd(this)},nullable(){return kd(this)},nullish(){return Td(kd(this))},nonoptional(e){return Fd(this,e)},array(){return q(this)},or(e){return dd([this,e])},and(e){return hd(this,e)},transform(e){return zd(this,Cd(e))},default(e){return jd(this,e)},prefault(e){return Nd(this,e)},catch(e){return Ld(this,e)},pipe(e){return zd(this,e)},readonly(){return Vd(this)},describe(e){let t=this.clone();return Cc.add(t,{description:e}),t},meta(...e){if(e.length===0)return Cc.get(this);let t=this.clone();return Cc.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e){return e(this)}}),Object.defineProperty(e,"description",{get(){return Cc.get(e)?.description},configurable:!0}),e)),Au=H(`_ZodString`,(e,t)=>{rs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fl(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,Ou(e,`_ZodString`,{regex(...e){return this.check(dl(...e))},includes(...e){return this.check(ml(...e))},startsWith(...e){return this.check(hl(...e))},endsWith(...e){return this.check(gl(...e))},min(...e){return this.check(ll(...e))},max(...e){return this.check(cl(...e))},length(...e){return this.check(ul(...e))},nonempty(...e){return this.check(ll(1,...e))},lowercase(e){return this.check(fl(e))},uppercase(e){return this.check(pl(e))},trim(){return this.check(yl())},normalize(...e){return this.check(vl(...e))},toLowerCase(){return this.check(bl())},toUpperCase(){return this.check(xl())},slugify(){return this.check(Sl())}})}),ju=H(`ZodString`,(e,t)=>{rs.init(e,t),Au.init(e,t),e.email=t=>e.check(Tc(Nu,t)),e.url=t=>e.check(jc(Iu,t)),e.jwt=t=>e.check(Kc(Zu,t)),e.emoji=t=>e.check(Mc(Lu,t)),e.guid=t=>e.check(Ec(Pu,t)),e.uuid=t=>e.check(Dc(Fu,t)),e.uuidv4=t=>e.check(Oc(Fu,t)),e.uuidv6=t=>e.check(kc(Fu,t)),e.uuidv7=t=>e.check(Ac(Fu,t)),e.nanoid=t=>e.check(Nc(Ru,t)),e.guid=t=>e.check(Ec(Pu,t)),e.cuid=t=>e.check(Pc(zu,t)),e.cuid2=t=>e.check(Fc(Bu,t)),e.ulid=t=>e.check(Ic(Vu,t)),e.base64=t=>e.check(Uc(Ju,t)),e.base64url=t=>e.check(Wc(Yu,t)),e.xid=t=>e.check(Lc(Hu,t)),e.ksuid=t=>e.check(Rc(Uu,t)),e.ipv4=t=>e.check(zc(Wu,t)),e.ipv6=t=>e.check(Bc(Gu,t)),e.cidrv4=t=>e.check(Vc(Ku,t)),e.cidrv6=t=>e.check(Hc(qu,t)),e.e164=t=>e.check(Gc(Xu,t)),e.datetime=t=>e.check(au(t)),e.date=t=>e.check(su(t)),e.time=t=>e.check(lu(t)),e.duration=t=>e.check(du(t))});function W(e){return wc(ju,e)}var Mu=H(`ZodStringFormat`,(e,t)=>{is.init(e,t),Au.init(e,t)}),Nu=H(`ZodEmail`,(e,t)=>{ss.init(e,t),Mu.init(e,t)}),Pu=H(`ZodGUID`,(e,t)=>{as.init(e,t),Mu.init(e,t)}),Fu=H(`ZodUUID`,(e,t)=>{os.init(e,t),Mu.init(e,t)}),Iu=H(`ZodURL`,(e,t)=>{cs.init(e,t),Mu.init(e,t)}),Lu=H(`ZodEmoji`,(e,t)=>{ls.init(e,t),Mu.init(e,t)}),Ru=H(`ZodNanoID`,(e,t)=>{us.init(e,t),Mu.init(e,t)}),zu=H(`ZodCUID`,(e,t)=>{ds.init(e,t),Mu.init(e,t)}),Bu=H(`ZodCUID2`,(e,t)=>{fs.init(e,t),Mu.init(e,t)}),Vu=H(`ZodULID`,(e,t)=>{ps.init(e,t),Mu.init(e,t)}),Hu=H(`ZodXID`,(e,t)=>{ms.init(e,t),Mu.init(e,t)}),Uu=H(`ZodKSUID`,(e,t)=>{hs.init(e,t),Mu.init(e,t)}),Wu=H(`ZodIPv4`,(e,t)=>{bs.init(e,t),Mu.init(e,t)}),Gu=H(`ZodIPv6`,(e,t)=>{xs.init(e,t),Mu.init(e,t)}),Ku=H(`ZodCIDRv4`,(e,t)=>{Ss.init(e,t),Mu.init(e,t)}),qu=H(`ZodCIDRv6`,(e,t)=>{Cs.init(e,t),Mu.init(e,t)}),Ju=H(`ZodBase64`,(e,t)=>{Ts.init(e,t),Mu.init(e,t)}),Yu=H(`ZodBase64URL`,(e,t)=>{Ds.init(e,t),Mu.init(e,t)}),Xu=H(`ZodE164`,(e,t)=>{Os.init(e,t),Mu.init(e,t)}),Zu=H(`ZodJWT`,(e,t)=>{As.init(e,t),Mu.init(e,t)}),Qu=H(`ZodNumber`,(e,t)=>{js.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Il(e,t,n,r),Ou(e,`ZodNumber`,{gt(e,t){return this.check(al(e,t))},gte(e,t){return this.check(ol(e,t))},min(e,t){return this.check(ol(e,t))},lt(e,t){return this.check(rl(e,t))},lte(e,t){return this.check(il(e,t))},max(e,t){return this.check(il(e,t))},int(e){return this.check(ed(e))},safe(e){return this.check(ed(e))},positive(e){return this.check(al(0,e))},nonnegative(e){return this.check(ol(0,e))},negative(e){return this.check(rl(0,e))},nonpositive(e){return this.check(il(0,e))},multipleOf(e,t){return this.check(sl(e,t))},step(e,t){return this.check(sl(e,t))},finite(){return this}});let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function G(e){return Zc(Qu,e)}var $u=H(`ZodNumberFormat`,(e,t)=>{Ms.init(e,t),Qu.init(e,t)});function ed(e){return Qc($u,e)}var td=H(`ZodBoolean`,(e,t)=>{Ns.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ll(e,t,n,r)});function K(e){return $c(td,e)}var nd=H(`ZodNull`,(e,t)=>{Ps.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rl(e,t,n,r)});function rd(e){return el(nd,e)}var id=H(`ZodUnknown`,(e,t)=>{Fs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function ad(){return tl(id)}var od=H(`ZodNever`,(e,t)=>{Is.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zl(e,t,n,r)});function sd(e){return nl(od,e)}var cd=H(`ZodArray`,(e,t)=>{Rs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wl(e,t,n,r),e.element=t.element,Ou(e,`ZodArray`,{min(e,t){return this.check(ll(e,t))},nonempty(e){return this.check(ll(1,e))},max(e,t){return this.check(cl(e,t))},length(e,t){return this.check(ul(e,t))},unwrap(){return this.element}})});function q(e,t){return Cl(cd,e,t)}var ld=H(`ZodObject`,(e,t)=>{Us.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gl(e,t,n,r),ua(e,`shape`,()=>t.shape),Ou(e,`ZodObject`,{keyof(){return Y(Object.keys(this._zod.def.shape))},catchall(e){return this.clone({...this._zod.def,catchall:e})},passthrough(){return this.clone({...this._zod.def,catchall:ad()})},loose(){return this.clone({...this._zod.def,catchall:ad()})},strict(){return this.clone({...this._zod.def,catchall:sd()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(e){return Da(this,e)},safeExtend(e){return Oa(this,e)},merge(e){return ka(this,e)},pick(e){return Ta(this,e)},omit(e){return Ea(this,e)},partial(...e){return Aa(wd,this,e[0])},required(...e){return ja(Pd,this,e[0])}})});function J(e,t){return new ld({type:`object`,shape:e??{},...U(t)})}var ud=H(`ZodUnion`,(e,t)=>{Gs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Kl(e,t,n,r),e.options=t.options});function dd(e,t){return new ud({type:`union`,options:e,...U(t)})}var fd=H(`ZodDiscriminatedUnion`,(e,t)=>{ud.init(e,t),Ks.init(e,t)});function pd(e,t,n){return new fd({type:`union`,options:t,discriminator:e,...U(n)})}var md=H(`ZodIntersection`,(e,t)=>{qs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ql(e,t,n,r)});function hd(e,t){return new md({type:`intersection`,left:e,right:t})}var gd=H(`ZodTuple`,(e,t)=>{Xs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jl(e,t,n,r),e.rest=t=>e.clone({...e._zod.def,rest:t})});function _d(e,t,n){let r=t instanceof ns;return new gd({type:`tuple`,items:e,rest:r?t:null,...U(r?n:t)})}var vd=H(`ZodRecord`,(e,t)=>{ec.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Yl(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function yd(e,t,n){return!t||!t._zod?new vd({type:`record`,keyType:W(),valueType:e,...U(t)}):new vd({type:`record`,keyType:e,valueType:t,...U(n)})}var bd=H(`ZodEnum`,(e,t)=>{tc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bl(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new bd({...t,checks:[],...U(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new bd({...t,checks:[],...U(r),entries:i})}});function Y(e,t){return new bd({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...U(t)})}var xd=H(`ZodLiteral`,(e,t)=>{nc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vl(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function X(e,t){return new xd({type:`literal`,values:Array.isArray(e)?e:[e],...U(t)})}var Sd=H(`ZodTransform`,(e,t)=>{rc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ul(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Ra(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(Ra(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n.fallback=!0,n)):(n.value=i,n.fallback=!0,n)}});function Cd(e){return new Sd({type:`transform`,transform:e})}var wd=H(`ZodOptional`,(e,t)=>{ac.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ru(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Td(e){return new wd({type:`optional`,innerType:e})}var Ed=H(`ZodExactOptional`,(e,t)=>{oc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ru(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Dd(e){return new Ed({type:`optional`,innerType:e})}var Od=H(`ZodNullable`,(e,t)=>{sc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function kd(e){return new Od({type:`nullable`,innerType:e})}var Ad=H(`ZodDefault`,(e,t)=>{cc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ql(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function jd(e,t){return new Ad({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var Md=H(`ZodPrefault`,(e,t)=>{uc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$l(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Nd(e,t){return new Md({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var Pd=H(`ZodNonOptional`,(e,t)=>{dc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Fd(e,t){return new Pd({type:`nonoptional`,innerType:e,...U(t)})}var Id=H(`ZodCatch`,(e,t)=>{pc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Ld(e,t){return new Id({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}var Rd=H(`ZodPipe`,(e,t)=>{mc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>tu(e,t,n,r),e.in=t.in,e.out=t.out});function zd(e,t){return new Rd({type:`pipe`,in:e,out:t})}var Bd=H(`ZodReadonly`,(e,t)=>{gc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Vd(e){return new Bd({type:`readonly`,innerType:e})}var Hd=H(`ZodCustom`,(e,t)=>{vc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hl(e,t,n,r)});function Ud(e,t={}){return wl(Hd,e,t)}function Wd(e,t){return Tl(e,t)}function Gd(e){return{blockingTodoCount:e.blockingTodoCount,goalNotifications:e.goalNotifications,goals:e.goals,openUserTodoCount:e.openUserTodoCount,systemHealth:e.systemHealth,attentionHistory:e.attentionHistory,userTodos:e.userTodos,workers:e.workers}}function Kd(e,t){return e.goals.find(e=>e.goalId===t)?.title??t}function qd(e){return[`推进中`,`需修复`,`等待条件`].includes(e.state)}function Jd(e){return e.activationState===`stopped`||e.state===`已停止`?`stopped`:e.state===`已完成`?`history`:e.needsYou||e.state===`等你`?`needs_you`:e.state===`推进中`||e.state===`需修复`?`running`:e.state===`安静运行`?`observing`:`scheduled`}function Yd(e){let t=e;return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function Xd(e){return`$${e.toFixed(2)}`}function Zd(e){let t=e;return t>=36e5?`${(t/36e5).toFixed(1)}h`:t>=6e4?`${(t/6e4).toFixed(1)}m`:t>=1e3?`${Math.round(t/1e3)}s`:`${t}ms`}function Qd(e,t,n){return e==null?t:n(e)}function $d(e,t=132){let n=(e??``).replace(/\s+/g,` `).trim();return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}var ef=e=>typeof e==`string`&&e.trim()?e.trim():null;function tf(e){let t=e.decision_scope&&typeof e.decision_scope==`object`&&!Array.isArray(e.decision_scope)?e.decision_scope:{},n=ef(t.kind),r=ef(t.granularity),i=ef(t.scope_key),a=ef(e.superseded_by);return{interaction:e.task_class===`user_gate`?`decision`:`unknown`,lifecycle:a?`superseded`:e.status===`deferred`?`deferred`:e.done===!0||[`done`,`completed`,`closed`,`archived`].includes(String(e.status))?`closed`:e.status===`open`||e.status===`blocked`?`open`:`unknown`,reason:ef(e.note),evidence:ef(e.evidence),blocksAgent:ef(e.blocks_agent),unblocksTodoId:ef(e.unblocks_todo_id),decisionScope:n&&r&&i?{kind:n,granularity:r,scopeKey:i}:null,supersededBy:a}}function nf(e,t,n,r){return{...e,sourceId:t,goalTitle:r??e.goalTitle,details:n?e.details:{...e.details??tf({}),lifecycle:`unavailable`}}}function rf(e,t){return t.find(t=>t.sourceId===e.sourceId&&t.goalId===e.goalId&&t.todoId===e.todoId)||{...e,details:{...e.details??tf({}),lifecycle:`unavailable`}}}function af(e,t){let n=e.details?.supersededBy;if(!(!n||n===e.todoId||e.details?.lifecycle===`unavailable`))return t.find(t=>t.sourceId===e.sourceId&&t.goalId===e.goalId&&t.todoId===n)}function of(e){return![`closed`,`deferred`,`superseded`,`unavailable`].includes(e.details?.lifecycle??`unknown`)}var sf={ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,goal_count:1,run_count:8440,status_contract:{schema_version:2,minimum_dashboard_schema_version:2,producer:`loopx status`,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`},usage_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471166+00:00`,sample_run_count:20,proxy_note:`run-history proxy; excludes token counts and raw thread logs`,totals:{runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9},goals:[{goal_id:`loopx-meta`,runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9,project_share_24h:1}]},event_ledger_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.360662+00:00`,sample_run_count:20,proxy_note:`append-only run-history projection; compact event-class counts only`,event_classes:[`accounting`,`decision`,`evidence`,`state`,`work`],totals:{events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9}},goals:[{goal_id:`loopx-meta`,events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9},latest_event_class:`accounting`,latest_event_at:`2026-07-06T14:37:32+08:00`}]},promotion_readiness_summary:{available:!0,source:`run_history_full_scan`,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.408527+00:00`,sample_run_count:0,proxy_note:`canary promotion-readiness projection from append-only run history; exact evidence stays in run artifacts`},promotion_gate:{ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,gate:`promotion_readiness`,gate_state:`ready`,can_promote:!0,should_warn:!1,non_blocking:!0,recommended_action:`promotion readiness is fresh`,readiness:{available:!0,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,runtime_root:`$HOME/.codex/loopx`,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.471087+00:00`}},decision_freshness_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471133+00:00`,sample_run_count:20,window_days:7,proxy_note:`checkpointed decision freshness projection; rebase old decisions at the decision point before reuse`,summary:{decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0},items:[]},todo_index:JSON.parse(`{"schema_version":"todo_index_v0","source":"live_loopx_status_public_slice","total_count":12,"current_projected_count":12,"rollout_event_count":94,"item_limit":12,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}`),agent_management_projection:{schema_version:`agent_management_projection_v0`,mode:`read_only`,goal_id:`loopx-meta`,generated_at:`2026-07-06T06:49:06Z`,style_hint:null,truth_contract:{todo_is_runtime_work_item:!0,projection_is_writable:!1,introduces_task_runtime:!1,write_api:!1},source_summary:{registered_agent_count:4,projected_agent_count:4,todo_source:`live_loopx_status_public_slice`,public_safe_export:!0},agents:[{agent_id:`codex-main-control`,agent_model:`peer_v1`,profile_role:`release-validation`,state:`blocked`,next_action:`Continue projected todo todo_2bf560b48a0c.`,last_activity_at:`2026-06-29T00:49:36+08:00`,evidence_refs:[`todo:todo_e72afc24f04a:evidence`],goal_ids:[`loopx-meta`],stale_claim_hint:{state:`activity_missing`,claimed_by:`codex-main-control`,reason:`claimed open todo has no projected activity timestamp`,recommended_operator_action:`inspect evidence before considering reassignment`},current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_2bf560b48a0c`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0`,title:`Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harn…`,task_class:`blocker`,action_kind:`legacy_open_pr_rename_blocker`,claimed_by:`codex-main-control`}},{agent_id:`codex-product-capability`,agent_model:`peer_v1`,profile_role:`product-validation`,state:`monitoring`,next_action:`Continue projected todo todo_ded745761822.`,last_activity_at:`2026-07-06T06:29:53Z`,evidence_refs:[`todo:todo_ded745761822:evidence`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_ded745761822`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0-LOCAL`,title:`Public-safe redacted live LoopX text; inspect local status for the full row.`,task_class:`continuous_monitor`,action_kind:`Public-safe redacted live LoopX text; inspect local status for the full row.`,claimed_by:`codex-product-capability`,updated_at:`2026-07-04T20:22:45+08:00`}},{agent_id:`codex-side-bypass`,agent_model:`peer_v1`,profile_role:`implementation-validation`,state:`waiting`,next_action:`Inspect status projection before taking work.`,last_activity_at:`2026-07-06T06:32:16Z`,evidence_refs:[`rollout_event:todo_complete:todo_22c946938115`],goal_ids:[`loopx-meta`]},{agent_id:`codex-value-explorer`,agent_model:`peer_v1`,profile_role:`value-exploration`,state:`monitoring`,next_action:`Continue projected todo todo_584f55f8f3b4.`,last_activity_at:`2026-07-06T09:39:59+08:00`,evidence_refs:[`rollout_event:todo_update:todo_584f55f8f3b4`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_584f55f8f3b4`,goal_id:`loopx-meta`,role:`agent`,status:`open`,title:`todo add recorded for todo_584f55f8f3b4`}}]},contract:{ok:!0,summary:{errors:0,warnings:1,checks:6},errors:[],warnings:["loopx-meta: duplicate index rows raw=8444 unique=8440 unexpected=3 artifact_identity_collisions=2 artifact_collision_rows=3 reward_overlays=1; inspect with `loopx history --goal-id loopx-meta inspect-index-duplicates`; artifact identity collisions need review…"],checks:[`registry goals checked: 12`,`registry boundary: shared_local_registry push_allowed=False tracked=False ignored=False`,`user-gate scopes checked: 6 open multi-agent gates`,`runtime root resolved: $HOME/.codex/loopx`,`run-history goals=28 runs=10210`,`public boundary scan clean: 1218 files`]},global_registry:{available:!0,ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,current_registry:`$HOME/.codex/loopx/registry.global.json`,current_registry_is_global:!0,global_goal_count:12,current_goal_count:12,source_registry_count:7,summary:{high:0,action:8,info:0,checks:2,findings:8},findings:[{kind:`source_registry_missing`,severity:`action`,message:"`cc-test` source registry is missing",recommended_action:"reconnect `cc-test` from its project or archive it if the project is obsolete",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-test` active state file is missing",recommended_action:"repair `cc-test` state_file or reconnect the project",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp` source registry is missing",recommended_action:"reconnect `cc-tmp` from its project or archive it if the project is obsolete",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp` active state file is missing",recommended_action:"repair `cc-tmp` state_file or reconnect the project",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` source registry is missing",recommended_action:"reconnect `cc-tmp-xdrchpuaul` from its project or archive it if the project is obsolete",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` active state file is missing",recommended_action:"repair `cc-tmp-xdrchpuaul` state_file or reconnect the project",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` source registry is missing",recommended_action:"reconnect `loopx-auto-research-e2e-probe-20260628-2225-goal` from its project or archive it if the project is obsolete",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` active state file is missing",recommended_action:"repair `loopx-auto-research-e2e-probe-20260628-2225-goal` state_file or reconnect the project",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`}],checks:[`global registry goals checked: 12`,`global source registries checked: 7`]},attention_queue:JSON.parse(`{"available":true,"item_count":1,"needs_user_or_controller":0,"needs_controller":0,"needs_codex":1,"watching_external_evidence":0,"items":[{"goal_id":"loopx-meta","status":"skillsbench_codex_cli_goal_tail4_keepalive_relaunched","lifecycle_phase":"adapter_inspected","lifecycle_flags":["adapter_inspected"],"waiting_on":"codex","severity":"action","recommended_action":"Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…","source":"latest_run","quota":{"compute":1.0,"window_hours":24,"slot_minutes":1,"allowed_slots":1440,"spent_slots":97,"state":"eligible","reason":"1 compute quota; eligible for the next automatic agent turn"},"agent_todos":{"source_section":"Agent Todo","total_count":12,"open_count":12,"done_count":0,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}}]}`),run_history:{available:!0,goal_count:1,run_count:5,goals:[{id:`loopx-meta`,domain:`loopx-platform`,status:`active-read-only`,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`],registry_member:!0,legacy_runtime_goal:!1,adapter_kind:`harness_self_improvement`,adapter_status:`connected-read-only`,index_exists:!0,raw_index_records:8444,unique_runs:8440,quota:{compute:1,window_hours:24,slot_minutes:1,allowed_slots:1440,spent_slots:97,state:`waiting`,reason:`no active Codex-ready work is currently selected`},latest_runs:[{generated_at:`2026-07-06T14:37:32+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-value-explorer`,recommended_action:`审阅 PR #1524 的 Agent Management 面板视觉方向:workspace hint 与 stale claim hint 是否符合预期;确认后允许 codex-value-explorer 自合并。`,health_check:`quota safe-bypass operator gate; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:55+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-main-control`,recommended_action:`[P1] Repair SkillsBench post-run debug gate consistency for countable codex-cli-goal official-zero runs: when attempt_accounting is countable and case_closeout_complete=true, do not project first_blocker=loopx_closeout_…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:54+08:00`,goal_id:`loopx-meta`,classification:`skillsbench_codex_cli_goal_tail4_keepalive_relaunched`,agent_id:`codex-main-control`,progress_scope:`goal`,delivery_batch_scale:`single_surface`,delivery_outcome:`outcome_progress`,recommended_action:`Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 10`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:34+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-side-bypass`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:32:57+08:00`,goal_id:`loopx-meta`,classification:`auto_research_successor_link_fix_merged`,agent_id:`codex-side-bypass`,progress_scope:`agent_lane`,delivery_batch_scale:`implementation`,delivery_outcome:`outcome_progress`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 0`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]}]}]}},cf=W().nullable(),lf=pd(`enabled`,[J({enabled:X(!1)}),J({enabled:X(!0),revision:G().int().positive(),digest:W().min(1),objective:W(),non_goals:q(W()),held_todo_ids:q(W()),status:Y([`unverified`,`stale`,`failed`,`partial`,`accepted`,`held`]),criteria:q(J({id:W(),description:W()})),tasks:q(J({todo_id:W(),state:Y([`ready`,`unbound`,`stale`]),criterion_ids:q(W()),reason:W().optional(),reason_code:W().optional(),applicable:K().optional()})),verification:J({operation_id:W(),contract_revision:G().int().positive(),contract_digest:W(),todo_id:W().nullable(),results:q(J({criterion_id:W(),passed:K(),exit_code:G().int().nullable()}))}).nullable()})]),uf=J({schema_version:X(`goal_acceptance_observation_projection_v0`),goal_id:W(),read_only:X(!0),acceptance_assessed:X(!1),coverage:Y([`partial`,`unavailable`]),missing_sources:q(W()),truncated:K(),historical_progress:q(J({kind:W(),observed_at:cf,source:W(),evidence_refs:q(W())})),acceptance_gaps:q(J({kind:W(),owner:cf,reason:cf,evidence_required:cf,observed_at:cf,source:W(),reason_code:W().optional(),resolution_hint:W().optional(),component_checks:J({checkpoint_satisfied:K(),checkpoint_fresh:K(),path_outcome_valid:K(),evidence_refs_present:K(),final_outcome_claim_present:K(),no_reported_outcome_gap:K()}).optional()})),guards:q(J({kind:W(),todo_id:cf,blocks_agent:cf,owner:cf,reason:cf,evidence_required:cf,decision_scope:cf})),next_action:cf,next_action_source:cf,goal_acceptance_contract:lf.optional()}),df=dd([W(),G(),K(),rd()]),ff=yd(W(),df),pf=J({todo_id:W().optional(),priority:W().optional(),status:W(),title:W(),claimed_by:W().optional(),task_class:W().optional(),action_kind:W().optional()}),mf=J({gate_id:W(),kind:W(),status:W(),blocks:q(W()).optional()}),hf=J({todo_id:W().optional(),owner_agent:W().optional(),status:W().optional(),lease_until:W().optional(),write_scope:q(W()).optional()}),gf=J({generated_at:W().optional(),classification:W().optional(),summary:W().optional()}),_f=J({kind:W().optional().default(`warning`),message:dd([W(),q(W())]).optional().default(`compact source warning`)}).passthrough(),vf=J({schema_version:X(`goal_channel_projection_v0`),mode:X(`read_only`),goal_id:W(),display_name:W(),generated_at:W().optional().nullable(),latest_status:W(),waiting_on:W(),next_action:W(),source_refs:yd(W(),df),decision_frame:J({user_action_required:K(),agent_action_required:K(),quiet_noop_allowed:K()}),quota:ff,user_todos:q(pf).default([]),agent_todos:q(pf).default([]),open_gates:q(mf).default([]),active_leases:q(hf).default([]),artifacts:q(ff).default([]),recent_events:q(gf).default([]),source_warnings:q(_f).default([]),truth_contract:J({event_ledger_is_source_of_truth:K(),projection_is_writable:K(),recompute_rule:W(),write_authority:W()})}),yf=J({compute:G().optional().default(1),window_hours:G().optional().default(24),slot_minutes:G().optional().default(1),allowed_slots:G().optional().nullable(),spent_slots:G().optional().default(0),state:W().optional().nullable(),next_eligible_at:W().optional().nullable(),reason:W().optional().nullable(),blocked_action_scope:W().optional().nullable(),focus_wait:K().optional().nullable(),handoff_outcome_floor_block:K().optional().nullable(),safe_bypass_allowed:K().optional().default(!1),safe_bypass_kind:W().optional().nullable(),safe_bypass_policy:W().optional().nullable(),post_handoff_outcome_gap_streak:G().optional().nullable(),outcome_gap_threshold:G().optional().nullable(),must_advance:q(W()).optional().default([]),avoid:q(W()).optional().default([])}).transform(e=>{let t=Math.max(1,e.slot_minutes),n=Math.round(e.window_hours*60*e.compute/t);return{...e,slot_minutes:t,allowed_slots:e.allowed_slots??n}}),bf=J({self_repair:J({enabled:K().optional().default(!1),allow_health_blocker_repair:K().optional().default(!1),allow_waiting_projection_repair:K().optional().default(!1)}).optional().nullable()}).passthrough(),xf=J({model_config:J({model:W(),reasoning_effort:W().optional()}).optional(),execution_config:W().optional(),mode:W().optional().default(`default`),orchestration_mode:W().optional().nullable(),spawn_allowed:K().optional().default(!1),allowed:K().optional().nullable(),max_children:G().optional().default(0),allowed_domains:q(W()).optional().default([])}).passthrough(),Sf=J({label:W().optional().nullable(),path:W(),anchor:W().optional().nullable(),exists:K().optional().default(!1),resolved_path:W().optional().nullable()}),Cf=J({index:G(),done:K(),text:W(),schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),resume_when:W().optional().nullable(),resume_ready:K().optional().nullable(),resume_condition:yd(W(),ad()).optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),archive_state:W().optional().nullable(),source_section:W().optional().nullable(),task_class:W().optional().nullable(),task_domain:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_capabilities:q(W()).optional(),note:W().optional().nullable(),evidence:W().optional().nullable(),updated_at:W().optional().nullable(),completion_validation_required:K().optional().nullable(),completion_validation_sha256:W().optional().nullable(),completion_validation_revision:G().int().nonnegative().optional().nullable(),completion_validation_revision_history:q(J({revision:G().int().positive(),previous_declaration_sha256:W(),declaration_sha256:W(),actor_agent_id:W(),revised_at:W()}).passthrough()).optional().default([]),review_materials:q(Sf).optional().default([])}).passthrough(),wf=J({source_section:W().optional().nullable(),total_count:G().optional().default(0),open_count:G().optional().default(0),done_count:G().optional().default(0),advancement_done_count:G().optional(),items:q(Cf).optional().default([]),deferred_items:q(Cf).optional()}),Tf=Cf.extend({goal_id:W(),source:W().optional().nullable(),event_count:G().optional().default(0),event_kinds:q(W()).optional().default([]),latest_event_kind:W().optional().nullable(),latest_event_at:W().optional().nullable(),latest_event_status:W().optional().nullable(),agent_id:W().optional().nullable()}).passthrough(),Ef=J({schema_version:W().optional().nullable(),source:W().optional().nullable(),total_count:G().optional().default(0),current_projected_count:G().optional().default(0),rollout_event_count:G().optional().default(0),item_limit:G().optional().nullable(),items:q(Tf).optional().default([])}),Df=J({kind:W().optional().nullable(),label:W().optional().nullable(),path_safe:K().optional().default(!1),branch:W().optional().nullable(),write_scope:q(W()).optional().default([])}).passthrough(),Of=J({state:W().optional().nullable(),claimed_by:W().optional().nullable(),last_activity_at:W().optional().nullable(),threshold_hours:G().optional().nullable(),reason:W().optional().nullable(),recommended_operator_action:W().optional().nullable()}).passthrough(),kf=J({schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),goal_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),task_class:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_write_scopes:q(W()).optional().default([]),workspace_ref:Df.optional().nullable()}).passthrough(),Af=J({schema_version:W().optional().nullable(),from_agent:W().optional().nullable(),to_agent:W().optional().nullable(),intent:W().optional().nullable(),summary:W().optional().nullable(),blocker:W().optional().nullable(),suggested_next_action:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),updated_at:W().optional().nullable()}).passthrough(),jf=J({agent_id:W(),role:W().optional().nullable(),state:W().optional().nullable(),current_todo:kf.optional().nullable(),next_action:W().optional().nullable(),last_activity_at:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),handoff_refs:q(W()).optional().default([]),handoff_note:Af.optional().nullable(),workspace_ref:Df.optional().nullable(),stale_claim_hint:Of.optional().nullable(),blocked_on:kf.optional().nullable(),goal_ids:q(W()).optional().default([])}).passthrough(),Mf=J({schema_version:W().optional().nullable(),mode:W().optional().nullable(),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),style_hint:J({preferred:W().optional().nullable(),license_boundary:W().optional().nullable()}).optional().nullable(),truth_contract:J({todo_is_runtime_work_item:K().optional().default(!0),projection_is_writable:K().optional().default(!1),introduces_task_runtime:K().optional().default(!1),write_api:K().optional().default(!1)}).optional().nullable(),source_summary:J({registered_agent_count:G().optional().default(0),projected_agent_count:G().optional().default(0),todo_source:W().optional().nullable()}).optional().nullable(),agents:q(jf).optional().default([])}).passthrough(),Nf=J({goal_id:W(),configured:K().optional().default(!1),enabled:K().optional().default(!1),human_gate_auto_notify_enabled:K().optional().default(!1),target_ref:W().optional().nullable(),receipt_count:G().optional().default(0),last_notified_at:W().optional().nullable()}).passthrough(),Pf=J({schema_version:W().optional().nullable(),generated_at:W().optional().nullable(),goals:q(Nf).optional().default([])}).passthrough(),Ff=J({source_section:W().optional().nullable(),open:G().optional().default(0),done:G().optional().default(0),total:G().optional().default(0),advancement_done_count:G().optional(),next:W().optional().nullable(),next_index:G().optional().nullable(),items:q(Cf).optional().default([]),recent_completed_advancement_items:q(Cf).optional().default([])}),If=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),severity:W().optional().nullable(),index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),Lf=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(If).optional().default([])}),Rf=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),quota_state:W().optional().nullable(),priority:W().optional().nullable(),todo_index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),zf=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(Rf).optional().default([])}),Bf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),summary:W().optional().nullable()}),Vf=J({kind:W().optional().nullable(),source:W().optional().nullable(),severity:W().optional().nullable(),requires_refresh_state:K().optional().default(!1),reason:W().optional().nullable(),active_state_updated_at:W().optional().nullable(),latest_run_generated_at:W().optional().nullable(),latest_run_state_updated_at:W().optional().nullable(),latest_run_classification:W().optional().nullable(),recommended_action:W().optional().nullable()}),Hf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),health_check:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}),Uf=J({project_asset_backed:K().optional(),same_source_should_run:K().optional(),codex_ready:K().optional(),handoff_has_next_action:K().optional(),handoff_has_stop_condition:K().optional(),handoff_sanitized_surface:K().optional()}).catchall(K()),Wf=J({ready:K().optional().default(!1),codex_ready:K().optional().default(!1),source:W().optional().nullable(),quota_state:W().optional().nullable(),checks:Uf.optional().default({}),handoff_status:W().optional().nullable(),handoff_ready_at:W().optional().nullable(),handoff_ready_classification:W().optional().nullable(),post_handoff_run_seen:K().optional().default(!1),post_handoff_latest_run:Hf.optional().nullable(),post_handoff_recent_runs:q(Hf).optional().default([]),post_handoff_small_scale_streak:G().int().nonnegative().optional().default(0),post_handoff_outcome_gap_streak:G().int().nonnegative().optional().default(0),next_probe:W().optional().nullable()}),Gf=J({schema_version:W().optional().nullable(),kind:W().optional().nullable(),missing_roles:q(W()).optional().default([]),source:W().optional().nullable(),recommended_action:W().optional().nullable()}),Kf=J({owner:W(),gate:W(),next_action:W(),stop_condition:W(),user_todos:Ff.optional().nullable(),agent_todos:Ff.optional().nullable(),quota:yf.optional().nullable(),control_plane:bf.optional().nullable(),orchestration:xf.optional().nullable(),latest_validation:Bf.optional().nullable(),stale_latest_run_warning:Vf.optional().nullable(),todo_projection_gap:Gf.optional().nullable()}),qf=J({goal_id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),status:W(),waiting_on:W(),severity:W(),recommended_action:W(),project_asset:Kf.optional().nullable(),handoff_readiness:Wf.optional().nullable(),source:W().optional(),operator_question:W().optional().nullable(),agent_command:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),controller_stage:W().optional().nullable(),missing_gates:q(W()).optional().default([]),next_handoff_condition:W().optional().nullable(),quota:yf.optional().nullable(),control_plane:bf.optional().nullable(),user_todos:wf.optional().nullable(),agent_todos:wf.optional().nullable(),stale_latest_run_warning:Vf.optional().nullable(),dependency_blockers:Lf.optional().nullable(),todo_state_file:W().optional().nullable(),goal_channel_projection:vf.optional().nullable()}),Jf=J({recorded_at:W().optional().nullable(),decision:W().optional().nullable(),reward:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable()}),Yf=J({recorded_at:W().optional().nullable(),gate:W().optional().nullable(),decision:W().optional().nullable(),operator_question:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable(),agent_command:W().optional().nullable()}),Xf=J({version:W().optional().nullable(),goal_id:W().optional().nullable(),run_id:W().optional().nullable(),gate_id:W().optional().nullable(),created_state_ref:W().optional().nullable(),created_policy_version:W().optional().nullable(),interrupt_payload:J({question:W().optional().nullable(),choices:q(W()).optional().default([])}).optional().nullable(),allowed_decisions:q(W()).optional().default([]),operator_decision:W().optional().nullable(),latest_state_ref:W().optional().nullable(),freshness_check:W().optional().nullable(),precondition_check:W().optional().nullable(),migration_or_rebase_result:W().optional().nullable(),resulting_action:W().optional().nullable(),validation_after_resume:W().optional().nullable()}),Zf=J({id:W().optional().nullable(),ok:K().optional().nullable(),review:W().optional().nullable()}),Qf=J({classification:W().optional().nullable(),read_only_observer_ready:K().optional().nullable(),decision_advisor_ready:K().optional().nullable(),write_controller_ready:K().optional().nullable(),missing_gates:q(W()).optional().default([]),review_judgment:W().optional().nullable(),next_handoff_condition:W().optional().nullable(),gates:q(Zf).optional().default([])}),$f=J({declared:K().optional().default(!1),required:K().optional().default(!1),path:W().optional().nullable(),path_exists:K().optional().nullable(),read_status:W().optional().nullable(),default_entry_count:G().optional().default(0),default_entries_checked:G().optional().default(0),default_entries_present:G().optional().default(0),topic_authority_count:G().optional().default(0),project_material_count:G().optional().default(0),project_material_repository_count:G().optional().default(0),project_material_owner_review_required_count:G().optional().default(0),project_material_stale_count:G().optional().default(0),project_material_current_authority_count:G().optional().default(0),deprecated_source_count:G().optional().default(0),conflict_risk:W().optional().nullable()}),ep=J({adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_source_count:G().optional().nullable(),authority_registry_declared:K().optional().nullable(),authority_registry_path_exists:K().optional().nullable(),authority_registry_default_entry_count:G().optional().nullable(),authority_registry_default_entries_present:G().optional().nullable(),topic_authority_count:G().optional().nullable(),project_material_count:G().optional().nullable(),project_material_repository_count:G().optional().nullable(),project_material_owner_review_required_count:G().optional().nullable(),project_material_stale_count:G().optional().nullable(),project_material_current_authority_count:G().optional().nullable(),authority_registry_conflict_risk:W().optional().nullable(),guard_count:G().optional().nullable(),sections_found:G().optional().nullable(),sections_checked:G().optional().nullable(),files_present:G().optional().nullable(),files_checked:G().optional().nullable()}),tp=J({generated_at:W(),goal_id:W(),classification:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),recommended_action:W().optional().nullable(),health_check:W().optional().nullable(),active_task_count:G().optional().nullable(),active_priorities:yd(W(),ad()).optional().nullable(),cache_check:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),human_reward:Jf.optional().nullable(),operator_gate:Yf.optional().nullable(),operator_gate_resume_contract:Xf.optional().nullable(),controller_readiness:Qf.optional().nullable(),project_map:ep.optional().nullable()}),np=J({acceptance_observation:uf.optional().nullable().catch(null),id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),display_name:W().optional().nullable(),domain:W().optional().nullable(),status:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),registry_member:K().optional().default(!1),legacy_runtime_goal:K().optional().default(!1),adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_registry:$f.optional().nullable(),quota:yf.optional().nullable(),control_plane:bf.optional().nullable(),spawn_policy:xf.optional().nullable(),orchestration:xf.optional().nullable(),coordination:J({agent_model:W().optional().nullable(),registered_agents:q(W()).optional().default([])}).optional().nullable(),index_exists:K().optional().default(!1),raw_index_records:G().optional().default(0),unique_runs:G().optional().default(0),latest_runs:q(tp).optional().default([])}),rp=J({available:K(),goal_count:G().optional().default(0),run_count:G().optional().default(0),goals:q(np).optional().default([]),recent_runs:q(tp).optional().default([])}),ip=J({kind:W(),severity:W(),message:W(),recommended_action:W(),goal_id:W().optional().nullable(),path:W().optional().nullable(),goal_ids:q(W()).optional().default([])}),ap=J({available:K(),ok:K(),registry:W(),current_registry:W().optional().nullable(),current_registry_is_global:K().optional().default(!1),global_goal_count:G().optional().default(0),current_goal_count:G().optional().default(0),source_registry_count:G().optional().default(0),summary:J({high:G().optional().default(0),action:G().optional().default(0),info:G().optional().default(0),checks:G().optional().default(0),findings:G().optional().default(0)}),findings:q(ip).optional().default([]),checks:q(W()).optional().default([])}),op=J({runs_24h:G().optional().default(0),runs_7d:G().optional().default(0),quota_spend_slots_24h:G().optional().default(0),quota_spend_slots_7d:G().optional().default(0),automation_run_count_24h:G().optional().default(0),automation_run_count_7d:G().optional().default(0),progress_signal_run_count_24h:G().optional().default(0),progress_signal_run_count_7d:G().optional().default(0),input_tokens_24h:G().optional(),input_tokens_7d:G().optional(),output_tokens_24h:G().optional(),output_tokens_7d:G().optional(),cache_tokens_24h:G().optional(),cache_tokens_7d:G().optional(),cost_usd_24h:G().optional(),cost_usd_7d:G().optional(),duration_ms_24h:G().optional(),duration_ms_7d:G().optional()}),sp=op.extend({goal_id:W(),project_share_24h:G().optional().default(0)}),cp=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),totals:op.optional().default({runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0}),goals:q(sp).optional().default([])}).optional().nullable(),lp=J({accounting:G().optional().default(0),decision:G().optional().default(0),evidence:G().optional().default(0),state:G().optional().default(0),work:G().optional().default(0)}),up={accounting:0,decision:0,evidence:0,state:0,work:0},dp=J({events_24h:G().optional().default(0),events_7d:G().optional().default(0),by_class_24h:lp.optional().default(up),by_class_7d:lp.optional().default(up)}),fp=dp.extend({goal_id:W(),latest_event_class:W().optional().nullable(),latest_event_at:W().optional().nullable()}),pp={events_24h:0,events_7d:0,by_class_24h:up,by_class_7d:up},mp=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),event_classes:q(W()).optional().default([`accounting`,`decision`,`evidence`,`state`,`work`]),totals:dp.optional().default(pp),goals:q(fp).optional().default([])}).optional().nullable(),hp=J({available:K().optional().default(!1),source:W().optional().default(`run_history`),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),freshness_window_hours:G().optional().default(24),freshness_status:W().optional().nullable(),is_fresh:K().optional().default(!1),requires_readiness_run:K().optional().default(!0),age_seconds:G().optional().nullable(),age_hours:G().optional().nullable(),freshness_reference_time:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),reason:W().optional().nullable()}).optional().nullable(),gp=J({ok:K().optional().default(!0),registry:W().optional().nullable(),runtime_root:W().optional().nullable(),gate:W().optional().default(`promotion_readiness`),gate_state:W().optional().default(`warning`),can_promote:K().optional().default(!1),should_warn:K().optional().default(!0),non_blocking:K().optional().default(!0),recommended_action:W().optional().nullable(),warning_message:W().optional().nullable(),readiness:hp.default(null)}).optional().nullable(),_p=J({decision_count:G().optional().default(0),stale_count:G().optional().default(0),rebase_required_count:G().optional().default(0),fresh_count:G().optional().default(0)}),vp=J({goal_id:W(),decision_kind:W().optional().nullable(),decision_at:W().optional().nullable(),classification:W().optional().nullable(),age_days:G().optional().nullable(),stale_by_age:K().optional().default(!1),newer_event_count_7d:G().optional().default(0),newer_event_classes_7d:lp.optional().default(up),freshness_state:W().optional().nullable(),requires_decision_point_rebase:K().optional().default(!1),reason:W().optional().nullable()}),yp=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),window_days:G().optional().default(7),proxy_note:W().optional().nullable(),summary:_p.optional().default({decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0}),items:q(vp).optional().default([])}).optional().nullable(),bp=J({schema_version:G().optional().default(0),minimum_dashboard_schema_version:G().optional().default(2),producer:W().optional().nullable(),reload_hint:W().optional().nullable()}).optional().default({schema_version:0,minimum_dashboard_schema_version:2,producer:null,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`}),xp=J({schema_version:X(`loopx_goal_projection_scope_v0`),scope:Y([`all`,`active`,`stopped`]),complete:K(),projected_goal_count:G().int().nonnegative(),registry_goal_count:G().int().nonnegative(),registry_revision:W().optional().nullable()}),Sp=J({source:W().optional().default(`serve-status`),status_url:W().optional().nullable(),health_url:W().optional().nullable(),review_material_url:W().optional().nullable(),presentation_surfaces_url:W().optional().nullable(),presentation_detail_url:W().optional().nullable(),periodic_report_index_url:W().optional().nullable(),periodic_report_detail_url:W().optional().nullable(),ssh_hosts_url:W().optional().nullable(),reward_dry_run_url:W().optional().nullable(),reward_append_url:W().optional().nullable(),reward_write_enabled:K().optional().default(!1),configure_goal_dry_run_url:W().optional().nullable(),configure_goal_apply_url:W().optional().nullable(),control_plane_write_enabled:K().optional().default(!1)}).optional().nullable(),Cp=J({extension_id:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),extension_revision:W().min(1),payload_sha256:W().regex(/^[0-9a-f]{64}$/)}).strict(),wp=J({extension_id:W().min(1),extension_revision:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),surface_kind:W().regex(/^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/),title:W().min(1),view_schema:W().regex(/^[a-z][a-z0-9_]*_v\d+$/),visibility:Y([`public-safe`,`owner-only`]),goal_id:W().min(1).nullable(),generated_at:W().min(1).nullable(),review_due_at:W().min(1).nullable(),diagnostic:W().min(1).nullable(),empty_state_title:W().min(1),empty_state_detail:W().min(1)}),Tp=dd([wp.extend({state:Y([`ready`,`review_due`]),goal_id:W().min(1),generated_at:W().min(1),detail_ref:Cp}).strict(),wp.extend({state:X(`empty`),detail_ref:sd().optional()}).strict(),wp.extend({state:X(`invalid`),diagnostic:W().min(1),detail_ref:sd().optional()}).strict()]),Ep=J({schema_version:X(`extension_presentation_surfaces_v0`),count:G().int().nonnegative(),ready_count:G().int().nonnegative(),review_due_count:G().int().nonnegative(),empty_count:G().int().nonnegative(),invalid_count:G().int().nonnegative(),items:q(Tp)}).strict(),Dp={schema_version:`extension_presentation_surfaces_v0`,count:0,ready_count:0,review_due_count:0,empty_count:0,invalid_count:0,items:[]};J({ok:X(!0),presentation_surfaces:Ep}).strict();var Op=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/)}).strict(),kp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),detail_ref:Op}).strict(),Ap=J({schema_version:X(`periodic_report_workspace_index_v0`),count:G().int().nonnegative(),items:q(kp)}),jp=Ap.extend({returned_count:G().int().nonnegative(),total_count:G().int().nonnegative(),limit:G().int().nonnegative(),offset:G().int().nonnegative(),truncated:K()}).strict(),Mp=Ap.strict().transform(e=>({...e,returned_count:e.count,total_count:e.count,limit:e.count,offset:0,truncated:!1})),Np=J({ok:X(!0),periodic_reports:dd([jp,Mp])}).strict(),Pp=J({schema_version:X(`periodic_report_workspace_projection_v0`),goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),generated_at:W().min(1),title:W().min(1),summary:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/),period_window:J({start_at:W().min(1),end_at:W().min(1)}).strict(),interaction:J({attention_kind:X(`progress`),interaction:X(`inform`),delivery:X(`surface`),form:X(`milestone_report`),writable:X(!1)}).strict(),delta:J({added_count:G().int().nonnegative(),changed_count:G().int().nonnegative(),item_count:G().int().positive(),items:q(J({fact_id:W().min(1),source_ref:W().min(1),title:W().min(1),summary:W().min(1),status:W().min(1),content_kind:W().min(1),change_kind:Y([`added`,`changed`]),previous_status:W().min(1).optional()}).strict())}).strict(),publication:J({publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),cursor_id:W().min(1)}).strict(),truth_contract:J({published_cursor_is_source_of_truth:X(!0),generation_receipt_is_delivery_receipt:X(!1),projection_is_writable:X(!1),browser_write_api:X(!1)}).strict()}).strict(),Fp=J({ok:X(!0),projection:Pp}).strict(),Ip=J({ok:K(),registry:W(),runtime_root:W(),goal_count:G(),run_count:G(),status_contract:bp,goal_projection:xp.optional().nullable().default(null),local_dashboard_api:Sp,contract:J({ok:K(),summary:J({errors:G(),warnings:G(),checks:G()}),errors:q(W()),warnings:q(W()),checks:q(W()).optional().default([])}),global_registry:ap.optional().default({available:!1,ok:!0,registry:``,current_registry:null,current_registry_is_global:!1,global_goal_count:0,current_goal_count:0,source_registry_count:0,summary:{high:0,action:0,info:0,checks:0,findings:0},findings:[],checks:[]}),attention_queue:J({available:K(),item_count:G(),needs_user_or_controller:G(),needs_controller:G().optional().default(0),needs_codex:G(),watching_external_evidence:G(),autonomous_backlog_candidates:zf.optional().nullable(),items:q(qf)}),run_history:rp.optional().default({available:!1,goal_count:0,run_count:0,goals:[],recent_runs:[]}),event_ledger_summary:mp.default(null),promotion_readiness_summary:hp.default(null),promotion_gate:gp.default(null),decision_freshness_summary:yp.default(null),usage_summary:cp.default(null),todo_index:Ef.optional().nullable().default(null),agent_management_projection:Mf.optional().nullable().default(null),goal_channel_notification_projection:Pf.optional().nullable().default(null),presentation_surfaces:Ep.optional().default(Dp)});J({ok:K(),dry_run:K().optional().default(!0),appended:K().optional().default(!1),goal_id:W().optional().nullable(),raw_index_records_before:G().optional().nullable(),preview_id:W().optional().nullable(),selected_run:J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}).optional().nullable(),human_reward:Jf.optional().nullable(),active_state_summary:W().optional().nullable(),project_agent_visibility:J({source_of_truth:W().optional().nullable(),history_command:W().optional().nullable(),active_state_role:W().optional().nullable(),review_packet_role:W().optional().nullable()}).optional().nullable(),error:W().optional().nullable()});function Lp(e,t,n){let r=e.run_history.goals.map(e=>e.id===t&&e.activation_state!==n?{...e,activation_state:n}:e),i=e.attention_queue.items.map(e=>e.goal_id===t&&e.activation_state!==n?{...e,activation_state:n}:e),a=r.some((t,n)=>t!==e.run_history.goals[n]),o=i.some((t,n)=>t!==e.attention_queue.items[n]);return!a&&!o?e:{...e,attention_queue:o?{...e.attention_queue,items:i}:e.attention_queue,run_history:a?{...e.run_history,goals:r}:e.run_history}}function Rp(e,t){let n=e.run_history.goals.filter(e=>e.id!==t),r=e.attention_queue.items.filter(e=>e.goal_id!==t);return n.length===e.run_history.goals.length&&r.length===e.attention_queue.items.length?e:{...e,attention_queue:{...e.attention_queue,items:r},run_history:{...e.run_history,goals:n}}}function zp(e){return Ip.parse(e)}function Bp(e){return e instanceof pu?e.issues.map(e=>`${e.path.join(`.`)||`root`}: ${e.message}`).join(`; `):e instanceof Error?e.message:String(e)}var Vp=zp(sf),Hp=J({ok:X(!0),schema_version:X(`loopx_workspace_directory_v1`),registry_revision:W(),goals:q(J({id:W(),display_name:W(),activation_state:Y([`active`,`stopped`]),registry_member:X(!0)}))});function Up(e,t,n={}){if(!e)return{};let r=new Set(n.invalidateGoalIds??[]),i=new Map(e.directory.goals.map(e=>[e.id,e]));return Object.fromEntries(t.goals.flatMap(t=>{let n=i.get(t.id),a=e.snapshots[t.id];return!n||!a||r.has(t.id)||n.display_name!==t.display_name||n.activation_state!==t.activation_state?[]:[[t.id,a]]}))}function Wp(e,t,n){let r=new URL(e,n);r.searchParams.delete(`goal_activation`),r.searchParams.delete(`goal_id`),r.searchParams.delete(`view`);for(let[e,n]of Object.entries(t))r.searchParams.set(e,n);return r.toString()}async function Gp(e,t){let n=await fetch(Wp(e,{view:`workspace-directory`},t),{cache:`no-store`,signal:AbortSignal.timeout(5e3)});if(!n.ok)return null;let r=Hp.safeParse(await n.json());return r.success?r.data:null}function Kp(e){return zp({ok:!0,registry:``,runtime_root:``,goal_count:e.goals.length,run_count:0,local_dashboard_api:{},contract:{ok:!0,summary:{errors:0,warnings:0,checks:0},errors:[],warnings:[]},attention_queue:{available:!1,item_count:0,needs_user_or_controller:0,needs_codex:0,watching_external_evidence:0,items:[]},run_history:{available:!1,goal_count:e.goals.length,run_count:0,goals:e.goals,recent_runs:[]}})}async function qp(e,t){if(!e.body)return`service`;let n=e.body.getReader(),r=()=>{n.cancel().catch(()=>{})};t.addEventListener(`abort`,r,{once:!0});let i=new Uint8Array(16384),a=0;try{for(t.throwIfAborted();;){let{done:e,value:r}=await n.read();if(t.throwIfAborted(),e)break;if(a+r.byteLength>i.byteLength)return`service`;i.set(r,a),a+=r.byteLength}let e=JSON.parse(new TextDecoder().decode(i.subarray(0,a)));return typeof e==`object`&&e&&!Array.isArray(e)&&`error_code`in e&&e.error_code===`workspace_status_access_denied`?`access`:`service`}catch{return t.throwIfAborted(),`service`}finally{t.removeEventListener(`abort`,r),r(),n.releaseLock()}}async function Jp(e,t,n,r,i,a,o){let s=[...n.goals],c=new Map;async function l(){for(;s.length&&i()&&!o?.aborted;){let l=s.findIndex(e=>e.id===a()),u=l>=0?l:s.findIndex(e=>e.activation_state===`active`);if(u<0)return;let d=s.splice(u,1)[0],f=(c.get(d.id)??0)+1;c.set(d.id,f);let p=new AbortController,m=!1,h=()=>p.abort();o?.addEventListener(`abort`,h,{once:!0});let g=setTimeout(()=>{m=!0,p.abort()},3e4),_=null;try{let a=await fetch(Wp(e,{goal_id:d.id},t),{cache:`no-store`,signal:p.signal});if(!a.ok)_=a.status===409?`revision`:a.status>=500?await qp(a,p.signal):`scope`,p.signal.throwIfAborted();else{let e=await a.json();if(e.workspace_registry_revision!==n.registry_revision)_=`revision`;else{let t=zp(e);!t.run_history.goals.some(e=>e.id===d.id)||t.run_history.goals.some(e=>e.id!==d.id)?_=`scope`:i()&&!o?.aborted&&r(d.id,t,null)}}}catch(e){_=m?`timeout`:e instanceof TypeError?`network`:`invalid`}finally{clearTimeout(g),o?.removeEventListener(`abort`,h)}if(!i()||o?.aborted)return;_&&[`timeout`,`network`,`service`].includes(_)&&f<3?(await new Promise(e=>setTimeout(e,f*1e3)),s.push(d)):_&&r(d.id,null,_)}}await Promise.all([l(),l()])}var Yp=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Xp=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),Zp=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),Qp=e=>{let t=Zp(e);return t.charAt(0).toUpperCase()+t.slice(1)},$p={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},em=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},tm=(0,R.createContext)({}),nm=()=>(0,R.useContext)(tm),rm=(0,R.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=nm()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,R.createElement)(`svg`,{ref:c,...$p,width:t??l??$p.width,height:t??l??$p.height,stroke:e??f,strokeWidth:m,className:Yp(`lucide`,p,i),...!a&&!em(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,R.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),Z=(e,t)=>{let n=(0,R.forwardRef)(({className:n,...r},i)=>(0,R.createElement)(rm,{ref:i,iconNode:t,className:Yp(`lucide-${Xp(Qp(e))}`,`lucide-${e}`,n),...r}));return n.displayName=Qp(e),n},im=Z(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),am=Z(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),om=Z(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),sm=Z(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),cm=Z(`arrow-up-down`,[[`path`,{d:`m21 16-4 4-4-4`,key:`f6ql7i`}],[`path`,{d:`M17 20V4`,key:`1ejh1v`}],[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}]]),lm=Z(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),um=Z(`badge-check`,[[`path`,{d:`M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z`,key:`3c2336`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),dm=Z(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),fm=Z(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),pm=Z(`braces`,[[`path`,{d:`M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1`,key:`ezmyqa`}],[`path`,{d:`M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1`,key:`e1hn23`}]]),mm=Z(`calendar-clock`,[[`path`,{d:`M16 14v2.2l1.6 1`,key:`fo4ql5`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5`,key:`1osxxc`}],[`path`,{d:`M3 10h5`,key:`r794hk`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`circle`,{cx:`16`,cy:`16`,r:`6`,key:`qoo3c4`}]]),hm=Z(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),gm=Z(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),_m=Z(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),vm=Z(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),ym=Z(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),bm=Z(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),xm=Z(`clipboard-check`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`m9 14 2 2 4-4`,key:`df797q`}]]),Sm=Z(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),Cm=Z(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),wm=Z(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),Tm=Z(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),Em=Z(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),Dm=Z(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),Om=Z(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),km=Z(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),Am=Z(`file-check-corner`,[[`path`,{d:`M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6`,key:`g5mvt7`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14 20 2 2 4-4`,key:`15kota`}]]),jm=Z(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),Mm=Z(`git-branch`,[[`path`,{d:`M15 6a9 9 0 0 0-9 9V3`,key:`1cii5b`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}]]),Nm=Z(`git-compare-arrows`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`M12 18H7a2 2 0 0 1-2-2V9`,key:`16sdep`}],[`path`,{d:`m9 15 3 3-3 3`,key:`1m3kbl`}]]),Pm=Z(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),Fm=Z(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),Im=Z(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),Lm=Z(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),Rm=Z(`list-plus`,[[`path`,{d:`M16 5H3`,key:`m91uny`}],[`path`,{d:`M11 12H3`,key:`51ecnj`}],[`path`,{d:`M16 19H3`,key:`zzsher`}],[`path`,{d:`M18 9v6`,key:`1twb98`}],[`path`,{d:`M21 12h-6`,key:`bt1uis`}]]),zm=Z(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),Bm=Z(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),Vm=Z(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),Hm=Z(`message-circle-question-mark`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Um=Z(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),Wm=Z(`minimize-2`,[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]),Gm=Z(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),Km=Z(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),qm=Z(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),Jm=Z(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),Ym=Z(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),Xm=Z(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Zm=Z(`radio`,[[`path`,{d:`M16.247 7.761a6 6 0 0 1 0 8.478`,key:`1fwjs5`}],[`path`,{d:`M19.075 4.933a10 10 0 0 1 0 14.134`,key:`ehdyv1`}],[`path`,{d:`M4.925 19.067a10 10 0 0 1 0-14.134`,key:`1q22gi`}],[`path`,{d:`M7.753 16.239a6 6 0 0 1 0-8.478`,key:`r2q7qm`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Qm=Z(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),$m=Z(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),eh=Z(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),th=Z(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),nh=Z(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),rh=Z(`server-cog`,[[`path`,{d:`m10.852 14.772-.383.923`,key:`11vil6`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`,key:`1v3clb`}],[`path`,{d:`m13.148 9.228.383-.923`,key:`t2zzyc`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`,key:`1bxfiv`}],[`path`,{d:`m14.772 10.852.923-.383`,key:`k9m8cz`}],[`path`,{d:`m14.772 13.148.923.383`,key:`1xvhww`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`,key:`tn8das`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`,key:`1g2pve`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`m9.228 10.852-.923-.383`,key:`1wtb30`}],[`path`,{d:`m9.228 13.148-.923.383`,key:`1a830x`}]]),ih=Z(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),ah=Z(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),oh=Z(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),sh=Z(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),ch=Z(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),lh=Z(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),uh=Z(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),dh=Z(`test-tube-diagonal`,[[`path`,{d:`M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01a2.83 2.83 0 0 1 0-4L17 3`,key:`1ub6xw`}],[`path`,{d:`m16 2 6 6`,key:`1gw87d`}],[`path`,{d:`M12 16H4`,key:`1cjfip`}]]),fh=Z(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),ph=Z(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),mh=Z(`unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),hh=Z(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),gh=Z(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);function _h(e){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(e)||e.startsWith(`//`)}function vh(e){return[`localhost`,`127.0.0.1`,`::1`,`[::1]`].includes(e)}function yh(e,t,n){let r=e.trim();if(!r)return{error:`status URL is empty`};let i;try{i=new URL(r,t)}catch{return{error:`status URL is invalid`}}let a=!_h(r),o=vh(i.hostname);return!a&&!o?{error:`${n} must be relative or loopback`}:{source:{isLoopback:o,isRelative:a,url:r}}}function bh(e,t){return yh(e,t,`statusUrl`)}function xh(e,t){let n=yh(e,t,`Ops statusUrl`);return n.error?{error:`${n.error}; use showcase mode for public links.`}:n}function Sh(e,t,n){let r=new URL(e,n);return r.searchParams.set(`goal_activation`,t),r.toString()}function Ch(e,t){if(!t||!e.isLoopback)return null;try{let n=new URL(e.url,window.location.href),r=new URL(t,n.origin);return vh(r.hostname)?r.toString():null}catch{return null}}function wh(e,t){return{detailUrl:Ch(t,e.local_dashboard_api?.periodic_report_detail_url),indexUrl:Ch(t,e.local_dashboard_api?.periodic_report_index_url)}}async function Th(e,t){let n=new URL(e);n.searchParams.set(`goal_id`,t),n.searchParams.set(`limit`,`100`),n.searchParams.set(`offset`,`0`);let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published reports`);return Np.parse(await r.json()).periodic_reports}async function Eh(e,t){let n=new URL(e);Object.entries(t).forEach(([e,t])=>n.searchParams.set(e,t));let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published report detail`);return Fp.parse(await r.json()).projection}function Dh(e,t,n){let r=e.find(e=>e.agentId===t&&e.available)??e.find(e=>e.agentId===n&&e.available)??e.find(e=>e.available);if(!r)throw Error(`Chat requires at least one available route`);return r}function Oh(e){return e.kind===`todo`}var kh=[{id:`next`,label:`找下一步`,prompt:`结合当前 Goal,告诉我现在最值得推进的一个动作,并说明理由。`},{id:`gate`,label:`看阻塞`,prompt:`当前 Goal 有哪些 Gate 或阻塞?哪些需要我决定?`},{id:`evidence`,label:`查证据`,prompt:`检查当前 Goal 的 Evidence,告诉我哪些结论已经有依据,哪些还需要验证。`}];function Ah(e){return!!(e&&typeof e==`object`&&e.session_invalidated===!0)}var jh=``.replace(/\/+$/,``);function Mh(e){return!jh||/^https?:\/\//.test(e)?e:new URL(e,`${jh}/`).toString()}var Nh=J({todo_id:W().nullable(),role:W().nullable(),status:W(),priority:W().nullable(),text:W(),action_kind:W().nullable(),task_class:W().nullable(),claimed_by:W().nullable(),evidence:W().nullable()}),Ph=J({goal_id:W(),title:W(),objective:W(),status:W(),waiting_on:W().nullable(),severity:W().nullable(),gate:W(),next_action:W(),top_todo:Nh.nullable(),todos:q(Nh),evidence:q(W()),quota:J({state:W().nullable(),spent_slots:G().nullable(),allowed_slots:G().nullable(),reason:W().nullable()})});J({ok:K(),schema_version:X(`loopx_chat_status_v0`),selected_goal_id:W().nullable(),goal_count:G(),goals:q(Ph)});var Fh=J({schema_version:W(),executor_endpoint:W(),executor_endpoint_source:W(),executor_endpoint_default_reason:W().optional(),executor_kind:W(),model:W(),model_source:W(),selection_policy:Y([`preferred`,`pinned`,`flexible`]).default(`preferred`),allocation_reason:W().default(``),configured_endpoint:W().nullable().optional(),eligible_endpoints:q(W()).default([]),allocation_configuration_revision:W().default(``),credential_env_var:W(),operator_credential_configured:K(),output_token_budget:J({schema_version:X(`dsh_output_token_budget_v0`),scope:X(`per_model_request`),max_tokens:G().int().positive().nullable(),valid:K(),source:Y([`product_default`,`explicit_argument`]),final_response_reserve_supported:K(),hard_tool_budget_supported:K()}).nullable().optional(),available:K().nullable(),unavailable_reason:W().nullable()}),Ih=J({ok:X(!0),schema_version:Y([`loopx_chat_capabilities_v0`,`loopx_chat_capabilities_v1`]),agent_backend:W(),sandbox:W(),approval_policy:W(),todo_write:W(),goal_subagent_configuration:W().optional(),goal_id:W().nullable(),manager:J({scope:X(`owner_global`),model:W(),reasoning_effort:W(),channel_binding:Fh.optional(),runtime:J({schema_version:X(`manager_runtime_effective_profile_v0`),runtime_profile:Y([`restricted`,`trusted_owner`]),source:W(),configuration_revision:W(),standing_grant:W(),sandbox:W(),approval_policy:W(),tool_classes:q(W()),status:W(),repair:W().optional()})}).optional(),streaming:K().optional(),resume:K().optional(),interrupt:K().optional(),typed_actions:K().optional(),action_kinds:q(W()).optional(),adapters:q(J({agent_id:W(),display_name:W(),adapter_kind:W(),available:K(),streaming:K(),resume:K(),interrupt:K(),location:W().optional(),source:W().optional(),tool_calls:K().optional(),trust_scope:W().optional()})).optional(),lark_cli:J({available:K(),source:W(),version:W().nullable(),error_code:W().nullable()}).optional()}),Lh=J({kind:X(`todo`),text:W(),priority:Y([`P0`,`P1`,`P2`]),rationale:W()}),Rh=pd(`kind`,[Lh,J({kind:X(`steward_team_plan_preview`),preview:yd(W(),ad())})]),zh=J({operation:Y([`merge`,`release`,`deploy`,`delete`,`payment`]),target:W().min(1).max(160),summary:W().max(300)}),Bh=J({schema_version:X(`loopx_chat_agent_response_v0`),message:W(),proposals:q(Rh),protected_action:zh.nullable().optional().default(null),gate:J({kind:W(),summary:W(),next_action:W()}).nullable()}),Vh=J({closed:X(!0),ok:X(!0),session_id:W().min(1)});J({dry_run:X(!0),ok:X(!0),preview_id:W().min(1),todo:J({goal_id:W().min(1),text:W(),todo_id:W().optional()})});var Hh=J({schema_version:X(`loopx_chat_todo_receipt_v0`),receipt_id:W().min(1),preview_id:W().min(1),goal_id:W().min(1),todo_id:W().min(1),status:X(`applied`),outcome:Y([`todo_added`,`todo_already_exists`]),already_exists:K(),preview_revision:W().nullable()});J({applied:X(!0),ok:X(!0),receipt:Hh,todo:J({text:W(),todo_id:W()})});var Uh=J({model_config:J({model:W(),reasoning_effort:W().optional()}).optional(),execution_config:W().optional(),mode:W(),spawn_allowed:K(),max_children:G().int().nonnegative(),allowed_domains:q(W()).optional().default([])}).passthrough(),Wh=J({alignment_requested:K(),configured_children:G().int().positive().nullable(),counts_main_thread:X(!1),new_session_required:K().optional().default(!1),required_children:G().int().nonnegative(),status:Y([`already_sufficient`,`apply_failed`,`explicit_shortfall`,`explicit_sufficient`,`implicit_default_unknown`,`not_requested`,`not_required`,`updated`]),write_required:K(),written:K().optional().default(!1)}).passthrough(),Gh=J({ok:X(!0),dry_run:K(),execute:K(),written:K(),changed:K(),goal_id:W().min(1),changed_fields:q(W()),before:J({orchestration:Uh}).passthrough(),after:J({orchestration:Uh}).passthrough(),preview_id:W().min(1),feature_summary:J({multi_subagent:Y([`off`,`enabled`])}).passthrough(),goal_configuration_changed:K(),codex_host_capacity:Wh,global_sync:J({required:K(),executed:K(),readback:J({status:W(),verified:K()}).passthrough()}).passthrough()}),Kh=J({id:W().min(1),outcome:Y([`approved`,`rejected`,`cancelled`]),projectionVerified:K().nullable(),proposal:Lh,receipt:Hh.nullable()}).superRefine((e,t)=>{e.outcome===`approved`&&!e.receipt&&t.addIssue({code:`custom`,message:`approved decision history requires a Todo receipt`,path:[`receipt`]}),e.outcome!==`approved`&&e.receipt&&t.addIssue({code:`custom`,message:`zero-write decision history must not include a Todo receipt`,path:[`receipt`]})});J({schema_version:X(`loopx_chat_decision_history_v0`),goal_id:W().min(1),decisions:q(Kh).max(24)});var qh=class extends Error{payload;constructor(e,t){super(e),this.payload=t}},Jh=Y([`goal.create`,`goal.update`,`goal.lifecycle`,`todo.create`,`todo.update`,`agent.bind`,`heartbeat.bind`,`monitor.create`,`monitor.update`,`gate.resolve`,`run.correct`,`operation.execute`,`team.plan`]),Yh=J({schema_version:X(`loopx_operation_envelope_v0`),lifecycle_state:Y([`prepared`,`awaiting_confirmation`,`claimed`,`outcome_observed`]),operation_id:W().min(1),confirmation_digest:W().min(1),payload_digest:W().min(1),projection_digest:W().min(1),expires_at:W().min(1),delivery:yd(W(),ad()).nullable(),confirmation:yd(W(),ad()).nullable(),claim:yd(W(),ad()).nullable(),outcome:yd(W(),ad()).nullable(),result_delivery:yd(W(),ad()).nullable().optional()}).passthrough(),Xh=J({schema_version:X(`loopx_chat_action_proposal_v1`),proposal_id:W().min(1),action_kind:Jh,summary:W().min(1),normalized_parameters:yd(W(),ad()),context:yd(W(),ad()),expected_state_fingerprint:W().min(1),permission_classification:W().min(1),validation_evidence:q(W().refine(e=>e.trim().length>0,`Validation evidence must be non-blank text`)),available_transitions:q(Y([`apply`,`cancel`,`regenerate`,`reject`,`defer`])),status:Y([`preview_ready`,`applying`,`gated`,`failed`,`rejected`,`deferred`,`cancelled`,`stale`,`applied`]),receipt:yd(W(),ad()).nullable(),stale:yd(W(),ad()).nullable(),gate:yd(W(),ad()).nullable().optional(),error:yd(W(),ad()).nullable().optional(),checkpoint:yd(W(),ad()).nullable().optional(),failure:yd(W(),ad()).nullable().optional(),canonical_update_basis:J({schema_version:Y([`loopx_chat_canonical_update_basis_v0`,`loopx_chat_canonical_terminal_basis_v0`]),provider_revision:W().min(1),source_authority:Y([`file_v0`,`sqlite_v0`]),registry_sha256:W().regex(/^[a-f0-9]{64}$/)}).optional(),regenerated_from:W().nullable().optional(),operation:Yh.nullable().optional(),created_at:W(),updated_at:W()}),Zh=J({ok:X(!0),proposal:Xh});async function Qh(e){let t=await ig(`/api/actions/preview`,{method:`POST`,body:JSON.stringify({action_kind:e.actionKind,context:e.context,idempotency_key:e.idempotencyKey,normalized_parameters:e.normalizedParameters,summary:e.summary})});return Zh.parse(t).proposal}var $h=J({ok:X(!0),schema_version:X(`loopx_chat_action_list_v1`),proposals:q(Xh)});async function eg(e={}){let t=new URLSearchParams;e.contextKind&&t.set(`context_kind`,e.contextKind),e.goalId&&t.set(`goal_id`,e.goalId);let n=t.size>0?`?${t.toString()}`:``;return $h.parse(await ig(`/api/actions${n}`)).proposals}async function tg(e){let t=await ig(`/api/actions/${encodeURIComponent(e)}/apply`,{method:`POST`,body:`{}`});return J({ok:X(!0),proposal:Xh,turn:yd(W(),ad()).nullable().optional()}).parse(t)}async function ng(e){return Zh.parse(await ig(`/api/actions/${encodeURIComponent(e)}/cancel`,{method:`POST`,body:`{}`})).proposal}async function rg(e,t){return Zh.parse(await ig(`/api/actions/${encodeURIComponent(e)}/${t}`,{method:`POST`,body:`{}`})).proposal}async function ig(e,t){let n;try{n=await fetch(Mh(e),{cache:`no-store`,...t,headers:{"Content-Type":`application/json`,...t?.headers}})}catch{throw new qh(`无法连接 LoopX Chat 服务。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`,{error_code:`chat_api_unavailable`})}let r=await n.text(),i=null;if(r.trim())try{i=JSON.parse(r)}catch{i=null}let a=i&&typeof i==`object`&&!Array.isArray(i)?i:{};if(!n.ok){let e=(a.proposal&&typeof a.proposal==`object`?a.proposal:null)?.status===`stale`?`来源状态已变化,请重新生成预览。`:null,t=n.status>=500?`LoopX Chat 服务暂时不可用(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`:`LoopX Chat 请求失败(HTTP ${n.status})。`;throw new qh(e??String(a.error||t),Object.keys(a).length?a:{error_code:`chat_api_unavailable`,http_status:n.status})}if(i===null)throw new qh(`LoopX Chat 服务返回了无法识别的响应(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务来自同一版本。`,{error_code:`invalid_chat_api_response`,http_status:n.status});return i}async function ag(){return Ih.parse(await ig(`/api/chat/capabilities`))}async function og(e){return ig(`/api/chat/projection-messages`,{method:`POST`,body:JSON.stringify({answer:e.answer,context_kind:e.contextKind,goal_id:e.goalId,question:e.question})})}async function sg(e,t,n=`resume_latest`,r=`goal`){return ig(`/api/chat/sessions`,{method:`POST`,body:JSON.stringify({goal_id:e,agent_id:t,mode:n,context_kind:r})})}async function cg(e){return ig(`/api/chat/sessions/${e}`)}async function lg(e){let t=new URLSearchParams;return e.agentId&&t.set(`agent_id`,e.agentId),e.channelId&&t.set(`channel_id`,e.channelId),e.goalId&&t.set(`goal_id`,e.goalId),ig(`/api/chat/sessions?${t.toString()}`)}function ug(e){let t=new Map;for(let n of e)for(let e of n.messages)t.set(e.message_id,e);return[...t.values()].sort((e,t)=>e.created_at.localeCompare(t.created_at)||e.message_id.localeCompare(t.message_id))}async function dg(e){let t=await lg(e),n=await Promise.all(t.sessions.map(e=>cg(e.session_id)));return{messages:ug(n),sessions:t.sessions,snapshots:n}}async function fg(e,t,n,r=[]){return ig(`/api/chat/sessions/${e}/turns`,{method:`POST`,body:JSON.stringify({message:t,client_turn_id:n,...r.length?{attachments:r.map(e=>({data_url:e.dataUrl,id:e.id,mime_type:e.mimeType,name:e.name,size:e.size}))}:{}})})}function pg(e){let t=e.split(` -`).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(` -`);if(!t)return null;try{let e=JSON.parse(t);return!e.kind||!e.payload||typeof e.payload!=`object`?null:{event_id:String(e.event_id??``),sequence:Number(e.sequence??0),kind:String(e.kind),created_at:String(e.created_at??``),payload:e.payload}}catch{return null}}async function mg(e,t,n){let r=``,i=0,a=!1;for(;!a&&i<4;){let o=typeof window>`u`?`http://127.0.0.1`:window.location.origin,s=new URL(Mh(e),o);r&&s.searchParams.set(`after`,r);try{let e=await fetch(s,{cache:`no-store`,headers:{Accept:`text/event-stream`},signal:n});if(!e.ok||!e.body)throw new qh(`SSE HTTP ${e.status}`,{status:e.status});let o=e.body.getReader(),c=new TextDecoder,l=``;for(;;){let{done:e,value:n}=await o.read();l+=c.decode(n,{stream:!e}).replaceAll(`\r -`,` -`);let i=l.indexOf(` - -`);for(;i>=0;){let e=l.slice(0,i);l=l.slice(i+2);let n=pg(e);n&&(n.event_id&&(r=n.event_id),t(n),a=[`turn.completed`,`turn.interrupted`,`turn.failed`].includes(n.kind)),i=l.indexOf(` - -`)}if(e||a)break}i=a?i:i+1}catch(e){if(n?.aborted||(i+=1,i>=4))throw e;await new Promise(e=>globalThis.setTimeout(e,250*2**(i-1)))}}if(!a)throw new qh(`Agent 事件流连接已断开。`,{reconnect_attempts:i})}async function hg(e,t){return ig(`/api/chat/sessions/${e}/turns/${t}/interrupt`,{method:`POST`,body:`{}`})}function gg(e){return ig(`/api/chat/sessions/${e}/loopx`)}function _g(e,t){return ig(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`read`,operation_id:t})})}function vg(e,t){return e.status===`unavailable`?t?`无法核验`:`Unavailable`:e.status===`accepted`?t?`已通过当前验收`:`Currently accepted`:e.status===`rejected`?t?`未通过验收`:`Rejected`:e.recovery_required?t?`需要恢复原执行`:`Original execution needs recovery`:e.status===`running`&&e.worker_active?t?`执行中`:`Executing`:e.status===`turn_returned`&&e.worker_active?t?`正在验收`:`Validating`:[`prepared`,`running`,`turn_returned`].includes(e.status)?t?`已派发,等待执行回读`:`Dispatched; awaiting execution readback`:t?`状态未知`:`Unknown state`}function yg(e,t){return ig(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`operations`,limit:10,...t?{cursor:t}:{}})})}function bg(e,t){return ig(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`inspect`,binding_id:t})})}function xg(e,t,n,r=crypto.randomUUID()){return ig(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:t,operation_id:r,...n?{settings:n}:{}})})}function Sg(e,t,n,r=crypto.randomUUID()){return ig(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`message`,operation_id:r,message:t,delivery_mode:n})})}async function Cg(e,t,n={}){let r=await fg(e,t,n.clientTurnId??crypto.randomUUID(),n.attachments);return n.onPhase?.(`turn.accepted`,r.turn_id),wg(e,r.turn_id,r.events_url,n)}async function wg(e,t,n,r={}){let i=null,a={failure:null,interrupted:null};try{await mg(n,e=>{r.onPhase?.(e.kind,t),(e.kind===`answer.delta`||e.kind===`assistant.delta`)&&r.onDelta?.(String(e.payload.text??``)),e.kind===`agent.phase`&&r.onActivity?.(String(e.payload.label??`Agent 正在处理`)),e.kind===`turn.completed`&&(i=e.payload.response),e.kind===`turn.failed`&&(a.failure=e.payload),e.kind===`turn.interrupted`&&(a.interrupted=e.payload)},r.signal)}catch(i){throw i instanceof qh&&!r.signal?.aborted?new qh(i.message,{...i.payload,events_url:n,reconnectable:!0,session_id:e,turn_id:t}):i}if(a.failure)throw new qh(String(a.failure.message||`Agent 回合失败。`),a.failure);if(a.interrupted)throw new qh(`Agent 回合已中断。`,{...a.interrupted,error_code:`turn_interrupted`,session_id:e,turn_id:t});return{response:Bh.parse(i),sessionId:e,turnId:t}}async function Tg(e,t,n={}){return wg(e,t,`/api/chat/sessions/${e}/turns/${t}/events`,n)}async function Eg(e){let t=Vh.parse(await ig(`/api/chat/sessions/${e}`,{keepalive:!0,method:`DELETE`}));if(t.session_id!==e)throw new qh(`Agent 会话关闭回执与本次请求不一致。`,{session_id:t.session_id});return t}async function Dg(e){return ig(`/api/chat/sessions/${e}/resume`,{method:`POST`,body:`{}`})}function Og(e){return{goal_id:e.goalId,enabled:e.enabled,align_codex_host_capacity:e.alignCodexHostCapacity??!1,...e.modelConfig===void 0?{}:{model_config:e.modelConfig},...e.executionConfig===void 0?{}:{execution_config:e.executionConfig},...e.enabled?{max_children:e.maxChildren,allowed_domains:e.allowedDomains}:{}}}function kg(e,t){let n=e.after.orchestration,r=[...new Set(t.allowedDomains)],i=e.feature_summary.multi_subagent===`enabled`,a=e.goal_id===t.goalId&&i===t.enabled&&(t.modelConfig===void 0||JSON.stringify(n.model_config??null)===JSON.stringify(t.modelConfig))&&(t.executionConfig===void 0||(n.execution_config??``)===t.executionConfig)&&(t.enabled?n.max_children===t.maxChildren&&JSON.stringify(n.allowed_domains)===JSON.stringify(r):n.spawn_allowed===!1&&n.max_children===0),o=!t.alignCodexHostCapacity||!t.enabled||e.codex_host_capacity.required_children===t.maxChildren;if(!a||!o)throw new qh(`Goal 子代理配置回执与本次请求不一致,界面已停止更新。`,{after:e.after,goal_id:e.goal_id});return e}async function Ag(e){let t=Gh.parse(await ig(`/api/chat/goal-subagents/dry-run`,{method:`POST`,body:JSON.stringify(Og(e))}));if(!t.dry_run||t.execute||t.written)throw new qh(`Goal 子代理预览返回了非预览回执,已停止进入确认状态。`,{result:t});return kg(t,e)}async function jg(e,t){let n=Gh.parse(await ig(`/api/chat/goal-subagents/apply`,{method:`POST`,body:JSON.stringify({...Og(e),preview_id:t})}));if(n.preview_id!==t||n.dry_run||!n.execute)throw new qh(`Goal 子代理写入回执与本次确认不一致,界面已停止更新。`,{result:n});if(n.changed&&(!n.written||n.goal_configuration_changed&&(!n.global_sync.executed||!n.global_sync.readback.verified)||e.alignCodexHostCapacity&&n.codex_host_capacity.write_required&&!n.codex_host_capacity.written))throw new qh(`Goal 子代理设置未通过共享状态读回验证。`,{result:n});return kg(n,e)}var Mg=J({ok:X(!0),targets:q(J({enabled:K(),provider:W(),target_name:W()}))});async function Ng(){return Mg.parse(await ig(`/api/chat/goal-channel/targets`)).targets}var Pg=J({ok:K(),blocker:W().optional(),public_summary:W().optional(),status:W().optional()});async function Fg(e){return Pg.parse(await ig(`/api/chat/goal-channel/setup`,{method:`POST`,body:JSON.stringify({execute:e.execute,goal_id:e.goalId,target:e.target})}))}async function Ig(e){return Pg.parse(await ig(`/api/chat/goal-channel/configure`,{method:`POST`,body:JSON.stringify({auto_notify_human_gates:e.autoNotify,goal_id:e.goalId})}))}var Lg=J({schema_version:X(`periodic_report_schedule_v0`),schedule_id:W(),rrule:W(),timezone:W()});J({schema_version:X(`periodic_report_machine_defaults_v0`),enabled:K(),inheritance:X(`live_machine_default`),profile_preset:W().optional(),route_ref:W().optional(),timezone:W(),schedule:Lg.nullable().optional()});var Rg=J({schema_version:X(`loopx_machine_configuration_v0`),namespaces:yd(W(),yd(W(),ad()))}),zg=J({namespace:W(),title:W(),description:W(),schema_versions:q(W()).min(1),configuration_template:yd(W(),ad()),template_status:Y([`ready`,`schema_only`])}),Bg=J({schema_version:X(`machine_configuration_catalog_v0`),namespaces:q(zg)}),Vg=J({key:W(),label:W(),description:W(),input_kind:Y([`boolean`,`number`,`select`,`string_list`,`text`,`periodic_report_schedule`]),nullable:K().optional(),required:K(),minimum:G().int().optional(),maximum:G().int().optional(),options:q(W()).optional()}),Hg=J({schema_version:X(`capability_configuration_editor_v0`),editable:K(),supported_scopes:q(Y([`goal`,`machine`])),writable_scopes:q(Y([`goal`,`machine`])),fields:q(Vg),read_only_reason:W().optional()}),Ug=J({schema_version:X(`capability_configuration_catalog_v0`),capabilities:q(J({capability_id:W(),display_name:W(),description:W(),available_scopes:q(Y([`goal`,`machine`])),machine_namespace:W().optional(),goal_feature_id:W().optional(),effective_value_policy:X(`goal_override_over_live_machine_default`).optional(),availability:W().optional(),default:yd(W(),ad()).optional(),current:yd(W(),ad()).optional(),machine_current:yd(W(),ad()).optional(),effective_configuration:J({schema_version:X(`capability_configuration_resolution_v0`),capability_id:W(),source:Y([`goal_override`,`machine_default`,`capability_default`,`not_configured`]),configuration:yd(W(),ad()).nullable(),inherited:K(),goal_override_present:K(),machine_default_present:K(),effective_revision:W()}).optional(),documentation:yd(W(),ad()).optional(),context_contribution:J({supported_phases:q(Y([`before_plan`,`before_delegate`,`after_delegate_result`])),target:X(`coordinator`),activation:X(`with_capability`),receipt_required:X(!0)}).optional(),configuration_editor:Hg}))}),Wg=J({ok:X(!0),schema_version:X(`goal_configuration_inspection_v0`),status:X(`configured`),goal_id:W(),revision:W(),available_capabilities:q(W()),capability_catalog:Ug}),Gg=J({ok:X(!0),goal_id:W(),capability_id:W(),changed_fields:q(W()),goal_configuration:yd(W(),ad()).nullable(),capability_catalog:Ug,codex_host_capacity:Wh.optional()}),Kg=Gg.extend({schema_version:X(`goal_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),base_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative()}),qg=dd([Gg.extend({schema_version:X(`goal_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),applied_revision:W(),readback_verified:X(!0)}),J({ok:X(!1),schema_version:X(`goal_configuration_transaction_v0`),status:X(`partial_write`),goal_id:W(),capability_id:W(),plan_revision:W(),applied_revision:W().nullable(),source_written:X(!0),shared_sync_pending:K(),host_capacity_pending:K().optional().default(!1),readback_verified:K(),changed_fields:q(W()),goal_configuration:yd(W(),ad()).nullable(),capability_catalog:Ug,error:W(),recommended_action:W(),codex_host_capacity:Wh.optional()})]),Jg=J({ok:X(!0),available_namespaces:q(W()),namespace_catalog:Bg.optional().default({schema_version:`machine_configuration_catalog_v0`,namespaces:[]}),capability_catalog:Ug,changed_namespaces:q(W()).optional().default([]),invalid_namespaces:q(W()).optional().default([]),machine_configuration:Rg.nullable().optional()}),Yg=Jg.extend({schema_version:X(`machine_configuration_inspection_v0`),status:Y([`configured`,`absent`,`invalid`]),revision:W()}),Xg=Jg.extend({schema_version:X(`machine_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative(),machine_configuration:Rg.nullable()}),Zg=Jg.extend({schema_version:X(`machine_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),transaction_id:W().nullable(),readback_verified:X(!0),rollback_available:K(),applied_revision:W().optional(),prior_revision:W().optional()}),Qg=Jg.extend({schema_version:X(`machine_configuration_rollback_plan_v0`),status:X(`preview`),action:Y([`delete`,`restore`,`unchanged`,`blocked`]),reason:W(),transaction_id:W(),plan_revision:W(),rollback_allowed:K(),writes_required:G().int().nonnegative()}),$g=Jg.extend({schema_version:X(`machine_configuration_rollback_receipt_v0`),status:Y([`rolled_back`,`unchanged`]),transaction_id:W(),plan_revision:W(),rollback_id:W().nullable(),readback_verified:X(!0)}),e_=J({configured:K(),source:Y([`machine_store`,`service_environment`,`unset`]),env_var:W().optional(),fingerprint:W().nullable().optional(),value:W().nullable().optional(),blocked_by:W().optional()}),t_=J({ok:X(!0),schema_version:X(`operator_provider_credential_projection_v0`),action:W().optional(),store_ref:W(),store_revision:W(),record_present:K(),status:Y([`configured`,`absent`,`invalid`]),repair:W(),provider_key:e_,base_url:e_});async function n_(){return t_.parse(await ig(`/api/chat/operator-credential`))}async function r_(e){return t_.parse(await ig(`/api/chat/operator-credential`,{method:`POST`,body:JSON.stringify(e)}))}async function i_(){return Yg.parse(await ig(`/api/chat/machine-configuration`))}async function a_(e){let t=new URLSearchParams({goal_id:e});return Wg.parse(await ig(`/api/chat/goal-configuration?${t.toString()}`))}async function o_(e,t,n){return Kg.parse(await ig(`/api/chat/goal-configuration/preview`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n})}))}async function s_(e,t,n,r){return qg.parse(await ig(`/api/chat/goal-configuration/apply`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n,expected_plan_revision:r})}))}async function c_(e,t){return Xg.parse(await ig(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,namespace_configuration:t})}))}async function l_(e,t,n){return Zg.parse(await ig(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:n,namespace:e,namespace_configuration:t})}))}async function u_(e){return Xg.parse(await ig(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,operation:`remove`})}))}async function d_(e,t){return Zg.parse(await ig(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:t,namespace:e,operation:`remove`})}))}async function f_(e){return Qg.parse(await ig(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!1,transaction_id:e})}))}async function p_(e,t){return $g.parse(await ig(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!0,expected_plan_revision:t,transaction_id:e})}))}var m_=J({ok:X(!0),goals:q(J({goal_id:W(),repository:J({branch:W(),identity:W(),label:W(),read_only:X(!0)})}))});async function h_(){return m_.parse(await ig(`/api/chat/goals/contexts`)).goals}var g_=J({ok:X(!0),apps:q(J({active:K(),app_ref:W(),brand:W(),health_error_code:W().nullable().default(null),label:W(),ready:K(),reply_ready:K().default(!1)}))});async function __(){return g_.parse(await ig(`/api/chat/lark/apps`)).apps}var v_=J({ok:X(!0),app_ref:W(),error:W().nullable(),setup_id:W(),status:Y([`starting`,`waiting_for_feishu`,`ready`,`failed`,`cancelled`]),verification_url:W().url().nullable()});async function y_(e){return v_.parse(await ig(`/api/chat/lark/app-setups`,{method:`POST`,body:JSON.stringify({app_ref:e.appRef,brand:e.brand})}))}async function b_(e){return v_.parse(await ig(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`))}async function x_(e){return v_.parse(await ig(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`,{method:`DELETE`}))}var S_=[`invalid_event`,`binding_unavailable`,`chat_mismatch`,`topic_mismatch`,`route_ambiguous`,`self_message`,`invalid_routing_state`,`not_addressed`],C_=J({ok:X(!0),chats:q(J({chat_id:W(),chat_name:W()}))});async function w_(e,t){let n=new URLSearchParams({app_ref:e});return t&&n.set(`query`,t),C_.parse(await ig(`/api/chat/lark/chats?${n.toString()}`)).chats}var T_=J({ok:X(!0),connections:q(J({conversation_kind:Y([`goal`,`manager`]).default(`goal`),agent_id:W().nullable().default(null),connection_id:W(),app_label:W(),app_ref:W(),capture_scope:Y([`addressed_only`,`configured_chat_all`]).default(`addressed_only`),chat_name:W(),enabled:K(),goal_id:W(),goal_title:W(),health_error_code:W().nullable().default(null),history_permission_guidance:J({action:X(`enable_application_scopes_and_publish`),api_document_url:W().url(),capability:X(`group_history_pagination`),identity:X(`bot`),required_scopes:_d([X(`im:message.group_msg`),X(`im:message.group_msg.include_bot:read`)]),schema_version:X(`lark_bot_group_history_permission_guidance_v0`)}).nullable().default(null),incoming_mode:Y([`mentions`,`all`]),ingress_mode:Y([`live_steering`,`session_queue`,`async_inbox`,`direct_session`]).default(`async_inbox`),event_count:G().int().nonnegative().default(0),last_event_reason:Y(S_).nullable().default(null).catch(null),last_event_status:W().nullable().default(null),listener_error_code:W().nullable().default(null),listener_status:Y([`starting`,`listening`,`retrying`,`stopped`]).nullable().default(null),replied_count:G().int().nonnegative().default(0),reply_ready:K().default(!1),reply_mode:X(`topic_reply`),session_bound:K().default(!1),target_ref:W(),topic_name:W(),topic_setup_required:K()}))});async function E_(){return T_.parse(await ig(`/api/chat/lark/connections`)).connections}async function D_(e){return Pg.parse(await ig(`/api/chat/lark/connections`,{method:`POST`,body:JSON.stringify({...e.agentBindings?{agent_bindings:e.agentBindings.map(e=>({agent_id:e.agentId,app_ref:e.appRef}))}:{},...e.agentId?{agent_id:e.agentId}:{},...e.appRef?{app_ref:e.appRef}:{},...e.connectionId?{connection_id:e.connectionId}:{},conversation_kind:e.conversationKind??`goal`,capture_scope:e.captureScope,chat_id:e.chatId,chat_name:e.chatName,execute:e.execute,goal_id:e.goalId,incoming_mode:e.incomingMode,ingress_mode:e.ingressMode,reply_mode:e.replyMode})}))}async function O_(e,t){let n=new URLSearchParams({goal_id:e,connection_id:t});return Pg.parse(await ig(`/api/chat/lark/connections?${n.toString()}`,{method:`DELETE`}))}function k_(e){return{loadedUrl:null,projectionRevision:0,requestedUrl:e,selectionRevision:0,requestGeneration:0}}function A_(e,t){return e.selectionRevision+=1,e.requestedUrl=t,e.selectionRevision}function j_(e,t,n){if(n.background)return e.requestedUrl!==null||e.loadedUrl!==t?null:(e.requestGeneration+=1,{background:!0,projectionRevision:e.projectionRevision,selectionRevision:e.selectionRevision,url:t,generation:e.requestGeneration});let r=n.selectionRevision??e.selectionRevision+1;return n.selectionRevision!==void 0&&e.selectionRevision!==r?null:(e.selectionRevision=r,e.projectionRevision+=1,e.requestedUrl=t,e.requestGeneration+=1,{background:!1,projectionRevision:e.projectionRevision,selectionRevision:r,url:t,generation:e.requestGeneration})}function M_(e,t){return t.generation===e.requestGeneration&&e.projectionRevision===t.projectionRevision&&e.selectionRevision===t.selectionRevision}function N_(e,t){return M_(e,t)&&(!t.background||e.requestedUrl===null&&e.loadedUrl===t.url)}function P_(e,t,n){return t.get(e)===n}function F_(e,t,n,r){return e.filter(e=>P_(r(e),n,t))}function I_(e,t,n){let r=new Set,i=[];for(let a of[...e,...t]){let e=n(a);e==null||r.has(e)||(r.add(e),i.push(a))}return i}var L_=[`runs_24h`,`runs_7d`,`quota_spend_slots_24h`,`quota_spend_slots_7d`,`automation_run_count_24h`,`automation_run_count_7d`,`progress_signal_run_count_24h`,`progress_signal_run_count_7d`],R_=[`input_tokens_24h`,`input_tokens_7d`,`output_tokens_24h`,`output_tokens_7d`,`cache_tokens_24h`,`cache_tokens_7d`,`cost_usd_24h`,`cost_usd_7d`,`duration_ms_24h`,`duration_ms_7d`],z_=[`accounting`,`decision`,`evidence`,`state`,`work`],B_={accounting:0,decision:0,evidence:0,state:0,work:0},V_={runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0};function H_(e,t){let n={...e};for(let r of L_)n[r]=(Number(e[r])||0)+(Number(t[r])||0);for(let r of R_)(e[r]!==void 0||t[r]!==void 0)&&(n[r]=(e[r]??0)+(t[r]??0));return n}function U_(e,t){return!e.length||t<=0?e:e.map(e=>({...e,project_share_24h:Math.round((Number(e.runs_24h)||0)/t*1e3)/1e3}))}function W_(e,t){let n={...e};for(let r of z_)n[r]=(e[r]??0)+(t[r]??0);return n}function G_(e){let t={events_24h:0,events_7d:0,by_class_24h:{...B_},by_class_7d:{...B_}};for(let n of e)t.events_24h+=n.events_24h,t.events_7d+=n.events_7d,t.by_class_24h=W_(t.by_class_24h,n.by_class_24h),t.by_class_7d=W_(t.by_class_7d,n.by_class_7d);return t}function K_(e,t,n){if(!e&&!t)return null;let r=F_(e?.goals??[],`active`,n,e=>e.goal_id),i=F_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=I_(r,i,e=>e.goal_id),o=G_(r),s=G_(i),c={events_24h:o.events_24h+s.events_24h,events_7d:o.events_7d+s.events_7d,by_class_24h:W_(o.by_class_24h,s.by_class_24h),by_class_7d:W_(o.by_class_7d,s.by_class_7d)};return{...e??t,goals:a,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:c}}function q_(e,t,n){if(!e&&!t)return null;let r=I_([...F_(e?.items??[],`active`,n,e=>e.goal_id),...F_(t?.items??[],`stopped`,n,e=>e.goal_id)],[],e=>`${e.goal_id}:${e.decision_kind??``}:${e.decision_at??``}`),i={decision_count:(e?.summary.decision_count??0)+(t?.summary.decision_count??0),stale_count:r.filter(e=>e.stale_by_age).length,rebase_required_count:(e?.summary.rebase_required_count??0)+(t?.summary.rebase_required_count??0),fresh_count:(e?.summary.fresh_count??0)+(t?.summary.fresh_count??0)};return{...e??t,items:r,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),summary:i}}function J_(e,t){return I_([...e,...t].sort((e,t)=>t.generated_at.localeCompare(e.generated_at)),[],e=>`${e.goal_id}:${e.generated_at}:${e.classification??``}`)}function Y_(e,t,n){let r=I_(F_(e.items,`active`,n,e=>e.goal_id),F_(t.items,`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e,item_count:r.length,items:r,needs_controller:r.filter(e=>e.waiting_on===`controller`).length,needs_codex:r.filter(e=>e.waiting_on===`codex`).length,needs_user_or_controller:r.filter(e=>[`user_or_controller`,`controller`].includes(e.waiting_on)).length,watching_external_evidence:r.filter(e=>e.waiting_on===`external_evidence`).length}}function X_(e){let t=e.todo_id?.trim()||``;return t?`${e.goal_id}:${t}`:`${e.goal_id}:synthetic:${e.role??``}:${e.index??``}:${e.text??``}`}function Z_(e){let t={...V_};for(let n of e){for(let e of L_)t[e]+=Number(n[e])||0;for(let e of R_)n[e]!==void 0&&(t[e]=(t[e]??0)+n[e])}return t}function Q_(e,t,n){if(!e&&!t)return null;let r=F_(e?.items??[],`active`,n,e=>e.goal_id),i=F_(t?.items??[],`stopped`,n,e=>e.goal_id),a=I_(r,i,X_);return{...e??t,current_projected_count:r.length+i.length,items:a,rollout_event_count:a.reduce((e,t)=>e+(t.event_count??0),0),total_count:a.length}}function $_(e,t,n){if(!e&&!t)return null;let r=F_(e?.goals??[],`active`,n,e=>e.goal_id),i=F_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=I_(r,i,e=>e.goal_id),o=H_(Z_(r),Z_(i));return{...e??t,goals:U_(a,Number(o.runs_24h)||0),sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:o}}function ev(e,t,n){if(!e&&!t)return null;let r=(e?.agents??[]).filter(e=>e.goal_ids.some(e=>P_(e,n,`active`))||(e.current_todo?.goal_id?P_(e.current_todo.goal_id,n,`active`):!1)),i=(t?.agents??[]).filter(e=>e.goal_ids.some(e=>P_(e,n,`stopped`))||(e.current_todo?.goal_id?P_(e.current_todo.goal_id,n,`stopped`):!1)),a=I_(r,i,e=>e.agent_id).map(e=>{let t=i.find(t=>t.agent_id===e.agent_id);return t?{...e,goal_ids:Array.from(new Set([...e.goal_ids??[],...t.goal_ids]))}:e});return{...e??t,agents:a,source_summary:(e??t)?.source_summary?{...(e??t).source_summary,projected_agent_count:a.length,registered_agent_count:new Set(a.map(e=>e.agent_id)).size}:(e??t)?.source_summary}}function tv(e,t,n){if(!e&&!t)return null;let r=I_(F_(e?.goals??[],`active`,n,e=>e.goal_id),F_(t?.goals??[],`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e??t,goals:r}}function nv(e,t){let n=t.goal_projection?.scope;if(n!==`active`&&n!==`stopped`)return t;let r=n,i=t.run_history.goals,a=e.run_history.goals,o=I_(r===`active`?i:a.filter(e=>e.activation_state!==`stopped`),r===`stopped`?i:a.filter(e=>e.activation_state===`stopped`),e=>e.id),s=new Map(o.map(e=>[e.id,e.activation_state])),c=r===`active`?t:e,l=r===`stopped`?t:e,u=e.goal_projection?.registry_revision??null,d=t.goal_projection?.registry_revision??null,f=u===null||d===null||u===d;return{...e,agent_management_projection:ev(c.agent_management_projection,l.agent_management_projection,s),attention_queue:Y_(c.attention_queue,l.attention_queue,s),decision_freshness_summary:q_(c.decision_freshness_summary,l.decision_freshness_summary,s),event_ledger_summary:K_(c.event_ledger_summary,l.event_ledger_summary,s),goal_channel_notification_projection:tv(c.goal_channel_notification_projection,l.goal_channel_notification_projection,s),goal_projection:{schema_version:`loopx_goal_projection_scope_v0`,...t.goal_projection,complete:f,projected_goal_count:o.length,registry_goal_count:t.goal_projection?.registry_goal_count??0,scope:`all`},run_history:{...e.run_history,goal_count:o.length,goals:o,recent_runs:J_(c.run_history.recent_runs,l.run_history.recent_runs),run_count:c.run_history.run_count+l.run_history.run_count},todo_index:Q_(c.todo_index,l.todo_index,s),usage_summary:$_(c.usage_summary,l.usage_summary,s)}}function rv(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;ttypeof e==`boolean`?`${e}`:e===0?`0`:e,ov=iv,sv=(e,t)=>n=>{if(t?.variants==null)return ov(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=av(t)||av(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return ov(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},cv=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),uv=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),dv=`-`,fv=[],pv=`arbitrary..`,mv=e=>{let t=_v(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return gv(e);let n=e.split(dv);return hv(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?cv(i,t):t:i||fv}return n[e]||fv}}},hv=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=hv(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(dv):e.slice(t).join(dv),s=a.length;for(let e=0;ee.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?pv+r:void 0})(),_v=e=>{let{theme:t,classGroups:n}=e;return vv(n,t)},vv=(e,t)=>{let n=uv();for(let r in e){let i=e[r];yv(i,n,r,t)}return n},yv=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){xv(e,t,n);return}if(typeof e==`function`){Sv(e,t,n,r);return}Cv(e,t,n,r)},xv=(e,t,n)=>{let r=e===``?t:wv(t,e);r.classGroupId=n},Sv=(e,t,n,r)=>{if(Tv(e)){yv(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(lv(n,e))},Cv=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(dv),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,Ev=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},Dv=`!`,Ov=`:`,kv=[],Av=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),jv=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return Av(t,l,c,u)};if(t){let e=t+Ov,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):Av(kv,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},Mv=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},Nv=e=>({cache:Ev(e.cacheSize),parseClassName:jv(e),sortModifiers:Mv(e),postfixLookupClassGroupIds:Pv(e),...mv(e)}),Pv=e=>{let t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let e=0;e{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(Fv),l=``;for(let e=c.length-1;e>=0;--e){let t=c[e],{isExternal:u,modifiers:d,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:m}=n(t);if(u){l=t+(l.length>0?` `+l:l);continue}let h=!!m,g;if(h){g=r(p.substring(0,m));let e=g&&o[g]?r(p):void 0;e&&e!==g&&(g=e,h=!1)}else g=r(p);if(!g){if(!h){l=t+(l.length>0?` `+l:l);continue}if(g=r(p),!g){l=t+(l.length>0?` `+l:l);continue}h=!1}let _=d.length===0?``:d.length===1?d[0]:a(d).join(`:`),v=f?_+Dv:_,y=v+g;if(s.indexOf(y)>-1)continue;s.push(y);let b=i(g,h);for(let e=0;e0?` `+l:l)}return l},Lv=(...e)=>{let t=0,n,r,i=``;for(;t{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r{let n,r,i,a,o=o=>(n=Nv(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=Iv(e,n);return i(e,a),a};return a=o,(...e)=>a(Lv(...e))},Bv=[],Vv=e=>{let t=t=>t[e]||Bv;return t.isThemeGetter=!0,t},Hv=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Uv=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Wv=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,Gv=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Kv=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,qv=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Jv=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Yv=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Xv=e=>Wv.test(e),Zv=e=>!!e&&!Number.isNaN(Number(e)),Qv=e=>!!e&&Number.isInteger(Number(e)),$v=e=>e.endsWith(`%`)&&Zv(e.slice(0,-1)),ey=e=>Gv.test(e),ty=()=>!0,ny=e=>Kv.test(e)&&!qv.test(e),ry=()=>!1,iy=e=>Jv.test(e),ay=e=>Yv.test(e),oy=e=>!Q(e)&&!$(e),sy=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),cy=e=>Cy(e,Dy,ry),Q=e=>Hv.test(e),ly=e=>Cy(e,Oy,ny),uy=e=>Cy(e,ky,Zv),dy=e=>Cy(e,jy,ty),fy=e=>Cy(e,Ay,ry),py=e=>Cy(e,Ty,ry),my=e=>Cy(e,Ey,ay),hy=e=>Cy(e,My,iy),$=e=>Uv.test(e),gy=e=>wy(e,Oy),_y=e=>wy(e,Ay),vy=e=>wy(e,Ty),yy=e=>wy(e,Dy),by=e=>wy(e,Ey),xy=e=>wy(e,My,!0),Sy=e=>wy(e,jy,!0),Cy=(e,t,n)=>{let r=Hv.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},wy=(e,t,n=!1)=>{let r=Uv.exec(e);return r?r[1]?t(r[1]):n:!1},Ty=e=>e===`position`||e===`percentage`,Ey=e=>e===`image`||e===`url`,Dy=e=>e===`length`||e===`size`||e===`bg-size`,Oy=e=>e===`length`,ky=e=>e===`number`,Ay=e=>e===`family-name`,jy=e=>e===`number`||e===`weight`,My=e=>e===`shadow`,Ny=zv(()=>{let e=Vv(`color`),t=Vv(`font`),n=Vv(`text`),r=Vv(`font-weight`),i=Vv(`tracking`),a=Vv(`leading`),o=Vv(`breakpoint`),s=Vv(`container`),c=Vv(`spacing`),l=Vv(`radius`),u=Vv(`shadow`),d=Vv(`inset-shadow`),f=Vv(`text-shadow`),p=Vv(`drop-shadow`),m=Vv(`blur`),h=Vv(`perspective`),g=Vv(`aspect`),_=Vv(`ease`),v=Vv(`animate`),y=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],b=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],x=()=>[...b(),$,Q],S=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],C=()=>[`auto`,`contain`,`none`],w=()=>[$,Q,c],T=()=>[Xv,`full`,`auto`,...w()],E=()=>[Qv,`none`,`subgrid`,$,Q],D=()=>[`auto`,{span:[`full`,Qv,$,Q]},Qv,$,Q],O=()=>[Qv,`auto`,$,Q],k=()=>[`auto`,`min`,`max`,`fr`,$,Q],A=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],ee=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],j=()=>[`auto`,...w()],M=()=>[Xv,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],te=()=>[Xv,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...w()],ne=()=>[Xv,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...w()],N=()=>[e,$,Q],P=()=>[...b(),vy,py,{position:[$,Q]}],re=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ie=()=>[`auto`,`cover`,`contain`,yy,cy,{size:[$,Q]}],ae=()=>[$v,gy,ly],F=()=>[``,`none`,`full`,l,$,Q],oe=()=>[``,Zv,gy,ly],I=()=>[`solid`,`dashed`,`dotted`,`double`],se=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],L=()=>[Zv,$v,vy,py],ce=()=>[``,`none`,m,$,Q],le=()=>[`none`,Zv,$,Q],ue=()=>[`none`,Zv,$,Q],de=()=>[Zv,$,Q],fe=()=>[Xv,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[ey],breakpoint:[ey],color:[ty],container:[ey],"drop-shadow":[ey],ease:[`in`,`out`,`in-out`],font:[oy],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[ey],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[ey],shadow:[ey],spacing:[`px`,Zv],text:[ey],"text-shadow":[ey],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,Xv,Q,$,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,$,Q]}],"container-named":[sy],columns:[{columns:[Zv,Q,$,s]}],"break-after":[{"break-after":y()}],"break-before":[{"break-before":y()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:x()}],overflow:[{overflow:S()}],"overflow-x":[{"overflow-x":S()}],"overflow-y":[{"overflow-y":S()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:T()}],"inset-x":[{"inset-x":T()}],"inset-y":[{"inset-y":T()}],start:[{"inset-s":T(),start:T()}],end:[{"inset-e":T(),end:T()}],"inset-bs":[{"inset-bs":T()}],"inset-be":[{"inset-be":T()}],top:[{top:T()}],right:[{right:T()}],bottom:[{bottom:T()}],left:[{left:T()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[Qv,`auto`,$,Q]}],basis:[{basis:[Xv,`full`,`auto`,s,...w()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[Zv,Xv,`auto`,`initial`,`none`,Q]}],grow:[{grow:[``,Zv,$,Q]}],shrink:[{shrink:[``,Zv,$,Q]}],order:[{order:[Qv,`first`,`last`,`none`,$,Q]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:D()}],"col-start":[{"col-start":O()}],"col-end":[{"col-end":O()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:D()}],"row-start":[{"row-start":O()}],"row-end":[{"row-end":O()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":k()}],"auto-rows":[{"auto-rows":k()}],gap:[{gap:w()}],"gap-x":[{"gap-x":w()}],"gap-y":[{"gap-y":w()}],"justify-content":[{justify:[...A(),`normal`]}],"justify-items":[{"justify-items":[...ee(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...ee()]}],"align-content":[{content:[`normal`,...A()]}],"align-items":[{items:[...ee(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...ee(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":A()}],"place-items":[{"place-items":[...ee(),`baseline`]}],"place-self":[{"place-self":[`auto`,...ee()]}],p:[{p:w()}],px:[{px:w()}],py:[{py:w()}],ps:[{ps:w()}],pe:[{pe:w()}],pbs:[{pbs:w()}],pbe:[{pbe:w()}],pt:[{pt:w()}],pr:[{pr:w()}],pb:[{pb:w()}],pl:[{pl:w()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mbs:[{mbs:j()}],mbe:[{mbe:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":w()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":w()}],"space-y-reverse":[`space-y-reverse`],size:[{size:M()}],"inline-size":[{inline:[`auto`,...te()]}],"min-inline-size":[{"min-inline":[`auto`,...te()]}],"max-inline-size":[{"max-inline":[`none`,...te()]}],"block-size":[{block:[`auto`,...ne()]}],"min-block-size":[{"min-block":[`auto`,...ne()]}],"max-block-size":[{"max-block":[`none`,...ne()]}],w:[{w:[s,`screen`,...M()]}],"min-w":[{"min-w":[s,`screen`,`none`,...M()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...M()]}],h:[{h:[`screen`,`lh`,...M()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...M()]}],"max-h":[{"max-h":[`screen`,`lh`,...M()]}],"font-size":[{text:[`base`,n,gy,ly]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,Sy,dy]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,$v,Q]}],"font-family":[{font:[_y,fy,t]}],"font-features":[{"font-features":[Q]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,$,Q]}],"line-clamp":[{"line-clamp":[Zv,`none`,$,uy]}],leading:[{leading:[a,...w()]}],"list-image":[{"list-image":[`none`,$,Q]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,$,Q]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:N()}],"text-color":[{text:N()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...I(),`wavy`]}],"text-decoration-thickness":[{decoration:[Zv,`from-font`,`auto`,$,ly]}],"text-decoration-color":[{decoration:N()}],"underline-offset":[{"underline-offset":[Zv,`auto`,$,Q]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:w()}],"tab-size":[{tab:[Qv,$,Q]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,$,Q]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,$,Q]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:P()}],"bg-repeat":[{bg:re()}],"bg-size":[{bg:ie()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},Qv,$,Q],radial:[``,$,Q],conic:[Qv,$,Q]},by,my]}],"bg-color":[{bg:N()}],"gradient-from-pos":[{from:ae()}],"gradient-via-pos":[{via:ae()}],"gradient-to-pos":[{to:ae()}],"gradient-from":[{from:N()}],"gradient-via":[{via:N()}],"gradient-to":[{to:N()}],rounded:[{rounded:F()}],"rounded-s":[{"rounded-s":F()}],"rounded-e":[{"rounded-e":F()}],"rounded-t":[{"rounded-t":F()}],"rounded-r":[{"rounded-r":F()}],"rounded-b":[{"rounded-b":F()}],"rounded-l":[{"rounded-l":F()}],"rounded-ss":[{"rounded-ss":F()}],"rounded-se":[{"rounded-se":F()}],"rounded-ee":[{"rounded-ee":F()}],"rounded-es":[{"rounded-es":F()}],"rounded-tl":[{"rounded-tl":F()}],"rounded-tr":[{"rounded-tr":F()}],"rounded-br":[{"rounded-br":F()}],"rounded-bl":[{"rounded-bl":F()}],"border-w":[{border:oe()}],"border-w-x":[{"border-x":oe()}],"border-w-y":[{"border-y":oe()}],"border-w-s":[{"border-s":oe()}],"border-w-e":[{"border-e":oe()}],"border-w-bs":[{"border-bs":oe()}],"border-w-be":[{"border-be":oe()}],"border-w-t":[{"border-t":oe()}],"border-w-r":[{"border-r":oe()}],"border-w-b":[{"border-b":oe()}],"border-w-l":[{"border-l":oe()}],"divide-x":[{"divide-x":oe()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":oe()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...I(),`hidden`,`none`]}],"divide-style":[{divide:[...I(),`hidden`,`none`]}],"border-color":[{border:N()}],"border-color-x":[{"border-x":N()}],"border-color-y":[{"border-y":N()}],"border-color-s":[{"border-s":N()}],"border-color-e":[{"border-e":N()}],"border-color-bs":[{"border-bs":N()}],"border-color-be":[{"border-be":N()}],"border-color-t":[{"border-t":N()}],"border-color-r":[{"border-r":N()}],"border-color-b":[{"border-b":N()}],"border-color-l":[{"border-l":N()}],"divide-color":[{divide:N()}],"outline-style":[{outline:[...I(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[Zv,$,Q]}],"outline-w":[{outline:[``,Zv,gy,ly]}],"outline-color":[{outline:N()}],shadow:[{shadow:[``,`none`,u,xy,hy]}],"shadow-color":[{shadow:N()}],"inset-shadow":[{"inset-shadow":[`none`,d,xy,hy]}],"inset-shadow-color":[{"inset-shadow":N()}],"ring-w":[{ring:oe()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:N()}],"ring-offset-w":[{"ring-offset":[Zv,ly]}],"ring-offset-color":[{"ring-offset":N()}],"inset-ring-w":[{"inset-ring":oe()}],"inset-ring-color":[{"inset-ring":N()}],"text-shadow":[{"text-shadow":[`none`,f,xy,hy]}],"text-shadow-color":[{"text-shadow":N()}],opacity:[{opacity:[Zv,$,Q]}],"mix-blend":[{"mix-blend":[...se(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":se()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[Zv]}],"mask-image-linear-from-pos":[{"mask-linear-from":L()}],"mask-image-linear-to-pos":[{"mask-linear-to":L()}],"mask-image-linear-from-color":[{"mask-linear-from":N()}],"mask-image-linear-to-color":[{"mask-linear-to":N()}],"mask-image-t-from-pos":[{"mask-t-from":L()}],"mask-image-t-to-pos":[{"mask-t-to":L()}],"mask-image-t-from-color":[{"mask-t-from":N()}],"mask-image-t-to-color":[{"mask-t-to":N()}],"mask-image-r-from-pos":[{"mask-r-from":L()}],"mask-image-r-to-pos":[{"mask-r-to":L()}],"mask-image-r-from-color":[{"mask-r-from":N()}],"mask-image-r-to-color":[{"mask-r-to":N()}],"mask-image-b-from-pos":[{"mask-b-from":L()}],"mask-image-b-to-pos":[{"mask-b-to":L()}],"mask-image-b-from-color":[{"mask-b-from":N()}],"mask-image-b-to-color":[{"mask-b-to":N()}],"mask-image-l-from-pos":[{"mask-l-from":L()}],"mask-image-l-to-pos":[{"mask-l-to":L()}],"mask-image-l-from-color":[{"mask-l-from":N()}],"mask-image-l-to-color":[{"mask-l-to":N()}],"mask-image-x-from-pos":[{"mask-x-from":L()}],"mask-image-x-to-pos":[{"mask-x-to":L()}],"mask-image-x-from-color":[{"mask-x-from":N()}],"mask-image-x-to-color":[{"mask-x-to":N()}],"mask-image-y-from-pos":[{"mask-y-from":L()}],"mask-image-y-to-pos":[{"mask-y-to":L()}],"mask-image-y-from-color":[{"mask-y-from":N()}],"mask-image-y-to-color":[{"mask-y-to":N()}],"mask-image-radial":[{"mask-radial":[$,Q]}],"mask-image-radial-from-pos":[{"mask-radial-from":L()}],"mask-image-radial-to-pos":[{"mask-radial-to":L()}],"mask-image-radial-from-color":[{"mask-radial-from":N()}],"mask-image-radial-to-color":[{"mask-radial-to":N()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":b()}],"mask-image-conic-pos":[{"mask-conic":[Zv]}],"mask-image-conic-from-pos":[{"mask-conic-from":L()}],"mask-image-conic-to-pos":[{"mask-conic-to":L()}],"mask-image-conic-from-color":[{"mask-conic-from":N()}],"mask-image-conic-to-color":[{"mask-conic-to":N()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:P()}],"mask-repeat":[{mask:re()}],"mask-size":[{mask:ie()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,$,Q]}],filter:[{filter:[``,`none`,$,Q]}],blur:[{blur:ce()}],brightness:[{brightness:[Zv,$,Q]}],contrast:[{contrast:[Zv,$,Q]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,xy,hy]}],"drop-shadow-color":[{"drop-shadow":N()}],grayscale:[{grayscale:[``,Zv,$,Q]}],"hue-rotate":[{"hue-rotate":[Zv,$,Q]}],invert:[{invert:[``,Zv,$,Q]}],saturate:[{saturate:[Zv,$,Q]}],sepia:[{sepia:[``,Zv,$,Q]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,$,Q]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[Zv,$,Q]}],"backdrop-contrast":[{"backdrop-contrast":[Zv,$,Q]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,Zv,$,Q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Zv,$,Q]}],"backdrop-invert":[{"backdrop-invert":[``,Zv,$,Q]}],"backdrop-opacity":[{"backdrop-opacity":[Zv,$,Q]}],"backdrop-saturate":[{"backdrop-saturate":[Zv,$,Q]}],"backdrop-sepia":[{"backdrop-sepia":[``,Zv,$,Q]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":w()}],"border-spacing-x":[{"border-spacing-x":w()}],"border-spacing-y":[{"border-spacing-y":w()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,$,Q]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[Zv,`initial`,$,Q]}],ease:[{ease:[`linear`,`initial`,_,$,Q]}],delay:[{delay:[Zv,$,Q]}],animate:[{animate:[`none`,v,$,Q]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,$,Q]}],"perspective-origin":[{"perspective-origin":x()}],rotate:[{rotate:le()}],"rotate-x":[{"rotate-x":le()}],"rotate-y":[{"rotate-y":le()}],"rotate-z":[{"rotate-z":le()}],scale:[{scale:ue()}],"scale-x":[{"scale-x":ue()}],"scale-y":[{"scale-y":ue()}],"scale-z":[{"scale-z":ue()}],"scale-3d":[`scale-3d`],skew:[{skew:de()}],"skew-x":[{"skew-x":de()}],"skew-y":[{"skew-y":de()}],transform:[{transform:[$,Q,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:x()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:fe()}],"translate-x":[{"translate-x":fe()}],"translate-y":[{"translate-y":fe()}],"translate-z":[{"translate-z":fe()}],"translate-none":[`translate-none`],zoom:[{zoom:[Qv,$,Q]}],accent:[{accent:N()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:N()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,$,Q]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scrollbar-thumb-color":[{"scrollbar-thumb":N()}],"scrollbar-track-color":[{"scrollbar-track":N()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":w()}],"scroll-mx":[{"scroll-mx":w()}],"scroll-my":[{"scroll-my":w()}],"scroll-ms":[{"scroll-ms":w()}],"scroll-me":[{"scroll-me":w()}],"scroll-mbs":[{"scroll-mbs":w()}],"scroll-mbe":[{"scroll-mbe":w()}],"scroll-mt":[{"scroll-mt":w()}],"scroll-mr":[{"scroll-mr":w()}],"scroll-mb":[{"scroll-mb":w()}],"scroll-ml":[{"scroll-ml":w()}],"scroll-p":[{"scroll-p":w()}],"scroll-px":[{"scroll-px":w()}],"scroll-py":[{"scroll-py":w()}],"scroll-ps":[{"scroll-ps":w()}],"scroll-pe":[{"scroll-pe":w()}],"scroll-pbs":[{"scroll-pbs":w()}],"scroll-pbe":[{"scroll-pbe":w()}],"scroll-pt":[{"scroll-pt":w()}],"scroll-pr":[{"scroll-pr":w()}],"scroll-pb":[{"scroll-pb":w()}],"scroll-pl":[{"scroll-pl":w()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,$,Q]}],fill:[{fill:[`none`,...N()]}],"stroke-w":[{stroke:[Zv,gy,ly,uy]}],stroke:[{stroke:[`none`,...N()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{"container-named":[`container-type`],overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`right`,`left`],"inset-y":[`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`pr`,`pl`],py:[`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`mr`,`ml`],my:[`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-r`,`border-w-l`],"border-w-y":[`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-r`,`border-color-l`],"border-color-y":[`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},postfixLookupClassGroups:[`container-type`],orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function Py(...e){return Ny(iv(e))}var Fy=sv(`inline-flex h-9 shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md border px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 disabled:pointer-events-none disabled:opacity-50 dark:focus-visible:ring-zinc-500`,{variants:{variant:{primary:`border-slate-900 bg-slate-950 text-white hover:bg-slate-800 dark:border-zinc-100 dark:bg-zinc-50 dark:text-zinc-950 dark:hover:bg-zinc-200`,secondary:`border-slate-200 bg-white text-slate-900 hover:bg-slate-50 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-100 dark:hover:bg-zinc-900`,ghost:`border-transparent bg-transparent text-slate-700 hover:bg-slate-100 dark:text-zinc-300 dark:hover:bg-zinc-900`},size:{sm:`h-8 px-2 text-xs`,md:`h-9 px-3 text-sm`,icon:`h-9 w-9 px-0`}},defaultVariants:{variant:`secondary`,size:`md`}});function Iy({className:e,variant:t,size:n,...r}){return(0,z.jsx)(`button`,{className:Py(Fy({variant:t,size:n}),e),type:`button`,...r})}function Ly({className:e,...t}){return(0,z.jsx)(`section`,{className:Py(`rounded-lg border border-slate-200/80 bg-white/95 text-slate-950 shadow-[0_1px_2px_rgba(15,23,42,0.04)] dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-50`,e),...t})}function Ry({className:e,...t}){return(0,z.jsx)(`div`,{className:Py(`p-4 pt-0`,e),...t})}var zy=[`codex`,`claude`,`kiro`,`trae`,`coco`,`openai`,`anthropic`],By=new Set([`acp`,`status_projection`]);function Vy(e){let t=e.trim().toLowerCase().replace(/_/gu,`-`);for(let e of zy)if(t===e||t.startsWith(`${e}-`))return e;return t}function Hy(e,t){let n=t?.trim().toLowerCase()??``;return n.length>0&&!By.has(n)?Vy(n):Vy(e)}var Uy={"zh-CN":{title:`交办说明`,context:`背景与补充`,constraints:`约束`,inputs:`输入材料`,acceptance:`验收要求`,return:`需要回传`,supplied:`已提供给接收方`,pending:`等待接收方读取`,decision:`接收方判断`,unknown:`尚未记录`,unavailable:`暂时无法读取`,adopt:`已采纳`,defer:`已暂缓`,reject:`未采纳`,no_change:`无需调整`,result:`结论已保存`,delivered:`结论已回传`,details:`查看交办内容`},en:{title:`Delegation brief`,context:`Context & corrections`,constraints:`Constraints`,inputs:`Inputs`,acceptance:`Acceptance`,return:`Expected return`,supplied:`Supplied to receiver`,pending:`Awaiting receiver read`,decision:`Receiver decision`,unknown:`Not recorded`,unavailable:`Readback unavailable`,adopt:`Adopted`,defer:`Deferred`,reject:`Rejected`,no_change:`No change needed`,result:`Conclusion saved`,delivered:`Conclusion returned`,details:`View delegation details`}};function Wy({request:e}){let{locale:t}=Ji();if(!e)return null;let n=Uy[t],r=e.brief,i=e.decision,a=e.returns.find(e=>e.phase===`conclusion`);return(0,z.jsxs)(`section`,{className:`personal-collaboration`,"aria-label":n.title,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:r.purpose}),(0,z.jsx)(`span`,{children:e.agent_id})]}),(0,z.jsxs)(`p`,{className:`personal-collaboration-status`,children:[(0,z.jsx)(`span`,{children:e.read_status===`supplied`?n.supplied:e.read_status===`unavailable`?n.unavailable:n.pending}),(0,z.jsxs)(`span`,{children:[n.decision,`: `,n[i]??(e.decision===`unavailable`?n.unavailable:n.unknown)]}),a?(0,z.jsx)(`span`,{children:a.status===`delivered`?n.delivered:n.result}):null]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.details}),(0,z.jsx)(`h4`,{children:n.context}),(0,z.jsx)(`p`,{children:r.context}),r.constraints.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:n.constraints}),(0,z.jsx)(`ul`,{children:r.constraints.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))})]}):null,r.inputs.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:n.inputs}),(0,z.jsx)(`ul`,{children:r.inputs.map((e,t)=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.ref}),` — `,e.description,e.sha256?(0,z.jsxs)(`small`,{children:[`sha256:`,e.sha256]}):null]},t))})]}):null,(0,z.jsx)(`h4`,{children:n.acceptance}),(0,z.jsx)(`ul`,{children:r.acceptance.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))}),(0,z.jsx)(`h4`,{children:n.return}),(0,z.jsx)(`p`,{children:r.return_requirement})]})]})}var Gy={stop:`ready_stop`,resume:`resume_review`,delete:`delete_review`};function Ky(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function qy(e){return typeof e==`string`&&e.trim().length>0?e:null}function Jy(e,t=240){let n=typeof e==`string`?e.replace(/\s+/g,` `).trim():``;return n.length>t?`${n.slice(0,t-1)}…`:n}function Yy(e){let t=Ky(e)??{},n=Jy(t.agent_id,80)||`unknown-agent`,r=Jy(t.acceptance,200);if(t.staffing===`gap`){let e=Ky(t.declined_first_todo)??{};return[`${n} · gap`,Jy(t.gap_reason_code,80),Jy(e.text,200)].filter(Boolean).join(` · `)}let i=Ky(t.first_todo)??{};return[`${n} · ready`,Jy(i.priority,8),Jy(i.action_kind,40),Jy(i.text,240),r?`acceptance: ${r}`:``].filter(Boolean).join(` · `)}function Xy(e){let t=Ky(e)??{};return Object.entries(t).map(([e,t])=>`${e}: ${typeof t==`object`&&t?JSON.stringify(t):String(t)}`).join(` · `)}function Zy(e){let t=Ky(e);if(t?.action_kind!==`team.plan`)return;let n=Ky(Ky(t.normalized_parameters)?.plan);if(!n||n.kind!==`steward_team_plan_preview`||n.applies!==!1)return;let r=qy(t.proposal_id),i=qy(t.expected_state_fingerprint),a=qy(n.goal_id);if(!r||!i||!a)return;let o=Array.isArray(n.lanes)?n.lanes:[],s=Array.isArray(n.gaps)?n.gaps:[],c=[{key:`goal`,value:a},{key:`objective`,value:Jy(n.objective)},...o.map((e,t)=>({key:`lane_${t+1}`,value:Yy(e)})),...s.length>0?[{key:`lane_gaps`,value:s.map(e=>{let t=Ky(e)??{};return[Jy(t.lane_id,80),Jy(t.reason_code,80)].filter(Boolean).join(`: `)}).filter(Boolean).join(` · `)}]:[],{key:`quota_envelope`,value:Xy(n.quota_envelope)},{key:`stop_condition`,value:Jy(n.stop_condition)}].filter(e=>e.value.length>0),l={schemaVersion:`review_card_frame_v0`,actionKind:`team.plan`,proposalId:r,stateFingerprint:i,titleKey:`team_plan_preview`,subtitleKey:`preview_only_no_lane_exists`,warningKey:`confirming_creates_each_ready_lane_first_todo`,focus:`${a} · ${o.length} lane${o.length===1?``:`s`}`,fields:c};if(t.status===`preview_ready`||t.status===`deferred`)return{...l,kind:`confirmation`,attentionKind:`authority`,interactionMode:`confirm_reject`,decisions:[`confirm`,`reject`],confirmLabelKey:`confirm_team_plan`,rejectLabelKey:`reject_team_plan`};if(t.status===`applying`)return{...l,kind:`pending`,attentionKind:`progress`,interactionMode:`inform`};let u=Ky(t.receipt),d=Ky(t.failure),f=t.status===`applied`?`applied`:t.status===`rejected`?`rejected`:t.status===`stale`?`stale`:t.status===`failed`?`failed`:`inactive`;return{...l,kind:`result`,attentionKind:`progress`,interactionMode:`inform`,resultKind:f,resultSummary:Jy(u?.outcome??d?.error_code??t.status,160)}}function Qy(e){let t=Ky(e.projection);if(t?.schema_version!==`loopx_operation_projection_v0`)return null;let n=qy(t.title),r=qy(t.subtitle),i=qy(t.focus),a=qy(t.warning);if(!n||!r||!i||!a||!Array.isArray(t.fields))return null;let o=[];for(let e of t.fields){let t=Ky(e),n=qy(t?.label),r=qy(t?.value);if(!n||!r)return null;o.push({label:n,value:r})}return{title:n,subtitle:r,focus:i,fields:o,warning:a}}function $y(e){let t=Ky(e);if(t?.action_kind!==`operation.execute`)return;let n=Ky(t.normalized_parameters),r=Ky(t.operation);if(!n||r?.schema_version!==`loopx_operation_envelope_v0`)return;let i=qy(r.operation_id),a=qy(r.confirmation_digest),o=qy(r.expires_at),s=Qy(n);if(!i||!a||!o||!s||i!==t.proposal_id)return;let c=r.lifecycle_state;if(c!==`awaiting_confirmation`&&c!==`claimed`&&c!==`outcome_observed`)return;let l={schemaVersion:`operation_review_frame_v0`,operationId:i,confirmationDigest:a,lifecycleState:c,simulated:Ky(n.projection).simulated===!0,expiresAt:o,content:s};if(c===`awaiting_confirmation`)return{...l,kind:`confirmation`,attentionKind:`authority`,interactionMode:`confirm_reject`,decisions:[`confirm`,`reject`]};if(c===`claimed`)return{...l,kind:`pending`,attentionKind:`progress`,interactionMode:`inform`};let u=Ky(r.outcome);if(!u)return;let d=u.outcome===`rejected_by_operator`,f=u.simulation===!0||l.simulated;return{...l,kind:`result`,attentionKind:`progress`,interactionMode:`inform`,resultKind:d?`rejected`:f?`simulation_completed`:`completed`,resultDeliveryVerified:Ky(r.result_delivery)!==null,summary:qy(u.summary)??``}}function eb(e){let t=Ky(e)??{},n={schemaVersion:`action_review_plan_v0`,proposalId:typeof t.proposal_id==`string`?t.proposal_id:``,sourceFingerprint:typeof t.expected_state_fingerprint==`string`?t.expected_state_fingerprint:``},r=$y(t),i=Zy(t),a=e=>({...n,...e,...r?{operationFrame:r}:{},...i?{reviewCardFrame:i}:{}}),o=(e,t)=>a({interaction:e,reason:t,canApply:!1}),s=t.action_kind===`goal.lifecycle`;if(s&&t.gate!=null||t.status===`gated`)return o(`gated`,`authority_gate`);if(s&&t.stale!=null||t.status===`stale`)return o(`refresh`,`stale_proposal`);if(t.status===`applied`)return Ky(t.receipt)?.projection_verified===!0&&(t.action_kind!==`operation.execute`||Ky(Ky(t.operation)?.result_delivery)!==null)?o(`completed`,`readback_verified`):o(`repair`,`readback_unverified`);let c=Ky(t.canonical_update_basis),l=Ky(t.normalized_parameters),u=c?.schema_version===`loopx_chat_canonical_update_basis_v0`&&qy(c.provider_revision)!==null&&qy(c.registry_sha256)!==null&&(t.action_kind===`todo.update`||t.action_kind===`monitor.update`&&[`pause`,`resume`,`edit`].includes(String(l?.operation))),d=c?.schema_version===`loopx_chat_canonical_terminal_basis_v0`&&qy(c.provider_revision)!==null&&qy(c.registry_sha256)!==null&&(t.action_kind===`todo.update`&&l?.operation===`complete`||t.action_kind===`monitor.update`&&l?.operation===`stop`);if((u||d)&&(t.status===`applying`||t.status===`failed`))return{...a({interaction:`review`,canApply:!0,reason:Ky(t.failure)?.error_code===`canonical_update_projection_pending`?`canonical_update_projection_pending`:`canonical_update_retry`}),retryOriginal:!0};if(t.status===`applying`)return o(`pending`,`apply_pending`);if(t.status===`failed`||t.error!=null)return o(`repair`,`apply_failed`);if(t.status!==`preview_ready`&&t.status!==`deferred`)return o(`inactive`,`inactive_proposal`);let f=(e,t=!0)=>a({interaction:`review`,reason:e,canApply:t});if(t.action_kind!==`goal.lifecycle`)return f(t.permission_classification===`protected`?`protected_action`:`action_review`);let p=t.validation_evidence,m=t.available_transitions;if(!(qy(t.proposal_id)!==null&&qy(t.expected_state_fingerprint)!==null&&Array.isArray(p)&&p.length>0&&p.every(e=>qy(e)!==null)&&Array.isArray(m)&&m.includes(`apply`)))return o(`refresh`,`incomplete_proposal`);let h=Ky(t.context),g=l?.operation,_=qy(l?.goal_id);if(!_||h?.goal_id!=null&&h.goal_id!==_)return o(`refresh`,`incomplete_proposal`);if(g!==`stop`&&g!==`resume`&&g!==`delete`)return f(`unknown_action`,!1);if(t.permission_classification===`protected`)return f(`protected_action`);if(t.permission_classification!==`durable_write`)return f(`unknown_permission`,!1);let v=Gy[g];return v===`ready_stop`&&t.status===`preview_ready`?a({interaction:`direct`,reason:v,canApply:!0}):f(v===`ready_stop`?`action_review`:v)}function tb(e){return e.error_code===`action_stale`||e.error_code===`action_conflict`||Ky(e.proposal)?.status===`stale`}function nb(e){return typeof e==`object`&&e?e:{}}function rb(e){return typeof e==`string`?e:``}function ib(e,t){let n=nb(e.plan),r=[],i=rb(e.goal_id)||rb(n.goal_id);i&&r.push({key:`goal_id`,label:t(`proposal.field.goalId`),value:i});let a=rb(n.objective);a&&r.push({key:`objective`,label:t(`proposal.field.objective`),value:a}),(Array.isArray(n.lanes)?n.lanes:[]).forEach((e,n)=>{let i=nb(e),a=rb(i.lane_id)||`lane-${n+1}`,o=rb(i.agent_id),s=rb(i.acceptance);if(rb(i.staffing)===`gap`){let e=nb(i.declined_first_todo);r.push({key:`lane_${a}`,label:o||a,value:[t(`proposal.teamPlan.gapLane`),lb(rb(i.gap_reason_code),t),rb(e.text)].filter(Boolean).join(` · `)});return}let c=nb(i.first_todo),l=[rb(c.priority),rb(c.action_kind),rb(c.text)].filter(Boolean).join(` · `);r.push({key:`lane_${a}`,label:o||a,value:[l||t(`proposal.teamPlan.laneUnstaffed`),s?`${t(`proposal.teamPlan.acceptanceShort`)}: ${s}`:``].filter(Boolean).join(` · `)})});let o=nb(n.quota_envelope),s=Object.entries(o);s.length>0&&r.push({key:`quota_envelope`,label:t(`proposal.field.quotaEnvelope`),value:s.map(([e,t])=>`${e}: ${String(t??``)}`).join(` · `)+` · ${t(`proposal.teamPlan.advisory`)}`});let c=rb(n.stop_condition);return c&&r.push({key:`stop_condition`,label:t(`proposal.field.stopCondition`),value:`${c} · ${t(`proposal.teamPlan.advisory`)}`}),r}function ab(e){let t=nb(e.plan);return Array.isArray(t.lanes)?t.lanes.length:0}function ob(e){let t=nb(e.plan);return rb(e.goal_id)||rb(t.goal_id)}function sb(e,t){let n=nb(e),r=nb(t.plan),i=(Array.isArray(r.lanes)?r.lanes:[]).map(nb);return(Array.isArray(n.lanes)?n.lanes:[]).map(e=>{let t=nb(e),n=rb(t.lane_id),r=i.find(e=>e.lane_id===n);return{laneId:n,agentId:rb(t.agent_id),task:rb(nb(r?.first_todo).text)||n}}).filter(e=>e.laneId.length>0)}function cb(e,t={}){let n=nb(e),r=nb(t.plan),i=(Array.isArray(r.lanes)?r.lanes:[]).map(nb);return(Array.isArray(n.gap_lanes)?n.gap_lanes:[]).map(e=>{let t=nb(e);return{laneId:rb(t.lane_id),agentId:rb(t.agent_id),reasonCode:rb(t.reason_code),task:rb(nb(i.find(e=>e.lane_id===t.lane_id)?.declined_first_todo).text)}}).filter(e=>e.laneId.length>0)}function lb(e,t){return e===`agent_not_registered`?t(`proposal.teamPlan.gapReason.agentNotRegistered`):e===`action_kind_not_supported`?t(`proposal.teamPlan.gapReason.actionKindNotSupported`):e===`capability_not_granted`?t(`proposal.teamPlan.gapReason.capabilityNotGranted`):e===`audience_not_authorized`?t(`proposal.teamPlan.gapReason.audienceNotAuthorized`):e}function ub(e){let t=nb(e),n=rb(t.outcome),r=Array.isArray(t.lanes)?t.lanes.length:0,i=typeof t.gap_count==`number`?t.gap_count:0;return n===`team_plan_partially_applied`?{kind:`partially_applied`,created:r,gaps:i}:n===`team_plan_lanes_already_present`||n===`team_plan_commit_recovered`?{kind:`already_present`,created:r,gaps:i}:n===`team_plan_applied`?{kind:`applied`,created:r,gaps:i}:null}function db(e,t){return e?.kind===`partially_applied`?t(`proposal.teamPlan.appliedPartially`,{created:String(e.created),gaps:String(e.gaps)}):e?.kind===`already_present`?t(`proposal.teamPlan.appliedAlreadyPresent`):t(e?.kind===`applied`?`proposal.teamPlan.applied`:`drawer.proposalApplied`,{count:e?.created??0})}function fb({ariaLabel:e,className:t,icon:n,onChange:r,options:i,prefixLabel:a,value:o}){let s=(0,R.useId)(),c=(0,R.useRef)(null),l=(0,R.useRef)(null),u=(0,R.useRef)(new Map),[d,f]=(0,R.useState)(!1),[p,m]=(0,R.useState)(o),h=i.find(e=>e.value===o)??i[0],g=i.filter(e=>!e.disabled);(0,R.useEffect)(()=>{if(!d)return;let e=e=>{c.current?.contains(e.target)||f(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[d]),(0,R.useEffect)(()=>{d&&u.current.get(p)?.focus()},[p,d]);function _(e){m(e)}function v(e=`selected`){let t=e===`last`?g.at(-1):g[0],n=e===`selected`&&h&&!h.disabled?h:t;n&&(f(!0),_(n.value))}function y({restoreFocus:e=!1}={}){f(!1),e&&l.current?.focus()}function b(e){e.disabled||(r(e.value),y({restoreFocus:!0}))}function x(e){if(!g.length)return;let t=g.findIndex(e=>e.value===p),n=t<0?0:(t+e+g.length)%g.length;_(g[n].value)}function S(e){e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),v(`selected`)):e.key===`ArrowUp`&&(e.preventDefault(),v(`last`))}function C(e,t){if(e.key===`ArrowDown`)e.preventDefault(),x(1);else if(e.key===`ArrowUp`)e.preventDefault(),x(-1);else if(e.key===`Home`)e.preventDefault(),g[0]&&_(g[0].value);else if(e.key===`End`){e.preventDefault();let t=g.at(-1);t&&_(t.value)}else e.key===`Enter`||e.key===` `?(e.preventDefault(),b(t)):e.key===`Escape`?(e.preventDefault(),y({restoreFocus:!0})):e.key===`Tab`&&y()}let w;return(0,z.jsxs)(`div`,{className:`personal-select${t?` ${t}`:``}`,ref:c,children:[(0,z.jsxs)(`button`,{"aria-controls":s,"aria-expanded":d,"aria-haspopup":`listbox`,"aria-label":e,className:`personal-select-trigger`,"data-value":o,onClick:()=>d?y():v(),onKeyDown:S,ref:l,role:`combobox`,type:`button`,children:[n?(0,z.jsx)(`span`,{className:`personal-select-icon`,children:n}):null,(0,z.jsxs)(`span`,{className:`personal-select-value`,children:[a?(0,z.jsx)(`small`,{children:a}):null,(0,z.jsx)(`span`,{children:h?.label??o})]}),(0,z.jsx)(gm,{"aria-hidden":!0,className:d?`is-open`:void 0,size:14})]}),d?(0,z.jsx)(`div`,{"aria-label":e,className:`personal-select-listbox`,id:s,role:`listbox`,children:i.map(e=>{let t=e.group&&e.group!==w;return w=e.group,(0,z.jsxs)(`div`,{className:`personal-select-option-wrap`,children:[t?(0,z.jsx)(`div`,{className:`personal-select-group-label`,children:e.group}):null,(0,z.jsxs)(`button`,{"aria-disabled":e.disabled||void 0,"aria-selected":e.value===o,className:`personal-select-option`,disabled:e.disabled,id:`${s}-${e.value.replace(/[^a-z0-9_-]/gi,`-`)}`,onClick:()=>b(e),onFocus:()=>m(e.value),onKeyDown:t=>C(t,e),ref:t=>{t?u.current.set(e.value,t):u.current.delete(e.value)},role:`option`,tabIndex:e.value===p?0:-1,type:`button`,children:[(0,z.jsx)(`span`,{children:e.label}),e.value===o?(0,z.jsx)(hm,{"aria-hidden":!0,size:15}):null]})]},e.value)})}):null]})}function pb({agents:e,managerChannelBinding:t,managerChatOpen:n,managerRuntime:r,mobileNavigationOpen:i,onOpenGoalCapabilities:a,onOpenManagerChat:o,onRefresh:s,onOpenNavigation:c,onSelectGoalTab:l,onSelectAgent:u,onReturnManagerHome:d,refreshState:f,readOnlySourceLabel:p,selectedAgentId:m,selectedGoal:h,selectedGoalTab:g}){let{locale:_,t:v}=Ji(),y=t?t.executor_kind===`individual`?v(`header.managerExecutorKindIndividual`):t.executor_kind===`managed`?v(`header.managerExecutorKindManaged`):v(`header.managerExecutorKindRegistered`):null,b=t?.available===!1,x=t?.output_token_budget,S=x?.scope===`per_model_request`&&x.valid&&typeof x.max_tokens==`number`?v(`header.managerOutputTokenBudget`,{tokens:new Intl.NumberFormat(_).format(x.max_tokens)}):null,C=t?.available===!1?t.unavailable_reason:null,w=C===`operator_credential_unconfigured`?`header.managerExecutionUnavailableCredential`:C===`dsh_runtime_unavailable`?`header.managerExecutionUnavailableRuntime`:C===`invalid_reasoning_effort`?`header.managerExecutionUnavailableEffort`:C===`invalid_output_token_limit`?`header.managerExecutionUnavailableOutputBudget`:`header.managerExecutionUnavailable`,T=t&&t.executor_endpoint_source===`product_default`&&t.executor_endpoint_default_reason===`steward_channel_default`?`header.managerEndpointStewardDefault`:null,E=t?v(t.selection_policy===`pinned`?`header.managerSelectionPinned`:t.selection_policy===`flexible`?`header.managerSelectionFlexible`:`header.managerSelectionPreferred`):null,D=t?.allocation_reason?v(t.allocation_reason===`user_explicit`?`header.managerAllocationUser`:t.allocation_reason===`pinned_configuration`?`header.managerAllocationPinned`:t.allocation_reason===`flexible_availability_fallback`?`header.managerAllocationFallback`:t.allocation_reason===`flexible_pool_unavailable`?`header.managerAllocationUnavailable`:t.allocation_reason===`flexible_primary_available`?`header.managerAllocationPrimary`:t.allocation_reason===`product_default`?`header.managerAllocationProductDefault`:t.allocation_reason===`service_override`?`header.managerAllocationService`:`header.managerAllocationConfigured`):null,O=p?(0,z.jsxs)(`span`,{className:`personal-read-only-source`,title:v(`header.readOnlySourceDescription`,{source:p}),children:[(0,z.jsx)(Om,{size:15}),p,(0,z.jsx)(`small`,{children:v(`common.readOnly`)})]}):(0,z.jsx)(fb,{ariaLabel:v(`header.selectChatRuntime`),className:`personal-agent-select`,icon:(0,z.jsx)(fm,{size:16}),onChange:u,options:e.map(e=>({disabled:!e.available,label:`${e.label}${e.available?``:` · ${v(`header.agentUnavailable`)}`}`,value:e.agentId})),prefixLabel:v(`header.chatRuntime`),value:m});return(0,z.jsxs)(`header`,{className:`personal-channel-header`,"data-goal-selected":!!h,children:[(0,z.jsx)(`button`,{"aria-expanded":i??!1,"aria-label":v(`header.openGoalNavigation`),className:`personal-icon-button personal-mobile-menu`,onClick:c,type:`button`,children:(0,z.jsx)(Vm,{size:18})}),(0,z.jsxs)(`div`,{className:`personal-channel-title`,children:[(0,z.jsx)(`h1`,{children:h?.title??v(`header.manager`)}),h&&!h.loadState&&![`安静运行`,`推进中`].includes(h.state)?(0,z.jsx)(`p`,{children:Yi(h.state,_)}):null,!h&&t?(0,z.jsxs)(`p`,{className:`personal-manager-execution`,children:[(0,z.jsxs)(`span`,{className:b?`personal-execution-chip is-unavailable`:`personal-execution-chip`,children:[(0,z.jsx)(`span`,{className:`personal-execution-chip-endpoint`,children:t.executor_endpoint}),y?(0,z.jsx)(`span`,{className:`personal-execution-chip-kind`,children:y}):null,(0,z.jsx)(`span`,{className:`personal-execution-chip-model`,children:t.model}),S?(0,z.jsx)(`span`,{className:`personal-execution-chip-budget`,children:S}):null]}),b?(0,z.jsx)(`span`,{className:`personal-execution-note`,children:v(w,{executor:t.executor_endpoint,credential:t.credential_env_var})}):null]}):null,!h&&(r||T)?(0,z.jsxs)(`details`,{className:`personal-runtime-details`,open:r!=null&&r.status!==`ready`||void 0,children:[(0,z.jsx)(`summary`,{children:_===`zh-CN`?`运行环境`:`Execution environment`}),!h&&r?(0,z.jsx)(`p`,{children:r.status===`ready`?v(`header.managerRuntime`,{profile:r.runtime_profile,sandbox:r.sandbox}):v(`header.managerRuntimeFallback`,{profile:r.runtime_profile,sandbox:r.sandbox})}):null,E&&D&&t?(0,z.jsx)(`p`,{children:v(`header.managerAllocation`,{policy:E,reason:D})}):null,T&&t?(0,z.jsx)(`span`,{className:`personal-execution-rule-note`,children:v(T,{executor:t.executor_endpoint})}):null]}):null,h?.loadState?(0,z.jsx)(`p`,{role:`status`,children:v(h.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}):null]}),h?(0,z.jsxs)(`div`,{className:`personal-goal-navigation`,children:[(0,z.jsxs)(`nav`,{"aria-label":v(`header.goalView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":g===`overview`?`page`:void 0,onClick:()=>l(`overview`),type:`button`,children:v(`header.overview`)}),(0,z.jsx)(`button`,{"aria-current":g===`tasks`?`page`:void 0,onClick:()=>l(`tasks`),type:`button`,children:v(`header.tasks`)}),(0,z.jsx)(`button`,{"aria-current":g===`chat`?`page`:void 0,onClick:()=>l(`chat`),type:`button`,children:v(`header.chat`)}),(0,z.jsx)(`button`,{"aria-current":g===`files`?`page`:void 0,onClick:()=>l(`files`),type:`button`,children:v(`header.files`)})]}),O]}):(0,z.jsxs)(`nav`,{"aria-label":v(`header.managerView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":n?void 0:`page`,onClick:d,type:`button`,children:v(`header.managerOverview`)}),(0,z.jsx)(`button`,{"aria-current":n?`page`:void 0,onClick:o,type:`button`,children:v(`header.chat`)})]}),(0,z.jsxs)(`div`,{className:`personal-channel-actions`,children:[h&&a?(0,z.jsx)(`button`,{"aria-label":v(`header.goalSettings`),title:v(`header.goalSettingsDescription`),className:`personal-icon-button personal-goal-settings-action`,onClick:a,type:`button`,children:(0,z.jsx)(sh,{"aria-hidden":!0,size:17})}):null,h?null:O,s?(0,z.jsxs)(`span`,{className:`personal-refresh-control is-${f??`idle`}`,children:[f===`loading`?(0,z.jsx)(`small`,{children:v(`header.refreshing`)}):f===`done`?(0,z.jsx)(`small`,{children:v(`header.refreshDone`)}):f===`error`?(0,z.jsx)(`small`,{children:v(`header.refreshFailed`)}):null,(0,z.jsx)(`button`,{"aria-label":v(f===`loading`?`header.refreshing`:`header.refresh`),className:`personal-icon-button`,disabled:f===`loading`,onClick:s,type:`button`,children:(0,z.jsx)(Qm,{className:f===`loading`?`is-spinning`:void 0,size:17})})]}):null]})]})}function mb({result:e,zh:t,onInspect:n}){let r=t?{responds_to:`回应此版本`,revises:`修订此版本`,uses:`使用此版本`}:{responds_to:`Respond to this version`,revises:`Revise this version`,uses:`Use this version`};return(0,z.jsxs)(`section`,{className:`goal-team-lineage`,"aria-label":t?`版本与采用关系`:`Versions and adoption`,children:[e.dependencies?.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:t?`请求中的版本依据`:`Versions in the request`}),(0,z.jsx)(`ul`,{children:e.dependencies.map((e,i)=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`strong`,{children:r[e.relation]??(t?`未知关系`:`Unknown relationship`)}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(e.operation_id),children:e.operation_id}),(0,z.jsx)(`span`,{children:e.state===`current`?t?`源产物与接收方输入一致`:`Source and receiver input match`:t?`此版本无法核验`:`This version cannot be verified`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`指定版本`:`Referenced version`}),(0,z.jsxs)(`code`,{children:[e.ref,` · sha256:`,e.sha256]}),(0,z.jsx)(`code`,{children:e.input_ref})]})]},`${e.operation_id}:${e.input_ref}:${i}`))}),(0,z.jsx)(`p`,{children:t?`这是请求的关系;完成修订或采用仍需结果和回执。`:`These are requested relationships; revision or adoption still needs results and receipts.`})]}):null,(0,z.jsx)(`h4`,{children:t?`请求方采用`:`Requester adoption`}),e.adoptions?.length?(0,z.jsx)(`ul`,{children:e.adoptions.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`strong`,{children:e.state===`current`?t?`已记录采用 · 后续结果验收有效`:`Adoption recorded · downstream result currently accepted`:t?`采用证据已失效或无法核验`:`Adoption evidence stale or unavailable`}),(0,z.jsxs)(`span`,{children:[e.requester_agent_id,` → `,e.consumer_agent_id]}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(e.consumer_operation_id),children:t?`查看后续结果`:`Inspect downstream result`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`采用版本与结果版本`:`Source and result versions`}),e.source_artifacts.map(e=>(0,z.jsxs)(`code`,{children:[t?`来源`:`Source`,`: `,e.ref,` · sha256:`,e.sha256]},`source:${e.ref}`)),e.consumer_artifacts.map(e=>(0,z.jsxs)(`code`,{children:[t?`结果`:`Result`,`: `,e.ref,` · sha256:`,e.sha256]},`result:${e.ref}`))]})]},e.consumer_operation_id))}):(0,z.jsx)(`p`,{children:t?`尚无请求方采用记录。`:`No requester adoption is recorded.`})]})}function hb(e,t){let n=t.findIndex(t=>t.ref===e);if(n>=0)return n;let r=e.match(/\.[^./]+$/)?.[0].toLowerCase(),i=r?t.findIndex(e=>e.ref.toLowerCase().endsWith(r)):-1;return Math.max(0,i)}function gb(e,t){if(e.state!==`current`||t.operation_id!==e.operation_id||t.status!==`accepted`||t.recovery_required||t.error)return null;let n=(t.artifacts??[]).filter(t=>t.ref===e.ref&&t.sha256===e.sha256);return n.length===1?n[0]:null}function _b(e,t){let n=e.split(` -`),r=t.split(` -`),i=0,a=0;for(;ir&&n.push(e.slice(r,o));let s=a[0],c=`${t}-i${i++}`;if(s.startsWith("`"))n.push((0,z.jsx)(`code`,{className:`personal-md-code`,children:s.slice(1,-1)},c));else if(s.startsWith(`**`))n.push((0,z.jsx)(`strong`,{children:s.slice(2,-2)},c));else{let e=s.indexOf(`](`),t=s.slice(1,e),r=s.slice(e+2,-1);n.push((0,z.jsx)(`a`,{className:`personal-md-link`,href:r,rel:`noreferrer`,target:`_blank`,children:t},c))}r=o+s.length}return re.trim().replace(/\\\|/g,`|`))}function Cb(e,t){let n=e.split(` -`),r=[],i=[],a=()=>{i.length>0&&(r.push({type:`paragraph`,lines:i}),i=[])},o=0;for(;o/^:?-{3,}:?$/.test(e))){a();let e=[];for(o+=2;o{let n=`b${t}`;if(e.type===`code`)return(0,z.jsx)(`pre`,{className:`personal-md-pre`,children:(0,z.jsx)(`code`,{children:e.text})},n);if(e.type===`heading`)return(0,z.jsx)(`p`,{className:`personal-md-heading is-h${e.level}`,children:yb(e.text,n)},n);if(e.type===`table`)return(0,z.jsx)(`div`,{className:`personal-md-table-scroll`,tabIndex:0,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsx)(`tr`,{children:e.headers.map((e,t)=>(0,z.jsx)(`th`,{scope:`col`,children:yb(e,`${n}-h${t}`)},t))})}),(0,z.jsx)(`tbody`,{children:e.rows.map((e,t)=>(0,z.jsx)(`tr`,{children:e.map((e,r)=>(0,z.jsx)(`td`,{children:yb(e,`${n}-${t}-${r}`)},r))},t))})]})},n);if(e.type===`list`){let t=e.items.map((e,t)=>(0,z.jsx)(`li`,{children:yb(e,`${n}-${t}`)},`${n}-${t}`));return e.ordered?(0,z.jsx)(`ol`,{className:`personal-md-list`,children:t},n):(0,z.jsx)(`ul`,{className:`personal-md-list`,children:t},n)}return(0,z.jsx)(`p`,{children:e.lines.map((e,t)=>(0,z.jsxs)(R.Fragment,{children:[t>0?(0,z.jsx)(`br`,{}):null,yb(e,`${n}-${t}`)]},`${n}-${t}`))},n)})})}var Tb=e=>/\.(md|markdown)$/i.test(e);function Eb({artifact:e,label:t,raw:n=!1}){return!n&&Tb(e.ref)?(0,z.jsx)(`div`,{className:`goal-team-report`,"aria-label":t,tabIndex:0,children:(0,z.jsx)(wb,{text:e.text,report:!0})}):(0,z.jsx)(`pre`,{tabIndex:0,"aria-label":t,children:e.text})}function Db({artifact:e,zh:t,heading:n=e.ref}){let[r,i]=(0,R.useState)(!1);return(0,z.jsxs)(`article`,{className:`goal-team-artifact`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h4`,{children:n}),Tb(e.ref)?(0,z.jsx)(`button`,{type:`button`,"aria-pressed":r,onClick:()=>i(e=>!e),children:r?t?`阅读报告`:`Read report`:t?`查看原文`:`View source`}):null]}),(0,z.jsx)(Eb,{artifact:e,raw:r,label:`${t?`证据内容`:`Evidence content`}: ${e.ref}`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`产物版本`:`Artifact version`}),(0,z.jsx)(`code`,{children:e.sha256})]})]})}function Ob({sessionId:e,result:t,zh:n}){let[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(0),[s,c]=(0,R.useState)(!1),[l,u]=(0,R.useState)(``),[d,f]=(0,R.useState)(!1),p=(0,R.useRef)(0);(0,R.useEffect)(()=>(p.current++,i(null),u(``),c(!1),o(0),()=>{p.current++}),[t,e]);let m=t.status===`accepted`&&!t.error&&!t.recovery_required?t.artifacts??[]:[],h=t.dependencies??[];async function g(t){let r=++p.current;i(null),u(``),c(!0),o(hb(t.ref,m)),f(!1);try{let a=await _g(e,t.operation_id);if(r!==p.current)return;gb(t,a)?i({link:t,source:a}):u(n?`指定来源版本无法核验,未展示对照。`:`The referenced source version cannot be verified. Comparison withheld.`)}catch{r===p.current&&u(n?`来源读取失败,已清除上次对照。可重试或查看执行详情。`:`Source read failed; previous comparison cleared. Retry or inspect the execution.`)}finally{r===p.current&&c(!1)}}if(!h.length||!m.length)return null;let _=r?gb(r.link,r.source):null,v=m[a],y=_&&v?_b(_.text,v.text):null,b=n?{revises:`修订依据`,responds_to:`回应依据`,uses:`使用依据`}:{revises:`Revision source`,responds_to:`Response source`,uses:`Input source`};return(0,z.jsxs)(`section`,{className:`goal-team-comparison`,"aria-label":n?`依据与结果对照`:`Source and result comparison`,"aria-busy":s,children:[(0,z.jsxs)(`div`,{className:`goal-team-comparison-heading`,children:[(0,z.jsx)(`h4`,{children:n?`看清这次变化`:`See what changed`}),(0,z.jsx)(`span`,{children:n?`按需核验`:`On-demand verification`})]}),(0,z.jsx)(`div`,{className:`goal-team-comparison-sources`,children:h.map((e,t)=>(0,z.jsxs)(`button`,{type:`button`,disabled:s||e.state!==`current`,"aria-pressed":r?.link===e,onClick:()=>void g(e),children:[(0,z.jsx)(`span`,{children:b[e.relation]}),(0,z.jsx)(`strong`,{children:e.ref}),h.filter(t=>t.ref===e.ref).length>1?(0,z.jsx)(`span`,{children:e.operation_id}):null,e.state===`current`?null:(0,z.jsx)(`span`,{children:n?`无法核验`:`Unavailable`})]},`${e.operation_id}:${e.input_ref}:${t}`))}),s?(0,z.jsx)(`p`,{role:`status`,children:n?`正在读取指定来源版本…`:`Reading the referenced source version…`}):null,l?(0,z.jsx)(`p`,{role:`alert`,children:l}):null,_&&v&&y?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,"aria-pressed":d,onClick:()=>f(e=>!e),children:d?n?`阅读对照`:`Read comparison`:n?`查看原文差异`:`View source changes`}),m.length>1?(0,z.jsxs)(`label`,{children:[n?`对照产物`:`Compare output`,(0,z.jsx)(`select`,{value:a,onChange:e=>o(Number(e.target.value)),children:m.map((e,t)=>(0,z.jsx)(`option`,{value:t,children:e.ref},`${e.ref}:${t}`))})]}):null,(0,z.jsx)(`div`,{className:`goal-team-comparison-grid`,children:[{kind:`source`,title:n?`指定来源`:`Referenced source`,artifact:_,lines:y.left,end:y.leftEnd},{kind:`result`,title:n?`本次产物`:`This output`,artifact:v,lines:y.right,end:y.rightEnd}].map(e=>(0,z.jsxs)(`article`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{children:e.title}),(0,z.jsx)(`strong`,{children:e.artifact.ref})]}),d?(0,z.jsx)(`pre`,{tabIndex:0,"aria-label":`${e.title}: ${e.artifact.ref}`,children:e.lines.map((t,n)=>(0,z.jsxs)(`span`,{"data-changed":n>=y.start&&n(w(),()=>{C.current++}),[e,t]);async function w(){let n=++C.current;s(null),l(``),p(``),d(!0);try{let r=await _g(e,t);n===C.current&&(s(r),l(new Date().toLocaleTimeString()))}catch(e){n===C.current&&p(e instanceof Error?e.message:String(e))}finally{n===C.current&&d(!1)}}async function T(){if((!o||!m.trim())&&!S.current)return;let r=S.current??{id:crypto.randomUUID(),text:[`${n?`针对团队执行`:`Regarding team execution`}: ${t}`,...(o?.artifacts??[]).map(e=>`${e.ref} · sha256:${e.sha256}`),m.trim()].join(` -`)};S.current=r,_(!0),y(``);try{let t=await Sg(e,r.text,`inbox`,r.id);x({id:r.id,status:t.status})}catch(e){y(e instanceof Error?e.message:String(e))}finally{_(!1)}}let E=b?i.find(e=>e.client_ingress_id===b.id)?.status??b.status:``,D=E===`pending`?n?`已进入协调员收件箱,等待读取`:`In the coordinator inbox; awaiting read`:E===`delivered`?n?`已交给协调员;尚无应用回执`:`Delivered to coordinator; application not confirmed`:n?`投递状态待核实`:`Delivery requires reconciliation`;return(0,z.jsxs)(`section`,{className:`goal-team-evidence`,"aria-label":n?`执行证据`:`Execution evidence`,"aria-busy":u,children:[(0,z.jsxs)(`div`,{className:`goal-team-work-actions`,children:[(0,z.jsx)(`h3`,{children:n?`执行证据`:`Execution evidence`}),(0,z.jsx)(`button`,{type:`button`,disabled:u,onClick:()=>void w(),children:n?`重新读取证据`:`Recheck evidence`})]}),u?(0,z.jsx)(`p`,{role:`status`,children:n?`正在核验绑定、验收与文件…`:`Checking bindings, acceptance and files…`}):null,f?(0,z.jsxs)(`p`,{role:`alert`,children:[n?`无法核验,已清除上次证据。`:`Cannot verify; previous evidence cleared.`,` `,f]}):null,o?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`p`,{role:`status`,children:[(0,z.jsxs)(`strong`,{children:[o.agent_id,` · `,vg(o,n)]}),` · `,c]}),(0,z.jsx)(`p`,{children:n?`按需读取的当前观察,不是持续在线状态;验收不代表协调员已采用。`:`An on-demand observation, not continuous liveness; acceptance does not establish coordinator adoption.`}),(0,z.jsx)(Ob,{sessionId:e,result:o,zh:n}),(0,z.jsx)(mb,{result:o,zh:n,onInspect:a}),o.error?(0,z.jsx)(`p`,{role:`alert`,children:o.error}):null,o.status===`accepted`&&!o.error&&!o.recovery_required&&o.artifacts?.length?o.artifacts.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(Db,{artifact:e,zh:n}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`版本与来源标识`:`Version and source identifiers`}),(0,z.jsx)(`code`,{children:t}),(0,z.jsx)(`code`,{children:o.request_id}),(0,z.jsx)(`code`,{children:o.todo_id})]})]},`${e.ref}:${e.sha256}`)):(0,z.jsx)(`p`,{children:n?`本次读取没有可展示的已验收产物。`:`No accepted artifact is available in this readback.`}),(0,z.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),T()},children:[(0,z.jsxs)(`label`,{children:[n?`向协调员反馈此执行`:`Send feedback about this execution`,(0,z.jsx)(`textarea`,{value:m,maxLength:6e3,rows:3,disabled:!!S.current,onChange:e=>h(e.target.value)})]}),(0,z.jsx)(`p`,{children:n?`附上执行标识及当前产物版本,交给原协调员收件箱;不会直接改写任务或中断成员。`:`Includes the operation and observed artifact versions in the original coordinator inbox; does not change tasks or interrupt members.`}),r?null:(0,z.jsx)(`p`,{children:n?`协调员未在执行或当前观察不可用;恢复执行后可发送。`:`Coordinator inactive or observation unavailable; resume execution to send.`}),(0,z.jsx)(`button`,{type:`submit`,disabled:!r||g||!!b||!m.trim(),children:g?n?`正在投递…`:`Sending…`:v?n?`重试同一条反馈`:`Retry this feedback`:n?`发送反馈`:`Send feedback`})]})]}):null,v?(0,z.jsxs)(`p`,{role:`alert`,children:[n?`未确认投递,请重试同一条反馈,避免重复发送。`:`Delivery not confirmed; retry the same feedback to avoid duplicates.`,` `,v]}):null,b?(0,z.jsx)(`p`,{role:`status`,children:D}):null]})}var Ab={authority_unavailable:{en:`Canonical authority unavailable`,zh:`缺少规范权限状态`},turn_blocked:{en:`Task admission blocked`,zh:`当前任务未获准执行`},acceptance_unavailable:{en:`Acceptance binding unavailable`,zh:`缺少有效验收绑定`},runtime_unavailable:{en:`Runtime unavailable`,zh:`运行时不可用`},runtime_unverified:{en:`Runtime availability unverified`,zh:`运行时可用性尚未验证`},launchable:{en:`Local launch prerequisites met`,zh:`本机启动条件已满足`}};function jb({check:e,zh:t}){let n=e.executor?[e.executor.host,e.executor.reason].filter(Boolean).join(` · `):e.authority_reason,r=e.state===`authority_unavailable`?t?`未检查或启动执行器`:`No executor was inspected or launched`:t?`不代表正在执行`:`Does not mean executing`,i=e.authority_next_action===`preview_reviewed_goal_authority_promotion`?t?`下一步:预览整 Goal 协调 Authority 晋级`:`Next: preview whole-Goal coordination-authority promotion`:e.authority_next_action===`repair_canonical_authority`?t?`下一步:修复规范 Authority 读回`:`Next: repair canonical authority readback`:null;return(0,z.jsxs)(`p`,{role:`status`,children:[t?Ab[e.state].zh:Ab[e.state].en,n?` · ${n}`:``,i?` · ${i}`:``,` · ${r}`]})}function Mb({sessionId:e,members:t,zh:n,canMessage:r,ingress:i}){let[a,o]=(0,R.useState)(null),s=(0,R.useRef)(null),c=(0,R.useRef)(null),l=(0,R.useRef)(null),[u,d]=(0,R.useState)(null),[f,p]=(0,R.useState)({}),[m,h]=(0,R.useState)(!1),[g,_]=(0,R.useState)(``),v=(0,R.useRef)(0);(0,R.useEffect)(()=>{(a?s.current:l.current)?.focus()},[a]),(0,R.useEffect)(()=>(v.current++,d(null),p({}),_(``),h(!1),y(),()=>{v.current++}),[e]);async function y(t){let n=++v.current;h(!0),_(``),d(null),o(null);try{let r=await yg(e,t);n===v.current&&d(r)}catch(e){n===v.current&&_(e instanceof Error?e.message:String(e))}finally{n===v.current&&h(!1)}}async function b(t){let n=++v.current;h(!0),_(``),p(e=>{let n={...e};return delete n[t],n});try{let r=await bg(e,t);n===v.current&&p(e=>({...e,[t]:r}))}catch(e){n===v.current&&_(e instanceof Error?e.message:String(e))}finally{n===v.current&&h(!1)}}return a?(0,z.jsxs)(`div`,{className:`goal-team-work`,children:[(0,z.jsx)(`button`,{ref:s,type:`button`,onClick:()=>o(null),children:n?`返回执行列表`:`Back to executions`}),(0,z.jsx)(kb,{sessionId:e,operationId:a,zh:n,canMessage:r,ingress:i,onInspect:o},`${e}:${a}`)]}):(0,z.jsx)(`div`,{className:`goal-team-work`,children:(0,z.jsxs)(`section`,{"aria-label":n?`团队执行详情`:`Team execution details`,children:[(0,z.jsx)(`p`,{children:n?`检查不会启动成员。暂停协调员后,已派发的工作仍会继续。`:`Inspection starts no members. Dispatched work continues when the coordinator is paused.`}),(0,z.jsx)(`h3`,{children:n?`已绑定成员`:`Bound members`}),(0,z.jsx)(`ul`,{className:`goal-team-bindings`,children:t.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.agent_id}),(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>void b(e.id),children:n?`检查启动条件`:`Check prerequisites`})]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`任务与执行配置`:`Task and execution details`}),(0,z.jsx)(`code`,{children:e.todo_id}),f[e.id]?.executor?.profile?(0,z.jsx)(`code`,{children:f[e.id]?.executor?.profile}):null]}),f[e.id]?(0,z.jsx)(jb,{check:f[e.id],zh:n}):null]},e.id))}),(0,z.jsxs)(`div`,{className:`goal-team-work-actions`,children:[(0,z.jsx)(`strong`,{children:n?`此协调身份的持久工作`:`Durable work for this coordinator`}),(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>{p({}),y()},children:n?`重新核验`:`Refresh`}),u?.has_more&&u.next_cursor?(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>void y(u.next_cursor),children:n?`下一页`:`Next page`}):null]}),m?(0,z.jsx)(`p`,{role:`status`,children:n?`正在读取当前事实…`:`Reading current facts…`}):null,g?(0,z.jsx)(`p`,{role:`alert`,children:g}):null,u?(0,z.jsxs)(z.Fragment,{children:[u.page_readback_complete?null:(0,z.jsx)(`p`,{role:`status`,children:n?`本页有无法核验的工作,请检查原请求;不要直接重新派工。`:`Some work cannot be verified. Reconcile the original request before redispatching.`}),u.items.length?null:(0,z.jsx)(`p`,{children:n?`此页没有委派记录;不代表整个团队没有工作或 Goal 已完成。`:`No records on this page; this does not establish an idle team or a completed Goal.`}),(0,z.jsx)(`ul`,{className:`goal-team-operations`,children:u.items.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`strong`,{children:[e.agent_id??(n?`记录不可读`:`Unreadable record`),` · `,vg(e,n)]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`执行标识`:`Execution identifier`}),(0,z.jsx)(`code`,{children:e.operation_id??e.record_id})]}),e.operation_id?(0,z.jsx)(`button`,{ref:e.operation_id===c.current?l:void 0,type:`button`,onClick:()=>{c.current=e.operation_id,o(e.operation_id)},children:n?`查看证据与反馈`:`Evidence and feedback`}):null]},e.record_id))}),(0,z.jsxs)(`p`,{children:[n?`仅限当前协调身份;分页不是团队快照。`:`Scoped to this coordinator; paging is not a team snapshot.`,u.has_more?n?` 还有下一页。`:` More pages remain.`:``]})]}):null]})})}function Nb({sessionId:e,onPrepare:t,onExecute:n,onChange:r}){let{locale:i}=Ji(),a=i===`zh-CN`,[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(null),u=c===`settings`,d=e=>l(e?`settings`:null),f=(0,R.useRef)(null);(0,R.useEffect)(()=>{c&&!f.current?.open?f.current?.showModal():!c&&f.current?.open&&f.current.close()},[c]);let[p,m]=(0,R.useState)(!1),[h,g]=(0,R.useState)(``),[_,v]=(0,R.useState)(``),[y,b]=(0,R.useState)({agent_id:``,token_budget:0});(0,R.useEffect)(()=>{let t=!0,n=!1;if(s(null),r(null),g(``),v(``),d(!1),!e||e===`new-session-pending`)return;async function i(){if(!n){n=!0;try{let n=await gg(e);t&&(s(n),r(n),v(``))}catch(e){t&&v(e instanceof Error?e.message:String(e))}finally{n=!1}}}i();let a=window.setInterval(()=>{document.hidden||i()},2500);return()=>{t=!1,window.clearInterval(a)}},[e]);let x=!!(o?.enabled&&o.active_turn_id),S=o?.native.status??`absent`,C=![`absent`,`complete`].includes(S),w=!!(o?.settings.agent_id&&o.settings.token_budget&&o.settings.execution_config),T=e=>{b({agent_id:e.settings.agent_id??``,token_budget:e.settings.token_budget??0}),d(!0)},E=o?.enabled?o.recovery_required?a?`LoopX · 需要恢复连接`:`LoopX · Reconnect required`:S===`blocked`?a?`LoopX · 需要处理阻塞`:`LoopX · Blocked`:x?a?`LoopX · 正在推进`:`LoopX · Working`:S===`complete`?a?`LoopX · 本轮已结束`:`LoopX · Run finished`:[`budgetLimited`,`usageLimited`].includes(S)?a?`LoopX · 已到额度限制`:`LoopX · Usage limit`:a?`LoopX · 已暂停`:`LoopX · Paused`:a?`普通对话`:`Conversation`,D=()=>{o&&!u?T(o):d(!1)};async function O(){m(!0),g(``);try{let e=await gg(await t());s(e),r(e),T(e)}catch(e){g(e instanceof Error?e.message:String(e))}finally{m(!1)}}async function k(t){if(e){m(!0),g(``);try{let n=await xg(e,t,t===`configure`?y:void 0);s(n),r(n),(t===`configure`||t===`exit`)&&d(!1)}catch(e){g(e instanceof Error?e.message:String(e))}finally{m(!1)}}}let A=o?.deliveries.some(e=>[`rejected`,`unavailable`].includes(e.status)),ee=o?.ingress.filter(e=>e.status!==`delivered`)??[];return(0,z.jsxs)(`section`,{className:`goal-loopx-mode`,"aria-label":a?`LoopX 运行模式`:`LoopX execution mode`,children:[(0,z.jsxs)(`div`,{className:`goal-loopx-mode-bar`,children:[(0,z.jsxs)(`span`,{className:`goal-loopx-mode-status`,"data-active":x,role:`status`,children:[(0,z.jsx)(`i`,{"aria-hidden":`true`}),E]}),(0,z.jsxs)(`div`,{className:`goal-loopx-mode-actions`,children:[w&&e?(0,z.jsxs)(`button`,{type:`button`,className:`goal-loopx-team-trigger`,onClick:()=>l(`team`),"aria-haspopup":`dialog`,children:[(0,z.jsx)(hh,{size:16}),a?`团队执行情况`:`Team execution`,A?(0,z.jsx)(`span`,{className:`goal-loopx-alert-dot`,"aria-label":a?`最近回读需要核验`:`Last observations need review`}):null]}):null,(0,z.jsx)(`button`,{type:`button`,disabled:p||o?.conversation_busy||!o,onClick:D,"aria-label":a?`运行设置`:`Settings`,title:a?`运行设置与用量`:`Settings and usage`,"aria-haspopup":`dialog`,children:(0,z.jsx)(ah,{size:16})}),(0,z.jsxs)(`button`,{type:`button`,className:`goal-loopx-primary`,disabled:p||!!(o?.conversation_busy&&!x),title:x?a?`暂停协调员;已派发的成员继续执行`:`Pause coordinator; dispatched members keep working`:void 0,onClick:async()=>{if(!o){await O();return}x?k(`pause`):!w||Number(o.settings.token_budget??0)<=Number(o.native.tokensUsed??0)?D():n(C?`resume`:`start`)},children:[x?(0,z.jsx)(Jm,{size:14}):(0,z.jsx)(Ym,{size:14}),x?a?`暂停协调员`:`Pause coordinator`:o?.enabled?S===`complete`?a?`开启新一轮`:`Start new run`:a?`恢复推进`:`Continue`:a?`开启 LoopX 模式`:`Enable LoopX`]})]})]}),ee.length?(0,z.jsxs)(`p`,{role:`status`,children:[a?`待处理消息:`:`Pending messages: `,ee.map(e=>`${e.mode===`loopx_queue`?`queue`:`inbox`} · ${e.status}`).join(` / `)]}):null,A?(0,z.jsx)(`button`,{className:`goal-loopx-review-notice`,type:`button`,onClick:()=>l(`team`),children:a?`最近成员回读有未通过或无法核验的结果 · 查看团队`:`Last member observations include rejected or unverified results · View team`}):null,(h||_)&&!c?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:h||_}):null,(0,z.jsx)(`dialog`,{className:`goal-loopx-dialog`,ref:f,"aria-labelledby":`goal-loopx-dialog-title`,onClose:()=>l(null),onClick:e=>{e.target===e.currentTarget&&l(null)},children:c?(0,z.jsxs)(`div`,{className:`goal-loopx-dialog-content`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h2`,{id:`goal-loopx-dialog-title`,children:c===`team`?a?`团队执行情况`:`Team execution`:a?`运行设置`:`Execution settings`}),(0,z.jsx)(`button`,{type:`button`,autoFocus:!0,"aria-label":a?`关闭`:`Close`,onClick:()=>l(null),children:(0,z.jsx)(gh,{size:18})})]}),h||_?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:h||_}):null,c===`team`&&e&&!_?(0,z.jsx)(Mb,{sessionId:e,members:o?.members??[],zh:a,canMessage:x&&!o?.paused&&!_,ingress:o?.ingress??[]},`${e}:${o?.settings.agent_id}:${o?.settings.execution_config}`):null,c===`team`?(0,z.jsxs)(`div`,{className:`goal-team-control`,children:[(0,z.jsx)(`button`,{type:`button`,disabled:p||!x||!!_,onClick:()=>void k(`pause`),children:a?`暂停协调员`:`Pause coordinator`}),(0,z.jsxs)(`p`,{role:`status`,children:[o?.paused?x?a?`已暂停后续调度,等待当前协调轮次停止回读。`:`Further dispatch paused; awaiting coordinator turn stop readback.`:a?`协调员已暂停。`:`Coordinator paused.`:null,a?`此操作不会停止已派发成员;成员状态以上次执行回读为准。当前入口不支持停止整个团队。`:`This does not stop dispatched members; their states are last-read observations. Whole-team stop is unavailable here.`]})]}):null,u?(0,z.jsxs)(`div`,{className:`goal-loopx-mode-settings`,children:[(0,z.jsxs)(`label`,{children:[a?`已注册的协调身份`:`Registered coordinator`,(0,z.jsxs)(`select`,{value:y.agent_id,onChange:e=>b({...y,agent_id:e.target.value}),children:[(0,z.jsx)(`option`,{value:``,children:a?`选择已授权身份`:`Select authorized identity`}),o?.registered_agents.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),(0,z.jsxs)(`label`,{children:[a?`协调员总 token 额度`:`Coordinator total token allowance`,(0,z.jsx)(`input`,{type:`number`,min:1,max:2147483647,value:y.token_budget||``,onChange:e=>b({...y,token_budget:Number(e.target.value)})})]}),(0,z.jsxs)(`label`,{children:[a?`成员执行绑定文件(Goal 配置)`:`Member execution bindings (Goal configuration)`,(0,z.jsx)(`input`,{readOnly:!0,value:o?.settings.execution_config??(a?`未配置`:`Not configured`)})]}),(0,z.jsx)(`p`,{children:a?`绑定文件由 Goal 子代理设置统一管理;额度包含协调员历史用量,成员授权不会因开启模式而扩大。`:`Manage the binding file in Goal sub-agent settings. The allowance includes coordinator history; enabling this mode does not expand member grants.`}),(0,z.jsx)(`button`,{type:`button`,disabled:p||!y.agent_id||y.token_budget<1||!o?.settings.execution_config,onClick:()=>void k(`configure`),children:a?`保存设置`:`Save settings`})]}):null,c===`settings`&&o?.enabled&&o.native.tokensUsed!==void 0?(0,z.jsxs)(`p`,{className:`goal-loopx-mode-usage`,children:[a?`协调员累计用量`:`Coordinator usage`,` `,o.native.tokensUsed.toLocaleString(),` / `,o.native.tokenBudget?.toLocaleString()??`—`,` tokens`]}):null,c===`settings`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:a?`开启后,当前协调员持续推进本 Goal。暂停仅影响协调员,已派发成员继续执行;本轮结束不等于 Goal 完成。`:`The coordinator continues this Goal. Pausing affects only the coordinator; dispatched members keep working. A finished run does not complete the Goal.`}),o?.enabled&&!x?(0,z.jsx)(`button`,{type:`button`,disabled:p,onClick:()=>void k(`exit`),children:a?`退出模式`:`Exit mode`}):null]}):null]}):null})]})}var Pb=e=>e.items.filter(e=>e.operation_id&&e.status===`accepted`&&!e.recovery_required&&e.artifacts?.length);function Fb({sessionId:e,zh:t,refreshKey:n}){let[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(null),[s,c]=(0,R.useState)(!1),[l,u]=(0,R.useState)(``),d=(0,R.useRef)(0),f=(0,R.useRef)(null),p=(0,R.useRef)(void 0),m=(0,R.useRef)(!1),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{f.current=null,p.current=void 0},[e]),(0,R.useEffect)(()=>(v(p.current),()=>{d.current++}),[e,n]),(0,R.useEffect)(()=>{a&&m.current&&(h.current?.focus(),m.current=!1)},[a]);let g=t?`产物或验收已变化,未展示旧报告。请重新选择可核验的产物。`:`Artifact or acceptance changed. Previous report cleared; select a verified artifact again.`;async function _(t,n,r){let i=await _g(e,t);if(r!==d.current)return;let a=i.artifacts??[],s=n?.ref?a.filter(e=>e.ref===n.ref):[],c=n?.ref?s.length===1&&s[0].sha256===n.sha256?s[0]:void 0:a.find(e=>Tb(e.ref))??a[0];i.operation_id!==t||i.status!==`accepted`||i.error||i.recovery_required||!c?u(g):(f.current={operationId:t,ref:c.ref,sha256:c.sha256},o({result:i,artifact:c}))}async function v(n,r=!1){let a=++d.current;r&&(f.current=null),p.current=n,m.current=!1,c(!0),u(``),i(null),o(null);try{let t=await yg(e,n);if(a!==d.current)return;i(t);let r=f.current;if(!r){let e=Pb(t)[0],n=e?.artifacts?.find(e=>Tb(e.ref))??e?.artifacts?.[0];e?.operation_id&&n&&(r={operationId:e.operation_id,...n})}r&&(f.current=r,await _(r.operationId,r,a))}catch(e){a===d.current&&u(`${t?`无法核验,已清除上次报告。`:`Cannot verify; previous report cleared.`} ${String(e)}`)}finally{a===d.current&&c(!1)}}async function y(e,n){let r=++d.current;m.current=!0,c(!0),u(``),o(null);let i={operationId:e,...n};f.current=i;try{await _(e,i,r)}catch(e){r===d.current&&u(`${t?`无法核验,已清除上次报告。`:`Cannot verify; previous report cleared.`} ${String(e)}`)}finally{r===d.current&&c(!1)}}let b=r?Pb(r):[];return(0,z.jsxs)(`section`,{className:`goal-team-results`,"aria-label":t?`团队成果`:`Team results`,"aria-busy":s,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:t?`团队成果`:`Team results`}),(0,z.jsxs)(`button`,{type:`button`,disabled:s,onClick:()=>void v(p.current),children:[(0,z.jsx)(Qm,{size:14,"aria-hidden":`true`}),t?`刷新成果`:`Refresh results`]})]}),s?(0,z.jsx)(`p`,{role:`status`,children:t?`正在核验产物…`:`Verifying artifacts…`}):null,l?(0,z.jsx)(`p`,{role:`alert`,children:l}):null,r&&!r.page_readback_complete?(0,z.jsx)(`p`,{role:`status`,children:t?`部分工作无法核验,请在团队执行中检查。`:`Some work cannot be verified; inspect Team execution.`}):null,(0,z.jsxs)(`div`,{className:`goal-team-results-layout`,children:[r?(0,z.jsxs)(`nav`,{className:`goal-team-result-list`,"aria-label":t?`选择团队产物`:`Choose a team artifact`,children:[b.map(e=>{let t=e.artifacts.find(e=>Tb(e.ref))??e.artifacts[0];return(0,z.jsxs)(`button`,{type:`button`,disabled:s,"aria-label":`${e.agent_id} · ${t.ref}`,"aria-pressed":a?.result.operation_id===e.operation_id,onClick:()=>void y(e.operation_id,t),children:[(0,z.jsx)(jm,{size:16,"aria-hidden":`true`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.agent_id}),(0,z.jsx)(`small`,{children:t.ref})]}),(0,z.jsx)(hm,{className:`goal-team-result-check`,size:14,"aria-hidden":`true`})]},e.record_id)}),b.length?null:(0,z.jsx)(`p`,{children:t?`本页没有可读取的已验收产物。`:`No accepted artifact is available on this page.`}),r.has_more&&r.next_cursor?(0,z.jsx)(`button`,{type:`button`,disabled:s,onClick:()=>void v(r.next_cursor,!0),children:t?`下一页成果`:`Next results page`}):null]}):null,a?(0,z.jsxs)(`div`,{ref:h,tabIndex:-1,className:`goal-team-result-reader`,"aria-label":t?`当前报告`:`Current report`,children:[(0,z.jsx)(Db,{artifact:a.artifact,zh:t,heading:t?`已通过当前验收`:`Currently accepted`},`${a.result.operation_id}:${a.artifact.sha256}`),a.result.artifacts&&a.result.artifacts.length>1?(0,z.jsxs)(`label`,{children:[t?`其他产物`:`Other artifacts`,(0,z.jsx)(`select`,{value:a.artifact.ref,onChange:e=>{let t=a.result.artifacts.find(t=>t.ref===e.target.value);t&&(f.current={operationId:a.result.operation_id,ref:t.ref,sha256:t.sha256},o({...a,artifact:t}))},children:a.result.artifacts.map(e=>(0,z.jsx)(`option`,{value:e.ref,children:e.ref},e.ref))})]}):null,(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`验收与采用关系`:`Acceptance and adoption`}),(0,z.jsx)(mb,{result:a.result,zh:t,onInspect:e=>void y(e)})]})]}):null]})]})}function Ib({attention:e,onSelect:t}){let{t:n}=Ji(),r=Zi(e.updatedAt,n);return(0,z.jsxs)(`button`,{className:`personal-timeline-row personal-attention-row`,"data-testid":`personal-browse-row`,onClick:t,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-attention`,children:(0,z.jsx)(ym,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[e.goalTitle??e.goalId,` · `,n(`home.lane.needsYou`),r?` · ${n(`tasks.waitingAge`,{age:r})}`:``]}),(0,z.jsx)(`strong`,{children:e.text})]}),(0,z.jsx)(`span`,{className:`personal-priority-dot is-${e.priority??(e.blocking?`high`:`medium`)}`}),(0,z.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?n(`tasks.blocked`):n(`tasks.pending`)}),(0,z.jsx)(_m,{size:17})]})}function Lb({onSelect:e,output:t}){let{t:n}=Ji(),r=t.kind===`report`?jm:Am;return(0,z.jsxs)(`button`,{className:`personal-timeline-row personal-output-row`,"data-output-kind":t.kind,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-output`,children:(0,z.jsx)(r,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[t.goalTitle??t.goalId,` · `,t.agentLabel??`LoopX`]}),(0,z.jsx)(`strong`,{children:t.title}),t.summary?(0,z.jsx)(`span`,{children:t.summary}):null,t.report?(0,z.jsxs)(`small`,{children:[n(`files.reportDelta`,{added:t.report.addedCount,changed:t.report.changedCount}),` · `,n(`files.verifiedReport`)]}):null]}),t.createdAt?(0,z.jsx)(`time`,{children:t.createdAt}):null,(0,z.jsx)(_m,{size:17})]})}var Rb={completed:`runs.completed`,failed:`runs.failed`,interrupted:`runs.interrupted`,queued:`runs.queued`,running:`runs.running`,waiting:`runs.waiting`};function zb({onSelect:e,run:t,showGoal:n=!0}){let{t:r}=Ji();return(0,z.jsxs)(`button`,{"aria-label":`${r(`tasks.viewExecution`)}:${t.title}`,className:`personal-timeline-row personal-run-row`,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-run`,children:(0,z.jsx)(fm,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[n?`${t.goalTitle} · `:``,t.agentLabel]}),(0,z.jsx)(`strong`,{children:t.title}),t.latestActivity===t.title?null:(0,z.jsx)(`small`,{children:t.latestActivity})]}),(0,z.jsxs)(`span`,{className:`personal-row-status is-${t.status}`,children:[t.status===`running`?(0,z.jsx)(zm,{className:`personal-spin`,size:14}):null,r(Rb[t.status])]}),(0,z.jsx)(_m,{size:17})]})}function Bb({onSelect:e,schedule:t}){let{t:n}=Ji(),r=t.scheduleKind===`heartbeat`;return(0,z.jsxs)(`button`,{"aria-label":`${r?`Heartbeat`:n(`tasks.scheduled`)}:${t.label};${t.status??`active`}`,className:`personal-schedule-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-schedule-icon`,children:r?(0,z.jsx)(Zm,{size:17}):(0,z.jsx)(mm,{size:17})}),(0,z.jsxs)(`span`,{className:`personal-schedule-copy`,children:[(0,z.jsx)(`small`,{children:n(r?`schedule.heartbeat`:`schedule.monitor`)}),(0,z.jsx)(`strong`,{children:t.label}),(0,z.jsx)(`p`,{children:t.schedule??n(`schedule.summary`)})]}),(0,z.jsx)(`span`,{className:`personal-schedule-status is-${t.status??`active`}`,children:t.status===`paused`?n(`schedule.paused`):n(`schedule.active`)}),(0,z.jsx)(_m,{size:16})]})}function Vb({delivery:e}){let{t}=Ji();if(!e)return null;let n=e.status===`delivered`?e.verification===`reconciled_after_restart`?t(`returnDelivery.reconciled`):t(`returnDelivery.delivered`):e.status===`verification_required`?t(`returnDelivery.verifying`):e.status===`explicit_unverified`?t(`returnDelivery.unverified`):t(`returnDelivery.queued`),r=e.status===`delivered`?`delivered`:e.status===`verification_required`?`verification_required`:e.status===`explicit_unverified`?`explicit_unverified`:`queued`;return(0,z.jsx)(`small`,{className:`personal-return-delivery is-${r}`,role:`status`,children:n})}function Hb({items:e,onSelect:t,selectedGoal:n}){let{locale:r,t:i}=Ji();if(e.length===0)return(0,z.jsxs)(`div`,{className:`personal-timeline-empty`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(ch,{size:20})}),(0,z.jsx)(`strong`,{children:i(n?`timeline.emptyGoal`:`timeline.emptyWorkspace`)}),(0,z.jsx)(`p`,{children:i(n?`timeline.emptyGoalDescription`:`timeline.emptyWorkspaceDescription`)})]});let a=[...e].reverse().find(e=>e.kind===`message`&&e.message.role!==`user`||e.kind===`proposal`&&[`applied`,`stale`,`error`,`gated`].includes(e.proposal.status)||e.kind===`run`&&e.run.status===`completed`),o=a?.kind===`message`?`${a.message.agentLabel??i(`header.manager`)}:${a.message.pending?i(`timeline.pending`):a.message.text}`:a?.kind===`proposal`?`${a.proposal.title}:${a.proposal.status}`:a?.kind===`run`?i(`timeline.runCompleted`,{run:a.run.title}):``,s=e.filter(e=>e.kind===`proposal`&&e.proposal.status===`gated`),c=e.filter(e=>e.kind===`run`&&[`queued`,`running`,`completed`].includes(e.run.status)),l=new Set(c.map(e=>e.id)),u=e.filter(e=>e.kind!==`proposal`&&!l.has(e.id)),d=c.filter(e=>e.run.status===`running`&&!!e.run.sessionId&&!!e.run.canInterrupt).length,f=c.filter(e=>e.run.status===`queued`).length,p=c.filter(e=>e.run.status===`completed`).length,m=c.length-d-f-p,h=r===`zh-CN`?[d&&`${d} 个执行中`,f&&`${f} 个排队中`,p&&`${p} 次执行已结束`,m&&`${m} 项进展更新`].filter(Boolean).join(` · `):[d&&`${d} running`,f&&`${f} queued`,p&&`${p} runs finished`,m&&`${m} progress updates`].filter(Boolean).join(` · `),g=e.filter(e=>e.kind===`proposal`&&e.proposal.status!==`gated`);function _(e){return e.kind===`attention`?(0,z.jsx)(Ib,{attention:e.attention,onSelect:()=>t({item:e.attention,kind:`attention`})},e.id):e.kind===`run`?(0,z.jsx)(zb,{showGoal:!n,onSelect:()=>t({item:e.run,kind:`run`}),run:e.run},e.id):e.kind===`output`?(0,z.jsx)(Lb,{onSelect:()=>t({item:e.output,kind:`output`}),output:e.output},e.id):e.kind===`schedule`?(0,z.jsx)(Bb,{onSelect:()=>t({item:e.schedule,kind:`schedule`}),schedule:e.schedule},e.id):e.kind===`proposal`?(0,z.jsxs)(`button`,{className:`personal-proposal-row is-${e.proposal.status}`,onClick:()=>t({item:e.proposal,kind:`proposal`}),type:`button`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(ch,{size:17})}),(0,z.jsxs)(`span`,{children:[(0,z.jsxs)(`small`,{children:[e.proposal.actionKind,` · `,e.proposal.status]}),(0,z.jsx)(`strong`,{children:e.proposal.title}),e.proposal.impact?(0,z.jsx)(`p`,{children:e.proposal.impact}):null]}),(0,z.jsx)(`b`,{children:e.proposal.status===`gated`&&e.proposal.actionKind!==`operation.execute`?i(`timeline.review`):e.proposal.primaryLabel??i(`timeline.reviewAndConfirm`)})]},e.id):(0,z.jsxs)(`article`,{className:`personal-message is-${e.message.role}`,children:[e.message.role===`user`?null:(0,z.jsx)(`span`,{className:`personal-message-avatar`,children:(0,z.jsx)(fm,{size:17})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.message.role===`user`?i(`common.you`):e.message.agentLabel??i(`header.manager`)}),e.message.time?(0,z.jsx)(`time`,{children:e.message.time}):null]}),e.message.attachments?.length?(0,z.jsx)(`div`,{className:`personal-message-images`,children:e.message.attachments.map(e=>(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl},e.id))}):null,e.message.role===`user`?(0,z.jsx)(`p`,{children:e.message.text}):(0,z.jsx)(wb,{text:e.message.text}),e.message.pending?(0,z.jsx)(`span`,{className:`personal-message-pending`,children:i(`timeline.pending`)}):null,(0,z.jsx)(Wy,{request:e.message.collaboration}),(0,z.jsx)(Vb,{delivery:e.message.returnDelivery})]})]},e.id)}return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{"aria-atomic":`true`,"aria-live":`polite`,className:`personal-live-region`,role:`status`,children:o}),(0,z.jsxs)(`div`,{className:`personal-channel-timeline`,children:[c.length?(0,z.jsxs)(`details`,{className:`personal-activity-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(im,{size:16,"aria-hidden":`true`}),(0,z.jsx)(`strong`,{children:r===`zh-CN`?`执行动态`:`Execution activity`}),(0,z.jsx)(`span`,{children:h})]}),(0,z.jsx)(`div`,{children:c.map(_)})]}):null,u.map(_),s.length?(0,z.jsxs)(`details`,{className:`personal-gated-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(ch,{size:16})}),(0,z.jsx)(`strong`,{children:i(`timeline.waitingConfirmation`)}),(0,z.jsx)(`small`,{children:i(`timeline.gateHistory`,{count:s.length})})]}),(0,z.jsx)(`div`,{children:s.map(_)})]}):null,g.map(_)]})]})}function Ub({goal:e}){let{t,locale:n}=Ji(),r=n===`zh-CN`?{checkpoint_satisfied:`检查点满足`,checkpoint_fresh:`检查点有效`,path_outcome_valid:`路径决策有效`,evidence_refs_present:`证据引用齐全`,final_outcome_claim_present:`最终成果声明齐全`,no_reported_outcome_gap:`无已报告成果缺口`}:{checkpoint_satisfied:`Checkpoint satisfied`,checkpoint_fresh:`Checkpoint current`,path_outcome_valid:`Valid path decision`,evidence_refs_present:`Evidence refs present`,final_outcome_claim_present:`Final outcome claim present`,no_reported_outcome_gap:`No reported outcome gap`},i={connected:t(`acceptance.connected`),mapped:t(`acceptance.mapped`),refreshed:t(`acceptance.refreshed`),adapter_inspected:t(`acceptance.inspected`),run_recorded:t(`acceptance.recorded`),reward_judged:t(`acceptance.judged`),operator_approved:t(`acceptance.approved`),controller_ready:t(`acceptance.ready`),attention_queue:t(`acceptance.attentionSource`),agent_vision:t(`acceptance.visionSource`),todo_projection:t(`acceptance.todoSource`),current_run:t(`acceptance.runSource`)},a=e=>i[e]??t(`acceptance.unknown`),o=e.acceptanceObservation,s=e.loadState||!o||o.goal_id!==e.goalId||o.coverage===`unavailable`;return(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-acceptance`,"aria-label":t(`acceptance.title`),children:[(0,z.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,z.jsx)(`h3`,{children:t(`acceptance.title`)}),(0,z.jsx)(`em`,{children:t(`common.readOnly`)})]}),(0,z.jsx)(`p`,{role:`status`,children:t(s?`acceptance.unavailable`:`acceptance.partial`)}),!s&&o?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:t(`acceptance.gaps`)}),o.acceptance_gaps.length?o.acceptance_gaps.map((e,i)=>(0,z.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,z.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),e.resolution_hint?(0,z.jsx)(`p`,{children:e.resolution_hint}):null,e.component_checks?(0,z.jsx)(`div`,{children:Object.entries(e.component_checks).map(([e,t])=>(0,z.jsxs)(`p`,{children:[r[e],`: `,n===`zh-CN`?t?`通过`:`未通过`:t?`Passed`:`Failed`]},e))}):null,(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.owner`)}),(0,z.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,z.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.observed`)}),(0,z.jsx)(`dd`,{children:e.observed_at??t(`acceptance.unknown`)})]})]})]},`${e.kind}:${e.owner}:${i}`)):(0,z.jsx)(`p`,{children:t(`acceptance.noGaps`)}),(0,z.jsx)(`h4`,{children:t(`acceptance.guards`)}),o.guards.length?o.guards.map((e,n)=>(0,z.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,z.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.owner`)}),(0,z.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),e.blocks_agent?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.agent`)}),(0,z.jsx)(`dd`,{children:e.blocks_agent})]}):null,e.todo_id?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.task`)}),(0,z.jsx)(`dd`,{children:e.todo_id})]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,z.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.scope`)}),(0,z.jsx)(`dd`,{children:e.decision_scope??t(`acceptance.unknown`)})]})]})]},`${e.todo_id}:${n}`)):(0,z.jsx)(`p`,{children:t(`acceptance.noGuards`)}),(0,z.jsx)(`h4`,{children:t(`acceptance.next`)}),(0,z.jsx)(`p`,{children:o.next_action??t(`acceptance.unknown`)}),(0,z.jsxs)(`details`,{children:[(0,z.jsxs)(`summary`,{children:[t(`acceptance.historical_progress`),` · `,o.historical_progress.length]}),(0,z.jsx)(`p`,{children:t(`acceptance.historical`)}),o.historical_progress.map(e=>(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:a(e.kind)}),` · `,e.observed_at??t(`acceptance.unknown`),` `,e.evidence_refs.join(`, `)]},e.kind))]}),o.missing_sources.length?(0,z.jsxs)(`p`,{children:[t(`acceptance.missing`),` `,o.missing_sources.map(a).join(`, `)]}):null,o.truncated?(0,z.jsx)(`p`,{children:t(`acceptance.truncated`)}):null]}):null]})}function Wb({item:e,successor:t,onSelect:n}){let{t:r}=Ji(),i=e.details;return(0,z.jsxs)(`section`,{className:`personal-detail-card`,"aria-label":r(`attentionDetail.title`),children:[(0,z.jsx)(`h3`,{children:r(`attentionDetail.title`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.request`)}),(0,z.jsx)(`dd`,{children:r(i?.interaction===`decision`?`attentionDetail.decision`:`attentionDetail.unknownRequest`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`common.status`)}),(0,z.jsx)(`dd`,{children:r(`attentionDetail.${i?.lifecycle??`unknown`}`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`drawer.reason`)}),(0,z.jsx)(`dd`,{children:i?.reason??e.explanation??r(`attentionDetail.unknownReason`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Todo`}),(0,z.jsx)(`dd`,{children:e.todoId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.targetTodo`)}),(0,z.jsx)(`dd`,{children:i?.unblocksTodoId??r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.targetAgent`)}),(0,z.jsx)(`dd`,{children:i?.blocksAgent??r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.scope`)}),(0,z.jsx)(`dd`,{children:i?.decisionScope?`${i.decisionScope.kind} · ${i.decisionScope.granularity} · ${i.decisionScope.scopeKey}`:r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`drawer.evidence`)}),(0,z.jsx)(`dd`,{children:i?.evidence??e.evidence??r(`drawer.decisionDefaultEvidence`)})]})]}),i?.supersededBy?(0,z.jsxs)(`p`,{children:[r(`attentionDetail.replacement`),`: `,i.supersededBy]}):null,t&&n?(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>n(t),type:`button`,children:r(`attentionDetail.openReplacement`)}):null,(0,z.jsx)(`p`,{children:r(`attentionDetail.boundary`)})]})}function Gb({proposal:e,t}){let n=e.teamPlanOutcome?.kind===`already_present`;return(0,z.jsxs)(`section`,{className:`personal-proposal-card personal-team-plan-result`,children:[(0,z.jsx)(`h3`,{children:db(e.teamPlanOutcome??null,t)}),(0,z.jsxs)(`dl`,{className:`personal-team-plan-assignments`,children:[e.teamPlanAssignments?.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.agentId||e.laneId}),(0,z.jsx)(`dd`,{children:e.task})]},e.laneId)),e.teamPlanGapLanes?.map(e=>(0,z.jsxs)(`div`,{className:`is-pending`,children:[(0,z.jsx)(`dt`,{children:e.agentId||e.laneId}),(0,z.jsxs)(`dd`,{children:[e.task||e.laneId,(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[t(`proposal.teamPlan.pending`),` · `,lb(e.reasonCode,t)]})]})]},e.laneId))]}),(0,z.jsx)(`p`,{children:t(n?`proposal.teamPlan.recoveredHint`:`proposal.teamPlan.assignedHint`)}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t(`proposal.teamPlan.originalPlan`)}),(0,z.jsx)(`dl`,{children:e.fields.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.label}),(0,z.jsx)(`dd`,{children:e.value})]},e.key))})]})]})}function Kb(e){return e.replace(/\s+/gu,` `).trim()}function qb(e,t){let n=RegExp(`(?:不要|不需要|无需|禁止|别|暂不|do not\\b|don't\\b|without\\b).{0,10}(?:${t.source})`,`iu`),r=RegExp(`(?:${t.source}).{0,10}(?:不要|不需要|无需|禁止|关闭)`,`iu`),i=RegExp(`disable\\b.{0,10}(?:${t.source})|(?:turn|switch|set)\\b.{0,10}(?:${t.source}).{0,10}\\boff\\b|(?:${t.source})\\s+(?:is\\s+)?disabled\\b`,`iu`);return n.test(e)||r.test(e)||i.test(e)}function Jb(e){return/(我现在该做什么|下一步|哪些\s*Goal\s*在等我|需要我|谁在等我|Agent\s*在做什么|当前进度|总结(?:今天)?进展)/iu.test(e)}function Yb(e){let t=/(怎么|如何|为什么|给.*建议|分析一下|解释|只读)/u.test(e),n=/(解决一下|修复一下|处理一下|执行一下|改一下|跑(?:一下)?测试|rebase|push|提交|推送)/iu.test(e);return!t&&n&&/(帮我|请|给我|直接|现在|开始|bytedcli|codebase|git|rebase|push|提交|推送)/iu.test(e)}function Xb(e){return Kb(e).toLowerCase().match(/(?:^|[\s,,;;:((:]|到|至)(?todo_done:todo_[a-z0-9_-]{3,64}|pr_merged:(?:(?:[a-z0-9_.-]{1,80})\/(?:[a-z0-9_.-]{1,100}))?#[1-9][0-9]{0,8}|capacity_available:[a-z][a-z0-9_:-]{0,63}|resume_at:[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}t[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]{1,3})?(?:z|[+-][0-9]{2}:[0-9]{2}))(?=$|[\s,,。;;))])/iu)?.groups?.condition??null}function Zb(e,t){let n=Kb(e),r=[],i=t.agents.find(e=>{let t=n.toLowerCase();return t.includes(e.agentId.toLowerCase())||t.includes(e.label.toLowerCase())}),a=t.todos.find(e=>n.includes(e.todoId)||n.includes(e.text)),o=/(刚刚|已经|已)(?:经)?\s*(新增|创建|添加)(?:的)?\s*(todo|待办|任务)/iu.test(n),s=!!t.goalId&&!qb(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n);if(!t.goalId&&!qb(n,/goal|目标/iu)&&/(创建|新建|设置|create|start|set up).{0,24}(goal|目标)/iu.test(n)&&r.push({actionKind:`goal.create`,confidence:.97,normalizedParameters:{heartbeat_enabled:!qb(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n)}}),t.goalId&&s&&r.push({actionKind:`heartbeat.bind`,confidence:.96,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&!s&&!qb(n,/定时|监控|监测|持续观察|scheduled check|monitor/iu)&&/(定时|监控|监测|每.{0,8}(分钟|小时|天)|持续观察|scheduled check|monitor|every.{0,12}(minute|hour|day)|daily)/iu.test(n)&&r.push({actionKind:`monitor.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&i&&!qb(n,/绑定|负责|接管|管理/iu)&&/((让|交给).{0,20}(管理|负责|接管).{0,8}(goal|目标)|(绑定).{0,12}(goal|目标)|(goal|目标).{0,12}(交给|绑定|负责|接管))/iu.test(n)&&r.push({actionKind:`agent.bind`,confidence:.96,normalizedParameters:{agent_id:i.agentId,goal_id:t.goalId}}),t.goalId&&!o&&!qb(n,RegExp(`todo|待办|任务`,`iu`))&&/(创建|新建|新增|添加|加一个|记一个).{0,16}(todo|待办|任务)|(todo|待办|任务).{0,12}(创建|新建|新增|添加)|(?:create|add)(?:\s+(?:a|an|new))?\s+(?:todo|task)|(?:todo|task).{0,12}(?:create|add)/iu.test(n)&&r.push({actionKind:`todo.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&Yb(n)&&r.push({actionKind:`todo.create`,confidence:.9,normalizedParameters:{goal_id:t.goalId,start_execution:!0}}),t.goalId&&a){let e=!qb(n,/完成|做完|关闭/u)&&/完成|做完|关闭/u.test(n)?`complete`:!qb(n,/阻塞|卡住/u)&&/阻塞|卡住/u.test(n)?`block`:!qb(n,/暂缓|稍后|推迟/u)&&/暂缓|稍后|推迟/u.test(n)?`defer`:i&&!qb(n,/交给|分配给|改派/u)&&/交给|分配给|改派/u.test(n)?`reassign`:null;if(e){let i=e===`defer`?Xb(n):null;if(e===`defer`&&!i)return{actionKind:`todo.update`,confidence:.97,missingFields:[`resume_when`],normalizedParameters:{goal_id:t.goalId,operation:e,todo_id:a.todoId},route:`clarify`};r.push({actionKind:`todo.update`,confidence:.97,normalizedParameters:{goal_id:t.goalId,operation:e,...i?{resume_when:i}:{},todo_id:a.todoId}})}}let c=[...new Map(r.map(e=>[e.actionKind,e])).values()];return c.length>1?{actionKind:null,confidence:.4,missingFields:[`single_intent`],normalizedParameters:{},route:`clarify`}:c.length===1?{...c[0],missingFields:[],route:`typed_action`}:!t.goalId&&Jb(n)?{actionKind:null,confidence:.98,missingFields:[],normalizedParameters:{},route:`projection`}:{actionKind:null,confidence:.75,missingFields:[],normalizedParameters:{},route:`agent_chat`}}function Qb(e,t,n){if(!e)return{};if(!t.trim())return{modelConfig:null};let r={model:t.trim()};return n&&(r.reasoning_effort=n),{modelConfig:r}}var $b=[`a[href]`,`button:not([disabled])`,`textarea:not([disabled])`,`select:not([disabled])`,`input:not([disabled])`,`[tabindex]:not([tabindex='-1'])`].join(`,`),ex=[{key:`drawer.taskBlock`,operation:`block`},{key:`drawer.taskSuccessor`,operation:`successor_create`}],tx=[{key:`drawer.decisionReject`,resolution:`reject`},{key:`drawer.decisionDefer`,resolution:`defer`}],nx=Array.from({length:32},(e,t)=>t+1),rx=/^[a-z][a-z0-9_.-]{0,63}$/u;function ix(e){let t=String(e??``).trim().toLowerCase();return rx.test(t)?t:null}function ax(e,t){return e.enabled===t.enabled&&e.maxChildren===t.maxChildren&&JSON.stringify(e.modelConfig??null)===JSON.stringify(t.modelConfig??null)&&(e.executionConfig??``)===(t.executionConfig??``)&&[...e.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)===[...t.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)}function ox({agents:e,attentionHistory:t=[],onSelectAttention:n,callbacks:r,goalNotifications:i=[],goals:a=[],inspectorExpanded:o=!1,larkConnections:s=[],onClose:c,onToggleInspectorSize:l,readOnly:u=!1,runs:d=[],selection:f}){let{locale:p,t:m}=Ji(),[h,g]=(0,R.useState)(``),[_,v]=(0,R.useState)(!1),[y,b]=(0,R.useState)(`idle`),[x,S]=(0,R.useState)(`record`),[C,w]=(0,R.useState)([]),[T,E]=(0,R.useState)(null),[D,O]=(0,R.useState)(2),[k,A]=(0,R.useState)(``),[ee,j]=(0,R.useState)(``),[M,te]=(0,R.useState)(``),[ne,N]=(0,R.useState)(`idle`),[P,re]=(0,R.useState)(null),[ie,ae]=(0,R.useState)(null),F=(0,R.useRef)(null),oe=(0,R.useRef)(null),[I,se]=(0,R.useState)(e.find(e=>e.available)?.agentId??`codex`),[L,ce]=(0,R.useState)(``),[le,ue]=(0,R.useState)(``),de=(0,R.useRef)(null),fe=(0,R.useRef)(null),pe=(0,R.useRef)(null),me=(0,R.useRef)(null),he=f.kind===`run`?`run:${f.item.runId}`:f.kind===`proposal`?`proposal:${f.item.previewId}`:f.kind===`todo`?`todo:${f.item.todoId}`:f.kind===`attention`?`attention:${f.item.todoId}`:f.kind===`output`?`output:${f.item.outputId}`:f.kind===`schedule`?`schedule:${f.item.scheduleId}`:`goal:${f.item.goalId}`;(0,R.useEffect)(()=>{b(`idle`),v(!1),S(`record`),ue(``);let e=f.kind===`goal`?f.item.subagentExecution:void 0;w(e?.allowedDomains??[]),A(e?.modelConfig?.model??``),j(e?.modelConfig?.reasoning_effort??``),te(e?.executionConfig??``),O(e?.maxChildren?Math.min(e.maxChildren,32):2),E(null),N(`idle`),re(null),ae(null),F.current=e??null,oe.current=null},[he]);let ge=f.kind===`goal`?f.item.subagentExecution:void 0;(0,R.useEffect)(()=>{let e=F.current,t=ge?!e||!ax(e,ge):e!==null;if(F.current=ge??null,!ie){t&&ge&&(w(ge.allowedDomains),A(ge.modelConfig?.model??``),j(ge.modelConfig?.reasoning_effort??``),te(ge.executionConfig??``),O(ge.maxChildren||2),E(null),N(`idle`),re(null));return}let n=oe.current;(!ge||ax(ie,ge)||n&&!ax(n,ge))&&(ge&&(w(ge.allowedDomains),A(ge.modelConfig?.model??``),j(ge.modelConfig?.reasoning_effort??``),te(ge.executionConfig??``),O(ge.maxChildren||2)),oe.current=null,ae(null))},[ge,ie]),(0,R.useEffect)(()=>{let e=document.activeElement;e instanceof HTMLElement&&!fe.current?.contains(e)&&(pe.current=e);let t=window.requestAnimationFrame(()=>me.current?.focus());return()=>window.cancelAnimationFrame(t)},[he]);let _e=(0,R.useCallback)(()=>{let e=pe.current;c(),window.requestAnimationFrame(()=>e?.focus())},[c]);(0,R.useEffect)(()=>{function e(e){if(e.key===`Escape`){e.preventDefault(),_e();return}if(e.key===`Tab`&&f.kind!==`todo`){let t=Array.from(fe.current?.querySelectorAll($b)??[]).filter(e=>!e.hasAttribute(`disabled`)&&e.getAttribute(`aria-hidden`)!==`true`);if(t.length===0)return;let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())}}return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e)}},[_e,f.kind]);let ve=f.kind===`attention`?m(`drawer.titleAttention`):f.kind===`todo`?m(`drawer.taskDetails`):f.kind===`run`?m(`drawer.runDetails`):f.kind===`output`?m(`drawer.titleOutput`):f.kind===`proposal`&&f.item.actionKind===`team.plan`&&f.item.status===`applied`?m(`proposal.teamPlan.resultTitle`):f.kind===`proposal`?m(f.item.reviewPlan?.retryOriginal?`drawer.recoverEditResult`:f.item.status===`applied`?`drawer.titleProposalApplied`:`drawer.titleProposalConfirm`):f.kind===`schedule`?f.item.scheduleKind===`heartbeat`?`Heartbeat`:m(`drawer.titleSchedule`):m(`drawer.goalDetails`),ye=f.kind===`proposal`?f.item.goalId??`manager`:f.item.goalId,be=f.kind===`attention`?f.item.goalTitle??m(`drawer.currentGoal`):f.kind===`todo`||f.kind===`run`?f.item.goalTitle:f.kind===`output`?f.item.goalTitle??m(`drawer.currentGoal`):f.kind===`goal`?f.item.title:f.kind===`schedule`?m(`drawer.goalAutoRun`):f.kind===`proposal`&&f.item.status===`applied`&&f.item.actionKind===`team.plan`?f.item.goalId??m(`drawer.currentGoal`):f.item.goalId?m(`drawer.goalChanges`):m(`drawer.managerChanges`),xe=f.kind===`goal`?d.find(e=>e.goalId===f.item.goalId&&!!e.sessionId)??d.find(e=>e.goalId===f.item.goalId):null,Se=f.kind===`run`&&(f.item.completedSteps>0||!!f.item.latestActivity||!!f.item.outputs?.length),Ce=f.kind===`attention`?Zi(f.item.updatedAt,m):null,we=Xb(le);async function Te(){f.kind!==`run`||!h.trim()||(await r.onCorrectRun?.(f.item,h.trim()),g(``))}async function Ee(e,t,n,i){if(t===`successor_create`){await r.onPreviewAction?.({actionKind:`todo.create`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-successor-${e.todoId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,text:m(`drawer.taskSuccessorText`,{task:e.text})},summary:m(`drawer.taskSuccessorSummary`,{task:e.text})});return}await r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-${t}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:e.claimedBy??I,goal_id:e.goalId,operation:t,...t===`block`?{note:m(`drawer.taskSuccessorNote`)}:{},...t===`defer`&&i?{resume_when:i}:{},todo_id:e.todoId},summary:`${n}:${e.text}`})}async function De(e,t,n){u||!of(e)||await r.onPreviewAction?.({actionKind:`gate.resolve`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-decision-${e.todoId}-${t}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,decision:t,todo_id:e.todoId},summary:`${n}:${e.text}`})}let Oe=f.kind===`goal`?ie??f.item.subagentExecution??{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0}:{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0},ke=ne===`previewing`||ne===`applying`,Ae=(()=>{if(f.kind!==`goal`)return[];let e=new Map;for(let t of Oe.allowedDomains){let n=ix(t);n&&e.set(n,{matchingTodoCount:0,value:n})}if(Oe.domainCandidates)for(let t of Oe.domainCandidates){let n=ix(t.domain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+t.matchingTodoCount,value:n})}else for(let t of f.item.agentTodos){if(t.done||t.taskClass!==`advancement_task`)continue;let n=ix(t.taskDomain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+1,value:n})}return[...e.values()]})();function je(){w(Oe.allowedDomains),A(Oe.modelConfig?.model??``),j(Oe.modelConfig?.reasoning_effort??``),te(Oe.executionConfig??``),O(Oe.maxChildren||2),E(null),N(`idle`),re(null)}function Me(){let e=[...new Set(C.map(e=>ix(e)))];return e.every(e=>!!e)?e:null}function Ne(e,t){w(n=>t?[...n,e].filter((e,t,n)=>n.indexOf(e)===t):n.filter(t=>t!==e)),re(null),N(`idle`),E(null)}async function Pe(e,t=e){if(f.kind!==`goal`||!r.onPreviewGoalSubagentConfiguration)return;let n=e?Me():[];if(t&&!k.trim()&&ee){N(`error`),E(m(`drawer.subagentModelRequired`));return}if(e&&!n){N(`error`),E(m(`drawer.subagentDomainInvalid`)),re(null);return}let i={alignCodexHostCapacity:e,allowedDomains:n??[],enabled:e,goalId:f.item.goalId,maxChildren:e?D:0,executionConfig:M.trim(),...Qb(t,k,ee)};N(`previewing`),E(m(`drawer.subagentPreviewing`)),re(null);try{let e=await r.onPreviewGoalSubagentConfiguration(i);if(!e.changed){oe.current=ge??null,ae({...e.configuration,domainCandidates:Oe.domainCandidates}),w(e.configuration.allowedDomains),A(e.configuration.modelConfig?.model??``),j(e.configuration.modelConfig?.reasoning_effort??``),te(e.configuration.executionConfig??``),O(e.configuration.maxChildren||2),N(`success`),E(m(`drawer.subagentNoChange`));return}re({...i,codexHostCapacity:e.configuration.codexHostCapacity,changed:e.changed,previewId:e.previewId}),N(`ready`),E(m(`drawer.subagentPreviewReady`))}catch(e){N(`error`),E(e instanceof Error?e.message:m(`drawer.subagentPreviewFailed`))}}async function Fe(){if(!(!P||!r.onApplyGoalSubagentConfiguration)){N(`applying`),E(m(`drawer.subagentApplying`));try{let e=await r.onApplyGoalSubagentConfiguration({allowedDomains:P.allowedDomains,alignCodexHostCapacity:P.enabled,enabled:P.enabled,goalId:P.goalId,maxChildren:P.maxChildren,modelConfig:P.modelConfig,executionConfig:P.executionConfig,previewId:P.previewId});oe.current=ge??null,ae({...e,domainCandidates:Oe.domainCandidates}),w(e.allowedDomains),A(e.modelConfig?.model??``),j(e.modelConfig?.reasoning_effort??``),te(e.executionConfig??``),O(e.maxChildren||2),N(`success`),E(m(e.codexHostCapacity?.newSessionRequired?`drawer.subagentAppliedRestart`:`drawer.subagentApplied`)),re(null);try{await r.onRefresh?.()}catch{N(`warning`),E(m(`drawer.subagentAppliedRefreshFailed`))}}catch(e){N(`error`),E(e instanceof Error?e.message:m(`drawer.subagentApplyFailed`))}}}return(0,z.jsxs)(`div`,{"aria-labelledby":`personal-drawer-title`,"aria-modal":f.kind===`todo`?void 0:`true`,className:`personal-context-drawer`,"data-context-kind":f.kind,ref:fe,role:`dialog`,children:[(0,z.jsxs)(`header`,{className:`personal-drawer-header${f.kind===`todo`?` is-task-inspector`:``}`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h2`,{id:`personal-drawer-title`,ref:me,tabIndex:-1,children:ve}),(0,z.jsx)(`p`,{children:be})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-header-actions`,children:[f.kind===`todo`&&l?(0,z.jsx)(`button`,{"aria-label":m(o?`drawer.inspectorHalf`:`drawer.inspectorFull`),className:`personal-icon-button personal-inspector-size`,onClick:l,title:m(o?`drawer.inspectorHalfView`:`drawer.inspectorFullView`),type:`button`,children:o?(0,z.jsx)(Wm,{size:17}):(0,z.jsx)(Bm,{size:17})}):null,(0,z.jsxs)(`button`,{"aria-label":m(`drawer.closeDetail`,{context:be}),className:`personal-icon-button personal-drawer-close`,onClick:_e,ref:de,type:`button`,children:[(0,z.jsx)(om,{className:`personal-mobile-back`,size:18}),(0,z.jsx)(gh,{className:`personal-desktop-close`,size:18})]})]})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-body`,children:[f.kind===`attention`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card is-attention`,children:[(0,z.jsx)(`small`,{children:f.item.blocking?m(`drawer.attentionBlocking`):m(`drawer.attentionWaiting`)}),(0,z.jsx)(`h3`,{children:f.item.text}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:f.item.priority??`medium`})]}),Ce?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.waiting`)}),(0,z.jsx)(`dd`,{children:m(`tasks.waitingAge`,{age:Ce})})]}):null]})]}),(0,z.jsx)(Wb,{item:f.item,onSelect:n,successor:af(f.item,t)}),!u&&of(f.item)?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void De(f.item,`approve`,m(`common.confirm`)),type:`button`,children:[(0,z.jsx)(hm,{size:17}),m(`drawer.decisionReview`)]}),(0,z.jsxs)(`details`,{className:`personal-compact-menu`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Em,{size:17}),m(`drawer.decisionMore`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{onClick:()=>void r.onExplainDecision?.(f.item),type:`button`,children:[(0,z.jsx)(Hm,{size:16}),m(`drawer.explainDecision`)]}),tx.map(e=>(0,z.jsx)(`button`,{onClick:()=>void De(f.item,e.resolution,m(e.key)),type:`button`,children:m(e.key)},e.resolution))]})]})]}):null]}):null,f.kind===`todo`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-task-inspector-summary`,children:[(0,z.jsxs)(`div`,{className:`personal-task-inspector-status`,children:[(0,z.jsxs)(`span`,{className:f.item.done?`is-done`:f.item.status===`blocked`?`is-blocked`:`is-open`,children:[(0,z.jsx)(`i`,{}),f.item.done?m(`drawer.taskStatusCompleted`):f.item.status===`deferred`?m(`drawer.taskStatusDeferred`):f.item.status===`blocked`?m(`drawer.taskStatusBlocked`):m(`drawer.taskStatusOpen`)]}),f.item.priority?(0,z.jsx)(`span`,{children:f.item.priority}):null,(0,z.jsx)(`span`,{children:f.item.taskClass===`advancement_task`?m(`drawer.taskAdvancement`):f.item.taskClass??m(`drawer.taskOrdinary`)})]}),(0,z.jsx)(`h3`,{children:f.item.text})]}),(0,z.jsxs)(`section`,{"aria-label":m(`drawer.taskInfo`),className:`personal-task-inspector-fields`,children:[(0,z.jsx)(`h4`,{children:m(`drawer.taskInfo`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.owner`)}),(0,z.jsx)(`dd`,{children:f.item.ownerLabel??f.item.claimedBy??m(`drawer.notAssigned`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.status`)}),(0,z.jsx)(`dd`,{children:f.item.done?m(`drawer.taskStatusCompleted`):f.item.status===`deferred`?m(`drawer.taskStatusDeferred`):f.item.status===`blocked`?m(`drawer.taskStatusBlocked`):m(`drawer.taskStatusOpen`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:f.item.priority??m(`drawer.notSet`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.dependencies`)}),(0,z.jsx)(`dd`,{children:f.item.dependencies?.join(` · `)||m(`common.none`)})]}),f.item.status===`deferred`||f.item.resumeWhen?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeWhen`)}),(0,z.jsx)(`dd`,{children:f.item.resumeWhen||m(`drawer.notSet`)})]}):null,f.item.resumeWhen?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeState`)}),(0,z.jsx)(`dd`,{children:f.item.resumeReady?m(`drawer.resumeReady`):m(`drawer.resumePending`)})]}):null,f.item.resumeReceiptId?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeReceipt`)}),(0,z.jsx)(`dd`,{children:f.item.resumeReceiptId})]}):null,f.item.validationDigest?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.validationRevision`)}),(0,z.jsx)(`dd`,{children:f.item.validationRevision??0})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.validationDigest`)}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:f.item.validationDigest})})]}),f.item.validationRevisionActor?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.validationRevisionActor`)}),(0,z.jsx)(`dd`,{children:f.item.validationRevisionActor})]}):null]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.nextTransition`)}),(0,z.jsx)(`dd`,{children:f.item.nextTransition??(f.item.done?m(`drawer.taskNextCompleted`):f.item.resumeReady?m(`drawer.taskNextResumeReady`):f.item.status===`deferred`?m(`drawer.taskNextDeferred`):m(`drawer.taskNextOpen`))})]})]})]}),!u&&!f.item.done?(0,z.jsxs)(`div`,{className:`personal-task-inspector-actions`,"aria-label":m(`drawer.taskActions`),children:[(0,z.jsxs)(`details`,{className:`personal-task-management`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Em,{size:16}),m(`drawer.taskManage`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.reassign`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[m(`drawer.reassign`),(0,z.jsx)(`select`,{"aria-label":m(`drawer.reassign`),onChange:e=>se(e.target.value),value:I,children:e.filter(e=>e.available).map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:f.item.goalId,kind:`todo`,todo_id:f.item.todoId},idempotencyKey:`workspace-todo-${f.item.todoId}-reassign-${I}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:I,goal_id:f.item.goalId,operation:`reassign`,todo_id:f.item.todoId},summary:m(`drawer.reassignSummary`,{task:f.item.text})}),type:`button`,children:m(`timeline.review`)})]}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[m(`drawer.taskPriority`),(0,z.jsxs)(`select`,{"aria-label":m(`drawer.taskPriority`),value:L,onChange:e=>ce(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:m(`drawer.taskPriorityChoose`)}),[`P0`,`P1`,`P2`,`P3`,`P4`].map(e=>(0,z.jsx)(`option`,{value:e,children:e},e)),(0,z.jsx)(`option`,{value:`clear`,children:m(`drawer.taskPriorityClear`)})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:!L,onClick:()=>void r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:f.item.goalId,kind:`todo`,todo_id:f.item.todoId},idempotencyKey:`workspace-todo-${f.item.todoId}-priority-${L}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:f.item.goalId,todo_id:f.item.todoId,operation:`edit`,...L===`clear`?{clear_priority:!0}:{priority:L}},summary:`${m(`drawer.taskPriority`)}: ${L===`clear`?m(`drawer.taskPriorityClear`):L}`}),type:`button`,children:m(`timeline.review`)})]}),(0,z.jsx)(`strong`,{children:m(`drawer.taskDeferUntil`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select personal-inline-resume-when`,children:[m(`drawer.taskDeferUntil`),(0,z.jsx)(`input`,{"aria-label":m(`drawer.taskDeferCondition`),"aria-invalid":!!le.trim()&&!we,onChange:e=>ue(e.target.value),placeholder:m(`drawer.taskDeferPlaceholder`),value:le}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:!we,onClick:()=>void Ee(f.item,`defer`,m(`drawer.taskDefer`),we??void 0),type:`button`,children:m(`drawer.taskDeferReview`)}),(0,z.jsx)(`small`,{children:le.trim()&&!we?m(`drawer.taskDeferInvalid`):m(`drawer.taskDeferSupported`)})]}),(0,z.jsx)(`div`,{className:`personal-task-management-secondary`,children:ex.map(e=>(0,z.jsx)(`button`,{onClick:()=>void Ee(f.item,e.operation,m(e.key)),type:`button`,children:m(e.key)},e.operation))})]})]}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void Ee(f.item,`complete`,m(`drawer.taskComplete`)),type:`button`,children:[(0,z.jsx)(hm,{size:17}),m(`drawer.taskComplete`)]})]}):null,f.item.done?(0,z.jsxs)(`div`,{className:`personal-task-completed-note`,children:[(0,z.jsx)(hm,{size:16}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.taskCompletedTitle`)}),(0,z.jsx)(`small`,{children:m(`drawer.taskCompletedNote`)})]})]}):null]}):null,f.kind===`goal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:Yi(f.item.state,p)}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.agentSentence}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.tokens`)}),(0,z.jsxs)(`dd`,{children:[Qd(f.item.usage?.tokens24h,m(`drawer.usageNotMeasured`),Yd),` / `,Qd(f.item.usage?.tokens7d,m(`drawer.usageNotMeasured`),Yd)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.cost`)}),(0,z.jsxs)(`dd`,{children:[Qd(f.item.usage?.costUsd24h,m(`drawer.usageNotMeasured`),Xd),` / `,Qd(f.item.usage?.costUsd7d,m(`drawer.usageNotMeasured`),Xd)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.duration`)}),(0,z.jsxs)(`dd`,{children:[Qd(f.item.usage?.durationMs24h,m(`drawer.usageNotMeasured`),Zd),` / `,Qd(f.item.usage?.durationMs7d,m(`drawer.usageNotMeasured`),Zd)]})]})]})]}),(0,z.jsx)(Ub,{goal:f.item}),(()=>{let e=i.find(e=>e.goalId===f.item.goalId),t=s.find(e=>e.goal_id===f.item.goalId);return(0,z.jsxs)(z.Fragment,{children:[f.item.repository?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-repository`,children:[(0,z.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,z.jsx)(`small`,{children:m(`drawer.repository`)}),(0,z.jsx)(`em`,{children:m(`common.readOnly`)})]}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(Mm,{size:16}),f.item.repository.label]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.branch`)}),(0,z.jsx)(`dd`,{children:f.item.repository.branch||`detached`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Role`}),(0,z.jsx)(`dd`,{children:m(`drawer.repositoryRole`)})]})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>{let e=navigator.clipboard?.writeText(f.item.repository?.identity??``);if(!e){b(`error`);return}e.then(()=>b(`copied`)).catch(()=>b(`error`))},type:`button`,children:[(0,z.jsx)(Cm,{size:15}),m(y===`copied`?`drawer.copyRepositoryDone`:`drawer.copyRepository`)]}),y===`error`?(0,z.jsx)(`p`,{className:`personal-copy-feedback is-error`,role:`status`,children:m(`drawer.copyRepositoryError`)}):y===`copied`?(0,z.jsx)(`p`,{className:`personal-copy-feedback`,role:`status`,children:m(`drawer.copyRepositorySuccess`)}):null]}):null,u?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:m(`drawer.larkConnection`)}),(0,z.jsx)(`h3`,{children:m(`drawer.remoteDetailsUnavailable`)}),(0,z.jsx)(`p`,{children:m(`drawer.remoteDetailsDescription`)})]}):(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:m(`drawer.larkConnection`)}),t?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`h3`,{children:[t.app_label,(0,z.jsx)(`span`,{className:`personal-connection-status`,children:m(`drawer.connected`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.group`)}),(0,z.jsx)(`dd`,{children:t.chat_name})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.topic`)}),(0,z.jsxs)(`dd`,{children:[`# `,t.topic_name]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.trigger`)}),(0,z.jsx)(`dd`,{children:t.incoming_mode===`mentions`?m(`lark.someoneMentions`):m(`lark.allMessages`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.replyMode`)}),(0,z.jsx)(`dd`,{children:m(`lark.topicReply`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.autoNotify`)}),(0,z.jsx)(`dd`,{children:e?.humanGateAutoNotifyEnabled?m(`common.on`):m(`common.off`)})]}),e?.lastNotifiedAt?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.lastNotification`)}),(0,z.jsx)(`dd`,{children:e.lastNotifiedAt})]}):null]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:m(`drawer.larkNotConfigured`)}),(0,z.jsx)(`p`,{children:m(`drawer.larkNotConfiguredDescription`)})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onOpenNotificationSettings?.(f.item.goalId),type:`button`,children:[(0,z.jsx)(dm,{size:16}),m(t?`drawer.larkConfigure`:`drawer.larkConnect`)]})]})]})})(),(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-session`,children:[(0,z.jsx)(`small`,{children:m(`drawer.runDetails`)}),xe?.sessionId?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:Xi(xe.sessionStatus??xe.status,m)}),(0,z.jsx)(`p`,{children:xe.title}),r.onOpenRunSession?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onOpenRunSession?.(xe),type:`button`,children:[(0,z.jsx)(Ym,{size:16}),m(`drawer.runLatest`)]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:m(`drawer.noRun`)}),(0,z.jsx)(`p`,{children:m(`drawer.noRunDescription`)})]})]}),u?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`heartbeat`,f.item.goalId),type:`button`,children:[(0,z.jsx)(Zm,{size:16}),m(`drawer.setupHeartbeat`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`monitor`,f.item.goalId),type:`button`,children:[(0,z.jsx)(mm,{size:16}),m(`drawer.scheduleAdd`)]})]}),f.item.subagentExecution?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-subagents`,children:[(0,z.jsxs)(`div`,{className:`personal-subagent-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:m(`drawer.subagentLabel`)}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(fm,{size:16}),m(`drawer.subagentTitle`)]})]}),(0,z.jsxs)(`button`,{"aria-checked":Oe.enabled,"aria-label":m(P&&ne===`ready`?`drawer.subagentPending`:Oe.enabled?`drawer.subagentDisable`:`drawer.subagentEnable`),className:`personal-subagent-switch`,"data-pending":P&&ne===`ready`?`true`:void 0,disabled:u||ke||!!P||!r.onPreviewGoalSubagentConfiguration,onClick:()=>void Pe(!Oe.enabled),role:`switch`,type:`button`,children:[(0,z.jsx)(`span`,{}),m(P&&ne===`ready`?`drawer.subagentPending`:Oe.enabled?`common.on`:`common.off`)]})]}),(0,z.jsx)(`p`,{children:m(`drawer.subagentDescription`)}),P&&ne===`ready`?(0,z.jsxs)(`div`,{className:`personal-subagent-preview`,children:[(0,z.jsx)(`strong`,{children:m(P.enabled?`drawer.subagentConfirmEnable`:`drawer.subagentConfirmDisable`)}),(0,z.jsx)(`p`,{children:P.enabled?m(`drawer.subagentPreviewSummary`,{count:P.maxChildren,domains:P.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)}):m(`drawer.subagentDisableSummary`)}),P.modelConfig===void 0?null:(0,z.jsxs)(`p`,{children:[m(`drawer.subagentModel`),`: `,P.modelConfig?.model||m(`drawer.subagentModelDefault`),` · `,P.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)]}),(0,z.jsxs)(`p`,{children:[m(`drawer.subagentExecutionConfig`),`: `,P.executionConfig||m(`drawer.subagentExecutionConfigNone`)]}),P.enabled&&P.codexHostCapacity?(0,z.jsx)(`p`,{children:m(P.codexHostCapacity.writeRequired?`drawer.subagentHostCapacityRaise`:`drawer.subagentHostCapacityReady`,{configured:P.codexHostCapacity.configuredChildren??m(`drawer.subagentHostCapacityImplicit`),required:P.codexHostCapacity.requiredChildren})}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{className:`personal-primary-action`,onClick:()=>void Fe(),type:`button`,children:m(`common.confirm`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:je,type:`button`,children:m(`common.cancel`)})]})]}):null,T?(0,z.jsxs)(`p`,{className:`personal-subagent-feedback is-${ne}`,role:`status`,children:[ne===`previewing`||ne===`applying`?(0,z.jsx)($m,{className:`personal-spin`,size:13}):null,T]}):null,(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentModel`)}),(0,z.jsx)(`dd`,{children:Oe.modelConfig?.model||m(`drawer.subagentModelDefault`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentEffort`)}),(0,z.jsx)(`dd`,{children:Oe.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentCurrentBoundary`)}),(0,z.jsx)(`dd`,{children:Oe.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentChildLimit`)}),(0,z.jsx)(`dd`,{children:Oe.maxChildren||0})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentExecutionConfig`)}),(0,z.jsx)(`dd`,{children:Oe.executionConfig||m(`drawer.subagentExecutionConfigNone`)})]})]}),u?(0,z.jsx)(`p`,{className:`personal-subagent-read-only`,children:m(`drawer.subagentRemoteReadOnly`)}):(0,z.jsxs)(`div`,{className:`personal-subagent-fields`,children:[(0,z.jsxs)(`fieldset`,{className:`personal-subagent-domain-picker`,disabled:ke,children:[(0,z.jsx)(`legend`,{children:m(`drawer.subagentDomains`)}),Ae.length>0?(0,z.jsx)(`div`,{className:`personal-subagent-domain-options`,children:Ae.map(e=>{let t=C.includes(e.value);return(0,z.jsxs)(`label`,{className:`personal-subagent-domain-option${t?` is-selected`:``}`,children:[(0,z.jsx)(`input`,{"aria-label":e.value,checked:t,onChange:t=>Ne(e.value,t.target.checked),type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.value}),(0,z.jsx)(`small`,{children:m(`drawer.subagentDomainTodoCount`,{count:e.matchingTodoCount})})]})]},e.value)})}):(0,z.jsx)(`p`,{className:`personal-subagent-domain-empty`,children:m(`drawer.subagentDomainsEmpty`)}),(0,z.jsx)(`small`,{children:m(`drawer.subagentDomainsHint`)})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentModel`)}),(0,z.jsx)(`input`,{"aria-label":m(`drawer.subagentModel`),disabled:ke,value:k,placeholder:`gpt-5.6-luna`,onChange:e=>{A(e.target.value),re(null),N(`idle`),E(null)}})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentEffort`)}),(0,z.jsxs)(`select`,{"aria-label":m(`drawer.subagentEffort`),disabled:ke,value:ee,onChange:e=>{j(e.target.value),re(null),N(`idle`),E(null)},children:[(0,z.jsx)(`option`,{value:``,children:m(`drawer.subagentModelDefault`)}),[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`,`ultra`].map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:ke,type:`button`,onClick:()=>{A(`gpt-5.6-luna`),j(`max`),re(null),N(`idle`),E(null)},children:m(`drawer.subagentLunaPreset`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:ke,type:`button`,onClick:()=>{A(``),j(``),re(null),N(`idle`),E(null)},children:m(`drawer.subagentClearModel`)}),(0,z.jsx)(`p`,{children:m(`drawer.subagentModelHint`)}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentExecutionConfig`)}),(0,z.jsx)(`input`,{"aria-label":m(`drawer.subagentExecutionConfig`),disabled:ke,onChange:e=>{te(e.target.value),re(null),N(`idle`),E(null)},placeholder:`.loopx/config/delegations.json`,value:M})]}),(0,z.jsx)(`p`,{children:m(`drawer.subagentExecutionConfigHint`)}),(0,z.jsxs)(`label`,{className:`personal-subagent-limit-field`,children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentMaxChildren`)}),(0,z.jsx)(`select`,{"aria-label":m(`drawer.subagentMaxChildren`),disabled:ke,onChange:e=>{O(Number(e.target.value)),re(null),N(`idle`),E(null)},value:D,children:nx.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:ke,onClick:()=>void Pe(Oe.enabled,!0),type:`button`,children:m(`drawer.subagentPreviewBoundary`)})]})]}):null]}):null,f.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{"aria-label":m(`drawer.runView`),className:`personal-run-drawer-tabs`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":x===`record`,onClick:()=>S(`record`),role:`tab`,type:`button`,children:m(`drawer.executionRecordAndResult`)}),(0,z.jsx)(`button`,{"aria-selected":x===`details`,onClick:()=>S(`details`),role:`tab`,type:`button`,children:m(`drawer.detailsAndActions`)})]}),x===`record`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card personal-session-summary`,children:[(0,z.jsxs)(`small`,{children:[f.item.agentLabel,` · `,Xi(f.item.sessionStatus??f.item.status,m)]}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]})]})]}),(0,z.jsxs)(`section`,{"aria-label":m(`drawer.executionRecord`),className:`personal-session-message-record`,children:[(0,z.jsx)(`h3`,{children:m(`drawer.executionRecord`)}),f.item.sessionMessages?.length?(0,z.jsx)(`ol`,{children:f.item.sessionMessages.map(e=>(0,z.jsxs)(`li`,{className:`is-${e.role}`,children:[(0,z.jsx)(`i`,{}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.role===`user`?m(`drawer.runRoleUser`):e.role===`assistant`?m(`drawer.runRoleAssistant`):m(`drawer.runRoleSystem`)}),e.createdAt?(0,z.jsx)(`time`,{children:new Date(e.createdAt).toLocaleTimeString(p,{hour:`2-digit`,minute:`2-digit`,hour12:!1})}):null]}),(0,z.jsx)(`p`,{children:e.text})]})]},e.messageId))}):(0,z.jsx)(`p`,{className:`personal-session-empty`,children:Se?m(`drawer.runRecordProjected`,{completed:f.item.completedSteps,outputs:f.item.outputs?.length?m(`drawer.runRecordProjectedOutputs`,{count:f.item.outputs.length}):``,total:f.item.totalSteps}):m(`drawer.runRecordEmpty`)}),f.item.status===`running`?(0,z.jsxs)(`div`,{className:`personal-session-active-step`,children:[(0,z.jsx)(`i`,{}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.analysis`)}),(0,z.jsx)(`small`,{children:m(`drawer.agentWorking`)})]})]}):null]}),f.item.outputs?.length?(0,z.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-run-outputs-title`,children:[(0,z.jsx)(`h3`,{id:`personal-run-outputs-title`,children:m(`drawer.outputs`)}),(0,z.jsx)(`ol`,{children:f.item.outputs.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`small`,{children:e.createdAt??e.kind??m(`files.emptySummary`)})]})},e.outputId))})]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsxs)(`small`,{children:[f.item.agentLabel,` · `,Xi(f.item.status,m)]}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.sessionStatus`)}),(0,z.jsx)(`dd`,{children:Xi(f.item.sessionStatus??f.item.status,m)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.sessionRecoverable`)}),(0,z.jsx)(`dd`,{children:f.item.resumable===!1?m(`drawer.resumeNo`):m(`drawer.resumeYes`)})]})]})]}),f.item.sessionStatus===`resume_failed`&&!u?(0,z.jsxs)(`section`,{className:`personal-recovery-panel`,"aria-label":m(`drawer.recoveryFailed`),children:[(0,z.jsx)(`strong`,{children:m(`drawer.recoveryFailed`)}),(0,z.jsx)(`p`,{children:m(`drawer.recoveryDescription`)}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,z.jsx)($m,{size:16}),m(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(Ym,{size:16}),m(`drawer.recoveryNewSession`)]})]}):null,u?null:(0,z.jsxs)(`section`,{className:`personal-correction-panel`,children:[(0,z.jsx)(`header`,{children:(0,z.jsxs)(`span`,{children:[(0,z.jsx)(fm,{size:16}),m(`drawer.correctionLabel`,{agent:f.item.agentLabel})]})}),(0,z.jsx)(`p`,{children:m(`drawer.correctionDescription`)}),(0,z.jsxs)(`div`,{className:`personal-correction-composer`,children:[(0,z.jsx)(`textarea`,{"aria-label":m(`drawer.correctionTextarea`,{agent:f.item.agentLabel,goal:f.item.goalTitle,run:f.item.title}),onChange:e=>g(e.target.value),placeholder:m(`drawer.correctionPlaceholder`),rows:3,value:h}),(0,z.jsx)(`button`,{"aria-label":m(`drawer.correctionSend`),disabled:!h.trim(),onClick:()=>void Te(),type:`button`,children:(0,z.jsx)(nh,{size:16})})]})]}),u?null:(0,z.jsxs)(`details`,{className:`personal-compact-menu personal-run-more`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Em,{size:17}),m(`drawer.moreRunActions`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{disabled:!f.item.canInterrupt,onClick:()=>void r.onInterruptRun?.(f.item),type:`button`,children:[(0,z.jsx)(Jm,{size:16}),m(`drawer.runInterrupt`)]}),(0,z.jsxs)(`button`,{disabled:f.item.resumable===!1,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,z.jsx)($m,{size:16}),m(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(Ym,{size:16}),m(`drawer.runNewSession`)]}),(0,z.jsxs)(`button`,{onClick:()=>void r.onCloseRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(lh,{size:16}),m(`drawer.runCloseSession`)]})]})]})]})]}):null,f.kind===`output`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:f.item.kind??`output`}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.summary??m(`drawer.outputRecorded`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.outputTodo`)}),(0,z.jsx)(`dd`,{children:f.item.todoId??m(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.outputRun`)}),(0,z.jsx)(`dd`,{children:f.item.runId??m(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Agent`}),(0,z.jsx)(`dd`,{children:f.item.agentLabel??f.item.agentId??`LoopX`})]})]})]}),f.item.report?(0,z.jsxs)(`section`,{className:`personal-report-detail`,"data-testid":`personal-periodic-report-detail`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsxs)(`strong`,{children:[`+`,f.item.report.addedCount]}),m(`files.reportAdded`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f.item.report.changedCount}),m(`files.reportChanged`)]})]}),(0,z.jsxs)(`p`,{children:[f.item.report.periodStartAt,` → `,f.item.report.periodEndAt]}),(0,z.jsx)(`ol`,{children:f.item.report.items.map(e=>(0,z.jsxs)(`li`,{"data-change-kind":e.changeKind,children:[(0,z.jsxs)(`small`,{children:[e.changeKind,` · `,e.status]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`p`,{children:e.summary})]},e.sourceRef))}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`span`,{children:[m(`files.reportPublication`),`: `,f.item.report.publicationId]}),(0,z.jsxs)(`span`,{children:[m(`files.reportGeneration`),`: `,f.item.report.generationId]})]})]}):null,f.item.safePreview?(0,z.jsx)(`pre`,{"aria-label":m(`drawer.outputSafePreview`),className:`personal-safe-preview`,children:f.item.safePreview}):(0,z.jsx)(`p`,{className:`personal-preview-unavailable`,children:m(`drawer.previewUnavailable`)}),(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:!r.onOpenOutput,onClick:()=>{r.onOpenOutput?.(f.item),c()},type:`button`,children:[(0,z.jsx)(Dm,{size:16}),m(`files.openConversation`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!r.onExportOutput,onClick:()=>void r.onExportOutput?.(f.item),type:`button`,children:[(0,z.jsx)(Tm,{size:16}),m(`files.exportSummary`)]})]})]}):null,f.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[f.item.actionKind===`team.plan`&&f.item.status===`applied`?(0,z.jsx)(Gb,{proposal:f.item,t:m}):(0,z.jsxs)(`section`,{className:`personal-proposal-card`,children:[(0,z.jsxs)(`small`,{children:[f.item.actionKind,` · `,f.item.status]}),(0,z.jsx)(`h3`,{children:f.item.title}),f.item.impact?(0,z.jsx)(`p`,{children:f.item.impact}):null,f.item.reviewPlan&&!f.item.reviewPlan.retryOriginal&&f.item.actionKind!==`team.plan`?(0,z.jsx)(`p`,{className:`personal-proposal-explainer`,"data-action-review":f.item.reviewPlan.interaction,children:f.item.actionKind===`operation.execute`&&f.item.status===`gated`?m(`actionReview.operation_group_confirmation`):f.item.actionKind===`operation.execute`&&f.item.reviewPlan.reason===`readback_unverified`?m(`actionReview.operation_result_delivery_pending`):m(`actionReview.${f.item.reviewPlan.reason}`)}):null,f.item.status===`ready`&&f.item.actionKind!==`team.plan`?(0,z.jsx)(`p`,{className:`personal-proposal-explainer`,children:m(`drawer.proposalExplainer`)}):null,(0,z.jsx)(`dl`,{children:f.item.fields.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.label}),(0,z.jsx)(`dd`,{children:e.value})]},e.key))})]}),f.item.status===`applied`&&f.item.actionKind!==`team.plan`?(0,z.jsxs)(`p`,{className:`personal-proposal-state ${f.item.actionKind===`operation.execute`&&f.item.reviewPlan?.reason===`readback_unverified`?`is-gated`:`is-applied`}`,children:[(0,z.jsx)(hm,{size:16}),f.item.actionKind===`operation.execute`?f.item.primaryLabel:m(`drawer.proposalApplied`)]}):null,f.item.status===`applied`&&f.item.actionKind!==`operation.execute`&&f.item.goalId?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>{let e=f.item.goalId;c(),r.onOpenGoal?.(e)},type:`button`,children:[(0,z.jsx)(Dm,{size:16}),f.item.actionKind===`goal.create`?m(`drawer.proposalEnterGoal`):m(f.item.actionKind===`team.plan`?`proposal.teamPlan.openGoal`:`drawer.proposalViewGoal`)]}):null,f.item.status===`stale`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-stale`,children:m(`drawer.proposalStale`)}):null,f.item.status===`error`&&!f.item.reviewPlan?.retryOriginal?(0,z.jsxs)(`div`,{className:`personal-proposal-state is-error`,children:[(0,z.jsx)(`span`,{children:f.item.reviewPlan?.reason===`readback_unverified`?m(`actionReview.readback_unverified`):m(`drawer.proposalApplyFailed`)}),f.item.errorMessage?(0,z.jsx)(`small`,{children:f.item.errorMessage}):null,(0,z.jsx)(`small`,{children:m(f.item.actionKind===`team.plan`?`proposal.teamPlan.retryHint`:`drawer.proposalApplyFailedHint`)})]}):null,f.item.status===`rejected`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-error`,children:m(`drawer.proposalRejected`)}):null,f.item.status===`deferred`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-gated`,children:m(`drawer.proposalDeferred`)}):null,f.item.status===`gated`?(0,z.jsxs)(`div`,{className:`personal-proposal-state is-gated`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f.item.actionKind===`operation.execute`?f.item.primaryLabel:m(`drawer.gateRequiresHost`)}),f.item.actionKind===`operation.execute`?f.item.impact:m(`drawer.gateRequiresHostDescription`)]}),f.item.gate?.nextAction?(0,z.jsx)(`small`,{children:f.item.gate.nextAction}):null]}):null,f.item.status===`gated`&&f.item.actionKind===`gate.resolve`?(()=>{let e=e=>f.item.fields.find(t=>t.key===e)?.value,t=e(`goal_id`),n=e(`todo_id`);return!t||!n?null:(0,z.jsxs)(`section`,{className:`personal-detail-card personal-gate-cli-hint`,children:[(0,z.jsx)(`small`,{children:m(`drawer.gateApproveHint`)}),(0,z.jsxs)(`code`,{children:[`loopx todo complete --goal-id `,t,` --todo-id `,n,` --decision-outcome approve`]}),(0,z.jsx)(`small`,{children:m(`drawer.gateRejectHint`)})]})})():null,!u&&f.item.workspaceCandidates?.length?(0,z.jsx)(`div`,{className:`personal-workspace-candidates`,"aria-label":m(`drawer.workspaceCandidates`),children:f.item.workspaceCandidates.map(e=>(0,z.jsxs)(`button`,{onClick:()=>void r.onSelectWorkspaceCandidate?.(f.item,e.workspaceRef),type:`button`,children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.workspaceRef})]},e.workspaceRef))}):null,!u&&f.item.actionKind!==`operation.execute`&&f.item.status===`error`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void(f.item.actionKind===`team.plan`||f.item.reviewPlan?.retryOriginal?r.onApplyProposal?.(f.item):r.onTransitionProposal?.(f.item,`regenerate`)),type:`button`,children:[(0,z.jsx)($m,{size:17}),m(f.item.reviewPlan?.retryOriginal?`drawer.retryOriginal`:f.item.actionKind===`team.plan`?`proposal.teamPlan.retry`:`drawer.proposalRegenerate`)]}):!u&&f.item.actionKind!==`operation.execute`&&f.item.status!==`gated`&&(f.item.actionKind!==`team.plan`||f.item.status!==`applied`)?(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:![`ready`,`deferred`].includes(f.item.status)||f.item.reviewPlan?.canApply===!1,onClick:()=>void r.onApplyProposal?.(f.item),type:`button`,children:[(0,z.jsx)(hm,{size:17}),f.item.status===`applying`?m(`drawer.applying`):f.item.primaryLabel??m(`drawer.apply`)]}):null,!u&&f.item.actionKind!==`operation.execute`&&([`stale`,`gated`,`rejected`].includes(f.item.status)||f.item.status===`ready`&&f.item.reviewPlan?.canApply===!1)?(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`regenerate`),type:`button`,children:[(0,z.jsx)($m,{size:16}),m(`drawer.proposalRecheck`)]}):null,!u&&f.item.actionKind!==`operation.execute`&&[`ready`,`gated`].includes(f.item.status)?(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`defer`),type:`button`,children:m(`drawer.proposalDefer`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`reject`),type:`button`,children:m(`drawer.decisionReject`)})]}):null,[`applied`,`applying`].includes(f.item.status)?null:(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:c,type:`button`,children:m(`drawer.proposalClose`)})]}):null,f.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsxs)(`small`,{children:[f.item.scheduleKind===`heartbeat`?`Goal Heartbeat`:`continuous_monitor`,` · `,f.item.status??`active`]}),(0,z.jsx)(`h3`,{children:f.item.label}),(0,z.jsx)(`p`,{children:f.item.target??f.item.schedule??m(`drawer.scheduleDefaultTarget`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleTimezone`)}),(0,z.jsx)(`dd`,{children:f.item.timezone??m(`drawer.scheduleLocalTimezone`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleNext`)}),(0,z.jsx)(`dd`,{children:f.item.nextRunAt??m(`drawer.schedulePending`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleLast`)}),(0,z.jsx)(`dd`,{children:f.item.previousRunAt??m(`drawer.scheduleNeverRun`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleNotification`)}),(0,z.jsx)(`dd`,{children:f.item.notificationRule??m(`drawer.scheduleDefaultNotification`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleStopCondition`)}),(0,z.jsx)(`dd`,{children:f.item.stopCondition??m(`drawer.scheduleDefaultStop`)})]})]})]}),!u&&f.item.scheduleKind===`monitor`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`run_now`),type:`button`,children:[(0,z.jsx)(Ym,{size:16}),m(`drawer.scheduleRunNow`)]}):null,u?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,f.item.status===`paused`?`resume`:`pause`),type:`button`,children:[f.item.status===`paused`?(0,z.jsx)(Ym,{size:16}):(0,z.jsx)(Jm,{size:16}),f.item.status===`paused`?m(`drawer.scheduleResume`):m(`drawer.schedulePause`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`edit`),type:`button`,children:[(0,z.jsx)(mm,{size:16}),m(`drawer.scheduleEdit`)]})]}),u?null:(0,z.jsxs)(`button`,{className:`personal-danger-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`stop`),type:`button`,children:[(0,z.jsx)(lh,{size:16}),m(`drawer.scheduleStop`,{kind:f.item.scheduleKind===`heartbeat`?` Heartbeat`:m(`drawer.titleSchedule`)})]}),(0,z.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-execution-history-title`,children:[(0,z.jsx)(`h3`,{id:`personal-execution-history-title`,children:m(`drawer.executionHistory`)}),f.item.executionHistory?.length?(0,z.jsx)(`ol`,{children:f.item.executionHistory.map((e,t)=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.timestamp})]}),(0,z.jsx)(`em`,{className:`is-${e.status}`,children:e.status})]},`${e.timestamp}:${e.runId??t}`))}):(0,z.jsx)(`p`,{children:m(`drawer.noExecutionHistory`)})]})]}):null,f.kind===`run`||f.kind===`proposal`||f.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{"aria-expanded":_,className:`personal-diagnostics-trigger`,onClick:()=>v(e=>!e),type:`button`,children:[(0,z.jsx)(`span`,{children:m(`drawer.advancedDiagnostics`)}),(0,z.jsx)(gm,{className:_?`is-open`:``,size:16})]}),_?(0,z.jsxs)(`div`,{className:`personal-diagnostics`,children:[(0,z.jsxs)(`code`,{children:[`goal_id: `,ye]}),(0,z.jsxs)(`code`,{children:[`kind: `,f.kind]}),f.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`session_id: `,f.item.sessionId??m(`drawer.notLinked`)]}),(0,z.jsxs)(`code`,{children:[`turn_id: `,f.item.turnId??m(`common.none`)]}),(0,z.jsxs)(`code`,{children:[`adapter: `,f.item.agentId]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.sessionStatus??f.item.status]})]}):f.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`action: `,f.item.actionKind]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.status]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`schedule_id: `,f.item.scheduleId]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.status??`active`]})]})]}):null]}):null]})]})}var sx=[`checking`,`connecting`,`downloading`,`installing_app`,`installing_runtime`],cx={desktop_status_unavailable:[`无法读取 App 更新状态。请重启 App 后再试;若仍失败,请重新安装最新 App。`,`Cannot read the App update status. Restart the App; if this persists, reinstall the latest App.`],update_feed_unavailable:[`此通道的更新源尚未就绪或暂时不可用。可稍后重新检查,当前版本仍可继续使用。`,`This channel's update feed is not ready or temporarily unavailable. Check again later; you can keep using this version.`],update_feed_invalid:[`更新源格式异常。请稍后重新检查。`,`The update feed is invalid. Check again later.`],update_platform_unavailable:[`此通道尚无适用于本机的更新包。`,`This channel has no update package for this platform.`],update_check_timeout:[`检查更新超时。请稍后重试。`,`The update check timed out. Try again later.`],update_network_failed:[`无法连接更新服务器。请检查网络后重试。`,`Cannot reach the update server. Check your connection and retry.`],update_download_or_signature_failed:[`更新包下载或签名校验失败,尚未安装。请重新检查更新。`,`Download or signature verification failed; the update was not installed. Check for updates again.`]};function lx(e,t=`update_failed`){return{phase:`error`,details:{code:typeof e==`string`&&Object.hasOwn(cx,e)?e:t}}}function ux(){let{locale:e}=Ji(),t=e===`zh-CN`,[n,r]=(0,R.useState)(!1),i=(0,R.useRef)(null),[a,o]=(0,R.useState)(`stable`),[s,c]=(0,R.useState)({phase:`idle`}),[l,u]=(0,R.useState)(``),[d,f]=(0,R.useState)(!1),p=(0,R.useRef)(!1),m=window.__TAURI__?.core.invoke,h=sx.includes(s.phase);(0,R.useEffect)(()=>{let e=i.current;if(!e)return;let t=()=>r(e.matches(`:popover-open`));return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)},[]),(0,R.useEffect)(()=>{if(!m)return;let e=!0;return m(`desktop_update_status`).then(t=>{if(!e)return;u(t.app_version),f(t.rollback_available===!0),t.state?.phase&&c(t.state);let n=t.state?.details?.channel??(t.app_version.includes(`-main.`)?`main`:`stable`);o(n),t.state?.phase||m(`desktop_update`,{action:`check`,channel:n}).then(t=>{e&&c(t)}).catch(t=>{e&&c(lx(t))})}).catch(()=>{e&&c(lx(null,`desktop_status_unavailable`))}),()=>{e=!1}},[m]),(0,R.useEffect)(()=>{if(!m||!h)return;let e=window.setInterval(()=>{m(`desktop_update_status`).then(e=>{e.state?.phase&&c(e.state)}).catch(()=>{})},1e3);return()=>window.clearInterval(e)},[m,h]);async function g(e){if(!(!m||p.current)){p.current=!0,c({phase:e===`check`?`checking`:e===`repair`?`installing_runtime`:`downloading`});try{if(!l){let e=await m(`desktop_update_status`);u(e.app_version),f(e.rollback_available===!0)}c(await m(`desktop_update`,{action:e,channel:a}))}catch(e){c(lx(e,l?`update_failed`:`desktop_status_unavailable`))}finally{p.current=!1}}}let _={service_error:t?`运行时已安装,但服务尚未连接。可重试更新、修复或恢复上版。`:`Runtime installed, but services are unavailable. Retry updates, repair, or restore the previous version.`,runtime_pairing_required:t?`本机 CLI 运行时与 App 自带运行时不一致。回到 App 启动界面可「更新 App 与运行时」或「回退 CLI」。`:`This host's CLI runtime and the App's bundled runtime differ. On the App boot screen, update both or use the App's runtime.`,idle:t?`App 会检查可用更新,不会自动安装。`:`Updates are checked automatically, never installed without confirmation.`,runtime_required:t?`请完成匹配组件安装,或检查 App 更新。`:`Install matching components or check for an App update.`,connecting:t?`正在连接更新后的服务…`:`Connecting to updated services…`,checking:t?`正在检查更新…`:`Checking for updates…`,available:t?`新版本已就绪,一次更新 App 与匹配的运行时。`:`Update the App and its matching runtime together.`,up_to_date:t?`当前通道暂无更新。`:`No newer update on this channel.`,downloading:t?`正在下载并校验签名…`:`Downloading and verifying signature…`,installing_app:t?`正在安装 App,请保持窗口打开。`:`Installing the App. Keep this window open.`,installing_runtime:t?`正在安装匹配的运行时,请稍候…`:`Installing the matching runtime…`,restart_required:t?`重启后将自动完成运行时安装与服务连接。`:`Restart to finish runtime installation and reconnect services.`,ready:t?`更新完成,服务已就绪。`:`Update completed; services are ready.`,error:cx[s.details?.code??``]?.[+!t]??(t?`更新未完成。请重试;启动失败可尝试修复当前版本。`:`Update incomplete. Retry; repair this version if startup fails.`)},v=h?t?`正在更新…`:`Updating…`:s.phase===`available`?t?`有可用更新`:`Update available`:s.phase===`restart_required`?t?`重启完成更新`:`Restart to finish`:s.phase===`error`?t?`更新需重试`:`Retry update`:t?`更新 LoopX`:`Update LoopX`;return(0,z.jsxs)(`div`,{className:`personal-desktop-update`,children:[(0,z.jsxs)(`button`,{className:`personal-update-trigger`,type:`button`,"aria-expanded":n,"aria-controls":`desktop-update-panel`,onClick:e=>{i.current?.style.setProperty(`bottom`,`${window.innerHeight-e.currentTarget.getBoundingClientRect().top+8}px`),i.current?.togglePopover()},children:[(0,z.jsx)(Tm,{size:16,"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:v}),(0,z.jsx)(vm,{size:14,"aria-hidden":`true`})]}),(0,z.jsxs)(`section`,{ref:i,popover:`auto`,id:`desktop-update-panel`,className:`personal-update-panel`,"aria-label":t?`LoopX 更新`:`LoopX updates`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:t?`LoopX 更新`:`LoopX updates`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":t?`关闭更新面板`:`Close updates`,onClick:()=>i.current?.hidePopover(),children:(0,z.jsx)(gh,{size:16,"aria-hidden":`true`})})]}),(0,z.jsxs)(`small`,{children:[l,` · `,a===`main`?t?`main 预览版`:`main preview`:t?`稳定版`:`Stable`]}),s.details?.version?(0,z.jsxs)(`p`,{children:[t?`目标版本:`:`Target: `,s.details.version]}):null,(0,z.jsxs)(`p`,{role:`status`,"aria-live":`polite`,children:[h?(0,z.jsx)(Qm,{className:`is-spinning`,size:14,"aria-hidden":`true`}):null,_[s.phase]]}),s.phase===`downloading`&&s.details?.total?(0,z.jsx)(`progress`,{"aria-label":t?`下载进度`:`Download progress`,max:s.details.total,value:s.details.received??0}):null,m?(0,z.jsx)(`div`,{className:`personal-update-actions`,children:s.phase===`restart_required`?(0,z.jsx)(`button`,{type:`button`,onClick:()=>void g(`restart`),children:t?`重启完成更新`:`Restart to finish`}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,disabled:h,onClick:()=>void g(`check`),children:t?`检查更新`:`Check for updates`}),s.phase===`available`?(0,z.jsx)(`button`,{type:`button`,onClick:()=>void g(`apply`),children:t?`更新并准备重启`:`Install update`}):null]})}):(0,z.jsx)(`p`,{children:t?`请在 LoopX App 中更新;浏览器自身无需安装包。`:`Update from the LoopX App; the browser needs no installer.`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`高级选项`:`Advanced options`}),(0,z.jsxs)(`label`,{children:[t?`更新通道`:`Update channel`,(0,z.jsxs)(`select`,{disabled:h||s.phase===`restart_required`,value:a,onChange:e=>{o(e.target.value),c({phase:`idle`})},children:[(0,z.jsx)(`option`,{value:`stable`,children:t?`稳定版(推荐)`:`Stable (recommended)`}),(0,z.jsx)(`option`,{value:`main`,children:t?`main 预览版`:`main preview`})]})]}),(0,z.jsx)(`p`,{children:t?`App 与匹配的 CLI 一起更新,服务可能短暂断开。不删除 Goal 数据。`:`Updates the App and matching CLI. Services may briefly disconnect. Goal data is not deleted.`}),m?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:t?`启动失败时,可重装当前 App 随附的运行时。`:`If startup fails, reinstall this App's bundled runtime.`}),(0,z.jsx)(`button`,{disabled:h||s.phase===`restart_required`,type:`button`,onClick:()=>void g(`repair`),children:t?`修复当前版本`:`Repair this version`})]}):null,m&&d?(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`恢复上个版本`:`Restore previous version`}),(0,z.jsx)(`p`,{children:t?`将恢复已保留的 App 和它的运行时,需要重启。`:`Restore the retained App and its runtime, then restart.`}),(0,z.jsx)(`button`,{disabled:h,type:`button`,onClick:()=>void g(`rollback`),children:t?`确认恢复上版`:`Restore previous version`})]}):null]})]})]})}var dx=e=>`loopx-sidebar-goal-order-v1:${encodeURIComponent(e)}`;function fx(e){try{let t=JSON.parse(e??`null`);return Array.isArray(t)&&t.every(e=>typeof e==`string`)?[...new Set(t)]:[]}catch{return[]}}function px(e,t){let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.goalId)??1/0)-(n.get(t.goalId)??1/0))}function mx(e,t,n,r,i){if(n===r||!t.includes(n)||!t.includes(r))return e;let a=[...new Set([...e,...t])].filter(e=>e!==n);return a.splice(a.indexOf(r)+Number(i),0,n),a}function hx(e,t){let n=dx(t),[r,i]=(0,R.useState)(()=>{try{return fx(localStorage.getItem(n))}catch{return[]}}),[a,o]=(0,R.useState)(!1),[s,c]=(0,R.useState)(null),[l,u]=(0,R.useState)(null),d=(0,R.useRef)(null),f=(0,R.useRef)(!1),p=px(e,r),m=p.map(e=>e.goalId);function h(t,a,s){let l=mx(r,m,t,a,s);if(l===r)return;i(l);let u=px(e,l),d=u.findIndex(e=>e.goalId===t),f=u[d];f&&c({title:f.title,position:d+1});try{localStorage.setItem(n,JSON.stringify(l)),o(!1)}catch{o(!0)}}function g(){d.current=null,u(null)}return{sorted:p,target:l,saveFailed:a,lastMoved:s,move:h,moveBy(e,t){let n=p[m.indexOf(e)+t];n&&h(e,n.goalId,t===1)},pointerProps:e=>({onPointerDown(t){f.current=!1,t.pointerType===`mouse`&&t.button===0&&(d.current={id:e,x:t.clientX,y:t.clientY,dragging:!1},t.currentTarget.setPointerCapture(t.pointerId))},onPointerMove(e){let t=d.current;if(!t||!t.dragging&&Math.hypot(e.clientX-t.x,e.clientY-t.y)<6)return;t.dragging=!0,f.current=!0;let n=document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-reorder-goal]`),r=e.currentTarget.closest(`.personal-goal-list`),i=n?.dataset.reorderGoal;if(!n||!i||!r?.contains(n)||i===t.id){u(null);return}let a=n.getBoundingClientRect();u({id:i,after:e.clientY>a.top+a.height/2})},onPointerUp(){d.current?.dragging&&l&&h(d.current.id,l.id,l.after),g()},onPointerCancel:g,onLostPointerCapture:g,onKeyDown(e){e.key===`Escape`&&g()},onClickCapture(e){f.current&&=(e.preventDefault(),e.stopPropagation(),!1)}})}}var gx=`/ssh-hosts`,_x=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/;function vx(e){return typeof e==`string`&&_x.test(e.trim())}function yx(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`SSH Host 列表响应无效。`);let t=e;if(t.ok!==!0||t.schema_version!==`ssh_host_catalog_v0`||!Array.isArray(t.hosts))throw Error(`SSH Host 列表协议不兼容,请更新本机 LoopX 服务。`);let n=new Set;return{hosts:t.hosts.flatMap(e=>{if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=String(e.alias??``).trim();return!vx(t)||n.has(t)?[]:(n.add(t),[{alias:t}])}),schemaVersion:`ssh_host_catalog_v0`}}async function bx(e=fetch,t=gx){let n=await e(t,{cache:`no-store`});if(!n.ok)throw Error(`无法读取本机 SSH Host(HTTP ${n.status})。`);return yx(await n.json())}function xx(e,t){let n=e.trim();if(!vx(n))return{error:`请选择有效的 SSH Host。`};let r=Number(t);return!Number.isInteger(r)||r<1024||r>65535?{error:`本地端口必须是 1024–65535 之间的整数。`}:{command:`ssh -N -L ${r}:127.0.0.1:8766 ${n}`,hostAlias:n,label:n,statusUrl:`http://127.0.0.1:${r}/status.json`}}var Sx=`/api/ssh-source/ensure`,Cx=`/api/ssh-source/goal-lifecycle`;async function wx(e,t){let n=await fetch(Sx,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({host_alias:e,local_port:Number(t)})}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error??`无法建立 SSH 隧道来源。`);if(!r?.ok)throw Error(`无法建立 SSH 隧道来源。`);return r}async function Tx(e,t,n,r,i=fetch){let a=await i(Cx,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({goal_id:t,host_alias:e,operation:n,reason:r})}),o=await a.json().catch(()=>null);if(!a.ok)throw Error(o?.error??`无法更新远端 Goal 生命周期。`);if(!o?.ok||o.schema_version!==`loopx_remote_goal_lifecycle_v1`||o.goal_id!==t||o.host_alias!==e||o.operation!==n||o.activation_state!==(n===`stop`?`stopped`:`active`)||o.projection_verified!==!0)throw Error(`远端 Goal 生命周期回读未验证。`);return o}function Ex({activeSource:e,connectionState:t,errorMessage:n,onAdd:r,onConfiguredHostsLoaded:i,onRemove:a,onSelect:o,sources:s}){let{t:c}=Ji(),[l,u]=(0,R.useState)(!1),[d,f]=(0,R.useState)(null),[p,m]=(0,R.useState)(`configured`),[h,g]=(0,R.useState)([]),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)(!1),[C,w]=(0,R.useState)(``),[T,E]=(0,R.useState)(``),[D,O]=(0,R.useState)(`8876`),[k,A]=(0,R.useState)(``),ee=`configured:`,j=[...s.map(e=>({label:e.label,value:e.id})),...h.filter(e=>!s.some(t=>t.label===e.alias)).map(e=>({group:c(`source.configuredGroup`,{count:h.length}),label:e.alias,value:`${ee}${e.alias}`}))],M=(0,R.useMemo)(()=>h.some(e=>e.alias===C)?xx(C,D):{error:c(`source.selectHost`)},[h,C,D,c]);(0,R.useEffect)(()=>{te()},[]);async function te(){b(!0),v(null);try{let e=await bx();g(e.hosts),i?.(e.hosts.map(e=>e.alias)),w(t=>t||e.hosts[0]?.alias||``),e.hosts.length||v(c(`source.hostEmpty`))}catch(e){v(e instanceof Error?e.message:c(`source.hostLoadError`))}finally{b(!1)}}function ne(){u(!0),m(`configured`),f(null),te()}function N(){u(!1),m(`configured`),v(null),S(!1),w(``),f(null),E(``),O(`8876`),A(``)}function P(){let e=r({label:T,statusUrl:k});if(e.error){f(e.error);return}N()}function re(){if(`error`in M){f(M.error??c(`source.invalid`));return}let e=r({ensureTunnel:!0,hostAlias:M.hostAlias,label:M.label,statusUrl:M.statusUrl});if(e.error){f(e.error);return}N()}function ie(e){let t=new Set;for(let e of s)try{t.add(new URL(e.statusUrl).port)}catch{}let n=`8877`;for(let e=8877;e<9077;e+=1)if(!t.has(String(e))){n=String(e);break}let i=xx(e,n);if(`error`in i){f(i.error??c(`source.invalid`));return}let a=r({ensureTunnel:!0,hostAlias:i.hostAlias,label:i.label,statusUrl:i.statusUrl});a.error?f(a.error):f(null),O(n)}async function ae(){if(`error`in M){f(M.error??c(`source.invalid`));return}try{await navigator.clipboard.writeText(M.command),S(!0),f(null)}catch{f(c(`source.copyError`))}}return(0,z.jsxs)(`section`,{"aria-label":c(`source.controlPlane`),className:`personal-status-source`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{children:`Control plane`}),(0,z.jsx)(`button`,{"aria-label":c(`source.addSsh`),onClick:ne,title:c(`source.add`),type:`button`,children:(0,z.jsx)(Xm,{size:14})})]}),(0,z.jsx)(fb,{ariaLabel:c(`source.select`),className:`personal-status-source-select`,icon:(0,z.jsx)(ih,{size:15}),onChange:e=>{if(e.startsWith(ee)){ie(e.slice(11));return}o(e)},options:j,value:e.id}),(0,z.jsxs)(`div`,{className:`personal-status-source-meta`,children:[(0,z.jsxs)(`span`,{className:`is-${t}`,children:[(0,z.jsx)(`i`,{}),c(t===`loading`?`source.connecting`:t===`error`?`source.notAvailable`:`source.connected`)]}),(0,z.jsx)(`small`,{children:e.readOnly?c(`source.readOnly`):c(`source.localInteractive`)}),e.kind===`ssh_tunnel`?(0,z.jsx)(`button`,{"aria-label":c(`source.remove`,{source:e.label}),onClick:()=>a(e.id),title:c(`source.removeCurrent`),type:`button`,children:(0,z.jsx)(fh,{size:12})}):null]}),n?(0,z.jsx)(`p`,{className:`personal-status-source-error`,role:`alert`,children:n}):null,l?(0,z.jsxs)(`div`,{className:`personal-status-source-form`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:c(`source.addSsh`)}),(0,z.jsx)(`button`,{"aria-label":c(`source.closeForm`),onClick:N,type:`button`,children:(0,z.jsx)(gh,{size:13})})]}),(0,z.jsxs)(`div`,{"aria-label":c(`source.addMethod`),className:`personal-status-source-modes`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":p===`configured`,onClick:()=>{m(`configured`),f(null)},role:`tab`,type:`button`,children:c(`source.configured`)}),(0,z.jsx)(`button`,{"aria-selected":p===`manual`,onClick:()=>{m(`manual`),f(null)},role:`tab`,type:`button`,children:c(`source.manual`)})]}),p===`configured`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.configuredCount`,{count:h.length})}),(0,z.jsxs)(`span`,{className:`personal-status-source-field-row`,children:[(0,z.jsx)(`input`,{"aria-label":c(`source.host`),disabled:y||!h.length,list:`loopx-configured-ssh-hosts`,onChange:e=>{w(e.target.value),S(!1)},placeholder:c(y?`source.loadingHosts`:`source.hostPlaceholder`),value:C}),(0,z.jsx)(`datalist`,{id:`loopx-configured-ssh-hosts`,children:h.map(e=>(0,z.jsx)(`option`,{value:e.alias},e.alias))}),(0,z.jsx)(`button`,{"aria-label":c(`source.refreshHosts`),disabled:y,onClick:()=>void te(),title:c(`source.refreshHosts`),type:`button`,children:(0,z.jsx)(eh,{size:13})})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.localPort`)}),(0,z.jsx)(`input`,{"aria-label":c(`source.localPort`),inputMode:`numeric`,onChange:e=>{O(e.target.value),S(!1)},value:D})]}),(0,z.jsxs)(`div`,{className:`personal-status-source-command`,children:[(0,z.jsx)(`code`,{children:`error`in M?c(`source.tunnelCommandPending`):M.command}),(0,z.jsxs)(`button`,{"aria-label":c(`source.copyCommand`),disabled:`error`in M,onClick:()=>void ae(),type:`button`,children:[(0,z.jsx)(Cm,{size:12}),c(x?`source.copied`:`source.copy`)]})]}),_?(0,z.jsx)(`p`,{className:`is-error`,children:_}):null,(0,z.jsx)(`p`,{children:c(`source.description`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,disabled:`error`in M,onClick:re,type:`button`,children:c(`source.addConfigured`)})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.name`)}),(0,z.jsx)(`input`,{autoFocus:!0,maxLength:48,onChange:e=>E(e.target.value),placeholder:c(`source.namePlaceholder`),value:T})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.statusUrl`)}),(0,z.jsx)(`input`,{onChange:e=>A(e.target.value),placeholder:`http://127.0.0.1:8876/status.json`,value:k})]}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:`ssh -N -L 8876:127.0.0.1:8766 `})}),(0,z.jsx)(`p`,{children:c(`source.manualDescription`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,onClick:P,type:`button`,children:c(`source.addConfigured`)})]}),d?(0,z.jsx)(`p`,{className:`is-error`,role:`alert`,children:d}):null]}):null]})}var Dx={需修复:`is-danger`,等你:`is-warning`,等待条件:`is-info`,推进中:`is-success`,安静运行:`is-quiet`,已完成:`is-quiet`,已停止:`is-stopped`};function Ox({attentionCount:e,goals:t,goalArchiveLoadState:n={error:null,phase:`ready`},lifecycleBusyGoalIds:r,goalLifecycleOperations:i,onRequestGoalCreate:a,onOpenSettings:o,onRetryGoalArchive:s,onRequestGoalLifecycle:c,onSelectGoal:l,selectedGoalId:u,statusSourceControl:d}){let{locale:f,t:p}=Ji(),[m,h]=(0,R.useState)(!1),g=hx(t.filter(e=>e.activationState!==`stopped`),d?.activeSource.statusUrl??`/status.json`),_=g.sorted,v=t.filter(e=>e.activationState===`stopped`),y=e=>!!c&&(!i||i.includes(e)),b=(e,t)=>(0,z.jsxs)(`div`,{className:`personal-goal-row${g.target?.id===e.goalId?g.target.after?` is-drop-after`:` is-drop-before`:``}`,"data-reorder-goal":t?void 0:e.goalId,"data-load-error":e.loadError,children:[(0,z.jsxs)(`button`,{...t?{}:g.pointerProps(e.goalId),title:t?void 0:p(`sidebar.dragGoal`),"aria-current":u===e.goalId?`page`:void 0,className:`personal-goal-link`,onClick:()=>l(e.goalId),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-goal-state-dot ${e.loadState?``:Dx[e.state]}`}),(0,z.jsxs)(`span`,{className:`personal-goal-link-copy`,children:[(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsxs)(`small`,{children:[e.loadState&&(!t||u===e.goalId)?p(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,f),e.needsYou&&!t?` · ${p(`home.lane.needsYou`)}`:``]})]}),(0,z.jsx)(_m,{size:15})]}),!t&&m?(0,z.jsxs)(`div`,{className:`personal-goal-move-actions`,children:[(0,z.jsx)(`button`,{type:`button`,"aria-label":p(`sidebar.moveUp`,{goal:e.title}),disabled:_[0]?.goalId===e.goalId,onClick:()=>g.moveBy(e.goalId,-1),children:(0,z.jsx)(lm,{"aria-hidden":`true`,size:13})}),(0,z.jsx)(`button`,{type:`button`,"aria-label":p(`sidebar.moveDown`,{goal:e.title}),disabled:_.at(-1)?.goalId===e.goalId,onClick:()=>g.moveBy(e.goalId,1),children:(0,z.jsx)(am,{"aria-hidden":`true`,size:13})})]}):null,c&&y(t?`resume`:`stop`)?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{"aria-label":`${p(t?`sidebar.resume`:`sidebar.stop`)} ${e.title}`,"aria-busy":r?.has(e.goalId)||void 0,className:`personal-goal-lifecycle${r?.has(e.goalId)?` is-pending`:``}`,disabled:r?.has(e.goalId),onClick:()=>c(e,t?`resume`:`stop`),title:p(t?`sidebar.resumeGoal`:`sidebar.stopGoal`),type:`button`,children:r?.has(e.goalId)?(0,z.jsx)(zm,{size:13}):t?(0,z.jsx)($m,{size:13}):(0,z.jsx)(Jm,{size:13})}),t&&y(`delete`)?(0,z.jsx)(`button`,{"aria-label":`${p(`sidebar.delete`)} ${e.title}`,className:`personal-goal-lifecycle personal-goal-delete`,onClick:()=>c(e,`delete`),title:p(`sidebar.deleteGoal`),type:`button`,children:(0,z.jsx)(fh,{size:13})}):null]}):null]},e.goalId);return(0,z.jsxs)(`div`,{className:`personal-goal-directory`,children:[(0,z.jsxs)(`div`,{className:`personal-sidebar-brand`,children:[(0,z.jsx)(`span`,{className:`personal-brand-mark`,children:(0,z.jsx)(fm,{size:18})}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:`LoopX`})})]}),d?(0,z.jsx)(Ex,{...d}):null,(0,z.jsxs)(`nav`,{"aria-label":p(`home.workspace`),className:`personal-sidebar-nav`,children:[(0,z.jsxs)(`button`,{"aria-current":u===null?`page`:void 0,className:`personal-manager-link`,onClick:()=>l(null),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-manager-icon`,children:(0,z.jsx)(fm,{size:17})}),(0,z.jsx)(`span`,{children:p(`sidebar.manager`)}),e>0?(0,z.jsx)(`span`,{className:`personal-sidebar-count`,children:e}):null,(0,z.jsx)(_m,{size:15})]}),(0,z.jsxs)(`div`,{className:`personal-sidebar-section-title`,children:[(0,z.jsx)(`span`,{children:`Goals`}),(0,z.jsxs)(`span`,{className:`personal-sidebar-title-actions`,children:[(0,z.jsx)(`small`,{children:_.length}),(0,z.jsx)(`button`,{"aria-label":p(`sidebar.sortGoals`),title:p(`sidebar.sortGoals`),"aria-pressed":m,onClick:()=>h(!m),type:`button`,children:(0,z.jsx)(cm,{"aria-hidden":`true`,size:15})}),a?(0,z.jsx)(`button`,{"aria-label":p(`sidebar.createGoal`),onClick:a,type:`button`,children:(0,z.jsx)(Xm,{size:15})}):null]})]}),g.saveFailed?(0,z.jsx)(`p`,{role:`status`,children:p(`sidebar.orderNotSaved`)}):null,(0,z.jsx)(`span`,{className:`personal-sr-only`,role:`status`,children:g.lastMoved?p(`sidebar.goalMoved`,{goal:g.lastMoved.title,position:g.lastMoved.position}):``}),(0,z.jsx)(`div`,{className:`personal-goal-list`,children:_.map(e=>b(e,!1))}),v.length||n.phase===`loading`||n.phase===`error`?(0,z.jsxs)(`details`,{className:`personal-stopped-goals`,open:n.phase===`error`||void 0,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(gm,{size:13}),(0,z.jsx)(`span`,{children:p(`sidebar.stopped`)}),n.phase===`loading`?(0,z.jsx)(zm,{"aria-label":p(`sidebar.stoppedLoading`),className:`is-spinning`,size:13}):(0,z.jsx)(`small`,{children:v.length})]}),(0,z.jsxs)(`div`,{className:`personal-goal-list is-stopped`,children:[n.phase===`error`?(0,z.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`alert`,children:[(0,z.jsx)(`span`,{children:p(`sidebar.stoppedLoadFailed`)}),s?(0,z.jsx)(`button`,{onClick:s,type:`button`,children:p(`sidebar.retryStopped`)}):null]}):null,v.map(e=>b(e,!0))]})]}):null]}),(0,z.jsxs)(`div`,{className:`personal-sidebar-footer`,children:[(0,z.jsx)(ux,{}),o?(0,z.jsxs)(`button`,{"aria-label":p(`settings.open`),className:`personal-sidebar-utility`,onClick:o,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-sidebar-utility-icon`,children:(0,z.jsx)(ah,{size:17})}),(0,z.jsx)(`span`,{className:`personal-sidebar-utility-copy`,children:(0,z.jsx)(`strong`,{children:p(`settings.open`)})}),(0,z.jsx)(_m,{"aria-hidden":`true`,size:15})]}):null]})]})}var kx=J({ok:X(!0),total:G().int().nonnegative(),next_cursor:W().nullable(),items:q(J({todo_id:W(),text:W(),claimed_by:W().nullable(),evidence:W().nullable(),priority:W().nullable(),task_class:W().nullable()})).max(40)});function Ax({goal:e,agentId:t,seed:n,enabled:r,listView:i=!1,onSelect:a}){let{t:o}=Ji(),s=(0,R.useId)(),[c,l]=(0,R.useState)(!1),u=!i||c,d=i?96:148,[f,p]=(0,R.useState)(n),[m,h]=(0,R.useState)(t===`all`?e.doneTodoCount??n.length:n.length),[g,_]=(0,R.useState)(void 0),[v,y]=(0,R.useState)(!1),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(!1),[w,T]=(0,R.useState)({top:0,height:600}),[E,D]=(0,R.useState)(null),O=(0,R.useRef)(null),k=(0,R.useRef)(null),[A,ee]=(0,R.useState)(0);(0,R.useEffect)(()=>{let e=O.current;if(!e)return;let t=new ResizeObserver(()=>T({top:e.scrollTop,height:e.clientHeight}));return t.observe(e),()=>{t.disconnect(),k.current?.abort()}},[]);let j=g===void 0||w.top+w.height>=f.length*d-d*2;(0,R.useEffect)(()=>{if(!r||!u||!j||g===null||b||k.current)return;let n=new AbortController;k.current=n,y(!0);let i=new URLSearchParams({goal_id:e.goalId});t!==`all`&&i.set(`agent_id`,t),g&&i.set(`cursor`,g),fetch(`/api/chat/completed-todos?${i}`,{signal:n.signal}).then(async e=>{if(e.status===409&&C(!0),!e.ok)throw Error(`history unavailable`);let t=kx.parse(await e.json());if(n.signal.aborted)return;let r=t.items.map(e=>({todoId:e.todo_id,text:e.text,claimedBy:e.claimed_by,evidence:e.evidence,priority:e.priority,taskClass:e.task_class,done:!0,status:`done`}));p(e=>g===void 0?r:[...e,...r.filter(t=>!e.some(e=>e.todoId===t.todoId))]),h(t.total),_(t.next_cursor)}).catch(()=>{n.signal.aborted||x(!0)}).finally(()=>{n.signal.aborted||(k.current=null,y(!1))})},[r,u,j,g,b,A,e.goalId,t,v]),(0,R.useEffect)(()=>{O.current&&(O.current.scrollTop=0),T({top:0,height:O.current?.clientHeight??600}),D(null)},[i]);let M=Math.max(0,Math.floor(w.top/d)-3),te=Math.min(f.length,Math.ceil((w.top+w.height)/d)+3),ne=Array.from({length:Math.max(0,te-M)},(e,t)=>M+t);return E!==null&&El(e=>!e),children:[(0,z.jsx)(`span`,{"aria-hidden":`true`,children:c?`▾`:`▸`}),` `,o(`tasks.completed`)]}):(0,z.jsxs)(`strong`,{children:[(0,z.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-done`}),o(`tasks.completed`)]}),(0,z.jsx)(`span`,{children:m})]}),(0,z.jsxs)(`div`,{id:s,hidden:!u,"aria-label":o(`tasks.completed`),className:`personal-task-lane-scroll`,ref:O,role:`region`,tabIndex:0,onScroll:e=>T({top:e.currentTarget.scrollTop,height:e.currentTarget.clientHeight}),children:[(0,z.jsx)(`div`,{className:`personal-completed-window`,style:{height:f.length*d},children:ne.map(t=>{let n=f[t];return(0,z.jsx)(`div`,{className:`personal-task-card personal-completed-row`,style:{top:t*d,height:d},children:(0,z.jsxs)(`button`,{type:`button`,onFocus:()=>D(t),onBlur:()=>D(null),onClick:()=>a({kind:`todo`,item:{...n,goalId:e.goalId,goalTitle:e.title,ownerLabel:n.claimedBy??e.agentLabel??e.agentId}}),children:[(0,z.jsx)(`span`,{className:`is-done`,children:`✓`}),(0,z.jsx)(`strong`,{children:$d(n.text,112)}),(0,z.jsx)(`small`,{children:n.claimedBy??e.agentLabel??e.agentId})]})},n.todoId)})}),(0,z.jsx)(`div`,{className:`personal-completed-footer`,role:`status`,children:v?o(`tasks.historyLoading`):b?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`span`,{children:o(S?`tasks.historyExpired`:`tasks.historyError`)}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>{S&&(_(void 0),O.current&&(O.current.scrollTop=0)),C(!1),x(!1),ee(e=>e+1)},children:o(`tasks.historyRetry`)})]}):r?g===null?o(`tasks.historyEnd`):(0,z.jsx)(`button`,{type:`button`,onClick:()=>{O.current&&(O.current.scrollTop=f.length*d)},children:o(`tasks.historyMore`)}):o(`tasks.historyLocalOnly`)})]})]})}function jx({children:e,count:t,label:n,tone:r,listView:i=!1}){let a=(0,R.useId)(),o=(0,R.useRef)(null),s=(0,R.useRef)([]),c=(0,R.useRef)(null),[l,u]=(0,R.useState)({after:!1,before:!1}),d=(0,R.useCallback)(()=>{let e=o.current;if(!e)return;let t={after:Math.max(0,e.scrollHeight-e.clientHeight)-e.scrollTop>1,before:e.scrollTop>1};u(e=>e.after===t.after&&e.before===t.before?e:t)},[]);return(0,R.useEffect)(()=>{let e=o.current;if(!e)return;let t=new ResizeObserver(d);return c.current=t,t.observe(e),e.addEventListener(`scroll`,d,{passive:!0}),d(),()=>{t.disconnect(),c.current=null,s.current=[],e.removeEventListener(`scroll`,d)}},[i,d]),(0,R.useEffect)(()=>{let e=o.current,t=c.current;if(!e||!t)return;for(let e of s.current)t.unobserve(e);let n=Array.from(e.children).filter(e=>e instanceof HTMLElement);for(let e of n)t.observe(e);s.current=n,d()},[e,t,i,d]),i?!t&&r!==`done`?null:(0,z.jsxs)(`details`,{className:`personal-task-group tone-${r}`,open:!0,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(gm,{size:16}),(0,z.jsx)(`strong`,{children:n}),(0,z.jsx)(`span`,{children:t})]}),(0,z.jsx)(`div`,{className:`personal-task-list-rows`,children:e})]}):(0,z.jsxs)(`section`,{className:`personal-object-list personal-task-lane`,children:[(0,z.jsxs)(`header`,{id:a,children:[(0,z.jsxs)(`strong`,{children:[(0,z.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-${r}`}),n]}),(0,z.jsx)(`span`,{children:t})]}),(0,z.jsx)(`div`,{"aria-labelledby":a,className:`personal-task-lane-scroll${l.before?` has-overflow-before`:``}${l.after?` has-overflow-after`:``}`,ref:o,role:`region`,tabIndex:t>0?0:-1,children:e})]})}function Mx({historyEnabled:e=!1,goal:t,items:n,onDraftTaskFromMessage:r,onOpenChat:i,onQuickComplete:a,quickCompletingTodoIds:o,onSelect:s,selectedTodoId:c=null,userTodos:l}){let{t:u}=Ji(),[d,f]=(0,R.useState)(!1),[p,m]=(0,R.useState)({goalId:``,laneId:`all`}),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{if(!c)return;let e=window.requestAnimationFrame(()=>h.current?.scrollIntoView({block:`nearest`,inline:`nearest`}));return()=>window.cancelAnimationFrame(e)},[c]);let g=l.filter(e=>e.goalId===t.goalId).map(e=>({...e,goalTitle:t.title})),_=e=>e.priority===`P0`?0:e.priority===`P1`?1:e.priority===`P2`?2:e.priority===`P3`?3:e.priority===`P4`?4:50,v=(0,R.useMemo)(()=>{let e=new Map((t.agentLanes??[]).map(e=>[e.agentId,e]));for(let n of t.agentTodos)n.claimedBy&&!e.has(n.claimedBy)&&e.set(n.claimedBy,{agentId:n.claimedBy,label:n.claimedBy});return[...e.values()]},[t.agentLanes,t.agentTodos]),y=p.goalId===t.goalId&&v.some(e=>e.agentId===p.laneId)?p.laneId:`all`,b=e=>y===`all`||e===y,x=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&!e.done).filter(e=>b(e.claimedBy)).sort((e,t)=>_(e)-_(t)),S=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&e.done).filter(e=>b(e.claimedBy)),C=n.filter(e=>e.kind===`schedule`&&b(e.schedule.agentId)),w=n.filter(e=>e.kind===`run`&&!!e.run.todoId&&b(e.run.agentId)),T=!g.length&&!x.length&&!S.length&&!C.length,E=n.filter(e=>e.kind===`message`&&(e.message.role===`user`||e.message.role===`assistant`)),D=E.reduce((e,t,n)=>t.message.role===`user`?n:e,-1),O=D>=0?E[D]?.message:null,k=D>=0?E.slice(D+1).reverse().find(e=>e.message.role===`assistant`)?.message:null,A=D>=0&&E.slice(D+1).some(e=>e.message.role===`assistant`&&e.message.pending);return(0,z.jsxs)(`section`,{"aria-label":u(`header.tasks`),className:`personal-task-board${d?` is-list-view`:``}`,children:[(0,z.jsxs)(`header`,{className:`personal-task-view-toolbar`,children:[(0,z.jsx)(`div`,{children:(0,z.jsx)(`strong`,{children:u(`header.tasks`)})}),(0,z.jsxs)(`div`,{className:`personal-task-view-switch`,role:`group`,"aria-label":u(`tasks.viewLabel`),children:[(0,z.jsx)(`button`,{type:`button`,"aria-pressed":d,onClick:()=>f(!0),children:u(`tasks.listView`)}),(0,z.jsx)(`button`,{type:`button`,"aria-pressed":!d,onClick:()=>f(!1),children:u(`tasks.boardView`)})]})]}),v.length>1?(0,z.jsxs)(`section`,{"aria-label":u(`tasks.agentLaneFilter`),className:`personal-task-lane-filter`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(fm,{size:15}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:u(`tasks.agentLane`)})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{className:`sr-only`,children:u(`tasks.agentLaneFilter`)}),(0,z.jsxs)(`select`,{"aria-label":u(`tasks.agentLaneFilter`),onChange:e=>m({goalId:t.goalId,laneId:e.target.value}),value:y,children:[(0,z.jsx)(`option`,{value:`all`,children:u(`tasks.allAgentLanes`,{count:v.length})}),v.map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))]}),(0,z.jsx)(gm,{"aria-hidden":!0,size:14})]})]}):null,O?(0,z.jsxs)(`section`,{"aria-label":u(`tasks.chatRecent`),className:`personal-task-chat-receipt`,children:[(0,z.jsx)(`span`,{className:`personal-task-chat-icon`,children:(0,z.jsx)(Um,{size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:u(A?`tasks.chatPending`:k?`tasks.chatAgentReplied`:`tasks.chatRecent`)}),(0,z.jsx)(`small`,{children:k?.returnDelivery?u(`tasks.chatReturn`):k?.agentLabel})]}),(0,z.jsx)(`div`,{className:`personal-task-reply-preview`,children:(0,z.jsx)(wb,{text:A?u(`tasks.chatPendingDescription`):(k?.text??O.text).trim().split(/\r?\n/,1)[0]})})]}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`button`,{onClick:i,type:`button`,children:[(0,z.jsx)(Um,{size:14}),u(`tasks.chatViewReply`)]}),k&&!A&&r?(0,z.jsxs)(`button`,{onClick:()=>r(k.text),type:`button`,children:[(0,z.jsx)(Rm,{size:14}),u(`tasks.convertToTask`)]}):null]})]}):null,(0,z.jsxs)(`div`,{className:d?`personal-task-grouped-list`:`personal-task-kanban`,children:[(0,z.jsxs)(jx,{listView:d,count:g.length,label:u(`timeline.waitingConfirmation`),tone:`attention`,children:[g.map(e=>{let t=Zi(e.updatedAt,u);return(0,z.jsxs)(`button`,{onClick:()=>s({item:e,kind:`attention`}),type:`button`,children:[(0,z.jsx)(`span`,{"aria-hidden":`true`,className:`is-attention`,children:`!`}),(0,z.jsx)(`strong`,{children:e.text}),(0,z.jsxs)(`small`,{children:[(0,z.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?u(`tasks.blocked`):u(`tasks.pending`)}),t?(0,z.jsx)(`span`,{className:`personal-task-age`,children:u(`tasks.waitingAge`,{age:t})}):null]})]},e.todoId)}),g.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyConfirm`)})]}),(0,z.jsxs)(jx,{listView:d,count:x.length,label:u(`tasks.pendingAndRunning`),tone:`progress`,children:[x.map(e=>{let n={...e,goalId:t.goalId,goalTitle:t.title,ownerLabel:e.claimedBy??t.agentLabel??t.agentId},r=w.find(t=>t.run.todoId===e.todoId)?.run;return(0,z.jsxs)(`div`,{className:`personal-task-card${r?` has-session`:``}${c===e.todoId?` is-selected`:``}`,ref:c===e.todoId?e=>{h.current=e}:void 0,children:[(0,z.jsxs)(`button`,{"aria-pressed":c===e.todoId,onClick:()=>s({item:n,kind:`todo`}),type:`button`,children:[(0,z.jsx)(`span`,{children:`○`}),(0,z.jsx)(`strong`,{children:e.text}),(0,z.jsxs)(`small`,{children:[e.priority?(0,z.jsx)(`span`,{className:`personal-priority-badge is-${e.priority.toLowerCase()}`,children:e.priority}):null,e.status===`blocked`?(0,z.jsx)(`span`,{className:`personal-priority-badge is-blocked`,children:u(`tasks.blocked`)}):null,r?(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:r.status===`running`||r.status===`queued`?u(`runs.running`):r.status===`failed`?u(`tasks.sessionError`):u(`common.waiting`)}):null,e.status===`deferred`?(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:u(`drawer.taskStatusDeferred`)}):r?null:(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:u(`tasks.waiting`)}),e.claimedBy??t.agentLabel??t.agentId]})]}),(0,z.jsxs)(`div`,{className:`personal-task-card-actions`,children:[r?(0,z.jsxs)(`button`,{className:`personal-task-session-link`,"aria-label":u(`tasks.openExecution`,{name:e.text}),onClick:()=>s({item:r,kind:`run`}),title:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`),type:`button`,children:[(0,z.jsx)(Dm,{size:14}),(0,z.jsx)(`span`,{children:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`)})]}):null,a?(0,z.jsx)(`button`,{"aria-busy":o?.has(e.todoId)||void 0,"aria-label":u(`tasks.markComplete`,{name:e.text}),disabled:o?.has(e.todoId),onClick:()=>void a(n),title:u(`tasks.completed`),type:`button`,children:o?.has(e.todoId)?(0,z.jsx)(zm,{className:`personal-spin`,size:14}):(0,z.jsx)(hm,{size:14})}):null,(0,z.jsx)(`button`,{"aria-label":u(`tasks.moreActions`,{name:e.text}),onClick:()=>s({item:n,kind:`todo`}),title:u(`common.actions`),type:`button`,children:(0,z.jsx)(Em,{size:14})})]})]},e.todoId)}),x.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyRunning`)})]}),(0,z.jsxs)(jx,{listView:d,count:C.length,label:u(`tasks.scheduled`),tone:`schedule`,children:[C.map(e=>(0,z.jsxs)(`button`,{onClick:()=>s({item:e.schedule,kind:`schedule`}),type:`button`,children:[(0,z.jsx)(`span`,{children:`◷`}),(0,z.jsx)(`strong`,{children:e.schedule.label}),(0,z.jsx)(`small`,{children:e.schedule.status===`paused`?u(`schedule.paused`):u(`schedule.active`)})]},e.id)),C.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptySchedules`)})]}),(0,z.jsx)(Ax,{goal:t,agentId:y,seed:S,enabled:e,listView:d,onSelect:s},`${t.goalId}:${y}:${e}`)]}),T?(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyGoal`)}):null]})}var Nx=yd(W(),q(W())),Px=J({node_id:W().min(1),kind:Y([`deliverable`,`gate`,`gate_summary`,`lease`,`validation`,`repair`,`handoff`,`evidence`]),title:W(),state:Y([`open`,`ready`,`blocked`,`done`,`waiting`,`unknown`]),refs:Nx,owner_agent:W().optional(),actor_agent:W().optional(),from_agent:W().optional(),to_agent:W().optional()}),Fx=J({edge_id:W().min(1),from_node_id:W(),to_node_id:W(),relation:Y([`depends_on`,`blocks`,`validates`,`repairs`,`audits`,`continues`,`hands_off_to`,`supersedes`]),reason:W(),refs:Nx.optional()}),Ix=J({schema_version:X(`task_graph_projection_v0`),mode:X(`read_only`),goal_id:W(),generated_at:W().nullable(),truth_contract:J({projection_is_writable:X(!1),write_api:X(!1)}),limits:J({user_gate_node_limit:G().int().nonnegative(),user_gate_open_count:G().int().nonnegative(),user_gate_truncated_count:G().int().nonnegative(),source_truncated:K().optional(),predecessor_truncated:K().optional(),missing_predecessor_count:G().int().nonnegative().optional(),topology_complete:K().optional()}),nodes:q(Px),edges:q(Fx)}).superRefine((e,t)=>{let n=new Set(e.nodes.map(e=>e.node_id)),r=new Set(e.edges.map(e=>e.edge_id));(n.size!==e.nodes.length||r.size!==e.edges.length||e.edges.some(e=>!n.has(e.from_node_id)||!n.has(e.to_node_id)))&&t.addIssue({code:`custom`,message:`Graph identities or endpoints are invalid`})}),Lx=J({ok:X(!0),goal_id:W(),observed_at:W().datetime({offset:!0}),graph:Ix.nullable(),acceptance:uf.nullable()});function Rx(e,t){let n=Lx.parse(e);if(n.goal_id!==t||n.graph&&n.graph.goal_id!==t||n.acceptance&&n.acceptance.goal_id!==t)throw Error(`Review source does not match the selected Goal`);return n}async function zx(e,t){let n=new URLSearchParams({goal_id:e}),r=await fetch(`/api/chat/delivery-review?${n}`,{signal:t,cache:`no-store`});if(!r.ok)throw Error(`Review unavailable (${r.status})`);return Rx(await r.json(),e)}function Bx(e,t,n,r){let i=new Set([r]);for(let t of e.edges)t.from_node_id===r&&i.add(t.to_node_id),t.to_node_id===r&&i.add(t.from_node_id);let a=t.trim().toLocaleLowerCase();return e.nodes.filter(e=>{let t=[e.title,e.owner_agent,e.actor_agent,e.from_agent,e.to_agent,...Object.values(e.refs).flat()].some(e=>e?.toLocaleLowerCase().includes(a)),r=n===`all`||n===`related`&&i.has(e.node_id)||n===`conditions`&&[`gate`,`gate_summary`,`lease`].includes(e.kind)||n===`evidence`&&[`evidence`,`validation`,`repair`,`handoff`].includes(e.kind);return t&&r})}function Vx(e){let t=e.limits;return t.topology_complete!==!0||t.source_truncated===!0||t.predecessor_truncated===!0||(t.missing_predecessor_count??0)>0||t.user_gate_truncated_count>0}function Hx(e){return[`gate`,`gate_summary`,`lease`].includes(e.kind)?0:e.kind===`deliverable`?1:2}function Ux(e,t){let n=e=>String(e??t.unavailable).replace(/[\\`*_{}[\]<>|#]/g,`\\$&`).replace(/[\r\n]+/g,` `),r=[`# ${t.title}`,``,`Goal: ${n(e.goal_id)}`,`${t.observed}: ${n(e.observed_at)}`,``,t.scope,``,t.acceptanceBoundary,``,`## ${t.chain}`,``],i=e.graph;if(!i)r.push(t.noGraph);else{Vx(i)&&r.push(t.incomplete,``),r.push("```json",JSON.stringify(i.limits,null,2),"```",``);for(let e of i.nodes)r.push(`- ${n(e.title)} · ${t.kind[e.kind]} · ${t.state[e.state]}${e.owner_agent?` · ${n(e.owner_agent)}`:``}`,` ${t.refs}: ${n(e.node_id)}; ${n(JSON.stringify(e.refs))}`),(e.from_agent||e.to_agent)&&r.push(` ${n(e.from_agent)} → ${n(e.to_agent)}`),e.actor_agent&&r.push(` actor: ${n(e.actor_agent)}`);let e=new Map(i.nodes.map(e=>[e.node_id,e.title]));r.push(``,`## ${t.relations}`,``);for(let a of i.edges)r.push(`- ${n(e.get(a.from_node_id))} → ${t.relation[a.relation]} → ${n(e.get(a.to_node_id))}: ${n(a.reason)} (${n(a.edge_id)})`,` ${t.refs}: ${n(JSON.stringify(a.refs??{}))}`)}r.push(``,`## ${t.acceptance}`,``);let a=e.acceptance;if(!a)r.push(t.unavailable);else{let e=a.coverage===`partial`;r.push(`${t.required}: ${e?a.acceptance_gaps.length:t.unavailable}`,`${t.guards}: ${e?a.guards.length:t.unavailable}`,``);for(let e of a.acceptance_gaps)r.push(`### ${n(e.evidence_required)}`,``,`${t.owner}: ${n(e.owner)}`,`${t.reason}: ${n(e.reason)}`,`${t.observed}: ${n(e.observed_at)}`,`${t.refs}: ${n(e.source)}`),e.resolution_hint&&r.push(n(e.resolution_hint)),e.component_checks&&r.push(`${t.checks}:`,"```json",JSON.stringify(e.component_checks,null,2),"```"),r.push(``);r.push(`### ${t.guards}`,``);for(let e of a.guards)r.push(`- ${n(e.reason)}`,` ${t.owner}: ${n(e.owner)}; ${t.required}: ${n(e.evidence_required)}`,` ${t.refs}: ${n(e.todo_id)}; ${n(e.blocks_agent)}; ${n(e.decision_scope)}`);r.push(``,`### ${t.historical}`,``);for(let e of a.historical_progress)r.push(`- ${n(e.kind)} · ${n(e.observed_at)} · ${n(e.source)} · ${n(e.evidence_refs.join(`, `))}`);r.push(``,`${t.observedScope}: ${n(a.coverage)}; truncated=${a.truncated}`,`${t.missingSources}: ${n(a.missing_sources.join(`, `))}`,`${t.next}: ${n(a.next_action)} (${n(a.next_action_source)})`)}let o=a?.goal_acceptance_contract;if(o?.enabled===!0){let i=t.contract;r.push(``,`## ${i.title}`,``,i.boundary,`${i.source}: ${n(e.goal_id)}`,`${i.revision}: ${o.revision}`,`${i.digest}: ${n(o.digest)}`,``,`### ${i.objective}`,n(o.objective||i.unknown),``,`### ${i.criteria}`),o.non_goals.length&&r.push(`${i.nonGoals}: ${n(o.non_goals.join(`; `))}`),o.criteria.length||r.push(i.noCriteria);for(let e of o.criteria)r.push(`- ${n(e.id)}: ${n(e.description)}`);r.push(``,`### ${i.tasks}`),o.tasks.length||r.push(i.noTasks);for(let e of o.tasks)r.push(`- ${n(e.todo_id)}: ${i.taskState[e.state]}`,` ${i.criteria}: ${n(e.criterion_ids.join(`, `)||i.unknown)}`),e.reason&&r.push(` ${n(e.reason)}`),e.applicable===!1&&r.push(` ${i.notApplicable}`);r.push(``,`### ${i.verification}`,i.verificationState[o.status]),o.held_todo_ids.length&&r.push(`${i.heldTasks}: ${n(o.held_todo_ids.join(`, `))}`),r.push(``,`### ${i.receipt}`);let a=o.verification;if(!a)r.push(i.unknown);else{r.push(i.receiptNote,`${i.operation}: ${n(a.operation_id)}`,`${i.revision}: ${a.contract_revision}`,`${i.digest}: ${n(a.contract_digest)}`,`${i.verificationScope}: ${n(a.todo_id??i.allCriteria)}`);for(let e of a.results)r.push(`- ${n(e.criterion_id)}: ${e.passed?i.passed:i.failed}; ${i.exitCode}: ${e.exit_code??i.unknown}`)}}return r.join(` -`)+` -`}function Wx({goalId:e,contract:t,copy:n,current:r}){if(t?.enabled!==!0)return null;let i=`loopx --format json goal-acceptance inspect --goal-id '${e.replace(/'/g,`'\\''`)}'`;return(0,z.jsxs)(`details`,{className:`delivery-acceptance-contract`,children:[(0,z.jsx)(`summary`,{children:n.title}),(0,z.jsxs)(`div`,{className:`delivery-acceptance-content`,children:[(0,z.jsx)(`p`,{children:n.boundary}),r?null:(0,z.jsx)(`p`,{role:`status`,className:`delivery-notice`,children:n.retained}),(0,z.jsxs)(`dl`,{className:`delivery-acceptance-source`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.source}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:e})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.revision}),(0,z.jsx)(`dd`,{children:t.revision})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.digest}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.digest})})]})]}),(0,z.jsx)(`h3`,{children:n.objective}),(0,z.jsx)(`p`,{children:t.objective||n.unknown}),t.non_goals.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:n.nonGoals}),(0,z.jsx)(`ul`,{children:t.non_goals.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))})]}):null,(0,z.jsx)(`h3`,{children:n.criteria}),t.criteria.length?(0,z.jsx)(`ul`,{children:t.criteria.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.id}),` · `,e.description]},e.id))}):(0,z.jsx)(`p`,{children:n.noCriteria}),(0,z.jsx)(`h3`,{children:n.tasks}),t.tasks.length?(0,z.jsx)(`ul`,{className:`delivery-acceptance-tasks`,children:t.tasks.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`code`,{children:e.todo_id}),` · `,(0,z.jsx)(`strong`,{children:n.taskState[e.state]})]}),(0,z.jsxs)(`p`,{children:[n.criteria,`: `,e.criterion_ids.length?e.criterion_ids.join(`, `):n.unknown]}),e.applicable===!1?(0,z.jsx)(`p`,{children:n.notApplicable}):null,e.reason?(0,z.jsx)(`p`,{children:e.reason}):null]},e.todo_id))}):(0,z.jsx)(`p`,{children:n.noTasks}),(0,z.jsx)(`h3`,{children:n.verification}),(0,z.jsx)(`p`,{children:n.verificationState[t.status]}),t.held_todo_ids.length?(0,z.jsxs)(`p`,{children:[n.heldTasks,`: `,t.held_todo_ids.join(`, `)]}):null,(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.receipt}),t.verification?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:n.receiptNote}),(0,z.jsxs)(`dl`,{className:`delivery-acceptance-source`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.operation}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.verification.operation_id})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.revision}),(0,z.jsx)(`dd`,{children:t.verification.contract_revision})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.digest}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.verification.contract_digest})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.verificationScope}),(0,z.jsx)(`dd`,{children:t.verification.todo_id??n.allCriteria})]})]}),(0,z.jsx)(`ul`,{children:t.verification.results.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.criterion_id}),` · `,e.passed?n.passed:n.failed,` · `,n.exitCode,`: `,e.exit_code??n.unknown]},e.criterion_id))})]}):(0,z.jsx)(`p`,{children:n.unknown})]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.help}),(0,z.jsx)(`p`,{children:n.guidance}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:i})}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:`loopx goal-acceptance --help`})}),(0,z.jsx)(`a`,{href:`https://github.com/huangruiteng/loopx/blob/main/docs/reference/goal-acceptance-observations.md#owner-authorized-contract-v0`,target:`_blank`,rel:`noreferrer`,children:n.guide})]})]})]})}var Gx={en:{title:`Goal acceptance contract`,boundary:`Read-only owner contract. Task association and artifact checks are separate; neither automatically approves or completes the Goal.`,source:`Goal source`,revision:`Contract revision`,digest:`Contract digest`,objective:`Objective`,criteria:`Acceptance criteria`,nonGoals:`Outside scope`,tasks:`Task associations`,verification:`Artifact verification`,unknown:`Unknown`,noTasks:`No task associations reported. Coverage is unknown.`,noCriteria:`No acceptance criteria reported.`,retained:`Retained snapshot; refresh to read current acceptance facts.`,taskState:{ready:`Task association confirmed`,unbound:`Task association missing`,stale:`Task association stale`},verificationState:{unverified:`Artifact checks not verified`,accepted:`Artifact checks passed`,failed:`Artifact checks failed`,stale:`Artifact checks stale`,partial:`Task checks passed; Goal-wide verification unknown`,held:`Task associations require confirmation`},notApplicable:`Outside the current task gate`,heldTasks:`Tasks held`,receipt:`Recorded artifact checks`,receiptNote:`Recorded results use the revision below. The current contract status above accounts for stale checks and task holds.`,operation:`Verification reference`,verificationScope:`Verification scope`,allCriteria:`All contract criteria`,passed:`Passed`,failed:`Failed`,exitCode:`Exit code`,help:`Setup and readback`,guide:`Owner setup guide (v0)`,guidance:`The local Goal owner configures this contract through the CLI using configure --document and the inspected --expected-provider-revision. Changes and verification require --execute. Inspect before changing the contract; refresh this snapshot afterward. Disable with the current provider revision to hide this section.`},"zh-CN":{title:`Goal 验收合同`,boundary:`只读的所有者合同。任务关联与产物检查是独立事实,均不会自动批准或完成 Goal。`,source:`Goal 来源`,revision:`合同版本`,digest:`合同摘要`,objective:`目标`,criteria:`验收条件`,nonGoals:`范围之外`,tasks:`任务关联`,verification:`产物验证`,unknown:`未知`,noTasks:`未提供任务关联,覆盖范围未知。`,noCriteria:`未提供验收条件。`,retained:`当前保留旧快照,请刷新读取最新验收事实。`,taskState:{ready:`任务关联已确认`,unbound:`任务关联缺失`,stale:`任务关联已过期`},verificationState:{unverified:`产物检查未验证`,accepted:`产物检查通过`,failed:`产物检查失败`,stale:`产物检查已过期`,partial:`任务检查通过;Goal 整体验证未知`,held:`任务关联需要确认`},notApplicable:`不属于当前任务门禁范围`,heldTasks:`受阻任务`,receipt:`已记录的产物检查`,receiptNote:`记录对应下方版本。上方当前合同状态已考虑检查过期和任务阻塞。`,operation:`验证引用`,verificationScope:`验证范围`,allCriteria:`全部合同条件`,passed:`通过`,failed:`失败`,exitCode:`退出码`,help:`配置与读回`,guide:`所有者配置指南(v0)`,guidance:`本地 Goal 所有者通过 CLI 的 configure --document 配置合同,并提供 inspect 读到的 --expected-provider-revision。变更和验证都需要 --execute。变更前先检查合同,操作后刷新此快照;使用当前 provider revision 执行 disable 可隐藏本区块。`}},Kx={en:{contract:Gx.en,title:`Delivery & evidence`,scope:`Current work and a limited set of predecessors. Use Tasks for the full task inventory.`,observed:`Snapshot read`,chain:`Delivery chain`,relations:`Relationships`,acceptance:`Acceptance observations`,acceptanceBoundary:`Completed tasks and recorded evidence do not certify Goal acceptance.`,noGraph:`No delivery chain is available in this snapshot. This does not mean all work is complete.`,incomplete:`Some related information is missing or not expanded.`,unavailable:`Unknown`,refs:`Source references`,required:`Evidence still required`,guards:`Pending decisions`,next:`Next action`,owner:`Owner`,reason:`Reason`,historical:`Historical observations`,checks:`Component checks`,missingSources:`Missing sources`,observedScope:`Observation coverage`,kind:{deliverable:`Work`,gate:`Decision`,gate_summary:`Other decisions`,lease:`Ownership`,validation:`Validation`,repair:`Recovery`,handoff:`Handoff`,evidence:`Evidence`},state:{open:`Open`,ready:`Ready`,blocked:`Blocked`,done:`Done`,waiting:`Waiting`,unknown:`Unknown`},relation:{depends_on:`depends on`,blocks:`blocks`,validates:`validates / contextualizes`,repairs:`repairs`,audits:`audits`,continues:`continues`,hands_off_to:`hands off to`,supersedes:`supersedes`},refresh:`Refresh snapshot`,export:`Export delivery snapshot`,exported:`Snapshot downloaded`,loading:`Reading the current delivery chain…`,error:`The delivery snapshot could not be read. Refresh to retry.`,refreshError:`Refresh failed. The previous snapshot remains visible; refresh before opening linked work or exporting.`,changed:`Workspace facts changed after this snapshot. Refresh before opening linked work or exporting.`,search:`Search title, owner or reference`,all:`All nodes`,conditions:`Conditions & owners`,evidence:`Evidence & handoffs`,related:`Directly related`,map:`Map`,list:`List`,view:`Delivery chain layout`,filter:`Delivery chain focus`,visible:`Visible`,empty:`No nodes match these filters.`,reset:`Reset filters`,select:`Select a node to trace its relationships and open its source.`,work:`Work`,context:`Evidence & recovery`,details:`Selected item`,noRelations:`No relationships are recorded for this item.`,openTask:`Open task`,openGate:`Review decision`,openRun:`Open execution`,sourceUnavailable:`The linked item is not in the current workspace. Use its reference in the task board or CLI.`,omittedGates:`Decisions not expanded`,missing:`Missing predecessors`,clipped:`Expansion limited`,sourceClipped:`Source truncated`,yes:`Yes`,no:`No`,chainOnly:`Bounded chain`,exportFailed:`Download failed. Please retry.`},"zh-CN":{contract:Gx[`zh-CN`],title:`交付与依据`,scope:`仅含当前工作及有限前序,完整任务清单见任务页。`,observed:`快照读取时间`,chain:`交付链`,relations:`关联关系`,acceptance:`验收观察`,acceptanceBoundary:`任务完成、已有证据均不等于 Goal 已通过验收。`,noGraph:`当前快照没有可展示的交付链,这不代表工作已经全部完成。`,incomplete:`部分关联信息缺失或未展开。`,unavailable:`未知`,refs:`来源引用`,required:`仍需补齐的证据`,guards:`待你处理`,next:`下一步`,owner:`负责人`,reason:`原因`,historical:`历史观察`,checks:`组成检查`,missingSources:`缺失来源`,observedScope:`观察范围`,kind:{deliverable:`工作`,gate:`决策`,gate_summary:`其他决策`,lease:`责任归属`,validation:`验证`,repair:`恢复`,handoff:`交接`,evidence:`证据`},state:{open:`待处理`,ready:`就绪`,blocked:`受阻`,done:`已完成`,waiting:`等待`,unknown:`未知`},relation:{depends_on:`依赖`,blocks:`阻塞`,validates:`验证 / 提供背景`,repairs:`修复`,audits:`复核`,continues:`延续`,hands_off_to:`交接给`,supersedes:`替代`},refresh:`刷新快照`,export:`导出交付快照`,exported:`快照已下载`,loading:`正在读取当前交付链…`,error:`交付快照读取失败,请刷新重试。`,refreshError:`刷新失败,当前保留上次快照;请刷新后再打开关联工作或导出。`,changed:`工作区状态已在此快照之后变化,请刷新后再打开关联工作或导出。`,search:`搜索标题、负责人或引用`,all:`全部节点`,conditions:`条件与责任`,evidence:`证据与交接`,related:`直接关联`,map:`关系图`,list:`列表`,view:`交付链布局`,filter:`交付链范围`,visible:`当前显示`,empty:`没有匹配当前筛选的节点。`,reset:`重置筛选`,select:`选择一个节点,追溯关联关系并打开来源。`,work:`工作`,context:`证据与恢复`,details:`选中事项`,noRelations:`当前快照未记录此事项的关联关系。`,openTask:`打开任务`,openGate:`查看决策`,openRun:`打开执行`,sourceUnavailable:`关联事项未出现在当前工作区,可使用其引用到任务看板或 CLI 查找。`,omittedGates:`未展开决策`,missing:`缺失前序`,clipped:`展开受限`,sourceClipped:`来源被裁剪`,yes:`是`,no:`否`,chainOnly:`当前局部链`,exportFailed:`下载失败,请重试。`}};function qx({graph:e,nodes:t,selected:n,onSelect:r,copy:i}){let a=(0,R.useId)().replace(/:/g,``),o=[0,1,2].map(e=>t.filter(t=>Hx(t)===e)),s=new Map(o.flatMap((e,t)=>e.map((e,n)=>[e.node_id,{x:t*320+12,y:n*124+48}]))),c=Math.max(1,...o.map(e=>e.length))*124+48;return(0,z.jsx)(`div`,{className:`delivery-map-scroll`,role:`region`,"aria-label":i.map,tabIndex:0,children:(0,z.jsxs)(`div`,{className:`delivery-map`,style:{height:c},children:[[i.conditions,i.work,i.context].map((e,t)=>(0,z.jsx)(`strong`,{className:`delivery-map-heading`,style:{left:t*320+12},children:e},e)),(0,z.jsxs)(`svg`,{"aria-hidden":`true`,width:`960`,height:c,children:[(0,z.jsx)(`defs`,{children:(0,z.jsx)(`marker`,{id:a,viewBox:`0 0 10 10`,refX:`9`,refY:`5`,markerWidth:`6`,markerHeight:`6`,orient:`auto-start-reverse`,children:(0,z.jsx)(`path`,{d:`M 0 0 L 10 5 L 0 10 z`,fill:`currentColor`})})}),e.edges.map(e=>{let t=s.get(e.from_node_id),r=s.get(e.to_node_id);if(!t||!r)return null;let i=t.x{let t=s.get(e.node_id);return(0,z.jsxs)(`button`,{className:`delivery-map-node`,style:{left:t.x,top:t.y},"aria-pressed":n===e.node_id,onClick:()=>r(e.node_id),type:`button`,children:[(0,z.jsxs)(`span`,{children:[i.kind[e.kind],(0,z.jsx)(`em`,{"data-state":e.state,children:i.state[e.state]})]}),(0,z.jsx)(`strong`,{title:e.title,children:e.title}),(0,z.jsx)(`small`,{children:e.owner_agent??i.unavailable})]},e.node_id)})]})})}function Jx({goal:e,items:t,userTodos:n,onSelect:r,active:i}){let{locale:a}=Ji(),o=Kx[a],[s,c]=(0,R.useState)({kind:`loading`}),[l,u]=(0,R.useState)(0),[d,f]=(0,R.useState)(``),[p,m]=(0,R.useState)(`all`),[h,g]=(0,R.useState)(null),[_,v]=(0,R.useState)(()=>window.matchMedia(`(min-width: 1024px)`).matches),[y,b]=(0,R.useState)(``),x=(0,R.useRef)(null),S=n.filter(t=>t.goalId===e.goalId),C=JSON.stringify([e.agentTodos,e.acceptanceObservation,S]),w=(0,R.useRef)(C);w.current=C,(0,R.useEffect)(()=>{if(!i)return;let t=new AbortController,n=w.current;return c(e=>({...e,kind:`loading`})),b(``),zx(e.goalId,t.signal).then(e=>{t.signal.aborted||c({kind:`ready`,snapshot:e,sourceKey:n})}).catch(()=>{t.signal.aborted||c(e=>({...e,kind:`error`}))}),()=>t.abort()},[e.goalId,l,i]);let T=s.snapshot?.goal_id===e.goalId?s.snapshot:null,E=!!T&&s.sourceKey!==C,D=!!T&&s.kind===`ready`&&!E,O=T?.graph,k=O?.nodes.find(e=>e.node_id===h),A=p===`related`&&!k?`all`:p,ee=(0,R.useMemo)(()=>O?Bx(O,d,A,h):[],[O,d,A,h]),j=O?.edges.filter(e=>e.from_node_id===h||e.to_node_id===h)??[],M=new Map(O?.nodes.map(e=>[e.node_id,e])),te=()=>{f(``),m(`all`)},ne=e=>{g(e),b(``),window.requestAnimationFrame(()=>x.current?.scrollIntoView({block:`nearest`}))};function N(n){let r=new Set(n.refs.todo_ids??[]),i=new Set(n.refs.gate_ids??[]),a=new Set(n.refs.run_ids??[]);return[...e.agentTodos.filter(e=>r.has(e.todoId)).map(t=>({kind:`todo`,item:{...t,goalId:e.goalId,goalTitle:e.title,ownerLabel:t.claimedBy}})),...S.filter(e=>i.has(e.todoId)||r.has(e.todoId)).map(e=>({kind:`attention`,item:e})),...t.filter(t=>t.kind===`run`&&t.run.goalId===e.goalId&&a.has(t.run.runId)).map(e=>({kind:`run`,item:e.run}))]}let P=k?N(k):[];function re(){if(!T||!D)return;let e;try{e=URL.createObjectURL(new Blob([Ux(T,o)],{type:`text/markdown;charset=utf-8`}));let t=document.createElement(`a`);t.href=e,t.download=`loopx-delivery-review.md`,t.click(),b(o.exported)}catch{b(o.exportFailed)}finally{e&&window.setTimeout(()=>URL.revokeObjectURL(e),1e3)}}return(0,z.jsxs)(`section`,{className:`delivery-review`,"aria-label":o.title,children:[(0,z.jsxs)(`header`,{className:`delivery-review-toolbar`,children:[(0,z.jsx)(`h2`,{children:o.title}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{type:`button`,disabled:s.kind===`loading`,onClick:()=>u(e=>e+1),children:[(0,z.jsx)(Qm,{size:15}),o.refresh]}),(0,z.jsxs)(`button`,{type:`button`,disabled:!D,onClick:re,children:[(0,z.jsx)(Tm,{size:15}),o.export]})]})]}),y?(0,z.jsx)(`p`,{role:`status`,children:y}):null,T?(0,z.jsxs)(z.Fragment,{children:[s.kind===`ready`?null:(0,z.jsx)(`p`,{role:s.kind===`error`?`alert`:`status`,className:`delivery-notice`,children:s.kind===`error`?o.refreshError:o.loading}),(0,z.jsxs)(`p`,{className:`delivery-snapshot-time`,children:[o.observed,` · `,(0,z.jsx)(`time`,{dateTime:T.observed_at,children:new Date(T.observed_at).toLocaleString(a)})]}),E?(0,z.jsx)(`p`,{role:`alert`,className:`delivery-notice`,children:o.changed}):null,(0,z.jsxs)(`p`,{className:`delivery-boundary`,children:[o.scope,` `,o.acceptanceBoundary]}),O?(0,z.jsxs)(z.Fragment,{children:[Vx(O)?(0,z.jsxs)(`details`,{className:`delivery-notice`,children:[(0,z.jsx)(`summary`,{children:o.incomplete}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.omittedGates}),(0,z.jsx)(`dd`,{children:O.limits.user_gate_truncated_count})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.missing}),(0,z.jsx)(`dd`,{children:O.limits.missing_predecessor_count??o.unavailable})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.clipped}),(0,z.jsx)(`dd`,{children:O.limits.predecessor_truncated===void 0?o.unavailable:O.limits.predecessor_truncated?o.yes:o.no})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.sourceClipped}),(0,z.jsx)(`dd`,{children:O.limits.source_truncated===void 0?o.unavailable:O.limits.source_truncated?o.yes:o.no})]})]})]}):null,(0,z.jsxs)(`section`,{className:`delivery-chain`,"aria-label":o.chain,children:[(0,z.jsxs)(`header`,{className:`delivery-chain-toolbar`,children:[(0,z.jsx)(`h3`,{children:o.chain}),(0,z.jsxs)(`span`,{children:[o.visible,` `,ee.length,`/`,O.nodes.length]}),(0,z.jsxs)(`div`,{role:`group`,"aria-label":o.view,children:[(0,z.jsx)(`button`,{type:`button`,"aria-pressed":_,onClick:()=>v(!0),children:o.map}),(0,z.jsx)(`button`,{type:`button`,"aria-pressed":!_,onClick:()=>v(!1),children:o.list})]})]}),(0,z.jsxs)(`div`,{className:`delivery-filters`,children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(th,{size:16}),(0,z.jsx)(`input`,{"aria-label":o.search,placeholder:o.search,value:d,onChange:e=>f(e.target.value)})]}),(0,z.jsxs)(`select`,{"aria-label":o.filter,value:A,onChange:e=>m(e.target.value),children:[(0,z.jsx)(`option`,{value:`all`,children:o.all}),(0,z.jsx)(`option`,{value:`conditions`,children:o.conditions}),(0,z.jsx)(`option`,{value:`evidence`,children:o.evidence}),(0,z.jsx)(`option`,{value:`related`,disabled:!k,children:o.related})]}),(0,z.jsx)(`button`,{type:`button`,onClick:te,children:o.reset})]}),ee.length?_?(0,z.jsx)(qx,{graph:O,nodes:ee,selected:h,onSelect:ne,copy:o}):(0,z.jsx)(`ul`,{className:`delivery-node-list`,children:ee.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,"aria-pressed":h===e.node_id,onClick:()=>ne(e.node_id),children:[(0,z.jsx)(`span`,{children:o.kind[e.kind]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`small`,{children:e.owner_agent??o.unavailable}),(0,z.jsx)(`em`,{"data-state":e.state,children:o.state[e.state]})]})},e.node_id))}):(0,z.jsx)(`p`,{className:`delivery-empty`,role:`status`,children:o.empty})]}),(0,z.jsx)(`section`,{className:`delivery-node-detail`,"aria-label":o.details,ref:x,children:k?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[o.kind[k.kind],` · `,o.state[k.state]]}),(0,z.jsx)(`h3`,{children:k.title}),k.owner_agent?(0,z.jsx)(`p`,{children:k.owner_agent}):null]}),k.from_agent||k.to_agent?(0,z.jsxs)(`p`,{children:[k.from_agent??o.unavailable,` → `,k.to_agent??o.unavailable]}):null,(0,z.jsx)(`div`,{className:`delivery-source-actions`,children:P.length?P.map((e,t)=>(0,z.jsxs)(`button`,{type:`button`,disabled:!D,onClick:()=>r(e),children:[(0,z.jsx)(Dm,{size:15}),e.kind===`todo`?o.openTask:e.kind===`attention`?o.openGate:o.openRun]},`${e.kind}:${t}`)):(0,z.jsx)(`p`,{children:o.sourceUnavailable})}),(0,z.jsx)(`h4`,{children:o.relations}),j.length?(0,z.jsx)(`ul`,{className:`delivery-relations`,children:j.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>ne(e.from_node_id),children:M.get(e.from_node_id).title}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(sm,{size:13}),o.relation[e.relation],(0,z.jsx)(sm,{size:13})]}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>ne(e.to_node_id),children:M.get(e.to_node_id).title})]}),(0,z.jsx)(`p`,{children:e.reason})]},e.edge_id))}):(0,z.jsx)(`p`,{children:o.noRelations}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:o.refs}),(0,z.jsx)(`code`,{children:k.node_id}),Object.entries(k.refs).map(([e,t])=>(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:e}),` `,t.join(`, `)]},e))]})]}):(0,z.jsx)(`p`,{children:o.select})})]}):(0,z.jsx)(`p`,{className:`delivery-notice`,children:o.noGraph})]}):(0,z.jsx)(`p`,{role:s.kind===`error`?`alert`:`status`,className:`delivery-notice`,children:s.kind===`error`?o.error:o.loading}),(0,z.jsx)(Wx,{goalId:e.goalId,contract:T?.acceptance?.goal_acceptance_contract,copy:o.contract,current:D}),(0,z.jsx)(Ub,{goal:T?{...e,acceptanceObservation:T.acceptance}:e})]})}function Yx({active:e,goal:t,items:n,userTodos:r,readOnly:i,onOpenDetails:a,onSelect:o,onView:s}){let{t:c,locale:l}=Ji(),u=l===`zh-CN`?{progress:`当前进展`,attention:`需要你`,none:`当前没有已加载的待处理决定。`,details:`Goal 信息`,tasks:`查看任务`,usage:`最近 24 小时`,execution:`执行记录`,remote:`此来源仅提供同步的状态与验收观察,交付链需要实时本机来源。`}:{progress:`Current progress`,attention:`Needs you`,none:`No pending decisions are loaded.`,details:`Goal information`,tasks:`View tasks`,usage:`Last 24 hours`,execution:`Execution`,remote:`This source provides synchronized status and acceptance observations. The delivery chain requires the live local source.`},d=r.filter(e=>e.goalId===t.goalId),f=n.find(e=>e.kind===`run`&&e.run.goalId===t.goalId);return(0,z.jsxs)(`section`,{className:`goal-overview`,"aria-label":c(`header.overview`),children:[(0,z.jsxs)(`header`,{className:`goal-overview-heading`,children:[(0,z.jsx)(`h2`,{children:c(`header.overview`)}),(0,z.jsxs)(`button`,{onClick:a,type:`button`,children:[(0,z.jsx)(Pm,{size:15}),u.details]})]}),(0,z.jsxs)(`div`,{className:`goal-overview-summary${d.length?` has-attention`:``}`,children:[(0,z.jsxs)(`section`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:u.progress}),(0,z.jsx)(`span`,{children:Yi(t.state,l)})]}),(0,z.jsx)(`strong`,{children:t.nextSentence}),t.agentSentence&&t.agentSentence!==t.nextSentence?(0,z.jsx)(`p`,{children:t.agentSentence}):null,d.length?null:(0,z.jsx)(`p`,{className:`goal-overview-quiet`,children:u.none}),f?(0,z.jsxs)(`button`,{className:`goal-overview-run`,type:`button`,onClick:()=>o({kind:`run`,item:f.run}),children:[(0,z.jsxs)(`small`,{children:[u.execution,` · `,f.run.agentLabel]}),(0,z.jsx)(`strong`,{children:f.run.title}),(0,z.jsx)(sm,{size:15})]}):null]}),d.length?(0,z.jsxs)(`section`,{className:`goal-overview-attention`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:u.attention}),(0,z.jsx)(`span`,{children:d.length})]}),(0,z.jsx)(`ul`,{children:d.slice(0,3).map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,onClick:()=>o({kind:`attention`,item:e}),children:[(0,z.jsx)(`span`,{children:e.text}),(0,z.jsx)(sm,{size:15})]})},e.todoId))}),d.length>3?(0,z.jsxs)(`button`,{type:`button`,onClick:()=>s(`tasks`),children:[u.tasks,` (`,d.length,`)`,(0,z.jsx)(sm,{size:14})]}):null]}):null]}),(0,z.jsxs)(`section`,{className:`goal-overview-usage`,"aria-label":u.usage,children:[(0,z.jsx)(`h3`,{children:u.usage}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.tokensShort`)}),(0,z.jsx)(`dd`,{children:Qd(t.usage?.tokens24h,c(`drawer.usageNotMeasured`),Yd)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.costShort`)}),(0,z.jsx)(`dd`,{children:Qd(t.usage?.costUsd24h,c(`drawer.usageNotMeasured`),Xd)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.durationShort`)}),(0,z.jsx)(`dd`,{children:Qd(t.usage?.durationMs24h,c(`drawer.usageNotMeasured`),Zd)})]})]})]}),i?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`goal-overview-source-note`,children:u.remote}),(0,z.jsx)(Ub,{goal:t})]}):(0,z.jsx)(Jx,{active:e,goal:t,items:n,userTodos:r,onSelect:o})]})}function Xx({activeTab:e,panels:t,scrollRef:n}){let[r,i]=(0,R.useState)(()=>new Set([e])),a=(0,R.useRef)({});return(0,R.useEffect)(()=>i(t=>t.has(e)?t:new Set([...t,e])),[e]),(0,R.useLayoutEffect)(()=>{let t=n.current;if(!t)return;t.scrollTop=a.current[e]??0;let r=()=>{a.current[e]=t.scrollTop};return t.addEventListener(`scroll`,r,{passive:!0}),()=>t.removeEventListener(`scroll`,r)},[e,n]),Object.keys(t).map(n=>r.has(n)||n===e?(0,z.jsx)(`div`,{className:`personal-goal-view-panel`,"data-goal-panel":n,hidden:n!==e,children:t[n]},n):null)}function Zx(e,t){return{live_steering:{label:t(`lark.ingressSteering`),detail:t(`lark.ingressSteeringDescription`)},session_queue:{label:t(`lark.ingressQueue`),detail:t(`lark.ingressQueueDescription`)},async_inbox:{label:t(`lark.ingressAsync`),detail:t(`lark.ingressAsyncDescription`)},direct_session:{label:t(`lark.ingressLegacy`),detail:t(`lark.ingressLegacyDescription`)}}[e]}function Qx(e,t){return e.listener_status===`starting`?{label:t(`lark.health.starting`),detail:t(`lark.health.startingDetail`),state:`not_ready`}:e.listener_status===`retrying`&&e.listener_error_code===`lark_event_source_disconnected`?{label:t(`lark.health.sourceDisconnected`),detail:t(`lark.health.sourceDisconnectedDetail`),state:`not_ready`}:e.listener_status===`retrying`?{label:t(`lark.health.retrying`),detail:t(`lark.health.retryingDetail`),state:`not_ready`}:e.listener_status===`stopped`||e.listener_status===null?{label:t(`lark.health.notStarted`),detail:t(`lark.health.notStartedDetail`),state:`not_ready`}:e.last_event_status===`message_context_permission_required`?{label:t(`lark.health.messageContextPermission`),detail:t(`lark.health.messageContextPermissionDetail`),state:`not_ready`}:e.last_event_status===`processing_failed`?{label:t(`lark.health.processingFailed`),detail:t(`lark.health.processingFailedDetail`),state:`not_ready`}:e.health_error_code===`invalid_routing_state`?{label:t(`lark.health.invalidRouting`),detail:t(`lark.health.invalidRoutingDetail`),state:`not_ready`}:e.last_event_status===`queued_for_agent`?{label:t(`lark.health.queued`),detail:t(`lark.health.queuedDetail`,{agent:e.agent_id??t(`lark.targetAgent`)}),state:`ready`}:e.last_event_status===`context_only_captured`||e.last_event_status===`context_only_already_captured`?{label:t(`lark.health.contextCaptured`),detail:t(`lark.health.contextCapturedDetail`),state:`ready`}:e.last_event_status===`ignored`&&e.last_event_reason===`not_addressed`?{label:t(`lark.health.notAddressed`),detail:t(`lark.health.notAddressedDetail`),state:`ready`}:e.last_event_status===`ignored`&&e.last_event_reason===`self_message`?{label:t(`lark.health.listening`),detail:t(`lark.health.ignoredSelf`),state:`ready`}:e.health_error_code===`lark_event_route_mismatch`||[`chat_mismatch`,`topic_mismatch`,`route_ambiguous`].includes(e.last_event_reason??``)?{label:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguous`):t(`lark.health.routeMismatch`),detail:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguousDetail`):t(`lark.health.routeMismatchDetail`),state:`not_ready`}:[`invalid_event`,`binding_unavailable`].includes(e.last_event_reason??``)?{label:t(`lark.health.routeUnavailable`),detail:t(`lark.health.routeUnavailableDetail`),state:`not_ready`}:e.last_event_status===`replied_and_acknowledged`?{label:t(`lark.health.listening`),detail:t(`lark.health.eventProcessed`,{events:e.event_count,replies:e.replied_count}),state:`ready`}:e.health_error_code===`lark_event_delivery_unverified`||e.event_count===0?{label:t(`lark.health.eventUnverified`),detail:t(`lark.health.eventUnverifiedDetail`),state:`unverified`}:{label:e.reply_ready?t(`lark.health.listening`):t(`lark.health.unavailable`),detail:t(`lark.health.lastStatus`,{status:e.last_event_status??t(`lark.health.waiting`)}),state:e.reply_ready?`ready`:`not_ready`}}function $x(e){return e.history_permission_guidance?.api_document_url??null}function eS(e,t,n){if(e instanceof qh){let t=String(e.payload.error_code??``);return{lark_cli_not_installed:n(`lark.error.cliMissing`),lark_cli_not_executable:n(`lark.error.cliExecutable`),lark_cli_start_failed:n(`lark.error.cliStart`),lark_message_permissions_required:n(`lark.error.messagePermissions`),lark_app_required:n(`lark.error.appRequired`),invalid_lark_app:n(`lark.error.invalidApp`),lark_group_lookup_failed:n(`lark.error.groupLookup`),provider_api_failed:n(`lark.error.provider`)}[t]??e.message}return e instanceof Error?e.message:t}function tS({embedded:e=!1,focusGoalConnection:t=!1,goals:n,initialGoalId:r,onChanged:i,onClose:a}){let{t:o}=Ji(),[s,c]=(0,R.useState)(`connections`),[l,u]=(0,R.useState)([]),[d,f]=(0,R.useState)([]),[p,m]=(0,R.useState)(!0),[h,g]=(0,R.useState)(null),[_,v]=(0,R.useState)(``),[y,b]=(0,R.useState)(t),[x,S]=(0,R.useState)(``),[C,w]=(0,R.useState)(r??n[0]?.goalId??``),[T,E]=(0,R.useState)(``),[D,O]=(0,R.useState)([]),[k,A]=(0,R.useState)(``),[ee,j]=(0,R.useState)(!1),[M,te]=(0,R.useState)(null),[ne,N]=(0,R.useState)(`addressed_only`),[P,re]=(0,R.useState)(t&&r?`goal`:`manager`),[ie,ae]=(0,R.useState)(`async_inbox`),[F,oe]=(0,R.useState)(`topic_reply`),[I,se]=(0,R.useState)(``),[L,ce]=(0,R.useState)(!1),[le,ue]=(0,R.useState)({}),[de,fe]=(0,R.useState)(!1),[pe,me]=(0,R.useState)(null),[he,ge]=(0,R.useState)(null),[_e,ve]=(0,R.useState)(null),[ye,be]=(0,R.useState)(null),[xe,Se]=(0,R.useState)(!1),[Ce,we]=(0,R.useState)(`loopx-workspace-bot`),[Te,Ee]=(0,R.useState)(`feishu`),[De,Oe]=(0,R.useState)(null),[ke,Ae]=(0,R.useState)(!1),[je,Me]=(0,R.useState)(null),Ne=(0,R.useRef)(null),Pe=(0,R.useRef)(null),Fe=(0,R.useRef)(!1);async function Ie(){m(!0),g(null);try{let[e,t]=await Promise.all([__(),E_()]);u(e),f(t),S(t=>t||e.find(e=>e.reply_ready)?.app_ref||e.find(e=>e.ready)?.app_ref||e[0]?.app_ref||``)}catch(e){g(eS(e,o(`lark.error.configuration`),o))}finally{m(!1)}}(0,R.useEffect)(()=>{Ie()},[]),(0,R.useEffect)(()=>{if(!t||p||Fe.current||!r)return;Fe.current=!0;let e=d.find(e=>e.goal_id===r);e?Je(e):V(n.find(e=>e.goalId===r))},[d,t,n,r,p]),(0,R.useEffect)(()=>{if(!y||!x||_e){O([]),A(``),j(!1),te(null);return}let e=!1;j(!0),te(null);let t=window.setTimeout(()=>{w_(x,T).then(t=>{e||(O(t),A(e=>t.some(t=>t.chat_id===e)?e:t[0]?.chat_id??``))}).catch(t=>{e||(O([]),A(``),te(eS(t,o(`lark.error.groupLoad`),o)))}).finally(()=>{e||j(!1)})},180);return()=>{e=!0,window.clearTimeout(t)}},[x,T,y,_e]),(0,R.useEffect)(()=>{if(!xe||!De||[`ready`,`failed`,`cancelled`].includes(De.status))return;let e=!1,t=window.setTimeout(()=>{b_(De.setup_id).then(async t=>{e||(Oe(t),t.verification_url&&Pe.current!==t.verification_url&&(Pe.current=t.verification_url,Ne.current&&!Ne.current.closed&&(Ne.current.location.href=t.verification_url)),t.status===`ready`&&(await Ie(),S(t.app_ref),ue({}),Se(!1)),t.status===`failed`&&Me(t.error??o(`lark.error.appCreate`)))}).catch(t=>{e||Me(eS(t,o(`lark.error.setupPoll`),o))})},650);return()=>{e=!0,window.clearTimeout(t)}},[xe,De]);let Le=n.find(e=>e.goalId===C),Re=Le?.agentId?[{agentId:Le.agentId,label:Le.agentLabel??Le.agentId}]:[],B=Le?.agentLanes?.length?Le.agentLanes:Re,ze=B.some(e=>e.agentId===I),Be=[];L?Be=B.map(e=>({agentId:e.agentId,appRef:le[e.agentId]??x})):ze&&(Be=[{agentId:I,appRef:x}]);let Ve=Be.map(e=>e.agentId),He=!!_e||Be.length>0&&Be.every(e=>l.some(t=>t.app_ref===e.appRef&&t.reply_ready)),Ue=o(`lark.connect`);he?Ue=o(`lark.saveConnection`):L&&(Ue=o(`lark.connectAllAgentsAction`,{count:Ve.length}));let We=l.find(e=>e.app_ref===x),Ge=D.find(e=>e.chat_id===k),Ke=(0,R.useMemo)(()=>{let e=_.trim().toLocaleLowerCase();return e?d.filter(t=>[t.app_label,t.chat_name,t.goal_title,t.topic_name].some(t=>t.toLocaleLowerCase().includes(e))):d},[d,_]),qe=(0,R.useMemo)(()=>d.filter(e=>Qx(e,o).state===`unverified`).length,[d,o]);function V(e){let i=e??n.find(e=>e.goalId===r)??n[0];ge(null),ve(null),re(e||t?`goal`:`manager`),S(l.some(e=>e.app_ref===x)?x:l.find(e=>e.reply_ready)?.app_ref??l[0]?.app_ref??``),A(``),w(i?.goalId??``),se(i?.agentId??``),ce(!1),ue({}),N(`addressed_only`),ae(`async_inbox`),oe(`topic_reply`),E(``),me(null),b(!0)}function Je(e){ge(e.goal_id),ve(e),re(e.conversation_kind??`goal`),S(e.app_ref),w(e.goal_id);let t=n.find(t=>t.goalId===e.goal_id),r=t?.agentLanes?.length?t.agentLanes:t?.agentId?[{agentId:t.agentId}]:[];se(e.agent_id??(r.length===1?r[0].agentId:``)),ce(!1),ue({}),N(e.capture_scope),ae(e.ingress_mode===`direct_session`?`async_inbox`:e.ingress_mode),oe(e.reply_mode),E(e.chat_name),me(null),b(!0)}function Ye(){Oe(null),Me(null),Pe.current=null,Se(!0)}async function Xe(){if(!(ke||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce))){Ae(!0),Me(null),Pe.current=null,Ne.current=window.open(window.location.href,`_blank`);try{let e=await y_({appRef:Ce,brand:Te});Oe(e)}catch(e){Ne.current?.close(),Me(eS(e,o(`lark.error.setupStart`),o))}finally{Ae(!1)}}}async function Ze(){let e=De;if(Se(!1),Ne.current?.close(),e&&![`ready`,`failed`,`cancelled`].includes(e.status))try{await x_(e.setup_id)}catch{}}async function Qe(){if(!(!x||!C||!_e&&!Ge||P===`goal`&&Ve.length===0||de)){fe(!0),me(null);try{let e={...P===`manager`?{..._e?{connectionId:_e.connection_id}:{appRef:x,chatId:Ge.chat_id,chatName:Ge.chat_name}}:_e?{connectionId:_e.connection_id,agentId:I}:{agentBindings:Be,chatId:Ge.chat_id,chatName:Ge.chat_name},conversationKind:P,captureScope:P===`manager`?`addressed_only`:ne,goalId:C,incomingMode:ne===`configured_chat_all`?`all`:`mentions`,ingressMode:P===`manager`?`session_queue`:ie,replyMode:F},t=await D_({...e,execute:!1});if(!t.ok)throw new qh(t.public_summary??t.blocker??o(`lark.error.bindPreview`),{error_code:t.blocker??`provider_api_failed`});let n=await D_({...e,execute:!0});if(!n.ok)throw new qh(n.public_summary??n.blocker??o(`lark.error.bind`),{error_code:n.blocker??`provider_api_failed`});b(!1),await Ie(),i?.()}catch(e){me(eS(e,o(`lark.error.bind`),o))}finally{fe(!1)}}}async function $e(e,t){if(ye!==t){be(t);return}try{await O_(e,t),be(null),await Ie(),i?.()}catch(e){g(eS(e,o(`lark.error.disconnect`),o))}}return(0,z.jsxs)(`section`,{className:`personal-lark-settings${e?` is-embedded`:``}`,"aria-label":o(`lark.configuration`),children:[e?null:(0,z.jsxs)(`header`,{className:`personal-lark-header`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:o(`settings.goalConnections`)}),(0,z.jsx)(`h1`,{children:`Lark`})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeSettings`),className:`personal-icon-button`,onClick:a,type:`button`,children:(0,z.jsx)(gh,{size:18})})]}),(0,z.jsxs)(`nav`,{className:`personal-lark-tabs`,"aria-label":o(`lark.management`),children:[(0,z.jsxs)(`button`,{"aria-current":s===`apps`?`page`:void 0,onClick:()=>c(`apps`),type:`button`,children:[o(`lark.apps`),` `,(0,z.jsx)(`span`,{children:p?`…`:l.length})]}),(0,z.jsxs)(`button`,{"aria-current":s===`connections`?`page`:void 0,onClick:()=>c(`connections`),type:`button`,children:[o(`lark.connections`),` `,(0,z.jsx)(`span`,{children:p?`…`:d.length})]})]}),h?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:h}):null,p?(0,z.jsxs)(`div`,{className:`personal-lark-loading`,children:[(0,z.jsx)(zm,{className:`is-spinning`,size:18}),o(`lark.loading`)]}):null,!p&&s===`apps`?(0,z.jsxs)(`div`,{className:`personal-lark-apps`,children:[(0,z.jsxs)(`div`,{className:`personal-lark-app-toolbar`,children:[(0,z.jsx)(`span`,{children:o(`lark.reusableApps`,{count:l.length})}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:Ye,type:`button`,children:[(0,z.jsx)(Xm,{size:16}),o(`lark.newApp`)]})]}),(0,z.jsxs)(`div`,{className:`personal-lark-app-grid`,children:[l.map(e=>(0,z.jsxs)(`article`,{className:`personal-lark-app-card`,children:[(0,z.jsx)(`span`,{className:`personal-lark-app-avatar`,children:(0,z.jsx)(fm,{size:19})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsxs)(`small`,{children:[e.brand,` · lark-cli profile`]})]}),(0,z.jsx)(`em`,{className:e.reply_ready?`is-ready`:`is-off`,children:e.reply_ready?o(`lark.autoReplyReady`):e.ready?o(`lark.needsMessagePermissions`):o(`lark.needsSetup`)}),(0,z.jsxs)(`p`,{children:[o(`lark.goalConnections`,{count:d.filter(t=>t.app_ref===e.app_ref).length}),e.ready&&!e.reply_ready?` · ${o(`lark.autoReplyUnavailable`)}`:``]})]},e.app_ref)),l.length===0?(0,z.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noProfiles`)}):null]})]}):null,!p&&s===`connections`?(0,z.jsxs)(`div`,{className:`personal-lark-connections`,children:[qe>0?(0,z.jsxs)(`p`,{className:`personal-lark-route-readiness`,role:`status`,children:[(0,z.jsx)(Um,{size:15}),o(`lark.routesUnverified`,{count:qe})]}):null,(0,z.jsxs)(`div`,{className:`personal-lark-toolbar`,children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(th,{size:16}),(0,z.jsx)(`input`,{"aria-label":o(`lark.searchConnections`),onChange:e=>v(e.target.value),placeholder:o(`lark.searchPlaceholder`),type:`search`,value:_})]}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:l.length===0||n.length===0,onClick:()=>V(),type:`button`,children:[(0,z.jsx)(Xm,{size:16}),o(`lark.connectApp`)]})]}),(0,z.jsxs)(`div`,{className:`personal-lark-table`,role:`table`,"aria-label":o(`lark.goalTopicConnections`),children:[(0,z.jsxs)(`div`,{className:`personal-lark-table-head`,role:`row`,children:[(0,z.jsx)(`span`,{children:o(`lark.connection`)}),(0,z.jsx)(`span`,{children:o(`common.goal`)}),(0,z.jsx)(`span`,{children:o(`lark.capture`)}),(0,z.jsx)(`span`,{children:o(`lark.processing`)}),(0,z.jsx)(`span`,{children:o(`common.actions`)})]}),Ke.map(e=>{let t=Qx(e,o);return(0,z.jsxs)(`div`,{className:`personal-lark-table-row`,role:`row`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.chat_name}),(0,z.jsxs)(`small`,{children:[e.app_label,` · `,t.label]}),(0,z.jsx)(`small`,{children:t.detail}),t.state===`unverified`?(0,z.jsxs)(`a`,{href:`https://open.feishu.cn/document/server-docs/im-v1/message/events/receive?lang=zh-CN`,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(Dm,{size:12}),o(`lark.openEventSettings`)]}):null,$x(e)?(0,z.jsxs)(`a`,{href:$x(e)??void 0,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(Dm,{size:12}),o(`lark.historyPermission`)]}):null]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.goal_title}),(0,z.jsxs)(`small`,{children:[`# `,e.topic_name]})]}),(0,z.jsx)(`span`,{children:e.capture_scope===`addressed_only`?o(`lark.mentionsOnly`):o(`lark.allTopicMessages`)}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.conversation_kind===`manager`?o(`lark.managerConversation`):Zx(e.ingress_mode,o).label}),(0,z.jsx)(`small`,{children:e.conversation_kind===`manager`?o(`lark.managerConversationDescription`):e.agent_id??Zx(e.ingress_mode,o).detail})]}),(0,z.jsxs)(`span`,{className:`personal-lark-row-actions`,children:[(0,z.jsx)(`button`,{"aria-label":o(`lark.settingsConfigure`,{goal:e.goal_title}),onClick:()=>Je(e),type:`button`,children:(0,z.jsx)(ah,{size:15})}),(0,z.jsxs)(`button`,{"aria-label":o(`lark.settingsDisconnect`,{goal:e.goal_title}),className:ye===e.connection_id?`is-confirm`:``,onClick:()=>void $e(e.goal_id,e.connection_id),type:`button`,children:[(0,z.jsx)(mh,{size:15}),ye===e.connection_id?o(`common.confirm`):null]})]})]},e.connection_id)}),Ke.length===0?(0,z.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noConnections`)}):null]})]}):null,y?(0,z.jsx)(`div`,{className:`personal-lark-modal-backdrop`,role:`presentation`,children:(0,z.jsxs)(`section`,{"aria-labelledby":`connect-lark-title`,"aria-modal":`true`,className:`personal-lark-modal`,role:`dialog`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:`Goal Topic connection`}),(0,z.jsx)(`h2`,{id:`connect-lark-title`,children:o(he?`lark.editConnection`:`lark.connectApp`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeConnection`),onClick:()=>b(!1),type:`button`,children:(0,z.jsx)(gh,{size:18})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.conversationKind`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.conversationKind`),disabled:!!_e,value:P,onChange:e=>re(e.target.value),children:[(0,z.jsx)(`option`,{value:`manager`,children:o(`lark.managerConversation`)}),(0,z.jsx)(`option`,{value:`goal`,children:o(`lark.workerConversation`)})]})]}),P===`manager`?(0,z.jsx)(`p`,{children:o(`lark.managerConversationDescription`)}):null,_e?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,z.jsx)(`div`,{children:_e.app_label})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,z.jsx)(`div`,{children:_e.chat_name})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,z.jsx)(`div`,{children:_e.goal_title})]}),(0,z.jsx)(`small`,{children:o(`lark.editPreservesIdentity`)})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.appProfile`),disabled:p,onChange:e=>{e.target.value===`__register__`?Ye():(S(e.target.value),ue({}))},value:x,children:p?(0,z.jsx)(`option`,{value:``,children:o(`lark.appLoading`)}):(0,z.jsxs)(z.Fragment,{children:[l.map(e=>(0,z.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref)),(0,z.jsx)(`option`,{value:`__register__`,children:o(`lark.registerAnother`)})]})}),(0,z.jsx)(`small`,{children:o(`lark.defaultAgentAppDescription`)})]}),We?.ready&&!We.reply_ready?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.appPermissions`)}):null,(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,z.jsx)(`input`,{"aria-label":o(`lark.groupSearch`),onChange:e=>E(e.target.value),placeholder:o(`lark.groupSearch`),type:`search`,value:T}),ee?(0,z.jsxs)(`div`,{className:`personal-lark-group-state`,role:`status`,children:[(0,z.jsx)(zm,{className:`is-spinning`,size:15}),o(`lark.groupLoading`)]}):null,!ee&&M?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:M}):null,!ee&&!M&&D.length===0?(0,z.jsx)(`div`,{className:`personal-lark-group-state`,role:`status`,children:o(`lark.groupEmpty`)}):null,!ee&&!M&&D.length>0?(0,z.jsx)(`select`,{"aria-label":o(`lark.groupChat`),onChange:e=>A(e.target.value),value:k,children:D.map(e=>(0,z.jsx)(`option`,{value:e.chat_id,children:e.chat_name},e.chat_id))}):null]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.bindGoal`),onChange:e=>{let t=e.target.value;w(t),se(n.find(e=>e.goalId===t)?.agentId??``),ue({})},value:C,children:n.map(e=>(0,z.jsx)(`option`,{value:e.goalId,children:e.title},e.goalId))})]})]}),(0,z.jsxs)(`label`,{className:`personal-lark-check`,children:[(0,z.jsx)(`input`,{checked:!0,readOnly:!0,type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:o(`lark.createAutomatically`)}),(0,z.jsx)(`small`,{children:o(`lark.createAutomaticallyDescription`)})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.topicPreview`)}),(0,z.jsxs)(`div`,{className:`personal-lark-topic-preview`,children:[(0,z.jsx)(Um,{size:15}),`# `,Le?.title??Le?.goalId??`Goal`]})]}),P===`goal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.captureScope`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.captureScope`),disabled:_e?.ingress_mode===`direct_session`,onChange:e=>N(e.target.value),value:ne,children:[(0,z.jsx)(`option`,{value:`addressed_only`,children:o(`lark.captureAddressed`)}),(0,z.jsx)(`option`,{value:`configured_chat_all`,children:o(`lark.captureAll`)})]}),(0,z.jsx)(`small`,{children:o(`lark.captureScopeDescription`)})]}),(0,z.jsxs)(`fieldset`,{"aria-label":o(`lark.agentIngress`),className:`personal-lark-ingress`,children:[(0,z.jsx)(`legend`,{children:o(`lark.agentIngress`)}),(0,z.jsx)(`div`,{children:[`live_steering`,`session_queue`,`async_inbox`].map(e=>{let t=Zx(e,o);return(0,z.jsxs)(`label`,{className:ie===e?`is-active`:``,children:[(0,z.jsx)(`input`,{"aria-label":t.label,checked:ie===e,name:`lark-agent-ingress`,onChange:()=>ae(e),type:`radio`,value:e}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t.label}),(0,z.jsx)(`small`,{children:t.detail})]})]},e)})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.targetAgent`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.targetAgent`),disabled:!!_e?.agent_id,onChange:e=>se(e.target.value),value:I,children:[ze?null:(0,z.jsx)(`option`,{disabled:!0,value:I,children:I?o(`lark.agentUnavailable`,{agent:I}):o(`lark.noAgentConfigured`)}),B.map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label===e.agentId?e.agentId:`${e.label} · ${e.agentId}`},e.agentId))]}),(0,z.jsx)(`small`,{children:o(`lark.targetAgentDescription`)})]}),!he&&B.length>1?(0,z.jsxs)(`label`,{"aria-label":o(`lark.connectAllAgents`),className:`personal-lark-check`,children:[(0,z.jsx)(`input`,{checked:L,onChange:e=>ce(e.target.checked),type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:o(`lark.connectAllAgents`)}),(0,z.jsx)(`small`,{children:o(`lark.connectAllAgentsDescription`,{count:B.length})})]})]}):null,!he&&L&&B.length>1?(0,z.jsxs)(`fieldset`,{"aria-label":o(`lark.agentApps`),className:`personal-lark-agent-apps`,children:[(0,z.jsx)(`legend`,{children:o(`lark.agentApps`)}),(0,z.jsx)(`small`,{children:o(`lark.agentAppsDescription`)}),(0,z.jsx)(`div`,{children:B.map(e=>(0,z.jsxs)(`label`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.agentId})]}),(0,z.jsx)(`select`,{"aria-label":o(`lark.agentAppSelection`,{agent:e.label}),onChange:t=>ue(n=>({...n,[e.agentId]:t.target.value})),value:le[e.agentId]??x,children:l.map(e=>(0,z.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref))})]},e.agentId))})]}):null,L&&Be.length>0&&!He?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.agentAppPermissions`)}):null,Ve.length===0?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:o(`lark.selectRegisteredAgent`)}):null]}):null,(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.replyMode`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.replyMode`),onChange:e=>oe(e.target.value),value:F,children:(0,z.jsx)(`option`,{value:`topic_reply`,children:o(`lark.topicReply`)})}),(0,z.jsx)(`small`,{children:o(`lark.replyModeDescription`)})]}),(0,z.jsxs)(`p`,{className:`personal-lark-cardinality`,children:[(0,z.jsx)(hm,{size:15}),o(`lark.cardinality`)]}),pe?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:pe}):null,(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>b(!1),type:`button`,children:o(`lark.cancel`)}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:p||!x||!_e&&(!We?.reply_ready||!k)||P===`goal`&&(!He||Ve.length===0)||!C||de,onClick:()=>void Qe(),type:`button`,children:[de?(0,z.jsx)(zm,{className:`is-spinning`,size:15}):null,Ue]})]})]})}):null,xe?(0,z.jsx)(`div`,{className:`personal-lark-modal-backdrop is-setup`,role:`presentation`,children:(0,z.jsxs)(`section`,{"aria-labelledby":`new-lark-app-title`,"aria-modal":`true`,className:`personal-lark-modal personal-lark-setup-modal`,role:`dialog`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:o(`lark.reusableWorkspaceApp`)}),(0,z.jsx)(`h2`,{id:`new-lark-app-title`,children:o(`lark.newApp`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeCreate`),onClick:()=>void Ze(),type:`button`,children:(0,z.jsx)(gh,{size:18})})]}),De?(0,z.jsxs)(`div`,{className:`personal-lark-setup-progress`,children:[(0,z.jsx)(`span`,{className:`personal-lark-setup-icon is-${De.status}`,children:De.status===`ready`?(0,z.jsx)(hm,{size:22}):(0,z.jsx)(zm,{className:De.status===`failed`?``:`is-spinning`,size:22})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:De.status===`ready`?o(`lark.appCreated`):De.status===`failed`?o(`lark.appCreateFailed`):o(`lark.waitingFeishu`)}),(0,z.jsx)(`p`,{children:De.status===`waiting_for_feishu`?o(`lark.waitingFeishuDescription`):De.status===`starting`?o(`lark.waitingLink`):De.error})]}),De.verification_url?(0,z.jsxs)(`a`,{href:De.verification_url,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(Dm,{size:15}),o(`lark.reopenFeishu`)]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`personal-lark-setup-copy`,children:o(`lark.setupCopy`)}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.profileName`)}),(0,z.jsx)(`input`,{"aria-label":o(`lark.profileName`),autoComplete:`off`,onChange:e=>we(e.target.value),placeholder:`loopx-workspace-bot`,value:Ce})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.region`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.region`),onChange:e=>Ee(e.target.value),value:Te,children:[(0,z.jsx)(`option`,{value:`feishu`,children:`Feishu`}),(0,z.jsx)(`option`,{value:`lark`,children:`Lark`})]})]}),Ce&&!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce)?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:o(`lark.profileValidation`)}):null]}),je?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:je}):null,(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void Ze(),type:`button`,children:o(`lark.cancel`)}),De?null:(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:ke||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce),onClick:()=>void Xe(),type:`button`,children:[ke?(0,z.jsx)(zm,{className:`is-spinning`,size:15}):(0,z.jsx)(Dm,{size:15}),o(`lark.continueFeishu`)]})]})]})}):null]})}function nS(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function rS(e,t,n){let r=nS(t),i=nS(n);return Object.fromEntries(e.fields.flatMap(({key:e,nullable:t})=>{let n=r[e],a=i[e];return Object.hasOwn(r,e)&&(n!=null||t&&n===null)?[[e,n]]:Object.hasOwn(i,e)&&a!=null?[[e,a]]:[]}))}function iS(e,t){let n;try{n=JSON.parse(t)}catch{return null}if(!n||typeof n!=`object`||Array.isArray(n))return null;let r=new Set(e.fields.map(e=>e.key));return Object.keys(n).some(e=>!r.has(e))?null:n}function aS(e,t,n){let r={...e,[t]:n},i=e.schedule;return t===`timezone`&&i&&typeof i==`object`&&`schema_version`in i&&i.schema_version===`periodic_report_schedule_v0`&&(r.schedule={...i,timezone:n}),r}function oS({id:e,value:t,timezone:n,onChange:r}){let{locale:i}=Ji(),a=i===`zh-CN`,o=t&&typeof t==`object`&&!Array.isArray(t)?t:null,s=String(o?.rrule??``).split(`;`).map(e=>e.split(`=`)),c=Object.fromEntries(s.filter(e=>e.length===2)),l=[`MO`,`TU`,`WE`,`TH`,`FR`,`SA`,`SU`],u=(e,t)=>e!==void 0&&/^\d+$/.test(e)&&Number(e)<=t,d=!o||o.schema_version===`periodic_report_schedule_v0`&&[`DAILY`,`WEEKLY`].includes(c.FREQ)&&o.timezone===n&&s.every(e=>e.length===2&&[`FREQ`,`BYDAY`,`BYHOUR`,`BYMINUTE`,`INTERVAL`].includes(e[0]))&&new Set(s.map(([e])=>e)).size===s.length&&u(c.BYHOUR,23)&&u(c.BYMINUTE??`0`,59)&&(c.FREQ===`WEEKLY`?l.includes(c.BYDAY):!c.BYDAY)&&(!c.INTERVAL||c.INTERVAL===`1`),f=a?[`星期一`,`星期二`,`星期三`,`星期四`,`星期五`,`星期六`,`星期日`]:[`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`,`Sunday`];function p(e){let t={FREQ:`WEEKLY`,BYDAY:`MO`,BYHOUR:`9`,BYMINUTE:`0`,...c,...e};r?.({schema_version:`periodic_report_schedule_v0`,schedule_id:o?.schedule_id??`report-schedule`,timezone:n,rrule:[`FREQ=${t.FREQ}`,...t.FREQ===`WEEKLY`?[`BYDAY=${t.BYDAY}`]:[],`BYHOUR=${t.BYHOUR}`,`BYMINUTE=${t.BYMINUTE}`].join(`;`)})}return(0,z.jsxs)(`div`,{className:`personal-report-schedule`,children:[(0,z.jsxs)(`label`,{className:`is-boolean`,htmlFor:e,children:[(0,z.jsx)(`span`,{children:a?`按日历汇报`:`Calendar reports`}),(0,z.jsx)(`input`,{id:e,type:`checkbox`,role:`switch`,checked:!!o,disabled:!r,onChange:e=>e.target.checked?p({}):r?.(null)})]}),o?(0,z.jsxs)(z.Fragment,{children:[d?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{htmlFor:`${e}-frequency`,children:[(0,z.jsx)(`span`,{children:a?`频率`:`Frequency`}),(0,z.jsxs)(`select`,{id:`${e}-frequency`,value:c.FREQ,disabled:!r,onChange:e=>p({FREQ:e.target.value}),children:[(0,z.jsx)(`option`,{value:`DAILY`,children:a?`每天`:`Daily`}),(0,z.jsx)(`option`,{value:`WEEKLY`,children:a?`每周`:`Weekly`})]})]}),c.FREQ===`WEEKLY`&&(0,z.jsxs)(`label`,{htmlFor:`${e}-day`,children:[(0,z.jsx)(`span`,{children:a?`星期`:`Weekday`}),(0,z.jsx)(`select`,{id:`${e}-day`,value:c.BYDAY,disabled:!r,onChange:e=>p({BYDAY:e.target.value}),children:l.map((e,t)=>(0,z.jsx)(`option`,{value:e,children:f[t]},e))})]}),(0,z.jsxs)(`label`,{htmlFor:`${e}-time`,children:[(0,z.jsxs)(`span`,{children:[a?`当地时间`:`Local time`,` (`,n,`)`]}),(0,z.jsx)(`input`,{id:`${e}-time`,type:`time`,required:!0,disabled:!r,value:`${(c.BYHOUR??`9`).padStart(2,`0`)}:${(c.BYMINUTE??`0`).padStart(2,`0`)}`,onChange:e=>{if(!/^\d{2}:\d{2}$/.test(e.target.value))return;let[t,n]=e.target.value.split(`:`);p({BYHOUR:t,BYMINUTE:n})}})]})]}):(0,z.jsx)(`p`,{role:`alert`,children:a?`此计划需在 JSON 模式中编辑;当前内容已保留。`:`Edit this schedule in JSON mode; its current value is preserved.`}),(0,z.jsx)(`p`,{children:a?`由现有唤醒检查到期计划;实际送达以回执为准。`:`Existing wakes check the schedule; delivery is confirmed by its receipt.`})]}):(0,z.jsx)(`p`,{children:a?`未设置日历计划;保持阶段结束时汇报。`:`No calendar schedule; report at validated stage boundaries.`})]})}function sS({copy:e,field:t,id:n,onChange:r,value:i,timezone:a}){let o=e[t.key]?.label??t.label,s=!r;if(t.input_kind===`periodic_report_schedule`)return(0,z.jsx)(oS,{id:n,value:i,timezone:a,onChange:r?e=>r(t.key,e):void 0});if(t.input_kind===`boolean`)return(0,z.jsxs)(`label`,{className:`is-boolean`,htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(0,z.jsx)(`input`,{checked:i===!0,id:n,onChange:r?e=>r(t.key,e.target.checked):void 0,readOnly:s,role:`switch`,type:`checkbox`})]});if(t.input_kind===`select`)return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(0,z.jsxs)(`select`,{id:n,onChange:r?e=>r(t.key,e.target.value):void 0,value:typeof i==`string`?i:``,children:[(0,z.jsx)(`option`,{value:``}),(t.options??[]).map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]});if(t.input_kind===`string_list`)return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(0,z.jsx)(`textarea`,{id:n,onChange:r?e=>r(t.key,e.target.value.split(/\r?\n/u).filter(Boolean)):void 0,readOnly:s,rows:4,value:Array.isArray(i)?i.join(` -`):``})]});let c=t.input_kind===`number`;return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(0,z.jsx)(`input`,{id:n,max:t.maximum,min:t.minimum,onChange:r?e=>r(t.key,c?Number(e.target.value):e.target.value):void 0,readOnly:s,required:t.required,type:c?`number`:`text`,value:typeof i==`number`||typeof i==`string`?i:``})]})}function cS({copy:e={},disabled:t=!1,editor:n,enabledAction:r,omitKeys:i=[],onChange:a,value:o}){let s=(0,R.useId)(),c=new Set(i);return(0,z.jsx)(`fieldset`,{className:`personal-capability-fields`,disabled:t,children:n.fields.filter(e=>!c.has(e.key)).map(t=>{let n=(0,z.jsx)(sS,{copy:e,field:t,id:`${s}-${t.key.replace(/[^a-z0-9_-]/gi,`-`)}`,onChange:a,value:o[t.key],timezone:String(o.timezone??`UTC`)},t.key);return t.key===`enabled`&&t.input_kind===`boolean`?(0,z.jsxs)(`div`,{className:`personal-capability-enabled-row`,children:[n,r]},t.key):n})})}var lS={en:{manager_runtime:{displayName:`Manager runtime`,description:`Selects the persistent host-tool profile used by owner manager conversations.`},steward_executor:{displayName:`Steward executor`,description:`Guides the steward executor, model, and selection boundary for this machine. A pinned route blocks substitution; a flexible pool permits only authorized fallback.`},todo_replan_cadence:{displayName:`Goal review cadence`,description:`Configures the Goal review cadence.`},change_quality_qualification:{displayName:`Change quality qualification`,description:`Prepares a provider-neutral review packet, allows at most one policy-authorized safe-fix pass, and can require an exact-diff receipt.`},explore_graph:{displayName:`Explore Graph`,description:`Organizes bounded exploration as a typed evidence graph so branches, findings, and synthesis remain inspectable.`},explore_harness:{displayName:`Explore Harness`,description:`Selects a capability-owned planning and research harness profile for bounded multi-step exploration.`},lark_event_inbox:{displayName:`Lark event inbox`,description:`Receives provider events through a local-private inbox binding before LoopX projects them into governed work.`,readOnlyReason:`This capability requires a local-private inbox binding. Manage it in Lark settings or through the capability CLI.`},lark_kanban_heartbeat_sync:{displayName:`Lark Kanban heartbeat sync`,description:`Synchronizes accepted LoopX work state to the configured Lark Kanban heartbeat surface.`},local_authority_shadow:{displayName:`Local authority shadow`,description:`Observes post-commit Todo and task-lease state through the shared authority contract without taking write authority.`},coordination_runtime_shadow:{displayName:`Coordination runtime shadow`,description:`Captures transaction-bound Todo and task-lease mutations for reviewed whole-Goal coordination-authority promotion.`},multi_subagent:{displayName:`Adaptive child capacity`,description:`Sets bounded child-agent capacity and the public-safe responsibility domains in which parallel work may be delegated.`},peer_task_coordination:{displayName:`Registered-peer task coordination`,description:`Routes explicitly scoped peer-owned work to one registered coordinator without granting cross-owner mutation authority.`},periodic_report:{displayName:`Periodic reports`,description:`Turns validated Goal stage progress into a frozen report and automatically delivers it through the configured Goal Channel with exact readback.`},pull_request_review:{displayName:`Pull-request review`,description:`Ranks the public GitHub PR review queue with a machine-level default; it never grants GitHub, Todo, push, or merge authority.`},reward_memory:{displayName:`Reward Memory experiment`,description:`Configures a reviewed local-private provider binding for Goal-scoped Agent recall and evidence-backed outcome learning.`}},"zh-CN":{manager_runtime:{displayName:`管家 Runtime`,description:`选择管家会话持续生效的宿主工具模式。`},steward_executor:{displayName:`管家执行器`,description:`配置本机管家的执行器、模型与选择边界;锁定路径禁止替代,灵活池只允许在已授权范围内回退。`},todo_replan_cadence:{displayName:`Goal 复核周期`,description:`配置 Goal 的复核周期。`},change_quality_qualification:{displayName:`变更质量验证`,description:`生成与 Provider 无关的审阅包,最多允许一次策略授权的安全修复,并可要求精确 diff 回执。`},explore_graph:{displayName:`探索图谱`,description:`把有界探索组织为 typed 证据图,让探索分支、发现与综合结论都可检查、可追溯。`},explore_harness:{displayName:`探索 Harness`,description:`为有界的多步探索选择由能力负责的规划与研究 Harness profile。`},lark_event_inbox:{displayName:`飞书事件收件箱`,description:`通过本机私有收件箱接收 Provider 事件,再由 LoopX 将其投影为受治理的工作。`,readOnlyReason:`此能力依赖本机私有的收件箱绑定,请在飞书设置或 capability CLI 中管理。`},lark_kanban_heartbeat_sync:{displayName:`飞书看板心跳同步`,description:`把 LoopX 已接受的工作状态同步到配置好的飞书看板心跳界面。`},local_authority_shadow:{displayName:`本地 Authority 影子观测`,description:`通过共享 Authority contract 观测提交后的 Todo 与 task lease 状态,但不取得写入权。`},coordination_runtime_shadow:{displayName:`协调 Runtime 影子`,description:`捕获事务绑定的 Todo 与 task lease 变更,为经评审的整 Goal 协调 Authority 晋级提供证据。`},multi_subagent:{displayName:`自适应子 Agent 容量`,description:`限定子 Agent 容量与可公开的职责域,只有落在这些边界内的工作才能并行委派。`},peer_task_coordination:{displayName:`已注册 Peer 任务协调`,description:`把明确限定的 Peer 工作路由给一个已注册协调者,不授予跨 Owner 修改权限。`},periodic_report:{displayName:`周期报告`,description:`把经过验证的 Goal 阶段进展整理为冻结报告,并通过配置的 Goal Channel 自动发送和精确回读。`},pull_request_review:{displayName:`Pull-request Review`,description:`配置公开 GitHub PR 审阅队列的本机默认排序;不会授予 GitHub、Todo、push 或 merge 权限。`},reward_memory:{displayName:`Reward Memory 实验`,description:`为 Goal 内 Agent 的召回与证据化结果学习配置经过审阅的本机私有 Provider 绑定。`}}},uS={en:{runtime_profile:{label:`Runtime profile`,description:`Restricted keeps scoped LoopX reads only. Trusted owner enables normal host tools while protected operations retain separate checks.`},selection_policy:{label:`Selection policy`,description:`Preferred allows an explicit user choice; pinned rejects another executor; flexible permits fallback only inside the eligible pool.`},executor_endpoint:{label:`Primary steward executor`,description:`The preferred or pinned executor for this machine. In a flexible pool it is tried first when available.`},eligible_endpoints:{label:`Flexible eligible executors`,description:`One authorized executor per line. Use only with flexible selection and include the primary executor.`},executor_model:{label:`Model`,description:`Optional model for the selected executor. Leave blank to keep the executor's own default.`},executor_reasoning_effort:{label:`Reasoning effort`,description:`Optional reasoning effort for the selected executor. Leave blank to keep the executor's own default.`},completed_todos:{label:`Completed Todos between Goal reviews`,description:`Machine default or explicit Goal override, from 1 to 5.`},allowed_domains:{label:`Allowed responsibility domains`,description:`Enter one bounded, public-safe domain per line.`},coordinator_agent_id:{label:`Coordinator Agent`,description:`Use an already registered Agent id; leave blank to disable coordination.`},enabled:{label:`Enabled`},model:{label:`Child model`,description:`For example gpt-5.6-luna. Blank clears the child model preference.`},reasoning_effort:{label:`Child reasoning effort`,description:`For example max; the host must support this model and effort.`},max_children:{label:`Maximum children`,description:`Hard upper bound for concurrently delegated child work.`},profile:{label:`Planner profile`,description:`Select one registered Explore Harness profile.`},profile_preset:{label:`Report profile`,description:`Capability-owned report profile, such as weekly-progress.`},wait_for_ci:{label:`Wait for CI`,description:`Disable to use local validation without querying or waiting for CI. Merge authority is unchanged.`},review_priority:{label:`Review priority`,description:`Choose whether other developers' PRs or the authenticated reviewer's own PRs are ranked first.`},route_ref:{label:`Goal Channel route`,description:`Public route alias only; credentials and provider identifiers stay outside this form.`},safe_fix:{label:`Allow one bounded safe-fix pass`},strict_receipt:{label:`Require an exact-diff receipt`},timezone:{label:`Timezone`,description:`Use an IANA timezone, for example Asia/Shanghai.`},schedule:{label:`Calendar reports`,description:`Optional daily or weekly reports; no schedule preserves stage-only delivery.`},config_path:{label:`Local-private configuration path`,description:`Repo-relative ignored JSON under .loopx/config/. Leave blank to retain the current binding; the path is never returned.`},enabled_agents:{label:`Enabled Goal Agents`,description:`Enter one registered Goal-local Agent id per line. A private binding currently accepts exactly one Agent.`}},"zh-CN":{runtime_profile:{label:`运行模式`,description:`restricted 仅使用受限 LoopX 读取;trusted_owner 开放常规宿主工具,但受保护操作仍单独校验。`},selection_policy:{label:`选择策略`,description:`preferred 允许用户显式改选;pinned 拒绝其他执行器;flexible 只在已授权资源池内回退。`},executor_endpoint:{label:`首选管家执行器`,description:`本机首选或锁定的执行器;灵活池模式下优先尝试它。`},eligible_endpoints:{label:`灵活池可用执行器`,description:`每行一个已授权执行器,仅用于 flexible;必须包含首选执行器。`},executor_model:{label:`模型`,description:`所选执行器使用的模型,可留空;留空表示沿用执行器自身的默认模型。`},executor_reasoning_effort:{label:`推理档位`,description:`所选执行器使用的推理档位,可留空;留空表示沿用执行器自身的默认档位。`},completed_todos:{label:`两次 Goal 复核间的已完成 Todo 数`,description:`可设置 1–5;机器默认值可被 Goal 显式覆盖。`},allowed_domains:{label:`允许的职责域`,description:`每行填写一个有边界、可公开的职责域。`},coordinator_agent_id:{label:`协调 Agent`,description:`填写一个已经注册的 Agent ID;留空表示关闭协调。`},enabled:{label:`启用`},model:{label:`子 Agent 模型`,description:`例如 gpt-5.6-luna;留空清除模型偏好。`},reasoning_effort:{label:`子 Agent 推理档位`,description:`例如 max;宿主须支持所选模型与档位。`},max_children:{label:`最大子 Agent 数`,description:`可同时委派的子任务硬上限。`},profile:{label:`规划 Profile`,description:`选择一个已注册的 Explore Harness profile。`},profile_preset:{label:`报告 Profile`,description:`由该能力管理的报告 profile,例如 weekly-progress。`},wait_for_ci:{label:`等待 CI`,description:`关闭后使用本地验证,不查询或等待 CI;不改变合并权限。`},review_priority:{label:`审阅优先级`,description:`选择先排其他开发者的 PR,还是先排当前已认证审阅者自己的 PR。`},route_ref:{label:`Goal Channel 路由`,description:`只填写公开 route alias;凭据与 Provider 标识不会进入此表单。`},safe_fix:{label:`允许一次有界安全修复`},strict_receipt:{label:`要求精确 diff 回执`},timezone:{label:`时区`,description:`使用 IANA 时区,例如 Asia/Shanghai。`},schedule:{label:`日历汇报`,description:`可选每日或每周计划;未设置时保持阶段结束汇报。`},config_path:{label:`本机私有配置路径`,description:`填写 .loopx/config/ 下、相对仓库且被忽略的 JSON;留空保留当前绑定,路径不会被回传。`},enabled_agents:{label:`已启用的 Goal Agent`,description:`每行填写一个已注册的 Goal 内 Agent ID;私有绑定当前只接受一个 Agent。`}}};function dS(e,t){let n=lS[t][e.capability_id];return n?{...e,display_name:n.displayName,description:n.description,configuration_editor:{...e.configuration_editor,...n.readOnlyReason?{read_only_reason:n.readOnlyReason}:{}}}:e}function fS(e){return uS[e]}Object.freeze(Object.keys(lS.en).sort());function pS(e,t){return e.available_scopes.includes(t)&&(t!==`machine`||!!e.machine_namespace)&&e.configuration_editor.editable&&e.configuration_editor.writable_scopes.includes(t)}function mS({values:e,t}){return(0,z.jsxs)(`details`,{className:`personal-capability-raw-values`,children:[(0,z.jsx)(`summary`,{children:t(`capabilities.rawJson`)}),(0,z.jsx)(`div`,{className:`personal-capability-value-grid`,children:e.map(({label:e,value:t})=>(0,z.jsxs)(`section`,{children:[(0,z.jsx)(`strong`,{children:e}),(0,z.jsx)(`pre`,{children:t?JSON.stringify(t,null,2):`—`})]},e))})]})}function hS({source:e,t}){return e?(0,z.jsxs)(`p`,{className:`personal-capability-effective-source`,children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:15}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t(`capabilities.effectiveSource`)}),t(`capabilities.source.${e}`)]})]}):null}function gS({available:e,description:t,t:n}){return e?null:(0,z.jsxs)(`section`,{className:`personal-capability-editor-status is-read-only`,children:[(0,z.jsx)(ph,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:n(`capabilities.readOnly`)}),(0,z.jsx)(`p`,{children:t})]})]})}function _S(e){return e.availability?.includes(`experimental`)?4:e.capability_id===`multi_subagent`?3:e.configuration_editor.writable_scopes.length===0||e.availability===`supported_explicit_opt_in`?2:e.availability===`supported_explicit_override`?0:1}function vS(e,t){return[...e].sort((e,n)=>{let r=_S(e)-_S(n);if(r!==0)return r;let i=dS(e,t),a=dS(n,t);return i.display_name.localeCompare(a.display_name,t)||e.capability_id.localeCompare(n.capability_id)})}function yS({capabilities:e,locale:t,onSelect:n,scope:r,selectedCapabilityId:i,t:a}){return(0,z.jsx)(`nav`,{"aria-label":a(r===`goal`?`capabilities.catalog`:`machine.capabilityCatalog`),className:`personal-capability-list`,tabIndex:0,children:vS(e,t).map(e=>{let o=dS(e,t);return(0,z.jsxs)(`button`,{"aria-current":i===o.capability_id?`page`:void 0,onClick:()=>n(o.capability_id),type:`button`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:o.display_name})}),(0,z.jsx)(`em`,{children:a(o.available_scopes.includes(r)?r===`goal`?`capabilities.goalScope`:`capabilities.machineScope`:r===`machine`?`capabilities.goalScope`:`capabilities.machineScope`)})]},o.capability_id)})})}function bS({capability:e,locale:t,source:n}){let{t:r}=Ji(),i=dS(e,t);return(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{className:`personal-settings-icon`,children:(0,z.jsx)(sh,{"aria-hidden":!0,size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`personal-capability-heading-row`,children:[(0,z.jsx)(`h2`,{children:i.display_name}),(0,z.jsx)(hS,{source:n,t:r})]}),e.context_contribution&&(0,z.jsxs)(`details`,{className:`personal-capability-help`,"data-testid":`capability-context-phases`,children:[(0,z.jsx)(`summary`,{children:t===`zh-CN`?`主 Agent 协作指导`:`Coordinator workflow guidance`}),(0,z.jsx)(`p`,{children:t===`zh-CN`?`随能力开启。支持以下阶段;此处展示能力范围,不能证明某次运行已读取或采纳。`:`Enabled with this capability. These are supported phases, not proof that a run read or adopted the guidance.`}),(0,z.jsx)(`dl`,{children:e.context_contribution.supported_phases.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:(0,z.jsx)(`code`,{children:e})}),(0,z.jsx)(`dd`,{children:xS[e][t===`zh-CN`?`zh`:`en`]})]},e))}),(0,z.jsx)(`p`,{children:t===`zh-CN`?`LoopX Turn 在请求与结果中提供上下文;原生工具入口由 LoopX skill 调用同一只读接口。执行与采纳需另看运行证据。`:`LoopX Turn includes context in requests and results. For native tools, the LoopX skill reads the same interface. Execution and adoption require run evidence.`})]}),(0,z.jsxs)(`details`,{className:`personal-capability-help`,children:[(0,z.jsx)(`summary`,{children:t===`zh-CN`?`配置说明`:`Configuration help`}),(0,z.jsx)(`p`,{children:i.description}),(0,z.jsx)(`dl`,{children:e.configuration_editor.fields.map(e=>{let n=fS(t)[e.key],r=n?.description??e.description;return r?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n?.label??e.label}),(0,z.jsx)(`dd`,{children:r})]},e.key):null})})]},e.capability_id)]})]})}var xS={before_plan:{zh:`规划前:识别独立问题并保留主 Agent 的核验与整合职责。`,en:`Before planning: identify independent questions and retain coordinator validation and integration.`},before_delegate:{zh:`委派前:明确子任务边界、模型偏好及预期证据。`,en:`Before delegation: specify task boundaries, model preferences and expected evidence.`},after_delegate_result:{zh:`回收后:核验结果,说明采纳决定并关联计划与成果。`,en:`After results: validate evidence, explain acceptance and link plans and deliverables.`}};function SS({callbacks:e,goalId:t,notification:n,onChanged:r}){let{t:i}=Ji(),[a,o]=(0,R.useState)(!1),[s,c]=(0,R.useState)(null);async function l(n){if(e.onToggleGoalAutoNotify){o(!0),c(null);try{let a=await e.onToggleGoalAutoNotify({autoNotify:n,goalId:t});if(!a.ok){c(a.public_summary??a.blocker??i(`notifications.setupFailed`));return}r()}catch(e){c(e instanceof Error?e.message:i(`notifications.setupFailed`))}finally{o(!1)}}}return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{className:`personal-notification-toggle`,children:[(0,z.jsx)(`input`,{checked:n?.humanGateAutoNotifyEnabled??!1,disabled:a||n?.configured!==!0||!e.onToggleGoalAutoNotify,onChange:e=>void l(e.target.checked),type:`checkbox`}),(0,z.jsx)(`span`,{children:i(`notifications.autoNotify`)}),a?(0,z.jsx)(zm,{"aria-hidden":!0,className:`is-spinning`,size:14}):null]}),s?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:s}):null]})}function CS({goalId:e,onApplied:t,selected:n,t:r}){let[i,a]=(0,R.useState)({busy:null,draft:{},partialWrite:null,preview:null}),[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(`guided`),[u,d]=(0,R.useState)(``),f=(0,R.useMemo)(()=>n?iS(n.configuration_editor,u):null,[n,u]),p=c===`guided`||f!==null;(0,R.useEffect)(()=>{l(`guided`),d(``),a({busy:null,draft:rS(n?.configuration_editor??{fields:[]},n?.current??n?.effective_configuration?.configuration??n?.default,n?.default),partialWrite:null,preview:null}),s(null)},[n]);async function m(t){if(!(!n||i.busy||!p)){a(e=>({...e,busy:`preview`,partialWrite:null})),s(null);try{let r=await o_(e,n.capability_id,t);a(e=>({...e,preview:r}))}catch(e){s(e instanceof Error?e.message:r(`capabilities.previewFailed`))}finally{a(e=>({...e,busy:null}))}}}async function h(){if(!(!n||!i.preview||i.busy||!p)){a(e=>({...e,busy:`apply`})),s(null);try{let r=rS(n.configuration_editor,i.draft,n.default),o=await s_(e,n.capability_id,i.preview.action===`delete`?null:r,i.preview.plan_revision);a(e=>({...e,partialWrite:o.status===`partial_write`?o:null,preview:null})),o.status!==`partial_write`&&t()}catch(e){a(e=>({...e,preview:null})),s(e instanceof Error?e.message:r(`capabilities.applyFailed`))}finally{a(e=>({...e,busy:null}))}}}function g(e,t){a(r=>({...r,draft:n?.capability_id===`periodic_report`?aS(r.draft,e,t):{...r.draft,[e]:t},preview:null})),s(null)}function _(e){if(!n||i.busy)return;d(e);let t=iS(n.configuration_editor,e);a(e=>({...e,preview:null,draft:t?rS(n.configuration_editor,t,n.default):e.draft})),s(null)}function v(){i.busy||!p||(c===`guided`&&d(JSON.stringify(i.draft,null,2)),l(c===`guided`?`json`:`guided`),a(e=>({...e,preview:null})))}return{apply:h,changeDraft:g,changeJson:_,changeMode:v,editorMode:c,jsonDraft:u,jsonValid:p,error:o,mutation:i,preview:m}}function wS({mutationError:e,onApplied:t,partialWrite:n,preview:r}){let{t:i}=Ji();return(0,z.jsxs)(z.Fragment,{children:[e?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:e}):null,n?(0,z.jsxs)(`section`,{"aria-live":`polite`,className:`personal-capability-recovery`,children:[(0,z.jsx)(ph,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:i(n.host_capacity_pending?`capabilities.hostCapacityPartialWrite`:`capabilities.partialWrite`)}),(0,z.jsx)(`p`,{children:i(n.host_capacity_pending?`capabilities.hostCapacityPartialWriteDescription`:`capabilities.partialWriteDescription`)}),(0,z.jsx)(`small`,{children:n.recommended_action})]}),(0,z.jsxs)(`button`,{onClick:t,type:`button`,children:[(0,z.jsx)(Qm,{"aria-hidden":!0,size:15}),i(`capabilities.refreshSource`)]})]}):null,r?(0,z.jsxs)(`section`,{className:`personal-capability-preview`,"aria-label":i(`capabilities.preview`),children:[(0,z.jsx)(`strong`,{children:i(`capabilities.preview`)}),(0,z.jsx)(`span`,{children:i(`machine.action.${r.action}`)}),r.codex_host_capacity?(0,z.jsx)(`span`,{children:i(r.codex_host_capacity.write_required?`drawer.subagentHostCapacityRaise`:`drawer.subagentHostCapacityReady`,{configured:r.codex_host_capacity.configured_children??i(`drawer.subagentHostCapacityImplicit`),required:r.codex_host_capacity.required_children})}):null,(0,z.jsx)(`small`,{children:i(`capabilities.previewLocked`)})]}):null]})}function TS({callbacks:e,catalog:t,goalId:n,notification:r,onApplied:i,onNotificationChanged:a}){let{locale:o,t:s}=Ji(),c=(0,R.useMemo)(()=>vS(t.capabilities,o),[t.capabilities,o]),[l,u]=(0,R.useState)(()=>c[0]?.capability_id??``),d=(0,R.useMemo)(()=>c.find(e=>e.capability_id===l)??c[0],[c,l]),f=(0,R.useMemo)(()=>d?dS(d,o):void 0,[o,d]),{apply:p,changeDraft:m,changeJson:h,changeMode:g,editorMode:_,jsonDraft:v,jsonValid:y,error:b,mutation:x,preview:S}=CS({goalId:n,onApplied:i,selected:f,t:s}),{busy:C,draft:w,partialWrite:T,preview:E}=x;if(!d||!f)return(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:s(`capabilities.empty`)});let D=f.available_scopes.includes(`goal`),O=pS(f,`goal`),k=f.configuration_editor.read_only_reason??s(D?`capabilities.previewOnly`:`capabilities.machineOnly`);async function A(){if(!f||!O||C||!y)return;let e=rS(f.configuration_editor,w,f.default);await S(e)}async function ee(){!O||C||await S(null)}return(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(yS,{capabilities:t.capabilities,locale:o,onSelect:u,scope:`goal`,selectedCapabilityId:f.capability_id,t:s}),(0,z.jsxs)(`article`,{"aria-label":f.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,z.jsx)(bS,{capability:d,locale:o,source:f.effective_configuration?.source}),(0,z.jsx)(gS,{available:O,t:s,description:k}),f.capability_id===`lark_event_inbox`?(0,z.jsxs)(`section`,{className:`personal-capability-linked-setting`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:s(`capabilities.larkInboxNotificationSetting`)}),(0,z.jsx)(`p`,{children:s(`capabilities.larkInboxNotificationDescription`)})]}),(0,z.jsx)(SS,{callbacks:e,goalId:n,notification:r,onChanged:a})]}):null,O?(0,z.jsxs)(z.Fragment,{children:[_===`json`||!f.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,z.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,z.jsxs)(`button`,{disabled:!!C||!y,onClick:g,type:`button`,children:[(0,z.jsx)(Sm,{"aria-hidden":!0,size:14}),s(_===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,_===`guided`?(0,z.jsx)(`section`,{className:`personal-capability-field-summary`,children:(0,z.jsx)(cS,{disabled:!!C,copy:fS(o),editor:f.configuration_editor,onChange:m,value:w,enabledAction:(0,z.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:g,type:`button`,children:[(0,z.jsx)(Sm,{"aria-hidden":!0,size:14}),s(`machine.editJson`)]})})}):(0,z.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`goal-configuration-json`,children:[(0,z.jsx)(`span`,{children:s(`capabilities.jsonConfiguration`)}),(0,z.jsx)(`textarea`,{id:`goal-configuration-json`,"aria-describedby":`goal-configuration-json-help`,disabled:!!C,onChange:e=>h(e.target.value),rows:12,spellCheck:!1,value:v}),(0,z.jsx)(`small`,{id:`goal-configuration-json-help`,children:s(`capabilities.jsonHelp`)}),y?null:(0,z.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:s(`capabilities.jsonInvalid`)})]})]}):null,(0,z.jsx)(wS,{mutationError:b,onApplied:i,partialWrite:T,preview:E}),O?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[f.current&&f.available_scopes.includes(`machine`)?(0,z.jsx)(`button`,{disabled:!!C||!y,onClick:()=>void ee(),type:`button`,children:s(`capabilities.restoreInheritance`)}):null,(0,z.jsx)(`button`,{disabled:!!C||!y,onClick:()=>void A(),type:`button`,children:s(C===`preview`?`common.loading`:`capabilities.previewChanges`)}),(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!C||!E||!y,onClick:()=>void p(),type:`button`,children:s(C===`apply`?`common.loading`:`capabilities.applyPreview`)})]}):null,(0,z.jsx)(mS,{values:[{label:s(`capabilities.goalValue`),value:f.current},{label:s(f.machine_current?`capabilities.machineValue`:`capabilities.defaultValue`),value:f.machine_current??f.default}],t:s},d.capability_id)]})]})}function ES({callbacks:e,goalId:t,notification:n,onChanged:r}){let{t:i}=Ji(),[a,o]=(0,R.useState)(null),[s,c]=(0,R.useState)(null),[l,u]=(0,R.useState)(!1);function d(){t&&(u(!0),c(null),a_(t).then(o).catch(e=>c(e instanceof Error?e.message:i(`capabilities.loadFailed`))).finally(()=>u(!1)))}return(0,R.useEffect)(d,[t]),t?l&&!a?(0,z.jsxs)(`p`,{"aria-live":`polite`,className:`personal-capability-empty`,children:[(0,z.jsx)(zm,{className:`personal-spin`,size:18}),i(`capabilities.loading`)]}):s?(0,z.jsxs)(`section`,{className:`personal-capability-error`,role:`alert`,children:[(0,z.jsx)(ph,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:i(`capabilities.loadFailed`)}),(0,z.jsx)(`small`,{children:s})]}),(0,z.jsxs)(`button`,{onClick:d,type:`button`,children:[(0,z.jsx)(Qm,{"aria-hidden":!0,size:15}),i(`capabilities.retry`)]})]}):a?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":a.revision,children:[(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:17}),i(`capabilities.atomicOverride`)]}),(0,z.jsx)(`p`,{children:i(`capabilities.atomicOverrideDescription`)})]}),(0,z.jsx)(TS,{callbacks:e,catalog:a.capability_catalog,goalId:t,notification:n,onApplied:d,onNotificationChanged:r})]}):null:(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:i(`capabilities.chooseGoal`)})}function DS(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function OS(e,t){let n=t?.machine_namespace;return n?e?.machine_configuration?.namespaces[n]:void 0}function kS(e,t,n){let r={...DS(e.default),...DS(t),...n};return e.capability_id===`steward_executor`&&(Object.hasOwn(n,`selection_policy`)||Object.hasOwn(n,`eligible_endpoints`))&&(r.schema_version=DS(e.default).schema_version),r}function AS(e,t){for(let n of e.configuration_editor.fields){let e=t[n.key];if(n.required&&(e==null||e===``))return!1}if(e.capability_id===`periodic_report`&&t.enabled===!0)return!!(String(t.profile_preset??``).trim()&&String(t.route_ref??``).trim()&&String(t.timezone??``).trim());if(e.capability_id===`steward_executor`){let e=String(t.selection_policy??`preferred`),n=String(t.executor_endpoint??``),r=Array.isArray(t.eligible_endpoints)?t.eligible_endpoints.map(e=>String(e)):[];return e===`flexible`?r.length>0&&r.includes(n)&&new Set(r).size===r.length:r.length===0}return!0}function jS(e){try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function MS(e){return e?e===`absent`?e:e.replace(/^sha256:/,``).slice(0,12):`—`}function NS(){let{locale:e,t}=Ji(),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(``),[o,s]=(0,R.useState)({}),[c,l]=(0,R.useState)(`{}`),[u,d]=(0,R.useState)(`guided`),[f,p]=(0,R.useState)(null),[m,h]=(0,R.useState)(`upsert`),[g,_]=(0,R.useState)(null),[v,y]=(0,R.useState)(null),[b,x]=(0,R.useState)(`load`),[S,C]=(0,R.useState)(null),[w,T]=(0,R.useState)(null),E=(0,R.useMemo)(()=>vS(n?.capability_catalog.capabilities??[],e),[n,e]),D=n?.invalid_namespaces[0],O=E.find(e=>e.capability_id===i)??(D?E.find(e=>e.machine_namespace===D):void 0)??E.find(e=>pS(e,`machine`))??E[0],k=O?dS(O,e):void 0,A=OS(n,k),ee=!!(k?.machine_namespace&&A),j=!!(k&&pS(k,`machine`)),M=(0,R.useMemo)(()=>jS(c),[c]),te=k?u===`json`?M:kS(k,A,o):null,ne=!!(k&&(u===`json`?M:AS(k,te??{})));async function N(){r(await i_())}(0,R.useEffect)(()=>{let e=!0;return i_().then(t=>{e&&r(t)}).catch(n=>{e&&C(n instanceof Error?n.message:t(`machine.loadError`))}).finally(()=>{e&&x(null)}),()=>{e=!1}},[t]),(0,R.useEffect)(()=>{if(!k)return;let e=OS(n,k),t=rS(k.configuration_editor,e??k.default,k.default),r=kS(k,e,t);s(t),l(JSON.stringify(r,null,2)),d(j?`guided`:`json`),p(null),h(`upsert`),y(null)},[n,i,e]);function P(e,t){s(n=>k?.capability_id===`periodic_report`?aS(n,e,t):{...n,[e]:t}),p(null),h(`upsert`),C(null),T(null)}function re(e){if(k){if(e===`json`)l(JSON.stringify(kS(k,A,o),null,2));else if(M)s(rS(k.configuration_editor,M,k.default));else{C(t(`machine.jsonInvalid`));return}d(e),p(null),h(`upsert`),C(null)}}async function ie(){if(!(!j||!k?.machine_namespace||!te||!ne||b)){x(`preview`),C(null),T(null);try{h(`upsert`),p(await c_(k.machine_namespace,te))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function ae(){if(!(!j||!k?.machine_namespace||!ee||b)){x(`preview`),C(null),T(null);try{h(`remove`),p(await u_(k.machine_namespace))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function F(){if(!j||!k?.machine_namespace||!f||b||m===`upsert`&&!te)return;x(`apply`),C(null);let e=m;try{let n=e===`remove`?await d_(k.machine_namespace,f.plan_revision):await l_(k.machine_namespace,te,f.plan_revision);_(n),p(null),h(`upsert`),y(null),await N(),T(n.status===`applied`?t(e===`remove`?`machine.removed`:`machine.applied`):t(`machine.unchanged`))}catch(e){p(null),h(`upsert`),C(e instanceof Error?e.message:t(`machine.applyError`))}finally{x(null)}}async function oe(){if(!(!g?.transaction_id||b)){x(`rollback-preview`),C(null);try{y(await f_(g.transaction_id))}catch(e){C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}async function I(){if(!(!g?.transaction_id||!v||b)){x(`rollback`),C(null);try{await p_(g.transaction_id,v.plan_revision),_(null),y(null),p(null),await N(),T(t(`machine.rolledBack`))}catch(e){y(null),C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}return b===`load`?(0,z.jsx)(`div`,{className:`personal-machine-loading`,role:`status`,children:t(`common.loading`)}):k?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n?.revision,children:[(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:17}),t(`machine.liveDefault`)]}),(0,z.jsx)(`p`,{children:t(`machine.liveDefaultDescription`)})]}),(0,z.jsxs)(`div`,{className:`personal-capability-body`,children:[n?.status===`invalid`?(0,z.jsxs)(`section`,{className:`personal-machine-error`,"data-testid":`machine-invalid-repair`,role:`alert`,children:[(0,z.jsx)(`strong`,{children:t(`machine.invalidStoredConfiguration`)}),(0,z.jsx)(`p`,{children:t(`machine.invalidStoredConfigurationDescription`)})]}):null,(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(yS,{capabilities:E,locale:e,onSelect:a,scope:`machine`,selectedCapabilityId:k.capability_id,t}),(0,z.jsxs)(`article`,{"aria-label":k.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,z.jsx)(bS,{capability:O,locale:e,source:k.available_scopes.includes(`machine`)?ee?`machine_default`:`capability_default`:void 0}),(0,z.jsx)(gS,{available:j,t,description:k.available_scopes.includes(`machine`)?t(`machine.editorUnavailableDescription`):t(`machine.goalOnly`)}),k.capability_id===`periodic_report`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:A?.schedule?e===`zh-CN`?`日历与阶段汇报`:`Calendar and stage reports`:t(`machine.periodicReportActivation`)}),(0,z.jsx)(`p`,{children:A?.schedule?A.enabled===!0?e===`zh-CN`?`已配置日历计划,由现有唤醒检查;是否送达请核对报告回执。`:`A calendar schedule is configured and checked by existing wakes. Verify delivery in the report receipt.`:e===`zh-CN`?`日历计划已保存;启用此能力后才会检查和投递。`:`The schedule is saved; enable this capability to check and deliver reports.`:t(`machine.periodicReportActivationDescription`)})]})]}):null,k.capability_id===`change_quality_qualification`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.changeQualityActivation`)}),(0,z.jsx)(`p`,{children:t(`machine.changeQualityActivationDescription`)})]})]}):null,k.capability_id===`todo_replan_cadence`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.replanCadenceActivation`)}),(0,z.jsx)(`p`,{children:t(`machine.replanCadenceActivationDescription`)})]})]}):null,k.capability_id===`pull_request_review`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e===`zh-CN`?`只改变队列排序`:`Queue ordering only`}),(0,z.jsx)(`p`,{children:e===`zh-CN`?`默认先审阅其他开发者的 PR;选择 owner-first 才会优先当前已认证审阅者自己的 PR。此配置不会发布 review、写 Todo、push 或 merge。`:`The default reviews other developers' PRs first; choose owner-first only when the authenticated reviewer's own PRs should lead. This setting never posts a review, writes Todos, pushes, or merges.`})]})]}):null,j?(0,z.jsxs)(z.Fragment,{children:[u===`json`||!k.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,z.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,z.jsxs)(`button`,{onClick:()=>re(u===`guided`?`json`:`guided`),type:`button`,children:[(0,z.jsx)(Sm,{"aria-hidden":!0,size:14}),t(u===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,u===`guided`?(0,z.jsxs)(`section`,{className:`personal-capability-field-summary`,children:[(0,z.jsx)(cS,{copy:fS(e),disabled:!!b,editor:k.configuration_editor,onChange:P,value:o,enabledAction:(0,z.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:()=>re(`json`),type:`button`,children:[(0,z.jsx)(Sm,{"aria-hidden":!0,size:14}),t(`machine.editJson`)]})}),ne?null:(0,z.jsx)(`p`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.requiredFields`)})]}):(0,z.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`machine-configuration-json`,children:[(0,z.jsx)(`span`,{children:t(`machine.jsonConfiguration`)}),(0,z.jsx)(`textarea`,{"aria-describedby":`machine-configuration-json-help`,disabled:!!b,id:`machine-configuration-json`,onChange:e=>{l(e.target.value),p(null),C(null)},rows:12,spellCheck:!1,value:c}),(0,z.jsx)(`small`,{id:`machine-configuration-json-help`,children:t(`machine.jsonConfigurationHelp`)}),M?null:(0,z.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.jsonInvalid`)})]})]}):null,S?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:S}):null,w?(0,z.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,z.jsx)(hm,{"aria-hidden":!0,size:16}),w]}):null,f?(0,z.jsxs)(`section`,{"aria-label":t(`machine.preview`),className:`personal-machine-preview`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.preview`)}),(0,z.jsx)(`span`,{children:t(`machine.action.${f.action}`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.currentRevision`)}),(0,z.jsx)(`dd`,{title:f.current_revision,children:MS(f.current_revision)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.desiredRevision`)}),(0,z.jsx)(`dd`,{title:f.desired_revision,children:MS(f.desired_revision)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.changedNamespaces`)}),(0,z.jsx)(`dd`,{children:f.changed_namespaces.join(`, `)||t(`common.none`)})]})]}),(0,z.jsx)(`p`,{children:t(`machine.previewLocked`)})]}):null,g?.rollback_available&&g.transaction_id?(0,z.jsxs)(`section`,{className:`personal-machine-rollback`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.rollbackAvailable`)}),(0,z.jsx)(`p`,{children:t(v?`machine.rollbackPreviewDescription`:`machine.rollbackDescription`)})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!!b||!!(v&&!v.rollback_allowed),onClick:()=>void(v?I():oe()),type:`button`,children:[(0,z.jsx)($m,{"aria-hidden":!0,size:15}),t(b===`rollback`||b===`rollback-preview`?`common.loading`:v?`machine.confirmRollback`:`machine.previewRollback`)]})]}):null,j?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[ee?(0,z.jsxs)(`button`,{className:`is-danger`,disabled:!!b,onClick:()=>void ae(),type:`button`,children:[(0,z.jsx)(fh,{"aria-hidden":!0,size:15}),t(`machine.previewRemoval`)]}):null,(0,z.jsx)(`button`,{disabled:!!b||!ne,onClick:()=>void ie(),type:`button`,children:t(b===`preview`?`common.loading`:`machine.previewChanges`)}),(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!b||!f,onClick:()=>void F(),type:`button`,children:t(b===`apply`?`common.loading`:`machine.applyPreview`)})]}):null,k.available_scopes.includes(`machine`)?(0,z.jsx)(mS,{values:[{label:t(`machine.currentValue`),value:A},{label:t(`capabilities.defaultValue`),value:k.default}],t},k.capability_id):null]})]})]})]}):(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:t(`machine.capabilityEmpty`)})}function PS(e,t){return t(e===`invalid`?`machine.credentialInvalid`:e===`configured`?`machine.credentialConfigured`:`machine.credentialAbsent`)}function FS(e,t){return t(e===`machine_store`?`machine.credentialSourceMachine`:e===`service_environment`?`machine.credentialSourceEnvironment`:`machine.credentialSourceUnset`)}function IS(){let{t:e}=Ji(),[t,n]=(0,R.useState)(null),[r,i]=(0,R.useState)(``),[a,o]=(0,R.useState)(``),[s,c]=(0,R.useState)(``),[l,u]=(0,R.useState)(null),[d,f]=(0,R.useState)(null),p=(0,R.useCallback)(async()=>{c(`load`);try{let e=await n_();n(e),o(String(e.base_url.value??``))}catch(t){u(t instanceof Error?t.message:e(`machine.credentialError`))}finally{c(``)}},[e]);(0,R.useEffect)(()=>{p()},[p]);async function m(t,r){c(`store`),u(null),f(null);try{let e=await r_(t);n(e),o(String(e.base_url.value??``)),i(``),f(r)}catch(t){u(t instanceof Error?t.message:e(`machine.credentialError`))}finally{c(``)}}if(!t&&s===`load`)return(0,z.jsx)(`div`,{className:`personal-machine-loading`,role:`status`,children:e(`common.loading`)});let h=t?`${PS(t.provider_key.configured?`configured`:`absent`,e)} · ${FS(t.provider_key.source,e)}`:``,g=t?`${t.base_url.value??e(`machine.credentialAbsent`)} · ${FS(t.base_url.source,e)}`:``;return(0,z.jsxs)(`section`,{className:`personal-operator-credential`,"data-testid":`operator-credential-settings`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(Fm,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e(`machine.credentialTitle`)}),(0,z.jsx)(`p`,{children:e(`machine.credentialDescription`)})]}),(0,z.jsx)(`span`,{className:`personal-operator-credential-status`,children:t?PS(t.status,e):e(`common.loading`)})]}),t?(0,z.jsxs)(`dl`,{className:`personal-operator-credential-readback`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialApiKey`)}),(0,z.jsx)(`dd`,{children:h})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialFingerprint`)}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.provider_key.fingerprint??e(`common.none`)})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialBaseUrl`)}),(0,z.jsx)(`dd`,{children:g})]})]}):null,t?.status===`invalid`&&t.repair?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:t.repair}):null,(0,z.jsxs)(`label`,{htmlFor:`operator-credential-api-key`,children:[(0,z.jsx)(`span`,{children:e(`machine.credentialApiKey`)}),(0,z.jsx)(`input`,{autoComplete:`off`,disabled:!!s,id:`operator-credential-api-key`,onChange:e=>i(e.target.value),placeholder:e(`machine.credentialApiKeyPlaceholder`),type:`password`,value:r})]}),(0,z.jsxs)(`label`,{htmlFor:`operator-credential-base-url`,children:[(0,z.jsx)(`span`,{children:e(`machine.credentialBaseUrl`)}),(0,z.jsx)(`input`,{autoComplete:`off`,disabled:!!s,id:`operator-credential-base-url`,onChange:e=>o(e.target.value),placeholder:e(`machine.credentialBaseUrlPlaceholder`),type:`text`,value:a})]}),l?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:l}):null,d?(0,z.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,z.jsx)(hm,{"aria-hidden":!0,size:16}),d]}):null,(0,z.jsxs)(`footer`,{className:`personal-operator-credential-actions`,children:[(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!s||!r.trim()&&!a.trim(),onClick:()=>void m({...r.trim()?{provider_key:r}:{},...a.trim()?{base_url:a}:{}},e(`machine.credentialStored`)),type:`button`,children:e(s===`store`?`common.loading`:`machine.credentialStore`)}),(0,z.jsxs)(`button`,{disabled:!!s||t?.provider_key.configured!==!0,onClick:()=>void m({clear_provider_key:!0},e(`machine.credentialCleared`)),type:`button`,children:[(0,z.jsx)(fh,{"aria-hidden":!0,size:15}),e(`machine.credentialClearKey`)]}),(0,z.jsxs)(`button`,{disabled:!!s||t?.base_url.configured!==!0,onClick:()=>void m({clear_base_url:!0},e(`machine.credentialCleared`)),type:`button`,children:[(0,z.jsx)(fh,{"aria-hidden":!0,size:15}),e(`machine.credentialClearUrl`)]})]}),(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(oh,{"aria-hidden":!0,size:17}),e(`machine.credentialTitle`)]}),(0,z.jsx)(`p`,{children:e(`machine.credentialBoundary`)})]})]})}var LS={appearance:Km,capabilities:sh,language:Im,lark:ah,machine:rh,provider:Fm};function RS({callbacks:e,focusGoalConnection:t=!1,goals:n,initialGoalId:r,initialTab:i=`lark`,goalNotifications:a,onChanged:o,onClose:s,onThemeChange:c,theme:l}){let{locale:u,setLocale:d,t:f}=Ji(),[p,m]=(0,R.useState)(i),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{let e=h.current;if(!e)return;let t=()=>{if(e.scrollWidth<=e.clientWidth)return;let t=e.querySelector(`[aria-current="page"]`);if(!t)return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=r.leftn.right?r.right-n.right:0;i&&(e.scrollLeft+=i)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[p]);let g=[...r?[{key:`capabilities`,label:f(`capabilities.title`)}]:[],{key:`provider`,label:f(`settings.modelProvider`)},{key:`machine`,label:f(`settings.globalCapabilities`)},{key:`lark`,label:`Lark`},{key:`appearance`,label:f(`settings.appearance`)},{key:`language`,label:f(`settings.language`)}],_=[{label:f(`settings.languageEnglish`),value:`en`},{label:f(`settings.languageSimplifiedChinese`),value:`zh-CN`}],v={appearance:{title:f(`settings.appearance`)},capabilities:{title:f(`capabilities.title`)},language:{title:f(`settings.language`)},lark:{title:`Lark`},machine:{title:f(`settings.globalCapabilities`)},provider:{title:f(`settings.modelProvider`)}}[p];return(0,z.jsxs)(`section`,{"aria-label":f(`settings.title`),className:`personal-settings-page`,"data-pw-theme":l,children:[(0,z.jsxs)(`aside`,{className:`personal-settings-sidebar`,children:[(0,z.jsxs)(`button`,{autoFocus:!0,className:`personal-settings-back`,onClick:s,type:`button`,children:[(0,z.jsx)(om,{size:17}),(0,z.jsx)(`span`,{children:f(`settings.back`)})]}),(0,z.jsx)(`div`,{className:`personal-settings-title`,children:(0,z.jsx)(`strong`,{children:f(`settings.title`)})}),(0,z.jsx)(`nav`,{"aria-label":f(`settings.categories`),className:`personal-settings-tabs`,ref:h,children:g.map(e=>{let t=LS[e.key];return(0,z.jsxs)(`button`,{"aria-current":p===e.key?`page`:void 0,onClick:()=>m(e.key),type:`button`,children:[(0,z.jsx)(t,{size:17}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:e.label})})]},e.key)})})]}),(0,z.jsxs)(`main`,{className:`personal-settings-body`,children:[(0,z.jsx)(`header`,{className:`personal-settings-header`,children:(0,z.jsx)(`div`,{children:(0,z.jsx)(`h1`,{children:v.title})})}),p===`lark`?(0,z.jsx)(tS,{embedded:!0,focusGoalConnection:t,goals:n,initialGoalId:r,onChanged:o,onClose:s}):null,p===`provider`?(0,z.jsx)(`div`,{className:`personal-provider-settings`,children:(0,z.jsx)(IS,{})}):null,p===`machine`?(0,z.jsx)(NS,{}):null,p===`capabilities`?(0,z.jsx)(ES,{callbacks:e,goalId:r,notification:a.find(e=>e.goalId===r),onChanged:o}):null,p===`appearance`?(0,z.jsx)(`section`,{className:`personal-detail-card personal-appearance-settings`,children:(0,z.jsxs)(`div`,{className:`personal-settings-choice-group`,role:`radiogroup`,"aria-label":f(`settings.workspaceTheme`),children:[(0,z.jsxs)(`button`,{"aria-checked":l===`loopx`,onClick:()=>c(`loopx`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-loopx`}),(0,z.jsx)(`strong`,{children:f(`settings.themeLoopx`)})]}),(0,z.jsxs)(`button`,{"aria-checked":l===`paper`,onClick:()=>c(`paper`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-paper`}),(0,z.jsx)(`strong`,{children:f(`settings.themeDefault`)})]}),(0,z.jsxs)(`button`,{"aria-checked":l===`brutal`,onClick:()=>c(`brutal`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-brutal`}),(0,z.jsx)(`strong`,{children:f(`settings.themeHighContrast`)})]})]})}):null,p===`language`?(0,z.jsx)(`section`,{className:`personal-settings-card`,children:(0,z.jsx)(`div`,{"aria-label":f(`settings.language`),className:`personal-language-options`,role:`radiogroup`,children:_.map(e=>(0,z.jsxs)(`button`,{"aria-checked":u===e.value,className:u===e.value?`is-selected`:``,onClick:()=>d(e.value),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:e.label})}),u===e.value?(0,z.jsx)(hm,{"aria-hidden":!0,size:17}):null]},e.value))})}):null]})]})}var zS=`loopx-pw-theme`,BS=`loopx`;function VS(){try{let e=window.localStorage.getItem(zS);return e===`loopx`||e===`paper`||e===`brutal`?e:BS}catch{return BS}}function HS(e){try{window.localStorage.setItem(zS,e)}catch{}}function US({drawer:e,drawerMode:t=`panel`,drawerOpen:n,main:r,mobileSidebarOpen:i=!1,onCloseMobileSidebar:a,sidebar:o,theme:s=`loopx`}){let{t:c}=Ji(),l=(0,R.useRef)(null),u=(0,R.useRef)(null);return(0,R.useEffect)(()=>{if(!i)return;u.current=document.activeElement instanceof HTMLElement?document.activeElement:null;let e=l.current?.querySelectorAll(`button:not([disabled]), a[href], select:not([disabled]), textarea:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])`);e?.[0]?.focus();function t(t){if(t.key!==`Tab`||!e?.length)return;let n=e[0],r=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),r.focus()):!t.shiftKey&&document.activeElement===r&&(t.preventDefault(),n.focus())}return document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`keydown`,t),u.current?.focus(),u.current=null}},[i]),(0,z.jsxs)(`section`,{className:`personal-workspace-shell${n?` has-drawer`:``}${n&&t.startsWith(`inspector`)?` has-task-inspector`:``}${t===`inspector-full`?` is-task-inspector-full`:``}${i?` mobile-sidebar-open`:``}`,"data-pw-theme":s,children:[i?(0,z.jsx)(`button`,{"aria-hidden":!0,className:`personal-sidebar-backdrop`,onClick:a,tabIndex:-1,type:`button`}):null,(0,z.jsx)(`aside`,{"aria-label":i?c(`header.goalNavigation`):void 0,"aria-modal":i?!0:void 0,className:`personal-workspace-sidebar`,"data-workspace-sidebar":!0,ref:l,role:i?`dialog`:void 0,children:(0,z.jsxs)(`div`,{className:`personal-workspace-sidebar-inner`,children:[i?(0,z.jsxs)(`button`,{className:`personal-sr-only`,onClick:a,type:`button`,children:[c(`common.close`),` `,c(`header.goalNavigation`)]}):null,o]})}),(0,z.jsx)(`main`,{"aria-hidden":i||void 0,className:`personal-workspace-main`,inert:i||void 0,children:r}),n?(0,z.jsx)(`aside`,{className:`personal-workspace-drawer`,"data-context-drawer":!0,"data-drawer-mode":t,children:e}):null]})}function WS(e){let t=e.match(/(?:下一步|建议|行动项|待办)[::\s]*([^\n]+)/u),n=t?t[1]:e;n=n.replace(/```[\s\S]*?```/g,``).replace(/`([^`]+)`/g,`$1`).replace(/\[([^\]]+)\]\([^)]+\)/g,`$1`).replace(/[#*~_>]/g,``).replace(/^[-*•\d+.\s]+/u,``).replace(/^(好的|没问题|收到|建议如下|任务如下|分析如下|结论[::])[\s,,::]*/u,``);let r=(n.split(/\r?\n/).map(e=>e.trim()).filter(Boolean)[0]||n).replace(/\s+/gu,` `).trim();return Array.from(r).slice(0,120).join(``)}function GS(e){let t=new Map;return e.forEach(e=>{let n=e.fields.find(e=>e.key===`todo_id`)?.value??``,r=[e.actionKind,e.goalId??``,n,e.title].join(`:`);t.set(r,e)}),[...t.values()]}function KS(e,t,n){if(!e)return n(`home.noFirstActivity`);let r=new Date(e);if(Number.isNaN(r.getTime()))return e;let i=new Date,a=new Intl.DateTimeFormat(t,{hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r);return r.toDateString()===i.toDateString()?n(`home.todayAt`,{time:a}):new Intl.DateTimeFormat(t,{month:`numeric`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r)}function qS({goals:e,onSelectGoal:t,onRetry:n,systemHealth:r}){let{locale:i,t:a}=Ji(),o=e.filter(e=>e.activationState===`active`),s=o.filter(e=>e.loadState===`error`).length,c=[{key:`needs_you`,label:a(`home.lane.needsYou`)},{key:`running`,label:a(`home.lane.running`)},{key:`observing`,label:a(`home.lane.observing`)},{key:`scheduled`,label:a(`home.lane.scheduled`)}],l=Object.fromEntries(c.map(e=>[e.key,[]])),u=[];e.filter(e=>!e.loadState).forEach(e=>{let t=Jd(e);t===`history`?u.push(e):t!==`stopped`&&l[t].push(e)});let d=e=>(0,z.jsxs)(`button`,{className:`personal-home-goal-card`,"data-goal-state":e.loadState??e.state,"data-load-error":e.loadError,onClick:()=>t(e.goalId),type:`button`,children:[(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`span`,{className:`personal-home-goal-meta`,children:e.agentLaneCount&&e.agentLaneCount>1?a(`header.workAgentCount`,{count:e.agentLaneCount}):e.agentLabel??e.agentId}),(0,z.jsx)(`p`,{children:e.loadError?a(`startup.error.${e.loadError}`):e.needsYou??e.nextSentence}),(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`span`,{children:e.loadState?a(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,i)}),(0,z.jsx)(`small`,{title:e.latestActivity,children:e.loadState?``:e.latestActivity?KS(e.latestActivity,i,a):e.agentTodos.length?a(`home.taskCount`,{count:e.agentTodos.length}):a(`home.noActivity`)})]})]},e.goalId);return(0,z.jsxs)(`section`,{"aria-label":a(`home.workspace`),className:`personal-home-board`,children:[r&&(!r.ok||r.issues.length>0||r.freshnessWarning)?(0,z.jsxs)(`div`,{className:`personal-system-health-banner`,role:`alert`,children:[(0,z.jsxs)(`div`,{className:`personal-system-health-header`,children:[(0,z.jsx)(ym,{size:15}),(0,z.jsx)(`strong`,{children:a(`home.systemHealth`,{summary:r.summary})}),r.freshnessWarning?(0,z.jsxs)(`small`,{children:[`(`,r.freshnessWarning,`)`]}):null]}),r.issues.length>0?(0,z.jsx)(`ul`,{className:`personal-system-health-issues`,children:r.issues.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))}):null]}):null,o.some(e=>e.loadState)?(0,z.jsxs)(`section`,{className:`personal-home-lane`,"aria-live":`polite`,children:[(0,z.jsx)(`header`,{children:a(`startup.progress`,{loaded:o.filter(e=>!e.loadState).length,total:o.length})}),s?(0,z.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`status`,children:[(0,z.jsx)(`span`,{children:a(`startup.failedCount`,{count:s})}),(0,z.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,onClick:n,type:`button`,children:a(`startup.retryFailed`)})]}):null,o.filter(e=>e.loadState).map(d)]}):null,(0,z.jsx)(`div`,{className:`personal-home-lanes`,children:c.filter(e=>l[e.key].length>0).map(e=>(0,z.jsxs)(`section`,{className:`personal-home-lane is-${e.key}`,"data-testid":`personal-home-lane-${e.key}`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`i`,{}),e.label]}),(0,z.jsx)(`b`,{children:l[e.key].length})]}),(0,z.jsx)(`div`,{className:`personal-home-lane-list`,children:l[e.key].map(d)})]},e.key))}),u.length?(0,z.jsxs)(`details`,{className:`personal-home-history`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:a(`home.history`)}),(0,z.jsx)(`b`,{children:u.length}),(0,z.jsx)(`small`,{children:a(`home.completedGoals`)})]}),(0,z.jsx)(`div`,{children:u.map(d)})]}):null]})}function JS({items:e,onSelect:t,reportState:n}){let{locale:r,t:i}=Ji();return(0,z.jsxs)(`section`,{className:`personal-object-list personal-files-list`,"data-testid":`personal-goal-outputs`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:i(`files.title`)}),(0,z.jsx)(`span`,{children:e.length})]}),n?.loading?(0,z.jsxs)(`p`,{className:`personal-object-list-state`,role:`status`,children:[(0,z.jsx)(Qm,{className:`is-spinning`,size:14}),i(`files.loadingReports`)]}):null,n?.error?(0,z.jsxs)(`p`,{className:`personal-object-list-state is-error`,role:`alert`,children:[(0,z.jsx)(ym,{size:14}),i(`files.reportLoadFailed`),`: `,n.error]}):null,!n?.loading&&!n?.error&&e.length===0?(0,z.jsxs)(`p`,{className:`personal-object-list-state`,children:[(0,z.jsx)(jm,{size:14}),i(`files.empty`)]}):null,e.map(e=>(0,z.jsxs)(`button`,{"data-output-kind":e.output.kind,onClick:()=>t({item:e.output,kind:`output`}),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-file-icon`,children:(0,z.jsx)(jm,{size:16})}),(0,z.jsx)(`strong`,{children:e.output.title}),e.output.report?(0,z.jsx)(`em`,{children:i(`files.reportDelta`,{added:e.output.report.addedCount,changed:e.output.report.changedCount})}):null,(0,z.jsx)(`p`,{children:e.output.summary??e.output.safePreview??e.output.kind??i(`files.emptySummary`)}),(0,z.jsx)(`small`,{title:e.output.createdAt,children:[e.output.kind===`report`?i(`files.verifiedReport`):null,KS(e.output.createdAt,r,i)].filter(Boolean).join(` · `)})]},e.id))]})}function YS({agentLabel:e,messages:t,onClose:n,onDraftTask:r,onOpenConversation:i,title:a}){let{t:o}=Ji(),s=t.reduce((e,t,n)=>t.role===`user`?n:e,0),c=t.slice(Math.max(0,s)).slice(-3),l=c.filter(e=>e.role===`assistant`&&!e.pending).at(-1);return(0,R.useEffect)(()=>{if(!n)return;let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]),(0,z.jsxs)(`aside`,{"aria-label":o(`conversation.receipt`),className:`personal-manager-conversation-tray`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(fm,{size:16}),(0,z.jsx)(`strong`,{children:a??o(`conversation.title`)}),(0,z.jsx)(`small`,{children:t.at(-1)?.pending?o(`conversation.replying`):o(`common.recently`)})]}),(0,z.jsxs)(`div`,{className:`personal-manager-conversation-actions`,children:[r&&l?(0,z.jsxs)(`button`,{className:`personal-manager-conversation-btn`,onClick:()=>r(l.text),title:o(`conversation.convertHint`),type:`button`,children:[(0,z.jsx)(Rm,{size:13}),(0,z.jsx)(`span`,{children:o(`conversation.toTask`)})]}):null,(0,z.jsx)(`button`,{className:`personal-manager-conversation-link`,onClick:i,type:`button`,children:o(`conversation.full`)}),n?(0,z.jsx)(`button`,{"aria-label":o(`conversation.close`),className:`personal-manager-conversation-close`,onClick:n,title:o(`conversation.close`),type:`button`,children:(0,z.jsx)(gh,{size:14})}):null]})]}),(0,z.jsx)(`div`,{"aria-live":`polite`,className:`personal-manager-conversation-messages`,children:c.map(t=>(0,z.jsxs)(`article`,{className:`is-${t.role}`,children:[(0,z.jsx)(`strong`,{children:t.role===`user`?o(`common.you`):t.agentLabel??e??o(`header.manager`)}),(0,z.jsxs)(`div`,{className:`personal-manager-conversation-bubble`,children:[t.role===`user`?(0,z.jsx)(`p`,{children:t.text}):(0,z.jsx)(wb,{text:t.text}),t.pending?(0,z.jsx)(`small`,{children:o(`conversation.agentPending`)}):null,(0,z.jsx)(Wy,{request:t.collaboration}),(0,z.jsx)(Vb,{delivery:t.returnDelivery})]})]},t.id))})]})}function XS({onClose:e,onOpenDetails:t,run:n}){let{t:r}=Ji();return(0,z.jsxs)(`section`,{"aria-label":r(`session.record`),className:`personal-session-record`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(fm,{size:17}),r(`session.record`)]}),(0,z.jsx)(`button`,{"aria-label":r(`session.closeRecord`),onClick:e,type:`button`,children:(0,z.jsx)(gh,{size:15})})]}),(0,z.jsx)(`div`,{children:(0,z.jsx)(`strong`,{children:n.title})}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Agent`}),(0,z.jsx)(`dd`,{children:n.agentLabel})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`common.status`)}),(0,z.jsx)(`dd`,{children:Xi(n.sessionStatus??n.status,r)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Session`}),(0,z.jsx)(`dd`,{title:n.sessionId,children:n.sessionId})]})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:t,type:`button`,children:r(`session.details`)})]})}function ZS(e,t,n){let r=[];if(t===null)return e.userTodos.slice(0,4).forEach(t=>r.push({attention:{...t,goalTitle:t.goalTitle??Kd(e,t.goalId)},id:`attention:${t.todoId}`,kind:`attention`})),e.goals.filter(e=>Jd(e)===`running`).slice(0,4).forEach(e=>r.push({id:`run:${e.goalId}`,kind:`run`,run:{agentId:e.agentId,agentLabel:e.agentLabel??e.agentId,completedSteps:e.doneTodoCount??e.agentTodos.filter(e=>e.done).length,goalId:e.goalId,goalTitle:e.title,latestActivity:e.agentSentence,runId:`goal:${e.goalId}`,status:`running`,title:e.nextSentence,totalSteps:Math.max((e.doneTodoCount??0)+e.agentTodos.filter(e=>!e.done).length,1)}})),r;let i=e.goals.find(e=>e.goalId===t);if(!i)return r;if(i.needsYou){let t=e.userTodos.find(e=>e.goalId===i.goalId);r.push({attention:t?{...t,goalTitle:i.title}:{blocking:i.needsYouBlocking??!1,goalId:i.goalId,goalTitle:i.title,text:i.needsYou,todoId:`${i.goalId}:attention`},id:`attention:${i.goalId}`,kind:`attention`})}qd(i)&&r.push({id:`run:${i.goalId}`,kind:`run`,run:{agentId:i.agentId,agentLabel:i.agentLabel??i.agentId,completedSteps:i.doneTodoCount??i.agentTodos.filter(e=>e.done).length,goalId:i.goalId,goalTitle:i.title,latestActivity:i.agentSentence,runId:`goal:${i.goalId}`,status:i.state===`推进中`?`running`:i.state===`需修复`?`failed`:`waiting`,title:i.nextSentence,totalSteps:Math.max((i.doneTodoCount??0)+i.agentTodos.filter(e=>!e.done).length,1)}}),i.agentTodos.filter(e=>e.taskClass===`continuous_monitor`).forEach(t=>{let a=e.timeline?.find(e=>e.kind===`run`&&e.run.goalId===i.goalId&&e.run.todoId===t.todoId&&!!e.run.sessionId);r.push({id:`schedule:${i.goalId}:${t.todoId}`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:a?[{label:a.run.latestActivity||a.run.title,runId:a.run.runId,status:a.run.status===`waiting`||a.run.status===`queued`?`running`:a.run.status,timestamp:i.latestActivity||n(`common.recently`)}]:[],goalId:i.goalId,label:t.text,schedule:t.evidence??n(`schedule.summary`),scheduleId:t.todoId,scheduleKind:`monitor`,sessionId:a?.run.sessionId,status:t.done||t.status===`paused`?`paused`:`active`,stopCondition:n(`drawer.scheduleDefaultStop`),target:t.text,timezone:`Asia/Shanghai`}})});let a=e.timeline?.find(e=>e.kind===`proposal`&&e.proposal.actionKind===`heartbeat.bind`&&e.proposal.goalId===i.goalId);if(a){let e=e=>a.proposal.fields.find(t=>t.key===e)?.value;r.push({id:`schedule:${i.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:[],goalId:i.goalId,label:`${n(`schedule.heartbeat`)} · ${i.title}`,nextRunAt:n(`drawer.schedulePending`),notificationRule:n(`drawer.scheduleDefaultNotification`),schedule:e(`cadence`)??n(`schedule.summary`),scheduleId:`${i.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:a.proposal.status===`applied`?`active`:`draft`,stopCondition:e(`stop_condition`)??n(`drawer.scheduleDefaultStop`),timezone:e(`timezone`)??`Asia/Shanghai`}})}return r}function QS(e){return e===`preview_ready`?`ready`:e===`cancelled`?`draft`:e===`failed`?`error`:e}function $S(e,t){let n={agent_id:t(`proposal.field.agentId`),cadence:t(`proposal.field.cadence`),completion_criteria:t(`proposal.field.completionCriteria`),execution_boundary:t(`proposal.field.executionBoundary`),goal_id:t(`proposal.field.goalId`),heartbeat:t(`proposal.field.heartbeat`),initial_todos:t(`proposal.field.initialTodos`),objective:t(`proposal.field.objective`),operation:t(`proposal.field.operation`),permission:t(`proposal.field.permission`),reason:t(`proposal.field.reason`),stop_condition:t(`proposal.field.stopCondition`),target:t(`proposal.field.target`),timezone:t(`proposal.field.timezone`),title:t(`proposal.field.title`),workspace_ref:t(`proposal.field.workspace`)},r=[`title`,`objective`,`completion_criteria`,`execution_boundary`,`permission`,`agent_id`,`workspace_ref`,`initial_todos`,`heartbeat`,`stop_condition`,`goal_id`];return Object.entries(e).sort(([e],[t])=>{let n=r.indexOf(e),i=r.indexOf(t);return(n<0?r.length:n)-(i<0?r.length:i)}).slice(0,10).map(([e,r])=>({key:e,label:n[e]??e.replaceAll(`_`,` `),value:e===`workspace_ref`?r===`current`?t(`proposal.workspace.current`):t(`proposal.workspace.named`,{workspace:String(r??`current`)}):Array.isArray(r)?r.join(` · `):typeof r==`object`&&r?JSON.stringify(r):String(r??`—`)}))}function eC(e,t,n){let r=t.operationFrame,i=r?.content.fields.map((e,t)=>({key:`projection:${t}`,label:e.label,value:e.value})).slice(0,8)??[];return[{key:`operation_state`,label:n(`proposal.field.operationState`),value:r?.lifecycleState??e.status},...r?.kind===`result`?[{key:`result_delivery`,label:n(`proposal.field.resultDelivery`),value:r.resultDeliveryVerified?n(`proposal.resultDelivery.verified`):n(`proposal.resultDelivery.pending`)}]:[],...i,...r?[{key:`warning`,label:n(`proposal.field.confirmationBoundary`),value:r.content.warning}]:[],...r?[{key:`expires_at`,label:n(`proposal.field.expiresAt`),value:r.expiresAt}]:[]].slice(0,10)}function tC(e){if(e.action_kind!==`goal.lifecycle`)return;let t=e.normalized_parameters.operation;return t===`stop`||t===`resume`||t===`delete`?t:void 0}function nC(e,t){let n=tC(e),r=eb(e),i=typeof e.normalized_parameters.title==`string`?e.normalized_parameters.title:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:``,a=typeof e.normalized_parameters.target==`string`?e.normalized_parameters.target:``,o=r.operationFrame,s=o?.content.title??e.summary,c=e.action_kind===`operation.execute`?s:e.action_kind===`team.plan`?e.status===`applied`?db(ub(e.receipt),t):t(`proposal.summary.teamPlan`,{goal:ob(e.normalized_parameters),count:ab(e.normalized_parameters)}):e.action_kind===`goal.create`?t(`proposal.summary.goalCreate`,{title:i}):e.action_kind===`heartbeat.bind`?t(`proposal.summary.heartbeat`):e.action_kind===`monitor.create`?t(`proposal.summary.monitor`,{target:a}):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.summary.lifecycleStop`,{title:i}):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.summary.lifecycleDelete`,{title:i}):e.action_kind===`goal.lifecycle`?t(`proposal.summary.lifecycleResume`,{title:i}):e.summary;return{actionKind:e.action_kind,reviewPlan:r,fields:e.action_kind===`operation.execute`?eC(e,r,t):e.action_kind===`team.plan`?ib(e.normalized_parameters,t):$S(e.normalized_parameters,t),goalId:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:void 0,impact:r.retryOriginal?t(`actionReview.${r.reason}`):e.action_kind===`operation.execute`?t(`proposal.impact.operation`):e.action_kind===`team.plan`?e.status===`applied`?t(`proposal.teamPlan.assignedHint`):t(`proposal.impact.teamPlan`):e.action_kind===`goal.create`?t(`proposal.impact.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.impact.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.impact.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.impact.lifecycleResume`):e.permission_classification===`protected`?t(`proposal.impact.protected`):``,previewId:e.proposal_id,lifecycleOperation:n,gate:e.gate?{kind:String(e.gate.kind??`protected_action`),nextAction:typeof e.gate.next_action==`string`?e.gate.next_action:void 0,summary:String(e.gate.summary??t(`proposal.gate.default`))}:void 0,primaryLabel:r.retryOriginal?t(`drawer.retryOriginal`):e.action_kind===`operation.execute`?o?.kind===`result`?o.resultDeliveryVerified?t(`proposal.primary.operationResultVerified`):t(`proposal.primary.operationResultPending`):t(`proposal.primary.operationGroup`):e.action_kind===`team.plan`?t(e.status===`applied`?`proposal.teamPlan.viewResult`:`proposal.primary.teamPlan`):e.action_kind===`goal.create`?t(`proposal.primary.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.primary.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.primary.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.primary.lifecycleResume`):e.action_kind===`todo.create`&&e.normalized_parameters.start_execution===!0?t(`proposal.primary.todoStart`):t(`proposal.primary.apply`),status:r.retryOriginal||e.status===`applied`&&e.action_kind!==`operation.execute`&&r.interaction!==`completed`?`error`:QS(e.status),teamPlanOutcome:e.action_kind===`team.plan`?ub(e.receipt)??void 0:void 0,teamPlanAssignments:e.action_kind===`team.plan`?sb(e.receipt,e.normalized_parameters):void 0,teamPlanGapLanes:e.action_kind===`team.plan`?cb(e.receipt,e.normalized_parameters):void 0,title:c}}function rC(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,42);if(t)return t;let n=2166136261;for(let t of e)n^=t.codePointAt(0)??0,n=Math.imul(n,16777619);return`goal-${(n>>>0).toString(36)}`}function iC(e,t){let n=e.match(/[「“"]([^」”"]{2,80})[」”"]/u)?.[1];return n?n.trim():e.replace(/^(请|帮我|我想|给我|创建|新建|设置|please|i want to|create|set up)+/iu,``).replace(/(一个|新的)?\s*(goal|目标)/giu,``).replace(/[,。!?].*$/u,``).trim().slice(0,80)||t(`goal.defaultTitle`)}function aC(e,t){for(let n of e.split(/\r?\n/u)){let e=n.trim();for(let n of t){let t=e.match(RegExp(`^${n.replace(/[.*+?^${}()|[\]\\]/gu,`\\$&`)}\\s*[::]\\s*(.*)$`,`iu`));if(t?.[1]?.trim())return t[1].trim()}}return``}function oC(e,t){let n=aC(e,[`目标`,`Objective`]),r=aC(e,[`完成标准`,`Completion criteria`]),i=aC(e,[`执行边界(可选)`,`执行边界`,`边界`,`Execution boundary (optional)`,`Execution boundary`,`Boundary`]),a=(n||iC(e,t)).split(/[。;;\n]/u)[0].trim().slice(0,80)||t(`goal.defaultTitle`),o=[n||a,r?t(`goal.objectiveCompletion`,{criteria:r}):``,i?t(`goal.objectiveBoundary`,{boundary:i}):``].filter(Boolean).join(` -`),s=/(只读|不调用外部工具|不修改(?:仓库|代码|状态)|read.?only|do not (?:call|use) external tools|do not modify (?:repositories|repository|code|state))/iu.test(i||e);return{completionCriteria:r,executionBoundary:i,initialTodos:r?[t(`goal.initialTodo`,{criteria:r})]:[],objective:o,permission:s?`read_only`:`workspace_write_on_confirmation`,title:a}}function sC(e){let t=e.match(/(?:每|every)\s*(\d{1,3})\s*(?:分钟|minutes?)/iu)?.[1];if(t)return`${t}m`;let n=e.match(/(?:每|every)\s*(\d{1,2})\s*(?:小时|hours?)/iu)?.[1];return n?`${n}h`:/每小时|every hour|hourly/iu.test(e)?`1h`:(/每天|每日|早上|上午|daily|every day/iu.test(e),`1d`)}function cC(e,t){return/(每周|星期|周[一二三四五六日天]|weekly|every\s+(?:mon|tues|wednes|thurs|fri|satur|sun)day|\d{1,2}\s*[::]\s*\d{2})/iu.test(e)?t(`schedule.unsupportedCalendar`):null}function lC(e,t){return aC(e,[`检查内容`,`监控内容`,`目标`,`Check target`,`Monitor target`,`Target`])||e.replace(/^(?:为当前 Goal |for the current Goal )?(?:添加|配置|创建|add|configure|create)?\s*(?:定时检查|监控|scheduled check|monitor)[::]?/iu,``).split(/\r?\n/u)[0].trim()||t(`schedule.defaultTarget`)}function uC(e){return/(mr|pr).{0,8}(合并|merge)/iu.test(e)?`pr_merged`:/发布完成|上线完成|release (?:is )?complete|deployment (?:is )?complete/iu.test(e)?`release_complete`:`goal_complete`}function dC(e,t){let n=e.toLowerCase();return t.find(e=>n.includes(e.agentId.toLowerCase())||n.includes(e.label.toLowerCase()))}function fC(e){let t=aC(e,[`标题`,`任务标题`,`Todo 标题`]),n=aC(e,[`内容`,`任务内容`,`Todo 内容`]);if(t)return[t,n].filter(Boolean).join(`:`).slice(0,400);let r=e.match(/[「“"]([^」”"]{2,200})[」”"]/u)?.[1];return r?r.trim():e.replace(/^(请|帮我|给我|为当前 Goal |新增|新建|创建|添加|加上|加一个|记一个)+/u,``).replace(/^(一个\s*)?(普通\s*)?(todo|待办|任务)(?:\s*到\s*Tasks?)?[::\s]*/iu,``).replace(/[。;;,,]\s*(?:不要|不需要|无需|禁止|别|暂不).{0,80}(?:heartbeat|心跳|定时|监控|执行).*$/iu,``).replace(/[,,]\s*(并且|然后|再)?\s*(交给|分配给|让).+$/u,``).replace(/\s*(交给|分配给|让)\s+.+$/u,``).trim().slice(0,400)||`推进当前 Goal 的下一项工作`}var pC=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),mC=5242880,hC=4;function gC(e,t){return new Promise((n,r)=>{let i=new FileReader;i.onerror=()=>r(Error(t(`composer.imageReadError`,{name:e.name}))),i.onload=()=>n({dataUrl:String(i.result??``),id:crypto.randomUUID(),mimeType:e.type,name:e.name,size:e.size}),i.readAsDataURL(e)})}function _C({conversationSessionId:e,agents:t=[{agentId:`codex`,available:!0,capability:`代码与项目执行`,label:`Codex`}],callbacks:n={},goalArchiveLoadState:r={error:null,phase:`ready`},managerChannelBinding:i,managerRuntime:a,model:o,readOnly:s=!1,selectedAgentId:c,selectedGoalId:l,statusSourceControl:u}){let{locale:d,t:f}=Ji(),[p,m]=(0,R.useState)(l??null),[h,g]=(0,R.useState)(c??t.find(e=>e.available)?.agentId??`codex`),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)(null),[C,w]=(0,R.useState)({}),[T,E]=(0,R.useState)(`chat`),[D,O]=(0,R.useState)(!1),[k,A]=(0,R.useState)(!1),[ee,j]=(0,R.useState)(!1),[M,te]=(0,R.useState)(()=>{try{let e=window.sessionStorage.getItem(`loopx-pw-composer-drafts`),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}),[ne,N]=(0,R.useState)(!1),[P,re]=(0,R.useState)(null),[ie,ae]=(0,R.useState)(`queue`),[F,oe]=(0,R.useState)(``),[I,se]=(0,R.useState)([]),[L,ce]=(0,R.useState)(null),[le,ue]=(0,R.useState)(null),[de,fe]=(0,R.useState)(()=>new Set),[pe,me]=(0,R.useState)(()=>new Set),[he,ge]=(0,R.useState)(`idle`),[_e,ve]=(0,R.useState)([]),[ye,be]=(0,R.useState)([]),[xe,Se]=(0,R.useState)(!1),[Ce,we]=(0,R.useState)(VS),[Te,Ee]=(0,R.useState)({}),[De,Oe]=(0,R.useState)([]),ke=(0,R.useRef)(!1),Ae=(0,R.useRef)(NaN),je=(0,R.useRef)(null),Me=(0,R.useRef)(null),Ne=(0,R.useRef)(null),Pe=(0,R.useRef)(null),Fe=(0,R.useRef)(new Set),Ie=(0,R.useRef)(new Set),[Le,Re]=(0,R.useState)(null),B=l===void 0?p:l,ze=c??h,Be=`${B??`manager`}:${ze}`,Ve=M[Be]??``;(0,R.useEffect)(()=>{se([]),ce(null)},[Be]);function He(e,t){te(n=>{let r={...n};t?r[e]=t:delete r[e];try{window.sessionStorage.setItem(`loopx-pw-composer-drafts`,JSON.stringify(r))}catch{}return r})}function Ue(e){He(Be,e)}function We(e){return kh.find(t=>t.id===e)?.prompt??``}(0,R.useEffect)(()=>{let e=je.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)},[Ve]);let Ge=(0,R.useMemo)(()=>o.goals.map(e=>{let t=Te[e.goalId];return t?{...e,repository:{branch:t.branch,identity:t.identity,label:t.label,readOnly:!0}}:e}),[Te,o.goals]),Ke=(0,R.useMemo)(()=>Ge.filter(e=>Jd(e)===`needs_you`).length,[Ge]),qe=(0,R.useMemo)(()=>Ge.filter(e=>Jd(e)===`needs_you`&&(e.needsYouBlocking||e.state===`等你`)).length,[Ge]),V=Ge.find(e=>e.goalId===B)??null;function Je(e){Ne.current=document.activeElement instanceof HTMLElement?document.activeElement:null,Se(!1),v(e)}function Ye(){v(null),window.requestAnimationFrame(()=>{let e=Ne.current;e?.isConnected&&e.getClientRects().length?e.focus({preventScroll:!0}):document.querySelector(`.personal-mobile-menu`)?.focus({preventScroll:!0})})}let Xe=_?.kind===`settings`,Ze=B,Qe=(0,R.useMemo)(()=>{let e=Object.values(C).filter(e=>e.actionKind===`heartbeat.bind`&&e.goalId&&e.status===`applied`).map(e=>({id:`schedule:${e.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:ze,executionHistory:[],goalId:e.goalId,label:e.title,nextRunAt:f(`drawer.schedulePending`),notificationRule:f(`drawer.scheduleDefaultNotification`),schedule:e.fields.find(e=>e.key===`cadence`)?.value??f(`schedule.summary`),scheduleId:`${e.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:e.status===`applied`?`active`:`draft`,stopCondition:e.fields.find(e=>e.key===`stop_condition`)?.value??f(`drawer.scheduleDefaultStop`),timezone:e.fields.find(e=>e.key===`timezone`)?.value??`Asia/Shanghai`}})),t=[...ZS(o,Ze,f),...o.timeline??[],...e,...GS(Object.values(C)).filter(e=>e.actionKind!==`heartbeat.bind`||e.status!==`applied`).map(e=>({id:`proposal:${e.previewId}`,kind:`proposal`,proposal:e}))];return[...new Map(t.map(e=>[e.id,e])).values()].filter(e=>e.kind!==`proposal`||![`stale`,`error`].includes(e.proposal.status)||e.proposal.reviewPlan?.retryOriginal===!0||_e.includes(e.proposal.previewId)).filter(e=>!B||e.kind===`message`?!0:e.kind===`proposal`?!e.proposal.goalId||e.proposal.goalId===B:e.kind===`attention`?e.attention.goalId===B:e.kind===`run`?e.run.goalId===B:e.kind===`schedule`?e.schedule.goalId===B:e.output.goalId===B)},[Ze,o,C,ze,B,_e,f]),$e=(0,R.useMemo)(()=>x?Qe.filter(e=>e.kind===`message`?!0:e.kind===`run`?e.run.runId===x.runId:e.kind===`output`&&e.output.runId===x.runId):Qe,[x,Qe]);(0,R.useEffect)(()=>{if(!x)return;let e=Qe.find(e=>e.kind===`run`&&e.run.runId===x.runId);!e||e.kind!==`run`||JSON.stringify({completedSteps:x.completedSteps,latestActivity:x.latestActivity,messages:x.sessionMessages,sessionStatus:x.sessionStatus,status:x.status,totalSteps:x.totalSteps})!==JSON.stringify({completedSteps:e.run.completedSteps,latestActivity:e.run.latestActivity,messages:e.run.sessionMessages,sessionStatus:e.run.sessionStatus,status:e.run.status,totalSteps:e.run.totalSteps})&&S(e.run)},[x,Qe]);let et=(0,R.useMemo)(()=>Qe.flatMap(e=>e.kind===`message`?[e.message]:[]),[Qe]),tt=(0,R.useMemo)(()=>V?Qe.flatMap(e=>e.kind===`message`?[e.message]:[]):[],[Qe,V]);(0,R.useEffect)(()=>{V||D||et.some(e=>e.pending)&&A(!0)},[D,et,V]),(0,R.useEffect)(()=>{!V||T===`chat`||tt.some(e=>e.pending)&&j(!0)},[tt,V,T]);let nt=(0,R.useMemo)(()=>Qe.filter(e=>e.kind===`message`||e.kind===`proposal`&&(_e.includes(e.proposal.previewId)||ye.includes(e.proposal.previewId))),[Qe,_e,ye]),rt=nt[nt.length-1],it=rt?.kind===`message`?rt.message.text.length:0;(0,R.useEffect)(()=>{if(!D||!Me.current)return;let e=window.requestAnimationFrame(()=>{Me.current&&(Me.current.scrollTop=Me.current.scrollHeight)});return()=>window.cancelAnimationFrame(e)},[nt.length,D,it]);let at=(0,R.useMemo)(()=>{if(_?.kind===`settings`)return null;if(_?.kind===`attention`)return{kind:`attention`,item:rf(_.item,o.attentionHistory??o.userTodos)};if(_?.kind===`goal`){let e=Ge.find(e=>e.goalId===_.item.goalId);return e?{item:e,kind:`goal`}:_}if(_?.kind!==`run`)return _;let e=Qe.find(e=>e.kind===`run`&&e.run.runId===_.item.runId);return e?{item:e.run,kind:`run`}:_},[Qe,_,Ge,o.attentionHistory,o.userTodos]);(0,R.useEffect)(()=>{if(s){Ee({}),Oe([]);return}let e=!1;return Promise.all([h_(),E_()]).then(([t,n])=>{e||(Ee(Object.fromEntries(t.map(e=>[e.goal_id,e.repository]))),Oe(n))}).catch(()=>{}),()=>{e=!0}},[s]),(0,R.useEffect)(()=>{if(!xe)return;function e(e){e.key===`Escape`&&Se(!1)}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[xe]),(0,R.useEffect)(()=>{if(B||!Qe.length)return;if(!ke.current){ke.current=!0;try{Ae.current=Date.parse(window.localStorage.getItem(`loopx-pw-last-visit`)??``),window.localStorage.setItem(`loopx-pw-last-visit`,new Date().toISOString())}catch{Ae.current=NaN}}let e=Ae.current,t=Qe.filter(e=>e.kind===`run`).map(e=>e.run),n=t=>{let n=Date.parse(t??``);return!Number.isNaN(e)&&!Number.isNaN(n)&&n>e},r={done:t.filter(e=>e.status===`completed`&&n(e.latestActivity)).length,failed:t.filter(e=>(e.status===`failed`||e.status===`interrupted`)&&n(e.latestActivity)).length};Re(e=>e?.done===r.done&&e.failed===r.failed?e:r)},[Qe,B]),(0,R.useEffect)(()=>{if(s){w({});return}let e=!1;return eg(B?{goalId:B}:{contextKind:`manager`}).then(t=>{if(e)return;let n=t.filter(e=>[`preview_ready`,`gated`,`deferred`,`applying`].includes(e.status)||eb(e).retryOriginal===!0||e.action_kind===`operation.execute`&&e.status===`applied`).map(e=>nC(e,f)),r=Object.fromEntries(n.map(e=>[e.previewId,e]));w(e=>({...e,...r})),B||be(n.map(e=>e.previewId))}).catch(()=>{}),()=>{e=!0}},[s,B,f]);async function ot(e,t={}){if(s)throw Error(f(`source.readOnlyWriteError`));let r;try{r=n.onPreviewAction?await n.onPreviewAction(e):nC(await Qh(e),f)}catch(t){if(!(t instanceof qh)||t.payload.error_code!==`action_preview_gate`)throw t;let n=t.payload.gate&&typeof t.payload.gate==`object`?t.payload.gate:{},i=(Array.isArray(n.candidates)?n.candidates:[]).flatMap(e=>{if(!e||typeof e!=`object`)return[];let t=e;return typeof t.workspace_ref==`string`&&typeof t.label==`string`?[{label:t.label,workspaceRef:t.workspace_ref}]:[]}),a=String(n.kind??`workspace_selection_required`),o=a===`agent_binding_required`||a===`agent_identity_selection_required`;r={actionKind:e.actionKind,fields:i.map(e=>({key:`workspace_ref:${e.workspaceRef}`,label:e.label,value:e.workspaceRef})),gate:{kind:a,nextAction:typeof n.next_action==`string`?n.next_action:void 0,summary:String(n.summary??f(`proposal.workspaceGate.defaultSummary`))},impact:f(o?`proposal.workspaceGate.agentImpact`:`proposal.workspaceGate.selectionImpact`),previewId:`workspace-choice-${Date.now().toString(36)}`,sourceRequest:e,status:`gated`,title:f(o?`proposal.workspaceGate.agentTitle`:`proposal.workspaceGate.selectionTitle`),workspaceCandidates:i}}return ve(e=>e.includes(r.previewId)?e:[...e,r.previewId]),w(e=>({...e,[r.previewId]:r})),t.select!==!1&&v({item:r,kind:`proposal`}),r}function st(){_t(null),He(`manager:${ze}`,f(`composer.createGoalTemplate`)),window.requestAnimationFrame(()=>je.current?.focus())}async function ct(e,t){Se(!1);let r={delete:`Deleted from the owner workspace`,resume:`Resumed from the owner workspace`,stop:`Stopped from the owner workspace`},i={delete:f(`proposal.summary.lifecycleDelete`,{title:e.title}),resume:f(`proposal.summary.lifecycleResume`,{title:e.title}),stop:f(`proposal.summary.lifecycleStop`,{title:e.title})},a=null,o=!1;try{if(t===`stop`){if(Fe.current.has(e.goalId))return;Fe.current.add(e.goalId),fe(new Set(Fe.current)),v(null),a={goalId:e.goalId,next:`stopped`,optimisticApplied:!0,previous:e.activationState},ue(f(`feedback.applying`,{title:i.stop})),n.onGoalActivationStateChange?.(e.goalId,`stopped`)}if(n.onExecuteGoalLifecycle){if(t===`delete`)throw Error(`The selected status source does not authorize Goal deletion.`);let a=await n.onExecuteGoalLifecycle({goalId:e.goalId,operation:t,reason:r[t]});if(!a.projectionVerified)throw Error(`Goal lifecycle projection did not verify.`);o=!0,n.onGoalActivationStateChange?.(e.goalId,a.activationState),ue(f(`feedback.completed`,{title:i[t]})),t===`stop`&&_t(null),await ft([e.goalId]);return}let s=await ot({actionKind:`goal.lifecycle`,context:{kind:`goal_directory`,goal_id:e.goalId},idempotencyKey:`workspace-goal-${t}-${e.goalId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:t,reason:r[t]},summary:i[t]},{select:t!==`stop`});if(s.goalId!==e.goalId||s.lifecycleOperation!==t)throw v(null),Error(f(`actionReview.targetChanged`));t===`stop`&&(s.reviewPlan?.interaction===`direct`?(o=!0,await pt(s,{lifecycleProjection:a??void 0,presentation:`feedback`})):(a&&n.onGoalActivationStateChange?.(a.goalId,a.previous),ue(s.gate?f(`feedback.gateRequired`,{summary:s.gate.summary}):f(`feedback.notCompleted`,{status:s.status})),v({item:s,kind:`proposal`})))}catch(e){a&&!o&&n.onGoalActivationStateChange?.(a.goalId,a.previous),ue(f(`feedback.executionFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{t===`stop`&&(Fe.current.delete(e.goalId),fe(new Set(Fe.current)))}}function lt(e,t){Ue(f(t?e===`heartbeat`?`composer.heartbeatTemplate`:`composer.monitorTemplate`:e===`heartbeat`?`composer.heartbeatTemplateWithoutGoal`:`composer.monitorTemplateWithoutGoal`)),v(null),window.requestAnimationFrame(()=>je.current?.focus())}async function ut(e,t,r=``){let i=await n.onRequestScheduleConfig?.(e,t);if(i){ve(e=>e.includes(i.previewId)?e:[...e,i.previewId]),w(e=>({...e,[i.previewId]:i})),v({item:i,kind:`proposal`});return}if(!t){Ue(f(e===`heartbeat`?`composer.heartbeatGoalQuestion`:`composer.monitorGoalQuestion`));return}let a=Date.now().toString(36);await ot({actionKind:e===`heartbeat`?`heartbeat.bind`:`monitor.create`,context:{kind:`schedule`,goal_id:t},idempotencyKey:`workspace-${e}-${t}-${a}`,normalizedParameters:e===`heartbeat`?{agent_id:ze,cadence:sC(r),goal_id:t,stop_condition:uC(r),timezone:`Asia/Shanghai`}:{agent_id:ze,cadence:sC(r),goal_id:t,stop_condition:uC(r),target:lC(r,f),target_key:`goal-${t}`,timezone:`Asia/Shanghai`},summary:e===`heartbeat`?f(`proposal.summary.heartbeat`):f(`proposal.summary.monitor`,{target:lC(r,f)})})}async function dt(e){if(!Ie.current.has(e.todoId)){Ie.current.add(e.todoId),me(new Set(Ie.current)),ue(f(`feedback.preparingPreview`,{title:e.text}));try{await ot({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-complete-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:`complete`,todo_id:e.todoId},summary:f(`tasks.markComplete`,{name:e.text})}),ue(null)}catch(e){ue(f(`feedback.previewFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{Ie.current.delete(e.todoId),me(new Set(Ie.current))}}}function ft(e){let t=n.onReconcileStatus,r=t?t({invalidateGoalIds:e}):n.onRefresh?.();return Promise.resolve(r).catch(()=>{ue(f(`feedback.goalRefreshFailed`))})}async function pt(e,t={}){let r=e.actionKind===`team.plan`&&e.status===`error`&&[`apply_failed`,`readback_unverified`].includes(e.reviewPlan?.reason??``);if(e.reviewPlan&&!e.reviewPlan.canApply&&!r)return;let i=t.presentation!==`feedback`,a=e.actionKind===`goal.lifecycle`&&e.goalId&&(e.lifecycleOperation===`stop`||e.lifecycleOperation===`resume`)?{goalId:e.goalId,next:e.lifecycleOperation===`stop`?`stopped`:`active`,optimisticApplied:!1,previous:o.goals.find(t=>t.goalId===e.goalId)?.activationState??(e.lifecycleOperation===`stop`?`active`:`stopped`)}:null,s=t.lifecycleProjection??a;ue(f(`feedback.applying`,{title:e.title}));let c={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:`pending`,reason:`apply_pending`,canApply:!1}:void 0,status:`applying`};w(t=>({...t,[e.previewId]:c})),i&&v({item:c,kind:`proposal`}),s&&!s.optimisticApplied&&n.onGoalActivationStateChange?.(s.goalId,s.next);try{if(n.onApplyProposal){await n.onApplyProposal(e);let t={...e,status:`applied`};w(n=>({...n,[e.previewId]:t})),i&&v({item:t,kind:`proposal`}),ue(f(`feedback.completed`,{title:e.title})),e.actionKind===`goal.lifecycle`&&((e.lifecycleOperation===`stop`||e.lifecycleOperation===`delete`)&&_t(null),e.lifecycleOperation===`delete`&&e.goalId&&n.onGoalDeleted?.(e.goalId),ft(e.goalId?[e.goalId]:void 0));return}let t=await tg(e.previewId);if(t.proposal.proposal_id!==e.previewId||t.proposal.action_kind!==e.actionKind||e.actionKind===`goal.lifecycle`&&(t.proposal.normalized_parameters.goal_id!==e.goalId||tC(t.proposal)!==e.lifecycleOperation))throw new qh(f(`actionReview.targetChanged`),{error_code:`action_response_mismatch`});let r=nC(t.proposal,f);if(w(t=>({...t,[e.previewId]:r})),i&&v({item:r,kind:`proposal`}),r.reviewPlan?.interaction!==`completed`){s&&n.onGoalActivationStateChange?.(s.goalId,s.previous),v({item:r,kind:`proposal`}),ue(t.proposal.status===`stale`?f(`feedback.stale`):f(`actionReview.${r.reviewPlan.reason}`));return}ue(f(`feedback.completed`,{title:r.title})),r.actionKind===`todo.create`&&await n.onRefresh?.(),r.actionKind===`goal.lifecycle`&&(r.lifecycleOperation===`stop`||r.lifecycleOperation===`delete`)&&_t(null),r.actionKind===`goal.lifecycle`&&r.lifecycleOperation===`delete`&&r.goalId&&n.onGoalDeleted?.(r.goalId),r.actionKind===`goal.lifecycle`&&ft(r.goalId?[r.goalId]:void 0)}catch(t){if(s&&n.onGoalActivationStateChange?.(s.goalId,s.previous),t instanceof qh&&t.payload.error_code===`protected_action`){let r=t.payload.gate,i=r&&typeof r==`object`?r:{},a={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:`gated`,reason:`authority_gate`,canApply:!1}:void 0,gate:{kind:String(i.kind??`protected_action`),nextAction:typeof i.next_action==`string`?i.next_action:void 0,summary:String(i.summary??t.message)},status:`gated`};w(t=>({...t,[e.previewId]:a})),v({item:a,kind:`proposal`}),ue(f(`feedback.gateRequired`,{summary:a.gate.summary})),e.actionKind===`goal.create`&&e.goalId&&(n.onRefresh?.(),_t(e.goalId));return}let r=t instanceof qh&&tb(t.payload),i=t instanceof qh&&t.payload.error_code===`action_response_mismatch`,a={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:r?`refresh`:`repair`,reason:i?`readback_unverified`:r?`stale_proposal`:`apply_failed`,canApply:!1}:void 0,errorMessage:t instanceof Error?t.message:String(t),status:r?`stale`:`error`};w(t=>({...t,[e.previewId]:a})),v({item:a,kind:`proposal`}),ue(f(`feedback.executionFailed`,{error:a.errorMessage}))}}function mt(){E(`chat`),S(null),j(!1),window.requestAnimationFrame(()=>{let e=Me.current?.querySelectorAll(`.personal-message.is-assistant`);e?.item(e.length-1)?.scrollIntoView({block:`start`})})}let ht={...n,onOpenRunSession:async e=>{e.goalId!==B&&_t(e.goalId),E(`chat`),await n.onOpenRunSession?.(e),S(e),v(null)},onOpenGoal:e=>{_t(e),ft([e])},onOpenGoalView:e=>{e===`chat`?mt():E(e),v(null)},onOpenOutput:e=>{e.goalId!==B&&_t(e.goalId),E(`files`),n.onOpenOutput?.(e)},onApplyProposal:pt,onCancelProposal:async e=>{v(null),w(t=>{let n={...t};return delete n[e.previewId],n});try{n.onCancelProposal?.(e),n.onCancelProposal||await ng(e.previewId)}catch(t){w(t=>({...t,[e.previewId]:e})),ue(f(`feedback.cancelFailed`,{error:t instanceof Error?t.message:String(t)}))}},onTransitionProposal:async(e,t)=>{let n=nC(await rg(e.previewId,t),f);ve(e=>e.includes(n.previewId)?e:[...e,n.previewId]),w(r=>{let i={...r};return t===`regenerate`&&delete i[e.previewId],i[n.previewId]=n,i}),v({item:n,kind:`proposal`})},onSelectWorkspaceCandidate:async(e,t)=>{e.sourceRequest&&(w(t=>{let n={...t};return delete n[e.previewId],n}),await ot({...e.sourceRequest,idempotencyKey:`${e.sourceRequest.idempotencyKey}-${t}`,normalizedParameters:{...e.sourceRequest.normalizedParameters,workspace_ref:t}}))},onPreviewAction:ot,onRequestScheduleConfig:(e,t)=>lt(e,t),onOpenNotificationSettings:e=>Je({goalId:e,kind:`settings`,tab:`lark`}),onFetchNotificationTargets:()=>Ng(),onSetupGoalChannel:e=>Fg(e),onToggleGoalAutoNotify:e=>Ig(e),onUpdateSchedule:async(e,t)=>{let n=Date.now().toString(36),r=e.scheduleKind===`heartbeat`;await ot({actionKind:r?`heartbeat.bind`:`monitor.update`,context:{kind:`schedule`,goal_id:e.goalId},idempotencyKey:`workspace-monitor-${e.scheduleId}-${t}-${n}`,normalizedParameters:{agent_id:e.agentId??ze,...!r&&t===`run_now`?{endpoint_id:ze}:{},...t===`edit`?{cadence:`2h`,...r?{timezone:e.timezone??`Asia/Shanghai`}:{}}:{},goal_id:e.goalId,operation:t,...!r&&t===`run_now`&&e.sessionId?{session_id:e.sessionId}:{},...r?{}:{todo_id:e.scheduleId}},summary:t===`pause`?`暂停自动运行:${e.label}`:t===`resume`?`恢复自动运行:${e.label}`:t===`run_now`?`立即运行:${e.label}`:t===`stop`?`停止自动运行:${e.label}`:`编辑自动运行生命周期:${e.label}`})}},gt=s?{onOpenGoal:ht.onOpenGoal,onOpenGoalView:ht.onOpenGoalView,onOpenOutput:ht.onOpenOutput}:ht;function _t(e){m(e),O(!1),A(!1),j(!1),S(null),v(null),E(`tasks`),Se(!1),n.onSelectGoal?.(e)}function vt(e){g(e),n.onSelectAgent?.(e)}function yt(e){we(e),HS(e)}async function bt(r){let i=r?[]:I,a=(r??Ve).trim()||(i.length?f(`composer.imageAnalysisPrompt`):``);if(!(!a||ne)){if(P?.session_id===e&&P?.enabled&&P.active_turn_id&&e){if(i.length){ce(d===`zh-CN`?`运行中的消息投递暂不支持图片,请暂停后发送。`:`Pause execution before sending images.`);return}N(!0);try{let t=await Sg(e,a,ie);r||Ue(``),oe(d===`zh-CN`?`${ie===`queue`?`已排队,等待后续回合`:ie===`inbox`?`已进入收件箱`:`已提交纠偏`} · ${t.status}`:`${ie}: ${t.status}`)}catch(e){ce(e instanceof Error?e.message:String(e))}finally{N(!1)}return}r||(Ue(``),se([])),ce(null),N(!0);try{if(i.length){B?T!==`chat`&&j(!0):A(!0);let e=await n.onSendMessage?.(a,ze,B,i);e&&await ot(e);return}let e=Zb(a,{agents:t.map(e=>({agentId:e.agentId,label:e.label})),goalId:B,todos:(V?.agentTodos??[]).map(e=>({text:e.text,todoId:e.todoId}))});if(e.route===`clarify`){Ue(a);let t=f(`composer.clarifySingleAction`);e.missingFields.includes(`resume_when`)&&(t=f(`composer.clarifyDefer`)),ue(t);return}if(e.actionKind===`goal.create`){let t=oC(a,f),n=rC(t.title);await ot({actionKind:`goal.create`,context:{kind:`manager`,goal_id:null,natural_language:a},idempotencyKey:`workspace-goal-intent-${n}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:ze,completion_criteria:t.completionCriteria,execution_boundary:t.executionBoundary,goal_id:n,heartbeat:{cadence:sC(a),enabled:e.normalizedParameters.heartbeat_enabled===!0,timezone:`Asia/Shanghai`},initial_todos:t.initialTodos,objective:t.objective,permission:t.permission,stop_condition:uC(a),title:t.title,workspace_ref:`current`},summary:f(`proposal.summary.goalCreate`,{title:t.title})});return}if(B&&e.actionKind===`heartbeat.bind`){await ut(`heartbeat`,B,a);return}if(B&&e.actionKind===`monitor.create`){let e=cC(a,f);if(e){Ue(a),ue(e);return}await ut(`monitor`,B,a);return}let r=dC(a,t);if(B&&r&&e.actionKind===`agent.bind`){await ot({actionKind:`agent.bind`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-agent-bind-${B}-${r.agentId}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:r.agentId,goal_id:B},summary:`将 ${r.label} 绑定到 ${V?.title??B}`});return}if(B&&e.actionKind===`todo.create`){if(e.normalizedParameters.start_execution===!0){await ot({actionKind:`todo.create`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-task-start-${B}-${Date.now().toString(36)}`,normalizedParameters:{endpoint_id:r?.agentId??ze,goal_id:B,start_execution:!0,text:a},summary:`交给 Agent 执行:${a.slice(0,120)}`});return}let t=r?.agentId??(/(交给|分配给|让).{0,24}(agent|codex|claude|kiro|kimi)/iu.test(a)?ze:null);await ot({actionKind:`todo.create`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-todo-create-${B}-${Date.now().toString(36)}`,normalizedParameters:{...t?{endpoint_id:t}:{},goal_id:B,text:fC(a)},summary:`创建 Todo:${fC(a)}`});return}let o=V?.agentTodos.find(e=>a.includes(e.todoId)||a.includes(e.text)),s=typeof e.normalizedParameters.operation==`string`?e.normalizedParameters.operation:null;if(B&&o&&e.actionKind===`todo.update`&&s){await ot({actionKind:`todo.update`,context:{kind:`todo`,goal_id:B,todo_id:o.todoId,natural_language:a},idempotencyKey:`workspace-todo-update-${o.todoId}-${s}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:ze,...s===`reassign`&&r?{endpoint_id:r.agentId}:{},...s===`block`?{note:a}:{},...s===`defer`&&typeof e.normalizedParameters.resume_when==`string`?{resume_when:e.normalizedParameters.resume_when}:{},goal_id:B,operation:s,todo_id:o.todoId},summary:`更新 Todo:${o.text}`});return}B?T!==`chat`&&j(!0):A(!0);let c=await n.onSendMessage?.(a,ze,B);c&&await ot(c)}catch(e){r||(Ue(a),se(i));let t=e instanceof Error?e.message:f(`feedback.sendGenericError`);ue(f(`feedback.sendFailed`,{error:t}))}finally{N(!1)}}}let xt=t.find(e=>e.agentId===ze)?.label??ze,St=!V&&Ve.startsWith(f(`composer.createGoalDraftLead`));async function Ct(e){if(!e?.length)return;let t=hC-I.length,n=Array.from(e).slice(0,Math.max(0,t)),r=n.find(e=>!pC.has(e.type)),i=n.find(e=>e.size>mC);if(t<=0){ce(f(`composer.imageCountError`,{count:hC}));return}if(r){ce(f(`composer.imageTypeError`));return}if(i){ce(f(`composer.imageSizeError`,{size:mC/1024/1024}));return}try{let t=await Promise.all(n.map(e=>gC(e,f)));se(e=>[...e,...t].slice(0,hC)),ce(e.length>n.length?f(`composer.imageCountError`,{count:hC}):null)}catch(e){ce(e instanceof Error?e.message:f(`composer.imageReadGenericError`))}finally{Pe.current&&(Pe.current.value=``)}}function wt(e){let t=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&e.type.startsWith(`image/`)).flatMap(e=>{let t=e.getAsFile();return t?[t]:[]});t.length&&(e.preventDefault(),Ct(t))}async function Tt(){let e=await E_();Oe(e)}async function Et(){await Promise.all([Tt(),n.onRefresh?.()])}async function Dt(){if(!(!n.onRefresh||he===`loading`)){ge(`loading`);try{await n.onRefresh(),ge(`done`)}catch{ge(`error`)}window.setTimeout(()=>ge(`idle`),1800)}}let Ot=Xe?(0,z.jsx)(RS,{callbacks:gt,focusGoalConnection:!!(_?.kind===`settings`&&_.goalId),goalNotifications:o.goalNotifications??[],goals:Ge,initialGoalId:_?.kind===`settings`?_.goalId??B:B,initialTab:_?.kind===`settings`?_.tab??`lark`:`lark`,onChanged:()=>void Et(),onClose:Ye,onThemeChange:yt,theme:Ce}):null;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{hidden:Xe,children:(0,z.jsx)(US,{drawer:at?(0,z.jsx)(ox,{agents:t,attentionHistory:o.attentionHistory??o.userTodos,onSelectAttention:e=>v({kind:`attention`,item:e}),callbacks:gt,goalNotifications:o.goalNotifications??[],goals:Ge,inspectorExpanded:y,larkConnections:s?[]:De,onClose:()=>{at.kind===`proposal`&&[`applied`,`rejected`].includes(at.item.status)&&(at.item.actionKind!==`heartbeat.bind`||at.item.status!==`applied`)&&w(e=>{let t={...e};return delete t[at.item.previewId],t}),b(!1),v(null)},onToggleInspectorSize:()=>b(e=>!e),readOnly:s,runs:Qe.flatMap(e=>e.kind===`run`?[e.run]:[]),selection:at}):null,drawerMode:at?.kind===`todo`?y?`inspector-full`:`inspector`:`panel`,drawerOpen:at!==null,mobileSidebarOpen:xe,onCloseMobileSidebar:()=>Se(!1),theme:Ce,main:(0,z.jsxs)(`div`,{className:`personal-channel`,children:[(0,z.jsx)(pb,{agents:t,managerChatOpen:D,managerChannelBinding:i,managerRuntime:a,mobileNavigationOpen:xe,onOpenGoalCapabilities:V&&!s?()=>Je({goalId:V.goalId,kind:`settings`,tab:`capabilities`}):void 0,onRefresh:n.onRefresh?()=>void Dt():void 0,onOpenNavigation:()=>Se(!0),onOpenManagerChat:()=>{A(!1),O(!0)},onSelectGoalTab:e=>{e===`chat`?mt():E(e)},onSelectAgent:vt,onReturnManagerHome:()=>{O(!1),A(!1),window.requestAnimationFrame(()=>Me.current?.scrollTo({behavior:`smooth`,top:0}))},selectedAgentId:ze,refreshState:he,readOnlySourceLabel:s?u?.activeSource.label:void 0,selectedGoal:V,selectedGoalTab:T}),B&&T===`chat`&&!s&&ze===`codex`&&n.onStartLoopX?(0,z.jsx)(Nb,{onPrepare:()=>n.onPrepareLoopX(ze,B),sessionId:e,onChange:re,onExecute:(e,t)=>n.onStartLoopX?.(e,ze,B,t)},`${B}:${ze}`):null,(0,z.jsxs)(`div`,{className:`personal-channel-scroll`,"data-active-goal-view":V?T:void 0,ref:Me,children:[B&&T===`chat`&&!s&&ze===`codex`&&e&&P?.settings.execution_config&&P.settings.agent_id?(0,z.jsx)(Fb,{sessionId:e,zh:d===`zh-CN`,refreshKey:JSON.stringify(P.deliveries)},`${e}:${P.settings.agent_id}:${P.settings.execution_config}`):null,!V&&!D&&Le&&Le.done+Le.failed>0?(0,z.jsxs)(`section`,{className:`personal-digest-card`,"aria-label":f(`digest.away`),children:[(0,z.jsx)(`strong`,{children:f(`digest.away`)}),(0,z.jsxs)(`div`,{className:`personal-digest-stats`,children:[Le.done>0?(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.done}),f(`digest.completed`)]}):null,Le.failed>0?(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.failed}),f(`digest.failed`)]}):null]})]}):null,!V&&!D?(0,z.jsxs)(`section`,{className:`personal-manager-greeting`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(fm,{size:20})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:f(`home.greeting`)}),(0,z.jsx)(`p`,{children:o.goals.some(e=>e.activationState===`active`&&e.loadState)?f(`startup.partial`):(0,z.jsxs)(z.Fragment,{children:[f(`home.waitingCount`,{count:Ke}),` `,qe>0?f(`home.blockingSummary`,{count:qe}):null]})})]})]}):null,V?.loadState?(0,z.jsx)(`section`,{className:`personal-manager-greeting`,role:`status`,"data-testid":`goal-status-loading`,children:(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:f(V.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}),(0,z.jsx)(`p`,{children:f(V.loadError?`startup.error.${V.loadError}`:`startup.independent`)}),V.loadState===`error`?(0,z.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,type:`button`,onClick:()=>void n.onRefresh?.(),children:f(`startup.retry`)}):null]})}):V?(0,z.jsx)(Xx,{activeTab:T,scrollRef:Me,panels:{overview:(0,z.jsx)(Yx,{active:!Xe&&T===`overview`,goal:V,items:Qe,userTodos:o.userTodos,readOnly:s,onOpenDetails:()=>v({kind:`goal`,item:V}),onSelect:v,onView:E}),tasks:(0,z.jsx)(Mx,{historyEnabled:!s,goal:V,items:Qe,onDraftTaskFromMessage:s?void 0:e=>{Ue(`创建一个 Task:${WS(e)}`),ue(f(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>je.current?.focus())},onOpenChat:mt,onQuickComplete:s?void 0:dt,onSelect:v,quickCompletingTodoIds:pe,selectedTodoId:at?.kind===`todo`?at.item.todoId:null,userTodos:o.userTodos}),files:(0,z.jsx)(JS,{items:Qe.filter(e=>e.kind===`output`),onSelect:v,reportState:o.periodicReports}),chat:(0,z.jsxs)(z.Fragment,{children:[V&&x?.goalId===V.goalId?(0,z.jsx)(XS,{onClose:()=>S(null),onOpenDetails:()=>v({item:x,kind:`run`}),run:x}):null,(0,z.jsx)(Hb,{items:$e,onSelect:v,selectedGoal:V})]})}},`${u?.activeSource.statusUrl??`/status.json`}:${V.goalId}`):D?(0,z.jsx)(Hb,{items:nt,onSelect:v,selectedGoal:null}):(0,z.jsx)(qS,{goals:Ge,onRetry:()=>void n.onRefresh?.(),onSelectGoal:_t,systemHealth:o.systemHealth})]}),(0,z.jsxs)(`div`,{className:`personal-composer-wrap`,children:[P?.session_id===e&&P?.enabled&&P.active_turn_id?(0,z.jsxs)(`label`,{className:`goal-loopx-message-mode`,children:[d===`zh-CN`?`消息处理`:`Message delivery`,(0,z.jsxs)(`select`,{"aria-label":d===`zh-CN`?`消息处理方式`:`Message delivery mode`,value:ie,onChange:e=>ae(e.target.value),children:[(0,z.jsx)(`option`,{value:`queue`,children:d===`zh-CN`?`下一轮处理`:`Next turn`}),(0,z.jsx)(`option`,{value:`inbox`,children:d===`zh-CN`?`放入收件箱`:`Inbox`}),(0,z.jsx)(`option`,{value:`steer`,children:d===`zh-CN`?`立即纠偏`:`Steer now`})]}),(0,z.jsx)(`span`,{role:`status`,children:F})]}):null,s?(0,z.jsxs)(`div`,{className:`personal-read-only-notice`,children:[(0,z.jsx)(`strong`,{children:f(`source.readOnlyNoticeTitle`)}),(0,z.jsx)(`span`,{children:f(`source.readOnlyNoticeDescription`)})]}):(0,z.jsxs)(z.Fragment,{children:[!V&&!D&&k&&et.length?(0,z.jsx)(YS,{messages:et,onClose:()=>A(!1),onOpenConversation:()=>{A(!1),O(!0)}}):null,V&&T!==`chat`&&ee&&tt.length?(0,z.jsx)(YS,{agentLabel:xt,messages:tt,onClose:()=>j(!1),onDraftTask:T===`tasks`?e=>{Ue(`创建一个 Task:${WS(e)}`),ue(f(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>je.current?.focus())}:void 0,onOpenConversation:mt,title:`${V.title} · ${xt}`}):null,le?(0,z.jsxs)(`div`,{className:`personal-action-feedback`,role:`status`,children:[(0,z.jsx)(`span`,{children:le}),(0,z.jsx)(`button`,{"aria-label":f(`common.closeActionReceipt`),onClick:()=>ue(null),type:`button`,children:(0,z.jsx)(gh,{size:14})})]}):null,(0,z.jsxs)(`details`,{className:`personal-composer-tools`,children:[(0,z.jsx)(`summary`,{children:d===`zh-CN`?`快捷提问`:`Suggestions`}),V?(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":f(`composer.nextAction`),disabled:ne,onClick:()=>void bt(f(`composer.nextActionPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(Hm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.nextAction`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.agentProgress`),disabled:ne,onClick:()=>void bt(f(`composer.agentProgressPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(nh,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.agentProgress`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.monitor`),disabled:ne,onClick:()=>void bt(f(`composer.monitorShortcutTemplate`,{target:f(`schedule.defaultTarget`)})),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(mm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.monitor`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.blockers`),disabled:ne||!We(`gate`),onClick:()=>void bt(We(`gate`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(ym,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.blockers`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.evidence`),disabled:ne||!We(`evidence`),onClick:()=>void bt(We(`evidence`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(jm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.evidence`)})]})]}):(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":f(`composer.globalTasks`),disabled:ne,onClick:()=>void bt(f(`composer.globalTasksPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(Hm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.globalTasks`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.globalProgress`),disabled:ne,onClick:()=>void bt(f(`composer.globalProgressPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(nh,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.globalProgress`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.createGoal`),onClick:st,title:f(`composer.createGoalHint`),type:`button`,children:[(0,z.jsx)(Xm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.createGoal`)})]})]})]},B??`manager`),St?(0,z.jsxs)(`div`,{className:`personal-goal-draft-status`,role:`status`,children:[(0,z.jsx)(`strong`,{children:f(`composer.createGoalDraft`)}),(0,z.jsx)(`span`,{children:f(`composer.createGoalDraftDescription`)})]}):null,I.length?(0,z.jsx)(`div`,{className:`personal-composer-images`,"aria-label":f(`composer.imagesPending`),children:I.map(e=>(0,z.jsxs)(`figure`,{children:[(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl}),(0,z.jsx)(`button`,{"aria-label":f(`composer.sentImageAlt`,{name:e.name}),onClick:()=>se(t=>t.filter(t=>t.id!==e.id)),type:`button`,children:(0,z.jsx)(gh,{size:13})})]},e.id))}):null,L?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:L}):null,(0,z.jsxs)(`div`,{className:`personal-channel-composer`,onDragOver:e=>{[...e.dataTransfer.items].some(e=>e.kind===`file`&&e.type.startsWith(`image/`))&&e.preventDefault()},onDrop:e=>{let t=[...e.dataTransfer.files].filter(e=>e.type.startsWith(`image/`));t.length&&(e.preventDefault(),Ct(t))},children:[(0,z.jsx)(`button`,{"aria-label":f(`composer.addImage`),className:`personal-composer-attach`,disabled:ne||I.length>=hC,onClick:()=>Pe.current?.click(),title:f(`composer.attachImageHint`),type:`button`,children:(0,z.jsx)(qm,{size:17})}),(0,z.jsx)(`input`,{accept:`image/png,image/jpeg,image/webp,image/gif`,"aria-label":f(`composer.imagePicker`),className:`personal-composer-file-input`,disabled:ne||I.length>=hC,multiple:!0,onChange:e=>void Ct(e.target.files),ref:Pe,type:`file`}),(0,z.jsx)(`textarea`,{"aria-label":f(`composer.sendMessage`),onChange:e=>Ue(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),bt())},onPaste:wt,placeholder:V?f(`composer.goalPlaceholder`,{goal:V.title}):f(`composer.managerPlaceholder`),ref:je,rows:1,value:Ve}),(0,z.jsx)(`button`,{"aria-label":f(St?`composer.createGoal`:`composer.send`),disabled:!Ve.trim()&&I.length===0||ne,onClick:()=>void bt(),title:f(St?`composer.createGoalHint`:`composer.sendMessageHint`),type:`button`,children:(0,z.jsx)(nh,{size:18})})]})]})]})]}),sidebar:(0,z.jsx)(Ox,{attentionCount:Ke,goals:Ge,goalArchiveLoadState:r,goalLifecycleOperations:n.onExecuteGoalLifecycle?[`stop`,`resume`]:void 0,lifecycleBusyGoalIds:de,onRequestGoalCreate:s?void 0:st,onRequestGoalLifecycle:s&&!n.onExecuteGoalLifecycle?void 0:(e,t)=>void ct(e,t),onRetryGoalArchive:n.onRetryGoalArchive||n.onRefresh?()=>void(n.onRetryGoalArchive??n.onRefresh)?.():void 0,onOpenSettings:s?void 0:()=>Je({kind:`settings`}),onSelectGoal:_t,selectedGoalId:B,statusSourceControl:u},u?.activeSource.statusUrl??`/status.json`)})}),Ot]})}function vC(e){return(e??``).replace(/\s+/gu,` `).trim()}function yC(e,t=120){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t-1).join(``)}…`}function bC(e,t,n){let r=vC(e);return!r||r===`暂无`?n?t(n):``:/refresh-state|latest_run|latest run-derived/iu.test(r)?t(`projection.refreshState`):/first read-only adapter tick|read-only adapter/iu.test(r)?t(`projection.firstReadOnlyAdapterCheck`):/todo update recorded for/iu.test(r)?t(`projection.todoStatusUpdated`):/^(loopx|python3|npm|git|run)\s|\s--[a-z0-9-]+|\b[a-z]+_[a-z_]+\b/iu.test(r)?t(n??`projection.agentPreparingNextStep`):yC(r)}function xC(e,t){return t({advancing:`projection.agentAdvancingGoal`,idle:`projection.agentIdle`,needs_you:`projection.agentNeedsDecision`,stopped:`projection.agentStopped`,waiting_external:`projection.agentWaitingExternal`}[e])}function SC({eventCount:e,hasArtifact:t,hasLatestValidation:n},r){return{label:r(n?`projection.latestValidation`:`projection.latestRun`),metadata:e>0?r(`projection.events24h`,{count:e}):r(t?`projection.runEvidenceAvailable`:`projection.publicSafeProjection`)}}var CC=`/status.json`,wC=`loopx-status-source-catalog-v1`,TC={id:`local`,kind:`local`,label:`本机`,readOnly:!1,statusUrl:CC};function EC(e,t){let n=xh(e,t).source;if(!n||!n.isLoopback||n.isRelative)return{error:`SSH 隧道来源必须使用显式的 localhost、127.0.0.1 或 ::1 URL。`};let r=new URL(n.url,t);return[`http:`,`https:`].includes(r.protocol)?{url:r.toString()}:{error:`状态来源只支持 HTTP 或 HTTPS。`}}function DC(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return`ssh-${(t>>>0).toString(36)}`}function OC(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return null;let n=e;if(n.kind!==`ssh_tunnel`||typeof n.label!=`string`||typeof n.statusUrl!=`string`)return null;let r=n.label.trim(),i=EC(n.statusUrl,t);if(!r||r.length>48||!(`url`in i))return null;let a=vx(n.hostAlias)?n.hostAlias.trim():void 0;return{...a?{hostAlias:a}:{},id:DC(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url}}function kC(){return{schemaVersion:1,sources:[TC]}}function AC(e,t){try{let n=e.getItem(wC);if(!n)return kC();let r=JSON.parse(n);if(r.schemaVersion!==1||!Array.isArray(r.sources))return kC();let i=new Set([TC.statusUrl]);return{schemaVersion:1,sources:[TC,...r.sources.flatMap(e=>{let n=OC(e,t);return!n||i.has(n.statusUrl)?[]:(i.add(n.statusUrl),[n])})]}}catch{return kC()}}function jC(e,t){e.setItem(wC,JSON.stringify({schemaVersion:1,sources:t.sources.filter(e=>e.kind===`ssh_tunnel`)}))}function MC(e,t){let n=new Set(t.filter(vx).map(e=>e.trim())),r=!1,i=e.sources.map(e=>e.kind!==`ssh_tunnel`||e.hostAlias||!n.has(e.label)?e:(r=!0,{...e,hostAlias:e.label}));return r?{...e,sources:i}:e}function NC(e,t,n){let r=t.label.trim();if(!r)return{error:`请填写来源名称。`};if(r.length>48)return{error:`来源名称不能超过 48 个字符。`};let i=EC(t.statusUrl,n);if(!(`url`in i))return i;if(e.sources.some(e=>e.statusUrl===i.url))return{error:`这个状态 URL 已经在来源目录中。`};if(t.hostAlias!==void 0&&!vx(t.hostAlias))return{error:`请选择有效的 SSH Host。`};let a=t.hostAlias?.trim(),o={...a?{hostAlias:a}:{},id:DC(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url};return{catalog:{...e,sources:[...e.sources,o]},source:o}}function PC(e,t){return{...e,sources:e.sources.filter(e=>e.kind===`local`||e.id!==t)}}function FC(e,t,n){if(!t.trim()||xh(t,n).source?.isRelative)return TC;let r=t.trim();try{r=new URL(r,n).toString()}catch{return null}return e.sources.find(e=>e.statusUrl===r)??null}function IC(e,t,n){return FC(e,t,n)||(xh(t,n).source?.isRelative?TC:{id:`temporary`,kind:`ssh_tunnel`,label:`临时来源`,readOnly:!0,statusUrl:t.trim()})}function LC(e,t,n,r){return IC(e,t??n,r)}var RC={delete:`删除`,deploy:`部署`,merge:`合并`,payment:`付款`,release:`发布`};function zC(e,t,n){let r=t.replace(/\s+/gu,` `).trim().toLowerCase(),i=n.target.replace(/\s+/gu,` `).trim().toLowerCase();return!i||!r.includes(i)?null:{actionKind:`goal.update`,context:{goal_id:e,kind:`goal`,natural_language:t,semantic_proposal:{operation:n.operation,target:n.target}},idempotencyKey:`workspace-semantic-protected-${e}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e,status:`operator_gate_requested`},summary:`请求受保护操作:${RC[n.operation]} · ${n.target}`}}var BC=CC;async function VC(e){let t=await fetch(e,{cache:`no-store`,signal:AbortSignal.timeout(3e4)});if(!t.ok)throw Error(`HTTP ${t.status} while loading ${e}`);return zp(await t.json())}function HC(e,t){if(t?.controller_readiness?.decision_advisor_ready||t?.controller_readiness?.write_controller_ready)return`controller_ready`;if(t?.controller_readiness)return`controller_gated`;if(t?.human_reward)return`reward_judged`;if(t?.operator_gate?.decision===`approve`)return`operator_approved`;if(t?.operator_gate)return`operator_gated`;let n=e||t?.classification||``;return n===`connected_without_run`?`connected`:n===`read_only_project_map`||t?.project_map?`mapped`:n===`state_refreshed`?`refreshed`:n&&n!==`no_status`?`adapter_inspected`:`registered`}function UC(e,t){let n=new Map(t.map(e=>[e.goal_id,e])),r=new Set,i=e.map(e=>{r.add(e.id);let t=n.get(e.id),i=e.latest_runs[0],a=t?.lifecycle_phase??e.lifecycle_phase??i?.lifecycle_phase??HC(t?.status??i?.classification??e.status,i),o=t?.lifecycle_flags?.length?t.lifecycle_flags:e.lifecycle_flags?.length?e.lifecycle_flags:i?.lifecycle_flags?.length?i.lifecycle_flags:[a];return{goal:e,queueItem:t,latestRun:i,status:t?.status??i?.classification??e.status??`no_status`,waitingOn:t?.waiting_on??`clear`,severity:t?.severity??`clear`,lifecyclePhase:a,lifecycleFlags:o}});for(let e of t)r.has(e.goal_id)||i.push({goal:{activation_state:e.activation_state,id:e.goal_id,status:e.status,display_name:e.goal_id,latest_runs:[],lifecycle_flags:[e.lifecycle_phase??`registered`],registry_member:!0,legacy_runtime_goal:!1,index_exists:!1,raw_index_records:0,unique_runs:0},queueItem:e,status:e.status,waitingOn:e.waiting_on,severity:e.severity,lifecyclePhase:e.lifecycle_phase??`registered`,lifecycleFlags:e.lifecycle_flags??[`registered`]});return i}function WC(e){return(e??``).replace(/\s+/g,` `).trim()}function GC(e){let t=new Map;for(let n of e?.goals??[])t.set(n.goal_id,n);return t}function KC(e,t){return e===void 0||t===void 0?void 0:e+t}function qC(e,t){if(!e)return null;let n=t===`user`?e.queueItem?.project_asset?.user_todos:e.queueItem?.project_asset?.agent_todos;if(n?.items?.length)return{done_count:n.done??n.items.filter(e=>e.done).length,items:n.items,open_count:n.open??n.items.filter(e=>!e.done).length,total_count:n.total??n.items.length};let r=t===`user`?e.queueItem?.user_todos:e.queueItem?.agent_todos;return r?.items?.length?r:null}function JC(e){return e?.items.find(e=>!e.done)}function YC(e,t,n=`todos`){return e?.items?.length?{advancement_done_count:e.advancement_done_count??t?.advancement_done_count,done_count:e.done??e.items.filter(e=>e.done).length,items:e.items,open_count:e.open??e.items.filter(e=>!e.done).length,total_count:e.total??e.items.length}:t??null}function XC(e){return e?.queueItem?.project_asset?.quota?.state??e?.queueItem?.quota?.state??e?.goal.quota?.state??`waiting`}function ZC(e,t,n){let r=[];for(let t of e){let e=qC(t,`agent`);for(let n of e?.items??[])r.push({goalId:t.goal.id,role:`agent`,todo:n})}let i=new Map;for(let e of r){let t=e.todo.claimed_by||`codex`,n=i.get(t)??[];n.push(e),i.set(t,n)}let a=new Map((n?.agents??[]).map(e=>[e.agent_id,e]));return Array.from(new Set([...i.keys(),...a.keys()])).map(e=>{let t=i.get(e)??[],n=a.get(e),r=Array.from(new Set([...t.map(e=>e.goalId),n?.current_todo?.goal_id,...n?.goal_ids??[]].filter(Boolean))),o=(t.filter(e=>!e.todo.done)[0]??t[0])?.goalId??n?.current_todo?.goal_id??r[0]??``,s=n?.last_activity_at??null;return{agentId:e,claimedTodos:t,currentTodo:n?.current_todo??null,evidenceRefs:[],goalIds:r,handoffNote:null,lastActivity:s,nextSafeAction:n?.next_action?.trim()||`Inspect status projection before taking work`,primaryGoalId:o,quotaHints:[],staleClaimHint:null,status:{label:`可用`,summary:`正常运行`,variant:`success`},workspaceRef:null}})}function QC(e){return e?.map(e=>({dataUrl:e.data_url,id:e.id,mimeType:e.mime_type,name:e.name,size:e.size}))}var $C=`loopx.personal-agent-selection.v1`;function ew(){if(typeof window>`u`)return{};try{let e=JSON.parse(window.localStorage.getItem($C)??`{}`);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[0]==`string`&&typeof e[1]==`string`))}catch{return{}}}var tw={需修复:`danger`,等你:`warning`,等待条件:`info`,推进中:`success`,安静运行:`neutral`,已停止:`neutral`,已完成:`neutral`};function nw(e,t){return WC(t)||e.replace(/^loopx[-_]/i,`LoopX `).split(/[-_]+/).filter(Boolean).map((e,t)=>t===0?`${e.slice(0,1).toUpperCase()}${e.slice(1)}`:e).join(` `)}function rw(e){return e.split(/\r?\n/u).filter(e=>!/^\s*GOAL_(STATUS|PROGRESS)\s*:/u.test(e)).map(e=>/^\s*GOAL_EVIDENCE\s*:/u.test(e)?e.replace(/^\s*GOAL_EVIDENCE\s*:/u,`验证依据:`):/^\s*NEXT_ACTION\s*:/u.test(e)?e.replace(/^\s*NEXT_ACTION\s*:/u,`下一步:`):e).join(` -`).trim()}function iw(e,t){return[`agent`,`assistant`].includes(e.trim().toLowerCase())&&t.trim().length>0}var aw=`已发现的项目 Agent`;function ow(e){switch(Vy(e)){case`codex`:return`Codex`;case`claude`:return`Claude Code`;case`kiro`:return`Kiro CLI`;case`trae`:return`Trae CLI Agent`;case`coco`:return`Coco Agent`;default:return nw(e)}}function sw(e,t){switch(Hy(e,t)){case`codex`:return`代码与项目执行`;case`claude`:return`复杂分析与长任务`;case`openai`:case`anthropic`:return`管家问答 · 无工具`;case`kiro`:return`终端编码 · 原生 /goal 循环`;case`trae`:return`前端与交互实现`;case`coco`:return`通用任务`;default:return aw}}function cw(e,t){let n=e.project_asset;return t===`user`?YC(n?.user_todos,e.user_todos,`project_asset.user_todos`):YC(n?.agent_todos,e.agent_todos,`project_asset.agent_todos`)}function lw(e){return $d(e.title??e.text,112)}function uw(e){let t=e.resume_condition?.resume_receipt;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.receipt_id;return typeof n==`string`&&n.trim()?n.trim():null}function dw(e,t){let n=e.completion_validation_revision_history.at(-1);return{resumeWhen:e.resume_when??null,resumeReady:e.resume_ready??null,resumeReceiptId:uw(e),claimedBy:e.claimed_by??null,done:e.status!==`deferred`&&e.done,evidence:e.evidence?$d(e.evidence,96):null,index:e.index,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,taskDomain:e.task_domain??null,text:lw(e),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.index}`,validationDigest:e.completion_validation_sha256??null,validationRevision:e.completion_validation_revision??null,validationRevisionActor:n?.actor_agent_id??null}}function fw(e){let t=e.queueItem?.agent_todos,n=t?.items??e.queueItem?.project_asset?.agent_todos?.items??[],r=new Map(n.map(t=>[t.todo_id?.trim()||`${e.goal.id}:agent:${t.index}`,t]));for(let n of t?.deferred_items??[]){let t=n.todo_id?.trim()||`${e.goal.id}:agent:${n.index}`;r.has(t)||r.set(t,n)}return[...r.values()]}function pw(e){return fw(e).map(t=>dw(t,e))}function mw(e,t,n){let r=new Map;for(let n of e.todo_index?.items??[]){if(n.goal_id!==t.goal.id||n.role!==`agent`)continue;let e=dw(n,t);r.set(e.todoId,e)}for(let e of n)r.has(e.todoId)||r.set(e.todoId,e);let i=new Map;for(let e of r.values()){if(e.done||e.taskClass!==`advancement_task`)continue;let t=e.taskDomain?.trim();t&&i.set(t,(i.get(t)??0)+1)}return[...i].map(([e,t])=>({domain:e,matchingTodoCount:t}))}function hw(e,t){return{claimedBy:e.claimed_by??null,done:e.status===`done`||e.status===`completed`,index:-1,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,text:$d(e.title,112),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.claimed_by??`unknown`}:current`}}function gw(e,t,n){let r=new Map(e.map(e=>[e.todoId,e]));for(let e of t){let t=e.currentTodo;if(!t||t.goal_id!==n.goal.id)continue;let i=hw(t,n);r.has(i.todoId)||r.set(i.todoId,i)}return[...r.values()]}function _w(e){let t=e.queueItem?.project_asset?.agent_todos,n=e.queueItem?.agent_todos,r=fw(e),i=t?.advancement_done_count??n?.advancement_done_count??t?.done??n?.done_count??null,a=r.filter(e=>e.done&&e.status!==`deferred`).length,o=Math.max(i??0,a),s=new Set(r.map(e=>e.todo_id?.trim()).filter(e=>!!e)),c=(t?.recent_completed_advancement_items??[]).filter(e=>!e.todo_id?.trim()||!s.has(e.todo_id.trim())).map(t=>dw(t,e)),l=r.find(e=>!e.done);return{doneTodoCount:o,nextTodoText:WC(t?.next??``)||(l?WC(l.title??``)||WC(l.text??``):``)||null,recentCompleted:c}}function vw(e,t){let n=WC(e);return n?/\b(state_file|registry_goal|authority_sources|source_registry)\b|\b[a-z_]+\s+\d+\/\d+/i.test(n)?t(`projection.goalVerified`):bC(n,t,`projection.validationRecorded`):``}function yw(e,t=4){if(e.length<=t)return e;let n=e.findIndex(e=>!e.done);if(n<0)return e.slice(-t);let r=Math.max(0,Math.min(n-2,e.length-t));return e.slice(r,r+t)}function bw(e,t,n){let r=t.queueItem?.project_asset?.latest_validation,i=t.latestRun,a=e.event_ledger_summary?.goals.find(e=>e.goal_id===t.goal.id);if(!r&&!i&&!a)return null;let o=[vw(r?.summary,n),bC(i?.health_check,n),bC(i?.recommended_action,n)].find(e=>e!==``&&e!==`暂无`)??n(`projection.runRecorded`),s=SC({eventCount:a?.events_24h??0,hasArtifact:!!(i?.json_exists||i?.markdown_exists),hasLatestValidation:!!r},n);return{generatedAt:r?.generated_at??i?.generated_at??a?.latest_event_at??``,label:s.label,metadata:s.metadata,runId:i?`${t.goal.id}:${i.generated_at}`:null,safePreview:[o,s.metadata].filter(Boolean).join(` -`),summary:o,todoId:t.queueItem?.project_asset?.agent_todos?.items.find(e=>!e.done)?.todo_id??null}}function xw(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(done|complete|completed|finished|terminal|closed|success)([_\s-]|$)/i.test(e??``))}function Sw(e,t){return e.global_registry?.findings?.find(e=>e.severity===`high`&&(e.goal_id===t.goal.id||e.goal_ids.includes(t.goal.id)))}function Cw(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(failure|failed|error|broken|unhealthy|blocked[_\s-]?health|health[_\s-]?blocked)([_\s-]|$)/i.test(e??``))}function ww(e,t){let n=t.queueItem?.stale_latest_run_warning;return t.severity===`high`||!!Sw(e,t)||!!(n?.requires_refresh_state||n?.severity===`high`)||Cw(t)}function Tw(e,t){let n=Sw(e,t);return t.queueItem?.stale_latest_run_warning?.recommended_action??t.queueItem?.stale_latest_run_warning?.reason??n?.recommended_action??n?.message??t.queueItem?.recommended_action??t.latestRun?.recommended_action??null}function Ew(e){let t=e.latestRun?.operator_gate,n=t?.decision?.trim().toLowerCase()??``,r=new Set([`approve`,`approved`,`reject`,`rejected`,`defer`,`deferred`,`cancel`,`cancelled`]),i=[e.queueItem?.recommended_action,e.latestRun?.recommended_action].filter(Boolean).join(` `),a=/(?:等待|需要)(?:用户|你|owner).{0,24}(?:批准|确认|授权|补充|选择|决定)|(?:批准|确认|授权).{0,16}(?:后|才能|方可)/i.test(i);return!!(t&&!r.has(n))||e.lifecyclePhase===`operator_gated`&&!r.has(n)||a}function Dw(e,t){let n=e.latestRun?.operator_gate;return bC(n?.operator_question??n?.reason_summary??n?.follow_up??e.queueItem?.recommended_action??e.latestRun?.recommended_action,t,`projection.confirmAgentDecision`)}function Ow(e,t){if(t.goal.activation_state===`stopped`)return`已停止`;let n=qC(t,`user`),r=qC(t,`agent`),i=!!JC(n),a=!!JC(r);return[`user_or_controller`,`controller`].includes(t.waitingOn)||i||Ew(t)?`等你`:ww(e,t)?`需修复`:t.waitingOn===`external_evidence`?`等待条件`:XC(t)===`eligible`||a?`推进中`:xw(t)?`已完成`:`安静运行`}function kw(e,t,n,r){if(n===`已停止`)return xC(`stopped`,r);if(n===`需修复`)return bC(Tw(e,t),r,`projection.statusRefreshNeeded`);if(n===`等你`)return xC(`needs_you`,r);if(n===`推进中`){let e=[(qC(t,`agent`)?.items??[]).filter(e=>!e.done).flatMap(e=>[e.title,e.text]).map(e=>WC(e)).find(e=>e!==``&&e!==`暂无`),t.queueItem?.recommended_action,t.latestRun?.recommended_action].map(e=>WC(e)).find(e=>e!==``&&e!==`暂无`);return e?bC(e,r,`projection.agentAdvancingGoal`):xC(`advancing`,r)}return xC(n===`等待条件`?`waiting_external`:`idle`,r)}function Aw(e,t){return t.some(t=>e.includes(t))}function jw(e,t,n){if(t.goals.some(e=>e.activationState===`active`&&e.loadState))return{text:`Goal 状态尚未全部加载,暂不能给出完整统计。可先打开已加载的 Goal,失败项可重试。`,lines:[]};if(Aw(n,[`Agent`,`agent`,`推进`,`在做`])){let e=t.goals.filter(e=>![`安静运行`,`已完成`,`已停止`].includes(e.state)),n=(e.length>0?e:t.goals).slice(0,3);return n.length===0?{text:`当前状态里还没有 Goal 可供汇总。`,lines:[]}:{text:e.length>0?`Agent 当前关注这些 Goal:`:`当前 Goal 都比较安静:`,lines:n.map(e=>`${e.title} · ${e.state} · ${e.agentSentence}`)}}if(Aw(n,[`现在`,`下一步`,`我该`,`该做什么`,`优先处理`])){let e=t.userTodos[0];if(e)return{text:e.blocking?`先处理「${nw(e.goalId)}」:${e.text}`:`当前最先处理「${nw(e.goalId)}」:${e.text}`,lines:[]};let n=t.goals.find(e=>e.state===`需修复`);if(n)return{text:`没有待办,但这个 Goal 需要先修复。`,lines:[`${n.title} · ${n.agentSentence}`]};let r=t.goals.find(e=>e.state===`推进中`);return r?{text:`目前不需要你介入,Agent 正在推进。`,lines:[`${r.title} · ${r.agentSentence}`]}:{text:`当前系统很安静,没有需要你立即处理的事项。`,lines:[]}}if(Aw(n,[`等我`,`阻塞`,`需要我`,`全局待办`]))return t.userTodos.length===0?{text:`目前没有 Goal 在等你,开放用户待办为 0。`,lines:[]}:{text:`有 ${t.userTodos.length} 项开放用户待办,阻塞项优先:`,lines:t.userTodos.slice(0,3).map(e=>`${nw(e.goalId)} · ${e.blocking?`阻塞`:`待处理`} · ${e.text}`)};if(Aw(n,[`状态`,`异常`,`修复`,`健康`])){let n=t.systemHealth?!t.systemHealth.ok:!e.ok||!e.contract?.ok||!e.global_registry?.ok||(e.global_registry?.summary?.high??0)>0,r=t.goals.filter(e=>e.state===`需修复`),i=r.slice(0,n?2:3).map(e=>`${e.title} · ${e.agentSentence}`);return n&&i.push(`全局状态、契约或注册表健康检查未通过,请进入管理页检查。`),i.length===0?{text:`当前没有发现 Goal 级或全局健康异常。`,lines:[]}:{text:r.length>0?`当前需要关注这些健康问题:`:`Goal 状态正常,但全局健康需要检查:`,lines:i}}return{text:`当前管家支持三类问题:下一步、等待你的事项、Agent 与健康状态。`,lines:[`问“我现在该做什么?”`,`问“哪些 Goal 在等我?”`,`问“Agent 在做什么?”或当前健康状态`]}}function Mw(e,t,n,r=!1){let i=new Map(t.map(e=>[e.goal.id,e])),a=new Set(e.run_history.goals.filter(e=>e.activation_state===`stopped`).map(e=>e.id)),o=GC(e.usage_summary),s=ZC(t,e.todo_index,e.agent_management_projection),c=e.attention_queue.items.flatMap((e,t)=>{if(a.has(e.goal_id))return[];let n=[`user_or_controller`,`controller`].includes(e.waiting_on);return(cw(e,`user`)?.items??[]).map((r,i)=>({projectedDone:r.done,details:tf(r),actionKind:r.action_kind??null,blocking:n,goalId:e.goal_id,sourceOrder:t,taskClass:r.task_class??null,text:lw(r),todoId:r.todo_id?.trim()||`${e.goal_id}:user:${r.index}`,todoOrder:i,updatedAt:r.updated_at??null}))}),l=c.filter(e=>!e.projectedDone),u=new Set(l.map(e=>e.goalId)),d=t.flatMap((t,r)=>a.has(t.goal.id)||u.has(t.goal.id)||!Ew(t)?[]:[{details:tf({task_class:`user_gate`,status:`open`,note:t.latestRun?.operator_gate?.reason_summary}),actionKind:`gate.resolve`,blocking:!0,goalId:t.goal.id,sourceOrder:e.attention_queue.items.length+r,taskClass:`user_gate`,text:Dw(t,n),todoId:`${t.goal.id}:operator-gate`,todoOrder:0,updatedAt:t.latestRun?.operator_gate?.recorded_at??t.latestRun?.generated_at??null}]),f=[...l,...d].sort((e,t)=>Number(t.blocking)-Number(e.blocking)||e.sourceOrder-t.sourceOrder||e.todoOrder-t.todoOrder),p=e.run_history.goals.flatMap(t=>{if(t.registry_member===!1)return[];let a=i.get(t.id);if(!a)return[];let c=Ow(e,a),l=f.find(e=>e.goalId===t.id),u=l?.text??null,d=_w(a),p=t.coordination?.registered_agents??[],m=new Set(p),h=[...s.filter(e=>e.goalIds.includes(t.id)&&!/unassigned|unknown/i.test(e.agentId)&&(m.size===0||m.has(e.agentId))&&(e.currentTodo?.goal_id===t.id||e.claimedTodos.some(e=>e.goalId===t.id)))].sort((e,t)=>(t.lastActivity??``).localeCompare(e.lastActivity??``)),g=new Set(h.map(e=>e.agentId)),_=[...h.map(e=>({agentId:e.agentId,label:e.agentId,lastActivityAt:e.lastActivity,state:e.status.label})),...p.filter(e=>!g.has(e)).map(e=>({agentId:e,label:e,lastActivityAt:null,state:`registered`}))],v=h[0],y=gw(pw(a),h,a),b=[d.nextTodoText,a.queueItem?.recommended_action,a.latestRun?.recommended_action,kw(e,a,c,n)].map(e=>bC(e,n)).find(e=>e!==``&&e!==`暂无`)??n(`projection.nextUpdatePending`);return[{activationState:t.activation_state,agentId:v?.agentId??p[0]??`codex`,agentLaneCount:_.length,agentLanes:_,agentLabel:v?.agentId,agentSentence:kw(e,a,c,n),agentTodos:[...y,...d.recentCompleted],doneTodoCount:d.doneTodoCount,acceptanceObservation:t.acceptance_observation,goalId:t.id,latestActivity:a.latestRun?.generated_at??``,needsYou:u,needsYouActionKind:l?.actionKind??null,needsYouBlocking:l?.blocking??!1,needsYouTaskClass:l?.taskClass??null,needsYouTodoId:l?.todoId??null,nextSentence:b,runEvidence:bw(e,a,n),state:c,...r?{subagentExecution:{allowedDomains:t.spawn_policy?.allowed_domains??[],domainCandidates:mw(e,a,y),enabled:t.spawn_policy?.mode===`multi_subagent`&&t.spawn_policy.spawn_allowed===!0&&t.spawn_policy.max_children>0,executionConfig:t.spawn_policy?.execution_config,maxChildren:t.spawn_policy?.max_children??0,modelConfig:t.spawn_policy?.model_config}}:{},title:nw(t.id,t.display_name),usage:(()=>{let e=o.get(t.id);return e?{costUsd24h:e.cost_usd_24h,costUsd7d:e.cost_usd_7d,durationMs24h:e.duration_ms_24h,durationMs7d:e.duration_ms_7d,tokens24h:KC(e.input_tokens_24h,e.output_tokens_24h),tokens7d:KC(e.input_tokens_7d,e.output_tokens_7d)}:null})()}]}),m=[];if(e.ok||m.push(`状态载荷未标记为正常 (payload.ok === false)`),e.contract&&!e.contract.ok){let t=e.contract.summary,n=t?`${t.errors} 项错误 / ${t.warnings} 项警告`:e.contract.errors?.[0]||`请检查控制面契约`;m.push(`契约检查未通过: ${n}`)}if(e.global_registry){e.global_registry.ok||m.push(`注册表状态异常: ${e.global_registry.summary.high} 项高危`);for(let t of e.global_registry.findings||[])t.severity===`high`&&m.push(`[${t.kind}] ${t.message}`)}let h=e.decision_freshness_summary?.summary?.stale_count?`${e.decision_freshness_summary.summary.stale_count} 项决策状态已过期`:null,g=m.length===0&&!h,_={ok:g,summary:g?`所有控制面契约与注册表检查均正常`:`发现 ${m.length+ +!!h} 项系统健康关注点`,issues:m,freshnessWarning:h};return{blockingTodoCount:f.filter(e=>e.blocking).length,goalNotifications:(e.goal_channel_notification_projection?.goals??[]).map(e=>({goalId:e.goal_id,configured:e.configured,enabled:e.enabled,humanGateAutoNotifyEnabled:e.human_gate_auto_notify_enabled,lastNotifiedAt:e.last_notified_at??null,receiptCount:e.receipt_count,targetRef:e.target_ref??null})),goals:p,openUserTodoCount:f.length,systemHealth:_,attentionHistory:[...c,...d],userTodos:f,visibleUserTodos:f.slice(0,5),workers:(e.agent_management_projection?.agents??[]).map(e=>({agentId:e.agent_id,currentTodoGoalId:e.current_todo?.goal_id??null,currentTodoText:e.current_todo?.title?$d(e.current_todo.title,96):null,lastActivityAt:e.last_activity_at??null,state:e.state??null}))}}function Nw({goalArchiveLoadState:e,isLoading:t,onGoalActivationStateChange:n,onGoalDeleted:r,onSelectGoal:i,onReconcileStatus:a,onRefresh:o,onRetryGoalArchive:s,payload:c,progress:l,rows:u,selectedGoalId:d,statusSourceControl:f,theme:p,toggleTheme:m}){let h=f.activeSource.readOnly,g=f.activeSource.kind===`ssh_tunnel`?f.activeSource.hostAlias:void 0,{t:_}=Ji(),[v,y]=(0,R.useState)([]),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(null),[w,T]=(0,R.useState)(null),E=(0,R.useMemo)(()=>{let e=Mw(c,u,_,b);if(!l)return e;let t=Object.values(l.snapshots).map(e=>Mw(e,UC(e.run_history.goals,e.attention_queue.items),_,b)),n=new Map(t.flatMap(e=>e.goals).map(e=>[e.goalId,e])),r=e.goals.map(e=>n.get(e.goalId)??{...e,loadError:l.errors[e.goalId],loadState:l.errors[e.goalId]?`error`:`loading`,agentId:``,agentSentence:``,nextSentence:``,subagentExecution:void 0}),i=t.flatMap(e=>e.userTodos),a=r.some(e=>e.activationState===`active`&&e.loadState),o=[...new Set(t.flatMap(e=>e.systemHealth?.issues??[]))];return{...e,goals:r,userTodos:i,attentionHistory:t.flatMap(e=>e.attentionHistory??e.userTodos),visibleUserTodos:i.slice(0,5),openUserTodoCount:i.length,blockingTodoCount:i.filter(e=>e.blocking).length,workers:[...new Map(t.flatMap(e=>e.workers??[]).map(e=>[e.agentId,e])).values()],goalNotifications:t.flatMap(e=>e.goalNotifications??[]),systemHealth:a||t.length===0?void 0:{ok:t.every(e=>e.systemHealth?.ok),issues:o,summary:o.length?`发现 ${o.length} 项系统健康关注点`:`状态检查已完成`,freshnessWarning:t.map(e=>e.systemHealth?.freshnessWarning).filter(Boolean).join(`;`)||null}}},[c,u,l,b,_]),D=E.goals.find(e=>e.goalId===d)??null,O=l?.snapshots[d]??c,[k,A]=(0,R.useState)(null),[ee,j]=(0,R.useState)(null),[M,te]=(0,R.useState)(!1),ne=E.goals.some(e=>e.activationState===`active`&&e.loadState===`loading`)?`loading`:E.goals.map(e=>`${e.goalId}:${e.agentId}`).join(`|`),N=D?.goalId??`manager`;E.goals.some(e=>e.activationState===`active`&&e.loadState)||(E.systemHealth?!E.systemHealth.ok:!c.ok)||E.openUserTodoCount>0&&`${E.openUserTodoCount}${E.blockingTodoCount}`;let P=v.length>0?v.map(e=>({agentId:e.agent_id,adapterKind:e.adapter_kind,available:e.available,capability:sw(e.agent_id,e.adapter_kind),interrupt:e.interrupt,label:e.display_name,location:e.location,resume:e.resume,source:e.source,statusLabel:e.available?`可用`:`需要配置`,streaming:e.streaming,toolCalls:e.tool_calls,trustScope:e.trust_scope})):[{agentId:`codex`,available:!0,capability:sw(`codex`),label:`Codex`,statusLabel:`正在检测`}],re=[...P,{agentId:`status-only`,available:!0,capability:`不调用模型`,adapterKind:`status_projection`,interrupt:!1,label:`仅查状态`,resume:!0,statusLabel:`只读`,streaming:!1,toolCalls:!1,trustScope:`read_only`}],ie=P.find(e=>e.label===`Codex`&&e.available)?.agentId??P.find(e=>e.available)?.agentId??`status-only`,ae=w?.executor_endpoint?.trim()??``,F=ae?P.find(e=>e.agentId===ae)?.agentId:void 0,oe=e=>e===`manager`?F??ie:ie,[I,se]=(0,R.useState)(ew),L=Dh(re,I[N]??oe(N),ie),[ce,le]=(0,R.useState)(!1),[ue,de]=(0,R.useState)(!1),[fe,pe]=(0,R.useState)(`chat`),[me,he]=(0,R.useState)(``),[ge,_e]=(0,R.useState)({}),[ve,ye]=(0,R.useState)({}),[be,xe]=(0,R.useState)(null),[Se,Ce]=(0,R.useState)({}),[we,Te]=(0,R.useState)([]),[Ee,De]=(0,R.useState)(null),[Oe,ke]=(0,R.useState)({}),Ae=(0,R.useRef)(1),je=(0,R.useRef)(1),Me=(0,R.useRef)(new Map),Ne=(0,R.useRef)(new Set),Pe=(0,R.useRef)(new Map),Fe=(0,R.useRef)(new Map),Ie=(0,R.useRef)(new Set),Le=(0,R.useRef)(new Set),Re=(0,R.useRef)(null),B=(0,R.useRef)(null),ze=(0,R.useRef)(null),Be=(0,R.useRef)(null);(0,R.useRef)(null);let Ve=ge[N]??[];ve[N];let He=(e,t)=>e===`manager`?_(`header.manager`):t,Ue=D?E.userTodos.filter(e=>e.goalId===D.goalId):E.userTodos,We=D?.agentTodos??[];yw(We,D?.needsYou?3:4);let Ge=We.filter(e=>e.done).length,Ke=We.length>0?`${Ge}/${We.length}`:`暂无计划`;D&&({...E},Ue.filter(e=>e.blocking).length,Ue.length),(0,R.useEffect)(()=>{let e=bh(f.activeSource.statusUrl,window.location.href),t=e.source?wh(O,e.source):null;if(!D||!t?.indexUrl||!t.detailUrl){A(null),j(null),te(!1);return}let{detailUrl:n,indexUrl:r}=t,i=!1;return A(null),j(null),te(!0),Th(r,D.goalId).then(async e=>{let t=e.items[0]?.detail_ref;return t?Eh(n,t):null}).then(e=>{i||A(e)}).catch(e=>{i||j(Bp(e))}).finally(()=>{i||te(!1)}),()=>{i=!0}},[O,D?.goalId,f.activeSource.statusUrl]);let qe=Se[N]?.sessionId;(0,R.useEffect)(()=>{if(h||!qe)return;let e=!1,t,n=async()=>{try{let t=await cg(qe);if(e)return;let n=t.messages.filter(e=>e.origin===`manager_followup`);_e(e=>{let r=e[N]??[],i=new Set(r.map(e=>e.sourceMessageId)),a=n.filter(e=>!i.has(e.message_id)),o=new Map(n.map(e=>[e.message_id,e.return_delivery])),s=new Map(t.messages.filter(e=>e.role!==`user`&&e.origin!==`manager_followup`).map(e=>[e.turn_id,e])),c=new Map(t.messages.map(e=>[e.message_id,e.collaboration])),l=!1,u=r.map(e=>{let t=e.sourceMessageId?o.get(e.sourceMessageId):void 0,n=e.sourceTurnId?s.get(e.sourceTurnId):void 0,r=e.sourceMessageId?c.get(e.sourceMessageId):n?.collaboration;return JSON.stringify(t)===JSON.stringify(e.returnDelivery)&&JSON.stringify(r)===JSON.stringify(e.collaboration)?e:(l=!0,{...e,sourceMessageId:e.sourceMessageId??n?.message_id,returnDelivery:t,collaboration:r})});return!a.length&&!l?e:{...e,[N]:[...u,...a.map(e=>({id:Ae.current++,sourceMessageId:e.message_id,role:`assistant`,agentLabel:`协作回执`,sourceLabel:`协作回执`,text:rw(e.text),lines:[],returnDelivery:e.return_delivery}))]}})}catch{}finally{e||(t=setTimeout(n,3e3))}};return n(),()=>{e=!0,t&&clearTimeout(t)}},[h,qe,N,L.label]);function V(e,t){Ce(n=>{if(t===null){let t={...n};return delete t[e],t}return{...n,[e]:t}})}(0,R.useEffect)(()=>{if(h){y([]),x(!1),C(null),T(null);return}let e=!1;return ag().then(t=>{if(!e){y(t.adapters??[]);let e=t.manager?.runtime;T(t.manager?.channel_binding??null),C(e?{schema_version:`manager_runtime_session_readback_v0`,runtime_profile:e.runtime_profile,configuration_revision:e.configuration_revision,status:e.status,sandbox:e.sandbox,standing_grant:e.standing_grant,tool_classes:e.tool_classes}:null),x(t.goal_subagent_configuration===`preview_locked`)}}).catch(()=>{e||x(!1)}),()=>{e=!0}},[h]),(0,R.useEffect)(()=>{try{window.localStorage.setItem($C,JSON.stringify(I))}catch{}},[I]),(0,R.useEffect)(()=>{if(h||!L.available)return;let e=N,t=`${e}:${L.agentId}`,n=D?`goal`:`manager`,r=D?`goal.${D.goalId}`:`manager`,i=!1,a=null,o=null;return(async()=>{try{let s=await dg({agentId:n===`manager`?void 0:L.agentId,channelId:r,goalId:D?.goalId});if(i||(_e(t=>(t[e]?.length??0)>0?t:{...t,[e]:s.messages.map(t=>({sourceMessageId:t.message_id,agentLabel:t.role===`user`?void 0:t.origin===`manager_followup`?`协作回执`:He(e,L.label),attachments:QC(t.attachments),id:Ae.current++,lines:[],role:t.role===`user`?`user`:`assistant`,returnDelivery:t.return_delivery,collaboration:t.collaboration,sourceLabel:t.role===`user`?void 0:t.role===`error`?`本地会话记录`:e===`manager`?`恢复的${_(`header.manager`)}会话`:`恢复的 ${L.label} 会话`,text:t.role===`user`?t.text:rw(t.text)}))}),L.agentId===`status-only`))return;let c=s.sessions[0];if(o=c?.session_id??null,c&&!c.resumable){Ne.current.add(t),V(e,{agentId:L.agentId,resumable:!1,sessionId:c.session_id,status:`resume_failed`});return}let l=n===`manager`?``:D?.goalId??``;if(n===`goal`&&!l)return;let u=await sg(l,n===`manager`?I[e]:L.agentId,`resume_latest`,n);if(i)return;n===`manager`&&u.session.manager_runtime&&C(u.session.manager_runtime),Me.current.set(t,u.session_id);let d=s.snapshots.find(e=>e.session.session_id===u.session_id),f=d?.session.active_turn_id??``;if(V(e,{agentId:u.agent_id||L.agentId,resumable:!0,sessionId:u.session_id,status:f?`running`:`ready`,turnId:f||void 0}),Ne.current.delete(t),!f)return;let p=`${u.session_id}:${f}`;if(Le.current.has(p))return;Le.current.add(p),Pe.current.set(e,f),V(e,{agentId:L.agentId,resumable:!0,sessionId:u.session_id,status:`running`,turnId:f}),xe(e),a=new AbortController,Fe.current.set(e,a);let m=``,h=Je(e,{activity:[`正在恢复进行中的 Agent 回合`],agentLabel:He(e,L.label),lines:[],pending:!0,sourceLabel:e===`manager`?`恢复的${_(`header.manager`)}会话`:`恢复的 ${L.label} 会话`,text:``});try{let t=await Tg(u.session_id,f,{signal:a.signal,onDelta:t=>{m+=t,Ye(e,h,{text:m})},onActivity:t=>{_e(n=>({...n,[e]:(n[e]??[]).map(e=>e.id===h?{...e,activity:[...new Set([...e.activity??[],t])].slice(-6)}:e)}))}});if(i)return;Ye(e,h,{lines:t.response.gate?[t.response.gate.summary,t.response.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:t.response.message||m.trim()||`${He(e,L.label)} 已完成分析。`});let n=E.goals.find(e=>e.goalId===d?.session.goal_id)??D??E.goals[0]??null;if(n&&t.response.proposals.length>0){let r=t.response.proposals.filter(Oh).map(e=>({goalId:n.goalId,id:je.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));r.length>0&&ye(t=>({...t,[e]:[...t[e]??[],...r]}))}}catch(t){if(i)return;Ye(e,h,{activity:[],lines:[],pending:!1,reconnect:t instanceof qh&&t.payload.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t instanceof Error?t.message:`无法恢复进行中的 Agent 回合。`})}finally{Le.current.delete(p),Pe.current.get(e)===f&&Pe.current.delete(e),V(e,{agentId:L.agentId,resumable:!0,sessionId:u.session_id,status:`ready`}),Fe.current.get(e)===a&&Fe.current.delete(e),i||xe(t=>t===e?null:t)}}catch(n){if(i)return;n instanceof qh&&n.payload.error_code===`resume_failed`&&(Ne.current.add(t),o&&V(e,{agentId:L.agentId,resumable:!1,sessionId:o,status:`resume_failed`}))}})(),()=>{i=!0,a?.abort()}},[N,E.goals[0]?.goalId,h,D?.goalId,L.agentId,L.available,L.label,I]),(0,R.useEffect)(()=>{if(h||D||E.goals.length===0||ne===`loading`)return;let e=!1;return Promise.all(E.goals.filter(e=>!e.loadState).map(async e=>{let t=await lg({agentId:e.agentId,channelId:`goal.${e.goalId}`,goalId:e.goalId});return{goalId:e.goalId,session:t.sessions[0]??null}})).then(t=>{e||Ce(e=>{let n={...e};for(let e of t)e.session&&(n[e.goalId]={agentId:e.session.agent_id,resumable:e.session.resumable,sessionId:e.session.session_id,status:e.session.active_turn_id?`running`:e.session.status,turnId:e.session.active_turn_id??void 0});return n})}).catch(()=>{}),()=>{e=!0}},[h,ne,D?.goalId]),(0,R.useEffect)(()=>{if(De(null),h){Te([]),ke({});return}if(!D){Te([]),ke({});return}let e=!1,t=0,n=0;Te([]),ke({});let r=async()=>{if(!e){if(document.hidden){t=window.setTimeout(()=>void r(),1e4);return}try{let t=await lg({goalId:D.goalId});if(!e){let r=t.sessions.filter(e=>e.channel_id?.startsWith(`task.`));Te(r);let i=await Promise.allSettled(r.map(e=>cg(e.session_id)));if(!e){let e=i.some(e=>e.status===`rejected`);n=e?n+1:0,De(e?`partial`:null),ke(Object.fromEntries(i.flatMap((e,t)=>e.status===`fulfilled`?[[r[t].session_id,e.value]]:[])))}}}catch{n+=1,e||De(`offline`)}e||(t=window.setTimeout(()=>void r(),Math.min(3e4,2e3*2**Math.min(n,4))))}};return r(),()=>{e=!0,window.clearTimeout(t)}},[h,D?.goalId]),(0,R.useEffect)(()=>{if(!ce)return;let e=window.requestAnimationFrame(()=>{Re.current?.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus()});return()=>{window.cancelAnimationFrame(e),B.current?.focus()}},[ce]),(0,R.useEffect)(()=>{if(!ue)return;let e=window.requestAnimationFrame(()=>ze.current?.focus());return()=>{window.cancelAnimationFrame(e),Be.current?.focus()}},[ue]),(0,R.useEffect)(()=>{if(!ce&&!ue)return;let e=e=>{e.key===`Escape`&&(le(!1),de(!1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ce,ue]);function Je(e,t){let n=Ae.current++;return _e(r=>({...r,[e]:[...r[e]??[],{...t,id:n,role:`assistant`}]})),n}function Ye(e,t,n){_e(r=>({...r,[e]:(r[e]??[]).map(e=>e.id===t?{...e,...n}:e)}))}async function Xe(e,t){let n=`${e}:${t}`,r=Me.current.get(n);if(r)return r;let i=await sg(e,t,Ne.current.has(n)?`new`:`resume_latest`,`goal`);return Me.current.set(n,i.session_id),Ne.current.delete(n),V(e,{agentId:t,resumable:!0,sessionId:i.session_id,status:i.session.status}),i.session_id}async function Ze(e,t){let n=e.trim();if(!n)return;let r=t&&`goalId`in t?t.goalId??`manager`:N,i=r===`manager`?null:E.goals.find(e=>e.goalId===r)??null,a=t?.agentId?Dh(re,t.agentId,ie):L,o=r===`manager`?E:i?{...E,blockingTodoCount:E.userTodos.filter(e=>e.goalId===i.goalId&&e.blocking).length,goals:[i],openUserTodoCount:E.userTodos.filter(e=>e.goalId===i.goalId).length,userTodos:E.userTodos.filter(e=>e.goalId===i.goalId),visibleUserTodos:E.userTodos.filter(e=>e.goalId===i.goalId)}:E,s=Ae.current++;if(_e(e=>({...e,[r]:[...e[r]??[],{attachments:t?.attachments,id:s,lines:[],role:`user`,text:n}]})),he(``),xe(r),a.agentId===`status-only`||!i&&r!==`manager`){let e=jw(O,o,n),t=a.agentId===`status-only`;Je(r,{agentLabel:t?`仅查状态`:`LoopX 管家`,lines:e.lines.slice(0,3),sourceLabel:t?`LoopX 状态投影 · 仅查状态`:`LoopX 状态投影`,text:e.text}),og({answer:[e.text,...e.lines.slice(0,3)].filter(Boolean).join(` -`),contextKind:r===`manager`?`manager`:`goal`,goalId:r===`manager`?void 0:r,question:n}).catch(()=>{}),xe(null);return}let c=`${r}:${a.agentId}`,l=null;try{let e=r===`manager`?Me.current.get(c):await Xe(r,a.agentId);if(!e){let t=Ne.current.has(c)?`new`:`resume_latest`,n=r===`manager`?I[r]:a.agentId,o=await sg(r===`manager`?``:i.goalId,n,t,r===`manager`?`manager`:`goal`);r===`manager`&&o.session.manager_runtime&&C(o.session.manager_runtime),e=o.session_id,Me.current.set(c,e),V(r,{agentId:o.agent_id||a.agentId,resumable:!0,sessionId:e,status:`ready`}),Ne.current.delete(c)}let o=``;l=Je(r,{activity:[r===`manager`?`正在连接管家`:`正在连接 Agent`],agentLabel:He(r,a.label),lines:[],pending:!0,sourceLabel:r===`manager`?`${_(`header.manager`)} · 跨 Goal`:`${a.label} Agent · ${nw(i.goalId)}`,text:``});let s={attachments:t?.attachments,signal:(()=>{let e=new AbortController;return Fe.current.set(r,e),e.signal})(),onDelta:e=>{o+=e,l!==null&&Ye(r,l,{text:o})},onActivity:e=>{l!==null&&_e(t=>({...t,[r]:(t[r]??[]).map(t=>t.id===l?{...t,activity:[...new Set([...t.activity??[],e])].slice(-6)}:t)}))},onPhase:(t,n)=>{l!==null&&Ye(r,l,{sourceTurnId:n}),Pe.current.set(r,n),V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`running`,turnId:n})}},u;if(t?.loopxMode){let n=await xg(e,t.loopxMode.operation,t.loopxMode.settings);if(!n.turn_id)throw Error(`LoopX execution returned no turn identity`);s.onPhase(`turn.accepted`,n.turn_id),u=await Tg(e,n.turn_id,s)}else u=await Cg(e,n,s);let d=u.response;Ye(r,l,{lines:d.gate?[d.gate.summary,d.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:rw(d.message||o.trim())||`${He(r,a.label)} 已完成分析。`});let f=d.proposals.filter(Oh);if(f.length>0&&!i&&Ye(r,l,{lines:[`请进入要修改的 Goal,预览并确认具体变更。`]}),f.length>0&&i){let e=f.map(e=>({goalId:i.goalId,id:je.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));ye(t=>({...t,[r]:[...t[r]??[],...e]}))}if(r!==`manager`&&d.protected_action){let e=zC(r,n,d.protected_action);if(e)return e}}catch(e){if(Ie.current.delete(r)||t?.loopxMode&&e instanceof qh&&e.payload.error_code===`turn_interrupted`){let e={agentLabel:He(r,a.label),lines:[],pending:!1,sourceLabel:r===`manager`?`${_(`header.manager`)}会话`:`${a.label} 会话`,text:`已中断。你可以在当前会话继续发送消息。`};l===null?Je(r,e):Ye(r,l,e);return}let n=e instanceof qh?e.payload:null;n&&Ah(n)&&Me.current.delete(c),n?.error_code===`resume_failed`&&(Me.current.delete(c),Ne.current.add(c),V(r,{agentId:a.agentId,resumable:!1,sessionId:Se[r]?.sessionId??`resume-failed`,status:`resume_failed`}));let i=n?.gate,o=i&&typeof i==`object`?String(i.summary??``):``,s={agentLabel:He(r,a.label),lines:o?[o]:[],pending:!1,reconnect:n?.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:n?.error_code===`resume_failed`?`原 ${He(r,a.label)} 会话无法恢复。本地历史已经保留,请在运行详情里选择“重试恢复”或“开始新 Session”。`:e instanceof Error?e.message:`${He(r,a.label)} 会话暂时不可用。`};l===null?Je(r,s):Ye(r,l,s)}finally{Pe.current.delete(r),Fe.current.delete(r);let e=Me.current.get(c);e&&V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),xe(e=>e===r?null:e)}}async function Qe(e){let t=e?.goalId??N,n=Se[t],r=e?.agentId??n?.agentId??L.agentId,i=`${t}:${r}`,a=e?.sessionId??n?.sessionId??Me.current.get(i),o=e?.turnId??n?.turnId??Pe.current.get(t);if(!(!a||!o))try{Ie.current.add(t),await hg(a,o),Fe.current.get(t)?.abort()}catch(e){throw Ie.current.delete(t),e}finally{Pe.current.delete(t),V(t,{agentId:r,resumable:!0,sessionId:a,status:`ready`}),Fe.current.delete(t),xe(e=>e===t?null:e)}}async function $e(e){let t=e.goalId,n=`${t}:${e.agentId}`,r=e.sessionId??Se[t]?.sessionId??Me.current.get(n);if(r)try{let i=await Dg(r);Me.current.set(n,r),Ne.current.delete(n),V(t,{agentId:e.agentId,resumable:i.session.resumable,sessionId:r,status:i.session.status})}catch{V(t,{agentId:e.agentId,resumable:!1,sessionId:r,status:`resume_failed`})}}function et(e){let t=`${e.goalId}:${e.agentId}`;Me.current.delete(t),Ne.current.add(t),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:`new-session-pending`,status:`ready`})}async function tt(e){let t=`${e.goalId}:${e.agentId}`,n=e.sessionId??Se[e.goalId]?.sessionId??Me.current.get(t);n&&n!==`new-session-pending`&&await Eg(n),Me.current.delete(t),Ne.current.add(t),V(e.goalId,null)}function nt(e){re.some(t=>t.agentId===e&&t.available)&&(se(t=>({...t,[N]:e})),le(!1))}function rt(){i(``),pe(`chat`)}function it(e){i(e),pe(`chat`)}D&&tw[D.state],D&&(`${L.label}${D.state}`,We.length>0&&`${Ke}`,Ue.length>0&&`${Ue.length}`),D?.state===`需修复`||!D&&!c.ok?(D&&ow(D.agentId),D?.nextSentence,D?.agentSentence):D?.state===`等你`?(D.needsYouBlocking,D.needsYouBlocking,D.needsYou??D.nextSentence,D.needsYou):(D&&ow(D.agentId),D?.nextSentence);let at=[...!D&&Se.manager?.status===`resume_failed`?[{id:`run:manager:resume-failed`,kind:`run`,run:{agentId:Se.manager.agentId,agentLabel:ow(Se.manager.agentId),canInterrupt:!1,completedSteps:0,goalId:`manager`,goalTitle:`LoopX 管家`,latestActivity:`本地聊天记录已保留,点我查看恢复方式。`,resumable:!1,runId:`manager:resume-failed`,sessionId:Se.manager.sessionId,sessionStatus:`resume_failed`,status:`failed`,title:`上次会话需要恢复`,totalSteps:1,outputs:[]}}]:[],...D?we.map(e=>{let t=e.channel_id?.startsWith(`task.`)?e.channel_id.slice(5):void 0,n=D.agentTodos.find(e=>e.todoId===t),r=!!e.active_turn_id,i=Oe[e.session_id],a=i?.messages.some(e=>iw(e.role,e.text))===!0;return{id:`run:task:${e.session_id}`,kind:`run`,run:{agentId:e.agent_id,agentLabel:ow(e.agent_id),canInterrupt:r,completedSteps:n?.done||a?1:0,goalId:D.goalId,goalTitle:D.title,latestActivity:r?`Agent 正在执行,可进入 Session 查看过程或发送纠偏。`:a?`Agent 已返回结果,点击查看结果与完整运行记录。`:`执行 Session 已保留,可继续纠偏或恢复。`,resumable:e.resumable,runId:e.session_id,sessionId:e.session_id,sessionMessages:i?.messages.map(e=>({createdAt:e.created_at,messageId:e.message_id,role:e.role===`user`?`user`:iw(e.role,e.text)?`assistant`:`error`,text:e.role===`user`?e.text:rw(e.text)})),sessionStatus:a?`completed`:e.status,status:n?.done||a?`completed`:r?`running`:e.status===`resume_failed`?`failed`:`waiting`,title:n?.text??`Agent 执行任务`,todoId:t,totalSteps:1,turnId:e.active_turn_id??void 0}}}):[],...D&&(Se[D.goalId]?.turnId||D.runEvidence||qd(D))?[{id:`run:${D.goalId}`,kind:`run`,run:{agentId:Se[D.goalId]?.agentId??D.agentId,agentLabel:ow(Se[D.goalId]?.agentId??D.agentId),canInterrupt:!!Se[D.goalId]?.turnId,completedSteps:D.agentTodos.filter(e=>e.done).length,goalId:D.goalId,goalTitle:D.title,latestActivity:D.agentSentence,resumable:Se[D.goalId]?.resumable??!0,runId:`goal:${D.goalId}`,sessionId:Se[D.goalId]?.sessionId,sessionStatus:Se[D.goalId]?.status,status:Se[D.goalId]?.turnId?`running`:D.state===`需修复`?`failed`:`waiting`,title:D.nextSentence,totalSteps:D.agentTodos.length||1,turnId:Se[D.goalId]?.turnId,outputs:D.runEvidence?[{createdAt:D.runEvidence.generatedAt,kind:`evidence`,outputId:`${D.goalId}:latest-evidence`,title:D.runEvidence.label}]:[]}}]:[],...Ve.map(e=>({id:`message:${e.id}`,kind:`message`,message:{agentLabel:e.agentLabel,attachments:e.attachments,id:String(e.id),pending:e.pending,returnDelivery:e.returnDelivery,collaboration:e.collaboration,role:e.role,text:e.text||(e.pending?`Agent 正在处理…`:e.lines.join(` -`))}})),...(D?[D]:E.goals).flatMap(e=>e.runEvidence?[{id:`output:${e.goalId}:${e.runEvidence.generatedAt||`latest`}`,kind:`output`,output:{agentLabel:ow(e.agentId),createdAt:e.runEvidence.generatedAt,goalId:e.goalId,goalTitle:e.title,kind:`evidence`,outputId:`${e.goalId}:latest-evidence`,runId:e.runEvidence.runId??void 0,safePreview:e.runEvidence.safePreview,summary:e.runEvidence.summary,title:e.runEvidence.label,todoId:e.runEvidence.todoId??void 0}}]:[]),...D&&k?[{id:`output:${D.goalId}:report:${k.publication.publication_id}`,kind:`output`,output:{agentId:k.agent_id,agentLabel:ow(k.agent_id),createdAt:k.publication.delivered_at,goalId:D.goalId,goalTitle:D.title,kind:`report`,outputId:k.publication.publication_id,report:{addedCount:k.delta.added_count,changedCount:k.delta.changed_count,deliveredAt:k.publication.delivered_at,generationId:k.generation_id,items:k.delta.items.map(e=>({changeKind:e.change_kind,previousStatus:e.previous_status,sourceRef:e.source_ref,status:e.status,summary:e.summary,title:e.title})),periodEndAt:k.period_window.end_at,periodStartAt:k.period_window.start_at,predecessorPublicationId:k.publication.predecessor_publication_id,publicationId:k.publication.publication_id},safePreview:k.delta.items.map(e=>`${e.change_kind===`added`?`+`:`~`} ${e.title}\n${e.summary}`).join(` - -`),summary:k.summary,title:k.title}}]:[]],ot=f.connectionState===`connected`,st=new Map(E.goals.map(e=>[e.goalId,e.title])),ct=e=>nf(e,f.activeSource.statusUrl,ot&&!l?.errors[e.goalId],st.get(e.goalId)),lt={...Gd(E),userTodos:E.userTodos.map(ct),attentionHistory:(E.attentionHistory??E.userTodos).map(ct),periodicReports:{error:ee,loading:M},timeline:at};return(0,z.jsxs)(`div`,{className:p===`dark`?`dark`:``,"data-testid":`personal-goal-home`,children:[Ee?(0,z.jsx)(`p`,{role:`status`,className:`m-0 bg-amber-50 px-4 py-2 text-sm text-amber-900`,children:_(Ee===`partial`?`runs.discoveryPartial`:`runs.discoveryOffline`)}):null,(0,z.jsx)(_C,{agents:re.map(e=>({adapterKind:e.adapterKind,agentId:e.agentId,available:e.available,capability:e.capability,interrupt:e.interrupt,label:e.label,location:e.location,resume:e.resume,source:e.source,streaming:e.streaming,toolCalls:e.toolCalls,trustScope:e.trustScope,workspaceCompatibility:e.available?`当前 Goal 写入前验证`:`不可用,需先修复 Endpoint`})),callbacks:{onApplyAttention:e=>it(e.goalId),onCorrectRun:async(e,t)=>{if(!e.sessionId)throw Error(`这个 Run 还没有可纠偏的执行 Session。`);let n=await tg((await Qh({actionKind:`run.correct`,context:{kind:`run`,goal_id:e.goalId,todo_id:e.todoId},idempotencyKey:`workspace-run-correct-${e.sessionId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,message:t,session_id:e.sessionId},summary:`纠偏执行任务:${e.title}`})).proposal_id),r=typeof n.turn?.turn_id==`string`?n.turn.turn_id:void 0;if(V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:r?`running`:`ready`,turnId:r}),r){Pe.current.set(e.goalId,r);let t=new AbortController;Fe.current.set(e.goalId,t);let n=``,i=Je(e.goalId,{activity:[`正在把纠偏送入原执行 Session`],agentLabel:e.agentLabel,lines:[],pending:!0,sourceLabel:`${e.agentLabel} · 执行 Session`,text:``});try{let a=await Tg(e.sessionId,r,{signal:t.signal,onDelta:t=>{n+=t,Ye(e.goalId,i,{text:n})}});Ye(e.goalId,i,{activity:[],pending:!1,text:rw(a.response.message||n.trim())||`${e.agentLabel} 已完成纠偏。`})}catch(t){let n=Ie.current.delete(e.goalId);Ye(e.goalId,i,{activity:[],pending:!1,text:n?`已中断。你可以在当前会话继续发送消息。`:t instanceof Error?t.message:`纠偏回合失败。`})}finally{Pe.current.delete(e.goalId),Fe.current.delete(e.goalId),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:`ready`})}}},onCloseRunSession:tt,onInterruptRun:async e=>Qe(e),onOpenGoal:it,onOpenRunSession:async e=>{if(!e.sessionId)return;let t=e.sessionId,n=await cg(t);ke(e=>({...e,[t]:n})),it(e.goalId),_e(t=>({...t,[e.goalId]:n.messages.map(t=>({agentLabel:t.role===`user`?void 0:e.agentLabel,attachments:QC(t.attachments),id:Ae.current++,lines:[],role:t.role===`user`?`user`:`assistant`,sourceLabel:t.role===`user`?void 0:`${e.agentLabel} · 执行 Session`,text:t.role===`user`?t.text:rw(t.text)}))})),V(e.goalId,{agentId:e.agentId,resumable:n.session.resumable,sessionId:t,status:n.session.active_turn_id?`running`:n.session.status,turnId:n.session.active_turn_id??void 0})},onOpenOutput:e=>it(e.goalId),...b?{onPreviewGoalSubagentConfiguration:async e=>{let t=await Ag(e);return{changed:t.changed,configuration:{allowedDomains:t.after.orchestration.allowed_domains,codexHostCapacity:{configuredChildren:t.codex_host_capacity.configured_children,newSessionRequired:t.codex_host_capacity.new_session_required,requiredChildren:t.codex_host_capacity.required_children,status:t.codex_host_capacity.status,writeRequired:t.codex_host_capacity.write_required,written:t.codex_host_capacity.written},enabled:t.feature_summary.multi_subagent===`enabled`,executionConfig:t.after.orchestration.execution_config,maxChildren:t.after.orchestration.max_children,modelConfig:t.after.orchestration.model_config},previewId:t.preview_id}},onApplyGoalSubagentConfiguration:async({previewId:e,...t})=>{let n=await jg(t,e);return{allowedDomains:n.after.orchestration.allowed_domains,codexHostCapacity:{configuredChildren:n.codex_host_capacity.configured_children,newSessionRequired:n.codex_host_capacity.new_session_required,requiredChildren:n.codex_host_capacity.required_children,status:n.codex_host_capacity.status,writeRequired:n.codex_host_capacity.write_required,written:n.codex_host_capacity.written},enabled:n.feature_summary.multi_subagent===`enabled`,executionConfig:n.after.orchestration.execution_config,maxChildren:n.after.orchestration.max_children,modelConfig:n.after.orchestration.model_config}}}:{},...g?{onExecuteGoalLifecycle:async({goalId:e,operation:t,reason:n})=>{let r=await Tx(g,e,t,n);return{activationState:r.activation_state,projectionVerified:r.projection_verified}}}:{},onGoalActivationStateChange:n,onGoalDeleted:r,onReconcileStatus:a,onRetryGoalArchive:s,onExportOutput:async e=>{let t=[`# ${e.title}`,``,e.summary??``,``,e.safePreview??`此产出没有可用的公开安全预览。`,``,`Goal: ${e.goalId}`,`Todo: ${e.todoId??`unlinked`}`,`Run: ${e.runId??`unlinked`}`].join(` -`),n=URL.createObjectURL(new Blob([t],{type:`text/markdown;charset=utf-8`})),r=document.createElement(`a`);r.href=n,r.download=`${e.outputId.replace(/[^a-z0-9._-]+/gi,`-`)}.md`,r.click(),URL.revokeObjectURL(n)},onRefresh:o,onRetryResumeRun:$e,onSelectAgent:nt,onSelectGoal:e=>e?it(e):rt(),onSendMessage:async(e,t,n,r)=>Ze(e,{agentId:t,goalId:n,attachments:r}),onPrepareLoopX:(e,t)=>Xe(t,e),onStartLoopX:(e,t,n,r)=>{Ze(e===`start`?`开启 LoopX 模式,持续推进当前 Goal。`:`恢复 LoopX 模式。`,{agentId:t,goalId:n,loopxMode:{operation:e,settings:r}})},onStartNewRunSession:et},goalArchiveLoadState:e,managerChannelBinding:w,managerRuntime:S,conversationSessionId:Se[N]?.sessionId,model:lt,readOnly:h,selectedAgentId:L.agentId,selectedGoalId:D?.goalId??null,statusSourceControl:f})]})}function Pw({error:e,isLoading:t,onRetry:n,requestedUrl:r,theme:i,toggleTheme:a}){let o=!!(e&&/failed to fetch|networkerror|load failed/i.test(e)&&r.includes(`status.json`));return(0,z.jsx)(`div`,{className:i===`dark`?`dark`:``,children:(0,z.jsxs)(`main`,{className:`min-h-screen bg-[#f6f7f9] text-slate-950 dark:bg-[#09090b] dark:text-zinc-50`,children:[(0,z.jsxs)(`header`,{className:`flex min-h-16 flex-wrap items-center justify-between gap-3 border-b border-slate-200 bg-white px-4 py-3 dark:border-zinc-800 dark:bg-zinc-950 sm:px-6`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h1`,{className:`text-xl font-semibold`,children:`LoopX Workspace`}),(0,z.jsx)(`p`,{className:`mt-1 break-all text-sm text-slate-500 dark:text-zinc-400`,children:`Personal Workspace`})]}),(0,z.jsx)(Iy,{"aria-label":`切换主题`,onClick:a,size:`icon`,variant:`secondary`,children:i===`dark`?(0,z.jsx)(uh,{className:`h-4 w-4`}):(0,z.jsx)(Gm,{className:`h-4 w-4`})})]}),(0,z.jsxs)(`div`,{className:`grid min-h-[calc(100vh-80px)] sm:grid-cols-[240px_1fr]`,children:[(0,z.jsxs)(`aside`,{className:`hidden border-r border-slate-200 p-6 dark:border-zinc-800 sm:block`,"aria-label":`Workspace`,children:[(0,z.jsx)(`strong`,{children:`LoopX`}),(0,z.jsx)(`p`,{className:`mt-6 text-sm`,children:`Workspace`}),(0,z.jsx)(`p`,{className:`mt-8 text-xs text-slate-500`,children:`Goals`}),[1,2,3].map(e=>(0,z.jsx)(`div`,{className:`mt-4 h-8 rounded bg-slate-100 dark:bg-zinc-900`},e))]}),(0,z.jsx)(`div`,{className:`p-4 sm:p-8`,children:(0,z.jsx)(Ly,{"data-testid":`initial-status-state`,children:(0,z.jsx)(Ry,{className:`flex min-h-64 items-center justify-center p-6`,children:(0,z.jsxs)(`div`,{className:`max-w-xl text-center`,children:[e?(0,z.jsx)(ym,{className:`mx-auto h-6 w-6 text-rose-600 dark:text-rose-300`}):(0,z.jsx)(Qm,{className:`mx-auto h-6 w-6 animate-spin text-slate-500 dark:text-zinc-400`}),(0,z.jsx)(`p`,{className:`mt-3 text-sm font-medium`,children:e?`无法加载实时状态`:`正在加载实时状态`}),e?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`mt-2 break-words text-sm leading-6 text-slate-500 dark:text-zinc-400`,children:o?`本地状态服务暂时未连接。升级或启动期间可能短暂断开,请重试;仍失败时重新打开 LoopX App,或运行 loopx doctor。`:e}),o?(0,z.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-slate-400 dark:text-zinc-500`,children:`重新加载不会执行任务,也不会改变 Goal 配置。`}):null,(0,z.jsx)(`div`,{className:`mt-4 flex flex-wrap justify-center gap-2`,children:(0,z.jsxs)(Iy,{disabled:t,onClick:n,children:[(0,z.jsx)(Qm,{className:`h-4 w-4`}),`重试`]})})]}):(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-500 dark:text-zinc-400`,role:`status`,children:`正在连接 Workspace,Goal 列表将先出现,详细状态会逐个补齐。 / Connecting to your Workspace. Goals load independently.`})]})})})})]})]})})}function Fw(){let e=MT.useSearch(),t=MT.useNavigate(),[n,r]=(0,R.useState)(`light`),[i,a]=(0,R.useState)(null),o=(0,R.useRef)(null),s=(0,R.useRef)(e.goalId);s.current=e.goalId;let[c,l]=(0,R.useState)(Vp),[u,d]=(0,R.useState)({kind:`example`,label:`bundled example`}),[f,p]=(0,R.useState)(()=>AC(window.localStorage,window.location.href)),m=(0,R.useRef)(f);m.current=f;let[h,g]=(0,R.useState)(e.statusUrl),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)({error:null,phase:`idle`}),[C,w]=(0,R.useState)(e.statusUrl.trim()||null),[T,E]=(0,R.useState)(!1),D=(0,R.useRef)(null),O=(0,R.useRef)(k_(e.statusUrl.trim()||null)),k=!T&&u.kind===`example`?e.statusUrl.trim():``,A=C??k,ee=u.kind===`url`?u.label:BC,j=!!(_&&C),M=LC(f,C,ee,window.location.href),te=u.kind===`example`&&!T,ne=c.attention_queue,N=c.run_history,P=(0,R.useMemo)(()=>UC(N.goals,ne.items),[N.goals,ne.items]);function re(e,t,n=0){S({error:null,phase:`loading`}),VC(Sh(e,`stopped`,window.location.href)).then(r=>{if(!N_(O.current,t))return;let i=r.goal_projection?.registry_revision??null,a=t.registryRevision!==null&&t.registryRevision!==void 0&&i!==null&&t.registryRevision!==i;if(l(e=>nv(e,r)),a&&n<1){F(e,{background:!0,resyncAttempt:n+1});return}S(a?{error:`Goal 状态在加载历史时发生变化,请重试。`,phase:`error`}:{error:null,phase:`ready`})}).catch(e=>{N_(O.current,t)&&S({error:Bp(e),phase:`error`})})}function ie(){let e=u.kind===`url`?u.label:h||BC,t=j_(O.current,e,{background:!0});if(i){F(e);return}t&&re(e,t)}async function ae(e,n,r){if(r.background)return l(e=>nv(e,n)),!0;let i={kind:`url`,label:e};return O.current.loadedUrl=e,l(n),d(i),g(e),await t({search:t=>({...t,statusUrl:e})}),M_(O.current,r)?(O.current.requestedUrl=null,w(null),!0):!1}async function F(e,t={}){let n=e.trim(),r=t.background===!0;if(!n){r||v(`状态地址不能为空`);return}let c=j_(O.current,n,{background:r,selectionRevision:t.selectionRevision});if(!c)return;o.current?.abort();let d=new AbortController;o.current=d,r||(D.current=null,E(!1),w(n),b(!0),v(null),S({error:null,phase:`idle`}));try{let e=await Gp(n,window.location.href).catch(()=>null);if(!N_(O.current,c))return;if(e){let o=(t.retryOnly||t.reuseSnapshots)&&u.kind===`url`&&u.label===n?Up(i,e,{invalidateGoalIds:t.invalidateGoalIds}):{};a({directory:e,snapshots:o,errors:{}});let f={...e,goals:e.goals.filter(e=>!o[e.id])},p=!1,m=Kp(e);if(r)l(m);else if(!await ae(n,m,c))return;if(S({error:null,phase:`loading`}),await Jp(n,window.location.href,f,(e,t,n)=>{n===`revision`&&(p=!0),a(r=>r&&{...r,snapshots:t?{...r.snapshots,[e]:t}:r.snapshots,errors:n?{...r.errors,[e]:n}:r.errors})},()=>N_(O.current,c),()=>s.current,d.signal),p&&(t.resyncAttempt??0)<1&&N_(O.current,c)){await F(n,{resyncAttempt:1});return}N_(O.current,c)&&S({error:null,phase:`ready`});return}let o=await VC(Sh(n,`active`,window.location.href));if(!N_(O.current,c)||(a(null),c.registryRevision=o.goal_projection?.registry_revision??null,!await ae(n,o,c)))return;if(o.goal_projection?.scope!==`active`||o.goal_projection.complete){S({error:null,phase:`ready`});return}re(n,c,t.resyncAttempt??0)}catch(e){if(!M_(O.current,c))return;r||v(Bp(e))}finally{!r&&M_(O.current,c)&&b(!1)}}function oe(e,t={}){o.current?.abort();let n=A_(O.current,e.statusUrl);D.current=null,E(!1),w(e.statusUrl),b(!0),v(null),(async()=>{if(t.ensureTunnel&&e.kind===`ssh_tunnel`){let t=new URL(e.statusUrl,window.location.href).port;if(t)try{await wx(e.label,t)}catch{}}O.current.selectionRevision===n&&await F(e.statusUrl,{selectionRevision:n})})()}function I(e){m.current=e,p(e);try{jC(window.localStorage,e)}catch{}}let se={activeSource:M,connectionState:y?`loading`:j?`error`:`connected`,errorMessage:j?`未切换到 ${C??`所选来源`}:${_}`:null,onAdd:e=>{let t=NC(f,e,window.location.href);return`error`in t?{error:t.error}:(I(t.catalog),oe(t.source,{ensureTunnel:e.ensureTunnel}),{})},onConfiguredHostsLoaded:e=>{let t=m.current,n=MC(t,e);n!==t&&I(n)},onRemove:e=>{I(PC(f,e)),M.id===e&&oe(TC)},onSelect:e=>{let t=f.sources.find(t=>t.id===e);t&&oe(t,{ensureTunnel:t.kind===`ssh_tunnel`})},sources:M.id===`temporary`?[...f.sources,M]:f.sources};(0,R.useEffect)(()=>{let t=e.statusUrl.trim();if(t){if(D.current===t||C&&C!==t)return;(u.kind!==`url`||u.label!==t)&&F(t);return}D.current=null,!T&&(C||u.kind===`example`&&F(BC))},[T,C,e.statusUrl,u.kind,u.label]),(0,R.useEffect)(()=>{if(e.statusUrl&&u.kind===`example`)return;let n=new Set(P.map(e=>e.goal.id));if(P.length===0){e.goalId&&t({search:e=>({...e,goalId:``})});return}e.goalId&&!n.has(e.goalId)&&x.phase!==`loading`&&t({search:e=>({...e,goalId:``})})},[x.phase,P,t,e.goalId,e.statusUrl,u.kind]),(0,R.useEffect)(()=>{if(!i||y||!e.goalId||u.kind!==`url`)return;let t=i.directory.goals.find(t=>t.id===e.goalId);t?.activation_state===`stopped`&&!i.snapshots[t.id]&&!i.errors[t.id]&&F(u.label,{retryOnly:!0})},[e.goalId,y,i,u]);function L(e){t({search:t=>({...t,goalId:e})})}return te?(0,z.jsx)(Pw,{error:_,isLoading:y,onRetry:()=>void F(A||BC),requestedUrl:A||BC,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)}):(0,z.jsx)(Nw,{goalArchiveLoadState:x,isLoading:y,onGoalActivationStateChange:(e,t)=>{O.current.projectionRevision+=1,l(n=>Lp(n,e,t)),a(n=>n&&{...n,snapshots:Object.fromEntries(Object.entries(n.snapshots).map(([n,r])=>[n,Lp(r,e,t)]))})},onGoalDeleted:e=>{O.current.projectionRevision+=1,l(t=>Rp(t,e)),a(t=>t&&{...t,snapshots:Object.fromEntries(Object.entries(t.snapshots).filter(([t])=>t!==e))})},onSelectGoal:L,onReconcileStatus:e=>F(u.kind===`url`?u.label:h||BC,{background:!0,invalidateGoalIds:e?.invalidateGoalIds,reuseSnapshots:!0}),onRetryGoalArchive:ie,onRefresh:()=>F(u.kind===`url`?u.label:h||BC,{retryOnly:!!(i&&Object.keys(i.errors).length)}),payload:c,progress:i,rows:P,selectedGoalId:e.goalId,statusSourceControl:se,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)})}var Iw=sv(`inline-flex items-center gap-1 rounded-md border px-2 py-0.5 text-xs font-medium`,{variants:{variant:{neutral:`border-slate-200 bg-white text-slate-700 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-300`,success:`border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900 dark:bg-emerald-950 dark:text-emerald-200`,warning:`border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-200`,info:`border-sky-200 bg-sky-50 text-sky-800 dark:border-sky-900 dark:bg-sky-950 dark:text-sky-200`,danger:`border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-900 dark:bg-rose-950 dark:text-rose-200`}},defaultVariants:{variant:`neutral`}});function Lw({className:e,variant:t,...n}){return(0,z.jsx)(`span`,{className:Py(Iw({variant:t}),e),...n})}var Rw=[{label:`status payload`,source:`apps/presentation/dashboard/src/data/status.ts`,detail:`status_contract, attention_queue, local_dashboard_api, run_history`},{label:`channel projection`,source:`apps/presentation/dashboard/src/data/goal-channel-frontstage.ts`,detail:`decision_frame, todos, gates, leases, artifacts, truth_contract`},{label:`public showcase catalog`,source:`docs/showcases/showcase-catalog.json`,detail:`case metadata, visual hints, evidence boundaries, story beats`},{label:`route smoke`,source:`apps/presentation/dashboard/smoke/frontstage-route-smoke.ts`,detail:`static route contract, source guards, component expectations`}],zw=[{axis:`schema`,current:`goal_channel_projection_v0`,proposed:`new optional projection field`,gate:`parser default plus route smoke assertion`},{axis:`truth`,current:`event ledger and active state remain source of truth`,proposed:`derived UI state only`,gate:`truth_contract must stay read-only`},{axis:`privacy`,current:`compact source refs and warnings`,proposed:`public-safe fixture field`,gate:`loopx check and browser fake-private fixture`},{axis:`interaction`,current:`render, filter, select, inspect`,proposed:`no browser write by default`,gate:`write affordance requires explicit loopback capability`}],Bw=[{title:`Fixture sources`,body:`Use examples/status.example.json, browser-smoke fixtures, and docs/showcases/showcase-catalog.json.`},{title:`Required proof`,body:`Every projection addition needs parser coverage, route smoke assertions, and one browser or bundle check when UI output changes.`},{title:`Never include`,body:`Raw task text, trajectories, transcripts, local paths, private registry state, credentials, or internal document links.`}],Vw=[`npm --prefix apps/presentation/dashboard run smoke:frontstage-route`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-browser`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-share-bundle`,`npm --prefix apps/presentation/dashboard run build`,`loopx check --scan-path apps/presentation/dashboard --scan-path docs/status-data-contract.md`],Hw=[{name:`Projection lane`,badges:[`read-only`,`schema v0`],body:`Summarizes one compact projection lane without mutating the underlying LoopX state.`},{name:`Capability badge`,badges:[`loopback`,`dry-run`],body:`Shows an advertised local capability only after the status feed declares it.`},{name:`Boundary warning`,badges:[`public-safe`,`omitted`],body:`Names omitted private material and points contributors back to compact source references.`}];function Uw({children:e,icon:t,title:n}){return(0,z.jsxs)(`section`,{className:`rounded-lg border border-slate-200 bg-white shadow-sm`,children:[(0,z.jsx)(`div`,{className:`flex items-center justify-between gap-3 border-b border-slate-200 px-4 py-3`,children:(0,z.jsxs)(`h2`,{className:`flex items-center gap-2 text-sm font-semibold text-slate-950`,children:[(0,z.jsx)(t,{className:`h-4 w-4 text-slate-500`}),n]})}),e]})}function Ww(){return(0,z.jsx)(Uw,{icon:pm,title:`Status Contract Explorer`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-2`,"data-testid":`developer-contract-explorer`,children:Rw.map(e=>(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(Lw,{variant:`info`,children:e.label}),(0,z.jsx)(Lw,{variant:`neutral`,children:`public contract`})]}),(0,z.jsx)(`div`,{className:`mt-2 break-words font-mono text-xs text-slate-700`,children:e.source}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.detail})]},e.label))})})}function Gw(){return(0,z.jsx)(Uw,{icon:Nm,title:`Projection Diffing`,children:(0,z.jsx)(`div`,{className:`overflow-x-auto`,"data-testid":`developer-projection-diffing`,children:(0,z.jsxs)(`table`,{className:`min-w-full border-separate border-spacing-0 text-left text-sm`,children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{className:`bg-slate-50 text-xs uppercase tracking-normal text-slate-500`,children:[(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Axis`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Current`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Proposed`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Gate`})]})}),(0,z.jsx)(`tbody`,{children:zw.map(e=>(0,z.jsxs)(`tr`,{className:`align-top`,children:[(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 font-semibold text-slate-950`,children:e.axis}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.current}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.proposed}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.gate})]},e.axis))})]})})})}function Kw(){return(0,z.jsx)(Uw,{icon:km,title:`Fixture Generation`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-fixture-generation`,children:Bw.map(e=>(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:e.title}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.title))})})}function qw(){return(0,z.jsx)(Uw,{icon:xm,title:`Smoke Checklist`,children:(0,z.jsx)(`div`,{className:`space-y-2 p-4`,"data-testid":`developer-smoke-checklist`,children:Vw.map(e=>(0,z.jsxs)(`div`,{className:`flex items-start gap-3 rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(um,{className:`mt-0.5 h-4 w-4 shrink-0 text-emerald-600`}),(0,z.jsx)(`code`,{className:`break-all text-xs font-semibold leading-5 text-slate-700`,children:e})]},e))})})}function Jw(){return(0,z.jsx)(Uw,{icon:Sm,title:`Component Examples`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-3`,"data-testid":`developer-component-examples`,children:Hw.map(e=>(0,z.jsxs)(`article`,{className:`rounded-md border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.badges.map(e=>(0,z.jsx)(Lw,{variant:e===`read-only`||e===`public-safe`?`success`:`neutral`,children:e},e))}),(0,z.jsx)(`h3`,{className:`mt-3 text-sm font-semibold leading-6 text-slate-950`,children:e.name}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.name))})})}function Yw(){return(0,z.jsx)(`main`,{className:`min-h-screen bg-[#f7f7f4] px-4 py-4 text-slate-950 sm:px-5`,"data-testid":`frontstage-developer-cockpit`,children:(0,z.jsxs)(`div`,{className:`mx-auto grid max-w-[1500px] gap-4 xl:grid-cols-[260px_minmax(0,1fr)]`,children:[(0,z.jsxs)(`aside`,{className:`rounded-lg border border-slate-200 bg-white p-4 shadow-sm xl:sticky xl:top-4 xl:self-start`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-md border border-slate-200 bg-slate-950 text-white`,children:(0,z.jsx)(dh,{className:`h-4 w-4`})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold`,children:`Developer Cockpit`}),(0,z.jsx)(`div`,{className:`text-xs text-slate-500`,children:`Projection extension`})]})]}),(0,z.jsxs)(`div`,{className:`mt-4 grid gap-2`,children:[(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://loopx-project.github.io/loopx/`,children:[(0,z.jsx)(Lm,{className:`h-4 w-4`}),`LoopX home`]}),(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://loopx-project.github.io/loopx/docs/showcases/index.en.html`,children:[(0,z.jsx)(Dm,{className:`h-4 w-4`}),`Public cases`]}),(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md bg-slate-950 px-3 py-2 text-sm font-medium text-white`,href:`/chat/developers/projections/`,children:[(0,z.jsx)(Sm,{className:`h-4 w-4`}),`Developer cockpit`]})]}),(0,z.jsxs)(`div`,{className:`mt-5 space-y-2 rounded-md border border-emerald-200 bg-emerald-50 p-3 text-xs leading-5 text-emerald-950`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,z.jsx)(Lw,{variant:`success`,children:`read-only`}),(0,z.jsx)(Lw,{variant:`neutral`,children:`public fixtures`})]}),(0,z.jsx)(`p`,{children:`This route uses static public contracts only; live status feeds, registry files, and browser write APIs stay outside the cockpit.`})]})]}),(0,z.jsxs)(`section`,{className:`space-y-4`,children:[(0,z.jsx)(`div`,{className:`rounded-lg border border-slate-200 bg-white px-5 py-5 shadow-sm`,children:(0,z.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,z.jsx)(Lw,{variant:`info`,children:`developers/projections`}),(0,z.jsx)(Lw,{variant:`success`,children:`public-safe`}),(0,z.jsx)(Lw,{variant:`neutral`,children:`no browser writes`})]}),(0,z.jsx)(`h1`,{className:`mt-3 text-3xl font-semibold tracking-normal text-slate-950`,children:`LoopX Projection Developer Cockpit`}),(0,z.jsx)(`p`,{className:`mt-2 max-w-3xl text-sm leading-6 text-slate-600`,children:`A read-only contributor workbench for adding dashboard/frontstage projections without reverse-engineering the large operator page.`})]}),(0,z.jsxs)(`div`,{className:`grid min-w-[260px] gap-2 text-sm`,children:[(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Source of truth`}),(0,z.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`status contract + compact fixtures`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Boundary`}),(0,z.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`read-only extension surface`})]})]})]})}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,z.jsx)(Ww,{}),(0,z.jsx)(Gw,{})]}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,z.jsx)(Kw,{}),(0,z.jsx)(qw,{})]}),(0,z.jsx)(Jw,{}),(0,z.jsx)(Uw,{icon:oh,title:`Extension Boundary`,children:(0,z.jsxs)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-extension-boundary`,children:[(0,z.jsxs)(`div`,{className:`rounded-md border border-emerald-200 bg-emerald-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Allowed`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Versioned parser defaults, public fixtures, read-only route panels, and focused smoke assertions.`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-amber-200 bg-amber-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Review`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`New dashboard dependencies, status contract fields, loopback capability display, and browser-visible workflows.`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-rose-200 bg-rose-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Stop`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Credentials, private registry material, raw logs, transcripts, production actions, or default browser write authority.`})]})]})})]})]})})}var Xw=J({value:G().finite(),total:G().finite().positive().optional(),unit:W().optional(),higher_is_better:K()}).passthrough(),Zw=yd(W(),G().finite()).default({}),Qw=J({outcome_status:W().optional(),failure_class:W(),causal_summary:W(),expectedness:W(),implication:W(),next_probe:W(),confidence:W(),evidence_refs:q(W()).optional()}).passthrough(),$w=J({arm_id:W(),selected_run_id:W().nullable(),score_countable:K(),metrics:yd(W(),Xw),effort:Zw,insight:Qw.nullable().optional()}),eT=J({run_id:W(),case_id:W(),arm_id:W(),arm_role:W(),status:W(),protocol_id:W(),runner_revision:W().optional(),observed_at:W(),metrics:yd(W(),Xw),countability:J({integrity_qualified:K(),official_result_present:K(),score_countable:K()}).passthrough(),treatment_fidelity:W(),effort:Zw,redacted_insight:Qw.nullable().optional(),upload_provenance:J({producer_id:W(),producer_version:W(),observed_at:W(),source_revision:W()}).passthrough()}).passthrough(),tT=J({case_denominator:G().int().nonnegative(),value_sum:G().finite(),value_mean:G().finite().nullable(),value_median:G().finite().nullable(),value_min:G().finite().nullable(),value_max:G().finite().nullable(),case_macro_rate:G().finite().optional(),suite_micro_rate:G().finite().optional(),suite_micro_numerator:G().finite().optional(),suite_micro_denominator:G().finite().positive().optional()}).passthrough(),nT=J({arm_id:W(),arm_role:W(),factor_assignments:yd(W(),W()),protocol_counts:yd(W(),G().int().nonnegative()).default({}),runner_revision_counts:yd(W(),G().int().nonnegative()).default({}),orchestrator_runtime_counts:yd(W(),G().int().nonnegative()).default({}),intended_case_count:G().int().positive(),run_count:G().int().nonnegative(),terminal_run_count:G().int().nonnegative(),selected_score_countable_case_count:G().int().nonnegative(),coverage_rate:G().finite().min(0).max(1),metrics:yd(W(),tT),binary_outcomes:yd(W(),J({success_count:G().int().nonnegative(),case_denominator:G().int().nonnegative(),success_rate:G().finite().min(0).max(1).nullable()})),effort:yd(W(),J({denominator:G().int().nonnegative(),mean:G().finite().nullable(),median:G().finite().nullable()})),failure_class_counts:yd(W(),G().int().nonnegative())}).passthrough(),rT=J({baseline_value:G().finite(),candidate_value:G().finite(),delta:G().finite(),direction:Y([`improved`,`flat`,`regressed`]).optional()}).passthrough(),iT=J({comparison_id:W(),comparison_anchor_run_id:W(),candidate_run_id:W(),candidate_arm_id:W(),primary_metric:W(),matched_pair_countable:X(!0),metric_deltas:yd(W(),rT)}).passthrough(),aT=J({ok:X(!0),schema_version:X(`benchmark_study_dashboard_v0`),benchmark_id:W(),study_id:W(),status:Y([`complete`,`provisional`]),design:J({protocol_id:W(),comparison_protocol_id:W(),baseline_arm_id:W(),case_set:J({case_set_id:W(),case_ids:q(W())}),metric_catalog:q(J({metric_name:W(),role:Y([`primary`,`guardrail`,`supporting`]),unit:W().optional(),higher_is_better:K(),binary:K()})),labels:yd(W(),W())}).passthrough(),campaign:J({intended_case_count:G().int().positive(),intended_arm_count:G().int().positive(),intended_cell_denominator:G().int().positive(),selected_score_countable_cell_count:G().int().nonnegative(),selected_score_countable_coverage_rate:G().finite().min(0).max(1),complete_declared_design_case_count:G().int().nonnegative(),ambiguous_score_countable_cell_count:G().int().nonnegative(),in_flight_run_count:G().int().nonnegative(),matched_pair_countable_count:G().int().nonnegative(),factorial_contrast_count:G().int().nonnegative(),factorial_contrast_countable_count:G().int().nonnegative(),runtime_observation_count:G().int().nonnegative(),runtime_classification_counts:yd(W(),G().int().nonnegative())}),arms:q(nT),contrasts:yd(W(),J({matched_pair_denominator:G().int().nonnegative(),primary_metric_directions:J({improved:G().int().nonnegative(),flat:G().int().nonnegative(),regressed:G().int().nonnegative()}),binary_metric_transitions:yd(W(),J({"0_to_1":G().int().nonnegative(),"1_to_0":G().int().nonnegative(),same:G().int().nonnegative()}))})),cases:q(J({case_id:W(),complete_declared_design:K(),arms:q($w),eligible_comparisons:q(iT),largest_eligible_primary_contrast:iT.nullable()})),runs:q(eT),authority:J({score_source:W(),matched_comparison_source:W(),factorial_comparison_source:W().nullable(),manifest_changes_scores:X(!1),dashboard_is_execution_authority:X(!1)}),public_boundary:J({raw_task_recorded:X(!1),raw_trajectory_recorded:X(!1),hidden_evaluation_recorded:X(!1),raw_verifier_output_recorded:X(!1),credentials_recorded:X(!1),local_paths_recorded:X(!1)}),write_performed:X(!1),network_access_performed:X(!1)});function oT(e){return aT.parse(e)}function sT(e,t){let n=new URL(t),r=new URL(e||`/benchmark-study.example.json`,n);if(!new Set([`http:`,`https:`]).has(r.protocol))throw Error(`Benchmark dashboard source must use HTTP or HTTPS`);if(r.origin!==n.origin)throw Error(`Benchmark dashboard source must use same-origin local readback`);return r.toString()}var cT=[{id:`campaign`,label:`Campaign`},{id:`arms`,label:`Arms`},{id:`cases`,label:`Cases`},{id:`runs`,label:`Runs`}];function lT(e){return e==null?`—`:`${(e*100).toFixed(e>=.995?0:1)}%`}function uT(e){return e==null?`—`:new Intl.NumberFormat(`en`,{maximumFractionDigits:2,notation:`compact`}).format(e)}function dT(e){if(e==null)return`—`;let t=e/6e4;return t>=120?`${(t/60).toFixed(1)} h`:`${uT(t)} min`}function fT(e){let t=Object.entries(e);return t.length?t.map(([e,t])=>`${e} (${t})`).join(`, `):`—`}function pT(e){if(!e)return`—`;let t=e.total==null?uT(e.value):`${uT(e.value)}/${uT(e.total)}`;return e.unit?`${t} ${e.unit}`:t}function mT(e,t){let n=e.metrics[t];return!n||n.case_denominator===0?`—`:n.suite_micro_rate==null?`${uT(n.value_mean)} mean`:`${lT(n.suite_micro_rate)} · ${uT(n.suite_micro_numerator)}/${uT(n.suite_micro_denominator)}`}function hT(e,t){let n=e.largest_eligible_primary_contrast,r=n?.metric_deltas[t];if(!n||!r)return null;let i=r.delta>0?`+`:``;return{direction:r.direction,text:`${n.candidate_arm_id}: ${i}${uT(r.delta)}`}}function gT({children:e,tone:t=`neutral`}){return(0,z.jsx)(`span`,{className:`benchmark-state benchmark-state-${t}`,children:e})}function _T({packet:e,primaryMetric:t}){return(0,z.jsxs)(`div`,{className:`benchmark-view-stack`,children:[(0,z.jsxs)(`section`,{"aria-labelledby":`arm-summary-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`ARM SUMMARY`}),(0,z.jsx)(`h2`,{id:`arm-summary-title`,children:`Comparable outcomes, denominator first`})]}),(0,z.jsx)(`p`,{children:`Only one score-countable run per declared case × arm cell is selected.`})]}),(0,z.jsx)(`div`,{className:`benchmark-arm-grid`,children:e.arms.map(e=>{let n=Object.values(e.binary_outcomes)[0];return(0,z.jsxs)(`article`,{className:`benchmark-arm-card`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:e.arm_role}),(0,z.jsx)(`h3`,{children:e.arm_id})]}),(0,z.jsx)(gT,{tone:e.coverage_rate===1?`success`:`warning`,children:e.coverage_rate===1?`Complete`:`Provisional`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[`Primary · `,t]}),(0,z.jsx)(`dd`,{children:mT(e,t)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Score-countable coverage`}),(0,z.jsxs)(`dd`,{children:[e.selected_score_countable_case_count,`/`,e.intended_case_count]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Binary success`}),(0,z.jsx)(`dd`,{children:n?`${n.success_count}/${n.case_denominator}`:`Not declared`})]})]})]},e.arm_id)})})]}),(0,z.jsxs)(`section`,{"aria-labelledby":`contrast-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`MATCHED CONTRASTS`}),(0,z.jsx)(`h2`,{id:`contrast-title`,children:`Direction counts on eligible pairs`})]}),(0,z.jsx)(`p`,{children:`Raw run volume is never used as a comparison denominator.`})]}),(0,z.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Candidate arm`}),(0,z.jsx)(`th`,{children:`Matched denominator`}),(0,z.jsx)(`th`,{children:`Improved`}),(0,z.jsx)(`th`,{children:`Flat`}),(0,z.jsx)(`th`,{children:`Regressed`}),(0,z.jsx)(`th`,{children:`Binary transitions`})]})}),(0,z.jsxs)(`tbody`,{children:[Object.entries(e.contrasts).map(([e,t])=>(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`strong`,{children:e})}),(0,z.jsx)(`td`,{children:t.matched_pair_denominator}),(0,z.jsx)(`td`,{className:`benchmark-positive`,children:t.primary_metric_directions.improved}),(0,z.jsx)(`td`,{children:t.primary_metric_directions.flat}),(0,z.jsx)(`td`,{className:`benchmark-negative`,children:t.primary_metric_directions.regressed}),(0,z.jsx)(`td`,{children:Object.entries(t.binary_metric_transitions).map(([e,t])=>`${e}: 0→1 ${t[`0_to_1`]}, 1→0 ${t[`1_to_0`]}, same ${t.same}`).join(` · `)||`—`})]},e)),Object.keys(e.contrasts).length===0&&(0,z.jsx)(`tr`,{children:(0,z.jsx)(`td`,{colSpan:6,children:`No matched comparisons are countable yet.`})})]})]})})]}),(0,z.jsxs)(`section`,{"aria-labelledby":`runtime-health-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`RUNTIME HEALTH`}),(0,z.jsx)(`h2`,{id:`runtime-health-title`,children:`Qualified observations, without execution authority`})]}),(0,z.jsxs)(`p`,{children:[e.campaign.runtime_observation_count,` public-safe runtime observations.`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-runtime-list`,children:[Object.entries(e.campaign.runtime_classification_counts).map(([e,t])=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{children:e}),(0,z.jsx)(`strong`,{children:t})]},e)),e.campaign.runtime_observation_count===0&&(0,z.jsx)(`p`,{className:`benchmark-muted`,children:`No runtime observations uploaded.`})]})]})]})}function vT({packet:e}){return(0,z.jsx)(`div`,{className:`benchmark-detail-grid`,children:e.arms.map(t=>(0,z.jsxs)(`article`,{className:`benchmark-detail-card`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:t.arm_role}),(0,z.jsx)(`h2`,{children:t.arm_id})]}),(0,z.jsxs)(gT,{tone:t.coverage_rate===1?`success`:`warning`,children:[t.selected_score_countable_case_count,`/`,t.intended_case_count,` countable`]})]}),(0,z.jsx)(`div`,{className:`benchmark-factor-row`,children:Object.entries(t.factor_assignments).map(([e,t])=>(0,z.jsxs)(`span`,{children:[e,`: `,(0,z.jsx)(`strong`,{children:t})]},e))}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[e.design.metric_catalog.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[e.role,` · `,e.metric_name]}),(0,z.jsx)(`dd`,{children:mT(t,e.metric_name)})]},e.metric_name)),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runs terminal / observed`}),(0,z.jsxs)(`dd`,{children:[t.terminal_run_count,`/`,t.run_count]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Median duration`}),(0,z.jsx)(`dd`,{children:dT(t.effort.duration_ms?.median)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocols`}),(0,z.jsx)(`dd`,{children:fT(t.protocol_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revisions`}),(0,z.jsx)(`dd`,{children:fT(t.runner_revision_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Orchestrator runtimes`}),(0,z.jsxs)(`dd`,{children:[Object.keys(t.orchestrator_runtime_counts).length||0,` distinct`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Failure classes`}),(0,z.jsx)(`dd`,{children:fT(t.failure_class_counts)})]})]})]},t.arm_id))})}function yT({packet:e,primaryMetric:t,onOpenRun:n}){return(0,z.jsx)(`div`,{className:`benchmark-table-shell benchmark-wide-table`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Case`}),(0,z.jsx)(`th`,{children:`Design status`}),(0,z.jsx)(`th`,{children:`Largest eligible delta`}),e.arms.map(e=>(0,z.jsx)(`th`,{children:e.arm_id},e.arm_id))]})}),(0,z.jsx)(`tbody`,{children:e.cases.map(r=>{let i=hT(r,t);return(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`strong`,{children:r.case_id})}),(0,z.jsx)(`td`,{children:(0,z.jsx)(gT,{tone:r.complete_declared_design?`success`:`warning`,children:r.complete_declared_design?`Complete`:`Provisional`})}),(0,z.jsx)(`td`,{className:i?.direction===`improved`?`benchmark-positive`:i?.direction===`regressed`?`benchmark-negative`:void 0,children:i?.text??`—`}),r.arms.map(r=>(0,z.jsx)(`td`,{children:r.selected_run_id&&r.score_countable?(0,z.jsxs)(`button`,{className:`benchmark-cell-link`,onClick:()=>n(r.selected_run_id),type:`button`,children:[(0,z.jsxs)(`span`,{children:[t,`: `,pT(r.metrics[t])]}),e.design.metric_catalog.filter(e=>e.metric_name!==t).map(e=>(0,z.jsxs)(`small`,{className:`benchmark-cell-metric`,children:[e.metric_name,`: `,pT(r.metrics[e.metric_name])]},e.metric_name)),(0,z.jsxs)(`small`,{children:[`Countable · `,dT(r.effort.duration_ms),` `,(0,z.jsx)(sm,{"aria-hidden":`true`,size:12})]}),r.insight&&(0,z.jsxs)(`small`,{children:[r.insight.failure_class,` · `,r.insight.confidence]})]}):(0,z.jsx)(`span`,{className:`benchmark-muted`,children:`Not countable`})},r.arm_id))]},r.case_id)})})]})})}function bT({run:e,packet:t}){return(0,z.jsxs)(`aside`,{"aria-label":`Run detail for ${e.run_id}`,className:`benchmark-run-detail`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:`RUN DETAIL`}),(0,z.jsx)(`h2`,{children:e.run_id})]}),(0,z.jsx)(gT,{tone:e.countability.score_countable?`success`:`warning`,children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list benchmark-run-facts`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Case / arm`}),(0,z.jsxs)(`dd`,{children:[e.case_id,` · `,e.arm_id]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Lifecycle`}),(0,z.jsxs)(`dd`,{children:[e.status,` · `,e.observed_at]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocol`}),(0,z.jsx)(`dd`,{children:e.protocol_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Qualification`}),(0,z.jsxs)(`dd`,{children:[`Integrity `,e.countability.integrity_qualified?`qualified`:`not qualified`,` · result `,e.countability.official_result_present?`present`:`missing`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Treatment fidelity`}),(0,z.jsx)(`dd`,{children:e.treatment_fidelity})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Effort`}),(0,z.jsxs)(`dd`,{children:[dT(e.effort.duration_ms),` · `,uT(e.effort.agent_steps),` steps · `,uT(e.effort.token_count),` tokens`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revision`}),(0,z.jsx)(`dd`,{children:e.runner_revision??`—`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Upload provenance`}),(0,z.jsxs)(`dd`,{children:[e.upload_provenance.producer_id,` · `,e.upload_provenance.source_revision]})]})]}),(0,z.jsx)(`div`,{className:`benchmark-run-metrics`,children:t.design.metric_catalog.map(t=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{children:t.metric_name}),(0,z.jsx)(`strong`,{children:pT(e.metrics[t.metric_name])})]},t.metric_name))}),e.redacted_insight&&(0,z.jsxs)(`div`,{className:`benchmark-insight`,children:[(0,z.jsxs)(`span`,{className:`benchmark-mono`,children:[`REDACTED CASE INSIGHT · `,e.redacted_insight.confidence]}),(0,z.jsx)(`p`,{children:e.redacted_insight.causal_summary}),(0,z.jsxs)(`small`,{children:[`Implication: `,e.redacted_insight.implication]}),(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[`Next probe: `,e.redacted_insight.next_probe]}),!!e.redacted_insight.evidence_refs?.length&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[`Evidence: `,e.redacted_insight.evidence_refs.join(`, `)]})]})]})]})}function xT({packet:e,selectedRunId:t,onSelectRun:n}){let r=e.runs.find(e=>e.run_id===t)??e.runs[0];return(0,z.jsxs)(`div`,{className:`benchmark-runs-layout`,children:[(0,z.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Run`}),(0,z.jsx)(`th`,{children:`Case`}),(0,z.jsx)(`th`,{children:`Arm`}),(0,z.jsx)(`th`,{children:`Status`}),(0,z.jsx)(`th`,{children:`Countability`})]})}),(0,z.jsx)(`tbody`,{children:e.runs.map(e=>(0,z.jsxs)(`tr`,{"aria-selected":e.run_id===r?.run_id,children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`button`,{className:`benchmark-run-link`,onClick:()=>n(e.run_id),type:`button`,children:e.run_id})}),(0,z.jsx)(`td`,{children:e.case_id}),(0,z.jsx)(`td`,{children:e.arm_id}),(0,z.jsx)(`td`,{children:e.status}),(0,z.jsx)(`td`,{children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]},e.run_id))})]})}),r&&(0,z.jsx)(bT,{packet:e,run:r})]})}function ST(){let e=LT.useSearch(),t=LT.useNavigate(),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(null),[o,s]=(0,R.useState)(0),c=(0,R.useMemo)(()=>{let t=e.dashboardUrl||`/chat/benchmark-study.example.json`;try{return{url:sT(t,window.location.href),error:null}}catch(e){return{url:``,error:e instanceof Error?e.message:`Invalid dashboard source`}}},[e.dashboardUrl]);if((0,R.useEffect)(()=>{let e=!0;return r(null),a(null),c.error?(a(c.error),()=>{e=!1}):(fetch(c.url,{cache:`no-store`}).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status} while loading the dashboard packet`);return oT(await e.json())}).then(t=>{e&&r(t)}).catch(t=>{e&&a(t instanceof Error?t.message:`Unable to load dashboard packet`)}),()=>{e=!1})},[o,c]),(0,R.useEffect)(()=>{n&&(document.title=`${n.design.labels.title??n.study_id} · LoopX Benchmark`)},[n]),i)return(0,z.jsxs)(`main`,{className:`benchmark-page benchmark-loading`,children:[(0,z.jsx)(ym,{"aria-hidden":`true`}),(0,z.jsx)(`h1`,{children:`Dashboard packet unavailable`}),(0,z.jsx)(`p`,{children:i}),(0,z.jsxs)(`button`,{onClick:()=>s(e=>e+1),type:`button`,children:[(0,z.jsx)(Qm,{"aria-hidden":`true`,size:16}),` Retry readback`]})]});if(!n)return(0,z.jsxs)(`main`,{"aria-busy":`true`,className:`benchmark-page benchmark-loading`,children:[(0,z.jsx)(im,{"aria-hidden":`true`}),(0,z.jsx)(`h1`,{children:`Reading benchmark study`}),(0,z.jsx)(`p`,{children:`Validating the public-safe dashboard packet…`})]});let l=n.design.metric_catalog.find(e=>e.role===`primary`)?.metric_name??`primary`,u=(n,r=e.runId)=>t({search:e=>({...e,view:n,runId:r})}),d=new URL(c.url).pathname;return(0,z.jsxs)(`main`,{className:`benchmark-page`,children:[(0,z.jsxs)(`header`,{className:`benchmark-hero`,children:[(0,z.jsxs)(`div`,{className:`benchmark-hero-topline`,children:[(0,z.jsx)(`a`,{className:`benchmark-wordmark`,href:`/chat/`,children:`LoopX`}),(0,z.jsxs)(`div`,{className:`benchmark-readonly`,children:[(0,z.jsx)(oh,{"aria-hidden":`true`,size:15}),` Derived read-only projection`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-hero-grid`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`p`,{className:`benchmark-kicker`,children:[`BENCHMARK STUDY / `,n.benchmark_id]}),(0,z.jsxs)(`div`,{className:`benchmark-title-row`,children:[(0,z.jsx)(`h1`,{children:n.design.labels.title??n.study_id}),(0,z.jsx)(gT,{tone:n.status===`complete`?`success`:`warning`,children:n.status})]}),(0,z.jsx)(`p`,{className:`benchmark-lead`,children:`One declared study, explicit denominators, and the same countability rules from campaign summary to exact run.`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-identity`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Study`}),(0,z.jsx)(`dd`,{children:n.study_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocol`}),(0,z.jsx)(`dd`,{children:n.design.protocol_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Case set`}),(0,z.jsx)(`dd`,{children:n.design.case_set.case_set_id})]})]})]}),(0,z.jsxs)(`div`,{className:`benchmark-kpi-grid`,children:[(0,z.jsxs)(`article`,{children:[(0,z.jsx)(wm,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Score-countable cells`}),(0,z.jsxs)(`strong`,{children:[n.campaign.selected_score_countable_cell_count,(0,z.jsxs)(`small`,{children:[` / `,n.campaign.intended_cell_denominator]})]}),(0,z.jsxs)(`p`,{children:[lT(n.campaign.selected_score_countable_coverage_rate),` declared coverage`]})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(bm,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Complete designs`}),(0,z.jsxs)(`strong`,{children:[n.campaign.complete_declared_design_case_count,(0,z.jsxs)(`small`,{children:[` / `,n.campaign.intended_case_count]})]}),(0,z.jsx)(`p`,{children:`Cases with every declared arm`})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(sm,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Matched comparisons`}),(0,z.jsx)(`strong`,{children:n.campaign.matched_pair_countable_count}),(0,z.jsx)(`p`,{children:`Eligible pairs only`})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(im,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`In flight`}),(0,z.jsx)(`strong`,{children:n.campaign.in_flight_run_count}),(0,z.jsx)(`p`,{children:n.status===`provisional`?`Coverage remains provisional`:`Declared coverage complete`})]})]})]}),(0,z.jsxs)(`nav`,{"aria-label":`Benchmark dashboard views`,className:`benchmark-tabs`,children:[cT.map(t=>(0,z.jsx)(`button`,{"aria-current":e.view===t.id?`page`:void 0,onClick:()=>u(t.id),type:`button`,children:t.label},t.id)),(0,z.jsxs)(`button`,{className:`benchmark-refresh`,onClick:()=>s(e=>e+1),type:`button`,children:[(0,z.jsx)(Qm,{"aria-hidden":`true`,size:14}),` Refresh local readback`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-content`,children:[e.view===`campaign`&&(0,z.jsx)(_T,{packet:n,primaryMetric:l}),e.view===`arms`&&(0,z.jsx)(vT,{packet:n}),e.view===`cases`&&(0,z.jsx)(yT,{onOpenRun:e=>u(`runs`,e),packet:n,primaryMetric:l}),e.view===`runs`&&(0,z.jsx)(xT,{onSelectRun:e=>u(`runs`,e),packet:n,selectedRunId:e.runId})]}),(0,z.jsxs)(`footer`,{className:`benchmark-footer`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(oh,{"aria-hidden":`true`,size:16}),(0,z.jsxs)(`span`,{children:[`Scores: `,n.authority.score_source]}),(0,z.jsx)(`span`,{children:`Dashboard cannot launch, grade, or mutate runs.`})]}),(0,z.jsxs)(`code`,{title:d,children:[`local`,d]})]})]})}var CT=J({goalId:W().optional().default(``),statusUrl:W().optional().default(``)}),wT=J({goalId:W().optional().default(``),mode:Y([`showcase`,`developer`,`ops`]).optional().default(`showcase`),statusUrl:W().optional().default(``),todoLane:Y([`all`,`user`,`agent`]).optional().default(`all`),todoQuery:W().optional().default(``)}),TT=wT.omit({mode:!0}),ET=J({dashboardUrl:W().optional().default(``),view:Y([`campaign`,`arms`,`cases`,`runs`]).optional().default(`campaign`),runId:W().optional().default(``)});function DT(){let e=`https://loopx-project.github.io/loopx/docs/showcases/index.en.html`;return(0,R.useEffect)(()=>{window.location.replace(e)},[]),(0,z.jsx)(`a`,{href:e,children:`Open LoopX cases / 浏览案例`})}function OT({goalId:e,statusUrl:t}){let n=t?bh(t,window.location.href):null;return n?.error?(0,z.jsx)(`main`,{role:`alert`,children:n.error}):(0,z.jsx)(ii,{replace:!0,to:`/`,search:{goalId:e,statusUrl:t}})}function kT(){let e=NT.useSearch();return e.mode===`ops`?(0,z.jsx)(OT,{...e}):e.mode===`developer`?(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`}):(0,z.jsx)(DT,{})}function AT(){return(0,z.jsx)(OT,{...PT.useSearch()})}var jT=Ci({component:()=>(0,z.jsx)(Mi,{}),errorComponent:()=>(0,z.jsxs)(`main`,{role:`alert`,className:`p-8`,children:[(0,z.jsx)(`h1`,{children:`页面暂时无法显示 / Page unavailable`}),(0,z.jsx)(`p`,{children:`请重新加载页面;这不会执行任务。 / Reloading does not execute tasks.`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>window.location.reload(),children:`重新加载 / Reload`})]})}),MT=xi({getParentRoute:()=>jT,path:`/`,validateSearch:e=>CT.parse(e),component:Fw}),NT=xi({getParentRoute:()=>jT,path:`/frontstage`,validateSearch:e=>wT.parse(e),component:kT}),PT=xi({getParentRoute:()=>jT,path:`/deprecated/frontstage/ops`,validateSearch:e=>TT.parse(e),component:AT}),FT=xi({getParentRoute:()=>jT,path:`/frontstage/developer`,component:()=>(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`})}),IT=xi({getParentRoute:()=>jT,path:`/developers/projections`,component:Yw}),LT=xi({getParentRoute:()=>jT,path:`/benchmarks/study`,validateSearch:e=>ET.parse(e),component:ST}),RT=jT.addChildren([MT,NT,PT,FT,IT,LT]);function zT(e){return!e||e===`/`||e===`./`?`/`:(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}var BT=Li({routeTree:RT,basepath:zT(`/chat/`),trailingSlash:`preserve`}),VT=document.getElementById(`root`);if(!VT)throw Error(`Root element not found`);var HT=new je({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1,staleTime:1e4}}});(0,Vi.createRoot)(VT).render((0,z.jsx)(Fe,{client:HT,children:(0,z.jsx)(qi,{children:(0,z.jsx)(Bi,{router:BT})})})); \ No newline at end of file diff --git a/loopx/web/chat/assets/index-C_Imc7ZG.css b/loopx/web/chat/assets/index-C_Imc7ZG.css deleted file mode 100644 index 02d9fc1b18..0000000000 --- a/loopx/web/chat/assets/index-C_Imc7ZG.css +++ /dev/null @@ -1 +0,0 @@ -.personal-collaboration{border:1px solid var(--color-border,#ebebeb);overflow-wrap:anywhere;border-radius:6px;margin-top:12px;padding:12px 16px}.personal-collaboration header{flex-wrap:wrap;justify-content:space-between;gap:8px;display:flex}.personal-collaboration header span,.personal-collaboration-status{opacity:.75;font-size:12px}.personal-collaboration-status{flex-wrap:wrap;gap:8px 16px;display:flex}.personal-collaboration summary{cursor:pointer;align-content:center;min-height:44px;display:list-item}.personal-collaboration h4{margin:12px 0 4px;font-size:13px}.personal-collaboration p{white-space:pre-wrap}.personal-collaboration ul{padding-left:20px}.personal-collaboration small{font-family:var(--font-mono);font-size:11px;display:block}.personal-collaboration summary:focus-visible{outline:2px solid var(--color-link,#0070f3);outline-offset:2px}.goal-loopx-mode{color:var(--pw-text,#171717);border-bottom:1px solid var(--pw-line,#ebebeb);padding:8px 26px;font-size:13px}.goal-loopx-mode-bar,.goal-loopx-mode-actions{align-items:center;gap:8px;display:flex}.goal-loopx-mode-bar{justify-content:space-between;gap:16px}.goal-loopx-mode-status{align-items:center;gap:8px;min-width:0;font-weight:500;display:inline-flex}.goal-loopx-mode-status>i{background:var(--pw-muted,#666);border-radius:50%;flex:0 0 7px;width:7px;height:7px}.goal-loopx-mode-status[data-active=true]>i{background:var(--pw-green,#13804a)}.goal-loopx-mode p{color:var(--pw-muted,#666);margin:8px 0;font-size:12px;line-height:1.6}.goal-loopx-mode .personal-composer-error{color:var(--pw-red,#b42318)}.goal-loopx-mode button{border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);min-width:44px;min-height:44px;color:inherit;font:inherit;cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:8px 12px;display:inline-flex}.goal-loopx-mode .goal-loopx-primary{border-color:var(--pw-line-strong,#ddd);font-weight:500}.goal-loopx-mode .goal-loopx-team-trigger{background:0 0;border-color:#0000}.goal-loopx-mode button:disabled{opacity:.5;cursor:default}.goal-loopx-mode button:focus-visible,.goal-loopx-mode input:focus-visible,.goal-loopx-mode select:focus-visible,.goal-loopx-mode summary:focus-visible{outline-offset:2px;outline:2px solid #0070f3}.goal-loopx-alert-dot{background:var(--pw-amber,#a66b00);border-radius:50%;width:7px;height:7px}.goal-loopx-mode .goal-loopx-review-notice{color:var(--pw-amber,#a66b00);text-align:left;background:0 0;border:0;padding-inline:0}.goal-loopx-dialog{border:1px solid var(--pw-line,#ebebeb);background:var(--pw-bg,#fafafa);width:min(680px,100vw - 32px);max-height:calc(100dvh - 48px);color:var(--pw-text,#171717);overscroll-behavior:contain;border-radius:16px;margin:auto;padding:0;overflow:auto}.goal-loopx-dialog::backdrop{background:#00000047}.goal-loopx-dialog-content{padding:24px}.goal-loopx-dialog header{justify-content:space-between;align-items:center;gap:16px;display:flex}.goal-loopx-dialog h2{letter-spacing:-.02em;margin:0;font-size:20px;font-weight:600}.goal-loopx-dialog h3{margin:24px 0 8px;font-size:13px;font-weight:600}.goal-loopx-mode-settings{grid-template-columns:1fr 1fr;gap:16px;margin-block:24px;display:grid}.goal-loopx-mode-settings label{flex-direction:column;gap:8px;display:flex}.goal-loopx-mode-settings input,.goal-loopx-mode-settings select{border:1px solid var(--pw-line,#ddd);background:var(--pw-surface,#fff);width:100%;min-width:0;min-height:44px;color:inherit;font:inherit;border-radius:6px;padding:8px}.goal-loopx-mode-settings label:nth-child(3),.goal-loopx-mode-settings p{grid-column:1/-1}.goal-loopx-message-mode{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 8px;font-size:12px;display:flex}.goal-loopx-message-mode select{font:inherit;color:inherit;border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);border-radius:6px;min-height:44px;padding:6px}.goal-team-work ul{margin:8px 0 24px;padding:0;list-style:none}.goal-team-work li{border-bottom:1px solid var(--pw-line,#ebebeb);overflow-wrap:anywhere;padding:12px 0}.goal-team-bindings li>div,.goal-team-work-actions{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.goal-team-work code{overflow-wrap:anywhere;white-space:normal;padding-bottom:8px;font-size:12px;display:block}.goal-team-work summary{cursor:pointer;min-height:44px;color:var(--pw-muted,#666);padding:12px 0;font-size:12px}@media (width<=640px){.goal-loopx-mode{padding:6px 14px}.goal-loopx-mode-bar{flex-wrap:wrap;gap:0}.goal-loopx-mode-status{min-height:32px}.goal-loopx-mode-actions{gap:2px;margin-left:auto}.goal-loopx-mode-actions button{padding-inline:8px}.goal-loopx-mode-settings{grid-template-columns:1fr}.goal-loopx-dialog-content{padding:16px}}.goal-team-evidence{border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);border-radius:12px;margin-block:16px;padding:16px}.goal-team-evidence h3,.goal-team-evidence h4{margin:0;font-size:13px}.goal-team-evidence article{margin-block:16px}.goal-team-evidence pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:320px;font:12px/1.6 var(--font-mono,monospace);border:1px solid var(--pw-line,#ebebeb);border-radius:6px;padding:12px;overflow:auto}.goal-team-evidence label{gap:8px;font-weight:500;display:grid}.goal-team-evidence textarea{box-sizing:border-box;resize:vertical;border:1px solid var(--pw-line,#ebebeb);background:var(--pw-bg,#fafafa);width:100%;min-height:88px;color:inherit;font:inherit;border-radius:6px;padding:8px}.goal-team-evidence textarea:focus-visible,.goal-team-evidence pre:focus-visible{outline-offset:2px;outline:2px solid #0070f3}.goal-team-control{border-top:1px solid var(--pw-line,#ebebeb);padding-top:16px}.goal-team-evidence [role=alert]{color:var(--pw-red,#b42318)}.goal-team-lineage{border-block:1px solid var(--pw-line,#ebebeb);margin-block:16px;padding-block:16px}.goal-team-lineage ul{margin:12px 0;padding:0;list-style:none}.goal-team-lineage li{border-left:2px solid var(--pw-line,#ebebeb);overflow-wrap:anywhere;gap:8px;padding:0 0 16px 16px;display:grid}.goal-team-lineage button{overflow-wrap:anywhere;text-align:start;justify-self:start;max-width:100%}.goal-loopx-dialog:has(.goal-team-comparison){width:min(1040px,100vw - 32px)}.goal-team-comparison{margin-block:24px}.goal-team-comparison-heading{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.goal-team-comparison-heading h4{letter-spacing:-.02em;font-size:20px}.goal-team-comparison-heading>span{color:var(--pw-muted,#666);font-size:12px}.goal-team-comparison-sources{flex-wrap:wrap;gap:8px;margin-block:16px;display:flex}.goal-team-comparison-sources button{overflow-wrap:anywhere;text-align:left;flex-direction:column;align-items:flex-start;max-width:100%}.goal-team-comparison-sources button>span{color:var(--pw-muted,#666);font-size:12px}.goal-team-comparison-sources button[aria-pressed=true]{border-color:var(--pw-text,#171717)}.goal-team-comparison-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.goal-team-comparison-grid article{border:1px solid var(--pw-line,#ebebeb);border-radius:12px;min-width:0;margin:0;overflow:hidden}.goal-team-comparison-grid header{border-bottom:1px solid var(--pw-line,#ebebeb);overflow-wrap:anywhere;gap:4px;padding:16px;display:grid}.goal-team-comparison-grid header span{color:var(--pw-muted,#666);font-size:12px}.goal-team-comparison-grid pre{border:0;border-radius:0;max-height:400px;margin:0;padding:16px;font-size:13px;line-height:1.8}.goal-team-comparison-grid pre span[data-changed=true]{background:color-mix(in srgb, var(--pw-text,#171717) 7%, transparent);text-decoration:underline;-webkit-text-decoration-color:var(--pw-muted,#666);text-decoration-color:var(--pw-muted,#666);text-underline-offset:4px}.goal-team-comparison select{background:var(--pw-surface,#fff);min-height:44px;color:inherit;border:1px solid var(--pw-line,#ebebeb);border-radius:6px;padding:8px}@media (width<=640px){.goal-team-comparison-grid{grid-template-columns:1fr}}.goal-team-artifact>header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px;display:flex}.goal-team-artifact>header h4{color:var(--pw-muted);font-size:12px;font-weight:500}.goal-team-report{background:var(--pw-surface,#fff);color:var(--pw-text,#171717);overflow-wrap:anywhere;padding:24px}.goal-team-report .personal-md{gap:20px;font-size:15px;line-height:1.8}.goal-team-report .personal-md p{font-size:inherit;line-height:inherit;color:inherit;margin:0}.goal-team-report .personal-md .is-h1{letter-spacing:-.03em;font-size:26px;font-weight:600;line-height:1.3}.goal-team-report .personal-md .is-h2{margin-top:8px;font-size:18px;font-weight:600}.goal-team-report .personal-md-list{list-style:revert;margin:0;padding-left:24px}.goal-team-report .personal-md-list li{border:0;padding:0}.personal-md-table-scroll{min-width:0;max-width:100%;overflow-x:auto}.personal-md-table-scroll table{border-collapse:collapse;width:100%;font-size:14px;line-height:1.6}.personal-md-table-scroll th,.personal-md-table-scroll td{border-bottom:1px solid var(--pw-line,#ebebeb);text-align:left;vertical-align:top;padding:12px}.personal-md-table-scroll th{background:var(--pw-bg,#fafafa);font-weight:500}.goal-team-comparison-grid .goal-team-report{max-height:480px;overflow:auto}.goal-team-comparison-grid .goal-team-report .personal-md{font-size:14px}.goal-team-results{border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);width:min(960px,100%);color:var(--pw-text,#171717);border-radius:12px;margin:16px auto 24px;padding:24px}.goal-team-results>header{justify-content:space-between;align-items:center;gap:16px;display:flex}.goal-team-results h3{margin:0;font-size:16px;font-weight:600}.goal-team-results p{color:var(--pw-muted);font-size:12px;line-height:1.7}.goal-team-results [role=alert]{color:var(--pw-red,#b42318)}.goal-team-results button,.goal-team-results select{border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);min-height:44px;color:inherit;font:inherit;cursor:pointer;border-radius:6px;padding:8px 12px}.goal-team-results button[aria-pressed=true]{border-color:var(--pw-text)}.goal-team-results button:disabled{opacity:.5;cursor:default}.goal-team-results summary{cursor:pointer;min-height:44px;padding:12px 0;font-size:12px}.goal-team-results code{overflow-wrap:anywhere}.goal-team-report table code{white-space:pre;overflow-wrap:normal;word-break:normal}.goal-team-results pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:400px;font:13px/1.7 var(--font-mono,monospace);background:var(--pw-bg);padding:16px;overflow:auto}.goal-team-results h3{letter-spacing:-.02em;font-size:20px}.goal-team-results>header>button{align-items:center;gap:8px;display:inline-flex}.goal-team-results-layout{grid-template-columns:minmax(150px,190px) minmax(0,1fr);gap:24px;margin-top:24px;display:grid}.goal-team-result-list{flex-direction:column;gap:8px;min-width:0;display:flex}.goal-team-result-list button{align-items:flex-start;gap:10px;display:flex}.goal-team-result-list button>svg{flex-shrink:0;margin-top:2px}.goal-team-result-list button>span{gap:4px;min-width:0;display:grid}.goal-team-result-list button strong{font-size:13px;font-weight:500}.goal-team-result-list button small{color:var(--pw-muted,#666);font:11px/1.5 var(--font-mono,monospace)}.goal-team-result-check{visibility:hidden;margin-left:auto}.goal-team-result-list button[aria-pressed=true] .goal-team-result-check{visibility:visible}.goal-team-result-reader{border-left:1px solid var(--pw-line);min-width:0;padding-left:24px}.goal-team-results .goal-team-report{padding:24px 0}.goal-team-result-reader>label{flex-wrap:wrap;align-items:center;gap:12px;font-size:12px;display:flex}.goal-team-result-reader select{max-width:100%}.goal-team-result-list button{overflow-wrap:anywhere;text-align:start;max-width:100%;font-size:13px}.goal-team-results .goal-team-artifact>header{margin-bottom:0}.goal-team-results :focus-visible,.goal-team-report:focus-visible,.personal-md-table-scroll:focus-visible{outline:2px solid var(--pw-blue-ink,#0070f3);outline-offset:2px}@media (width<=640px){.goal-team-results{padding:16px}.goal-team-results-layout{grid-template-columns:minmax(0,1fr);gap:16px}.goal-team-result-list{flex-direction:row;padding-bottom:4px;overflow-x:auto}.goal-team-result-list button{flex:none;max-width:240px}.goal-team-result-reader{border-left:0;border-top:1px solid var(--pw-line);padding-top:16px;padding-left:0}.goal-team-report{padding:16px 0}.goal-team-comparison-grid .goal-team-report{padding:16px}.goal-team-report .personal-md .is-h1{font-size:22px}}.delivery-review{min-width:0;color:var(--pw-text);gap:20px;padding:0;display:grid}.delivery-review h2,.delivery-review h3,.delivery-review h4,.delivery-review p{margin:0}.delivery-review h2{font-size:20px;font-weight:600;line-height:28px}.delivery-review h3{font-size:16px;font-weight:600;line-height:24px}.delivery-review h4{font-size:14px;line-height:20px}.delivery-review p{overflow-wrap:anywhere;line-height:1.6}.delivery-review button,.delivery-review select,.delivery-review input{color:inherit;font:inherit}.delivery-review button,.delivery-review select{border:1px solid var(--pw-line);background:var(--pw-card);cursor:pointer;border-radius:6px;min-height:44px;padding:8px 12px}.delivery-review button:disabled{opacity:.5;cursor:not-allowed}.delivery-review button[aria-pressed=true]{border-color:var(--pw-text);background:var(--pw-hover,var(--pw-card))}.delivery-review :is(button,input,select,summary,[tabindex]):focus-visible{outline:2px solid var(--color-link,#0070f3);outline-offset:3px}.delivery-review-toolbar,.delivery-chain-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.delivery-review-toolbar>div,.delivery-chain-toolbar>div,.delivery-source-actions{flex-wrap:wrap;gap:8px;display:flex}.delivery-review-toolbar button,.delivery-source-actions button{align-items:center;gap:8px;display:inline-flex}.delivery-snapshot-time,.delivery-boundary,.delivery-chain-toolbar>span{color:var(--pw-muted);font-size:12px}.delivery-notice{border:1px solid var(--pw-line);border-left:3px solid var(--pw-amber,#a96500);border-radius:6px;padding:12px 16px;font-size:13px}.delivery-notice dl{flex-wrap:wrap;gap:8px 24px;margin:12px 0 0;display:flex}.delivery-notice dl>div{gap:8px;display:flex}.delivery-notice dd{margin:0;font-weight:600}.delivery-chain{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px;min-width:0;overflow:hidden}.delivery-chain-toolbar{border-bottom:1px solid var(--pw-line);padding:16px}.delivery-chain-toolbar h3{margin-right:auto}.delivery-filters{border-bottom:1px solid var(--pw-line);flex-wrap:wrap;gap:8px;padding:12px 16px;display:flex}.delivery-filters label{flex:1;align-items:center;gap:8px;min-width:160px;display:flex}.delivery-filters input{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:6px;width:100%;min-width:0;padding:10px 8px}.delivery-map-scroll{overscroll-behavior:contain;max-height:540px;overflow:auto}.delivery-map{width:960px;min-height:172px;position:relative}.delivery-map-heading{color:var(--pw-muted);font-size:12px;font-weight:500;position:absolute;top:16px}.delivery-map svg{color:var(--pw-muted);pointer-events:none;position:absolute;inset:0}.delivery-map svg>path{fill:none;stroke:currentColor;stroke-width:1px;opacity:.3}.delivery-map svg>path.is-related{stroke-width:2px;opacity:1}.delivery-map .delivery-map-node{text-align:left;background:var(--pw-card);border-radius:12px;gap:8px;width:280px;height:100px;padding:12px;display:grid;position:absolute}.delivery-map-node>span{color:var(--pw-muted);justify-content:space-between;align-items:center;font-size:11px;display:flex}.delivery-map-node>strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.delivery-map-node>small{color:var(--pw-muted);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.delivery-review em{color:var(--pw-muted);font-size:11px;font-style:normal}.delivery-review em[data-state=blocked],.delivery-review em[data-state=waiting]{color:var(--pw-amber,#a96500)}.delivery-node-list,.delivery-relations{margin:0;padding:0;list-style:none}.delivery-node-list li+li{border-top:1px solid var(--pw-line)}.delivery-node-list button{text-align:left;border-radius:0;grid-template-columns:88px minmax(0,1fr) 120px 72px;align-items:center;gap:12px;width:100%;padding:16px;display:grid}.delivery-node-list strong,.delivery-node-list small{overflow-wrap:anywhere}.delivery-node-list span,.delivery-node-list small{color:var(--pw-muted);font-size:12px}.delivery-node-detail{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px;gap:16px;padding:20px;display:grid}.delivery-node-detail header{gap:8px;display:grid}.delivery-node-detail header>span,.delivery-node-detail header>p,.delivery-source-actions p{color:var(--pw-muted);font-size:12px}.delivery-node-detail summary{cursor:pointer;min-height:44px;padding-top:12px}.delivery-node-detail code,.delivery-node-detail details p{overflow-wrap:anywhere;font-size:12px}.delivery-relations{gap:12px;display:grid}.delivery-relations li{border-bottom:1px solid var(--pw-line);padding-bottom:12px}.delivery-relations li>div{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px;display:grid}.delivery-relations button{text-align:left;overflow-wrap:anywhere;font-size:12px}.delivery-relations span{align-items:center;gap:4px;font-size:11px;display:flex}.delivery-relations p{color:var(--pw-muted);padding-top:8px;font-size:12px}.delivery-empty{padding:24px}.delivery-acceptance-contract{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px;min-width:0}.delivery-acceptance-contract summary{cursor:pointer;min-height:44px;padding:12px 16px;font-weight:500}.delivery-acceptance-content{gap:16px;padding:0 16px 16px;font-size:14px;display:grid}.delivery-acceptance-content ul{margin:0;padding-left:20px}.delivery-acceptance-content :is(li,dd,code){overflow-wrap:anywhere}.delivery-acceptance-source{gap:8px;margin:0;display:grid}.delivery-acceptance-source>div{grid-template-columns:minmax(100px,1fr) minmax(0,3fr);gap:12px;display:grid}.delivery-acceptance-source dt{color:var(--pw-muted)}.delivery-acceptance-source dd{margin:0}.delivery-acceptance-content code{font-family:var(--font-mono);font-size:12px}.delivery-acceptance-tasks{gap:12px;display:grid}.delivery-acceptance-content details{border-top:1px solid var(--pw-line)}.delivery-acceptance-content details summary{padding-left:0}.delivery-acceptance-content a{color:var(--color-link,#0070f3);text-decoration:underline}.delivery-acceptance-content a:focus-visible{outline:2px solid var(--color-link,#0070f3);outline-offset:3px}@media (width<=640px){.delivery-review{gap:16px}.delivery-review-toolbar>div{width:100%}.delivery-review-toolbar button{flex:1;justify-content:center;font-size:12px}.delivery-filters label{flex-basis:100%}.delivery-filters select{flex:1;min-width:0}.delivery-node-list button{grid-template-columns:minmax(0,1fr) auto;gap:8px}.delivery-node-list strong{grid-column:1/-1}.delivery-relations li>div{grid-template-columns:minmax(0,1fr)}.delivery-node-detail{padding:16px}}.delivery-notice summary{cursor:pointer;min-height:24px}.personal-goal-view-panel{min-width:0}.personal-goal-view-panel[hidden]{display:none}.personal-goal-view-panel[data-goal-panel=tasks]{height:100%}.goal-overview{gap:24px;min-width:0;display:grid}.goal-overview h2,.goal-overview h3,.goal-overview p{margin:0}.goal-overview h2{font-size:20px;font-weight:600}.goal-overview h3{font-size:14px;font-weight:600}.goal-overview button{border:1px solid var(--pw-line);background:var(--pw-card);min-height:40px;color:var(--pw-text);font:inherit;cursor:pointer;text-align:left;border-radius:6px;align-items:center;gap:8px;padding:8px 12px;display:inline-flex}.goal-overview button:focus-visible{outline:2px solid var(--pw-blue);outline-offset:3px}.goal-overview-heading,.goal-overview-summary header{justify-content:space-between;align-items:center;gap:16px;display:flex}.goal-overview-heading button,.goal-overview-summary header span{color:var(--pw-muted);font-size:12px}.goal-overview-summary{gap:20px;display:grid}.goal-overview-summary.has-attention{grid-template-columns:1fr 1fr}.goal-overview-summary>section{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px;align-content:start;gap:16px;min-width:0;padding:20px;display:grid}.goal-overview-summary p,.goal-overview-source-note{color:var(--pw-muted);font-size:13px;line-height:1.6}.goal-overview-summary strong,.goal-overview-summary p,.goal-overview-summary button span{overflow-wrap:anywhere}.goal-overview-summary ul{margin:0;padding:0;list-style:none}.goal-overview-summary li+li{margin-top:8px}.goal-overview-summary li button{justify-content:space-between;width:100%;display:flex}.goal-overview-summary .goal-overview-run{grid-template-columns:1fr auto;gap:4px 12px;display:grid}.goal-overview-run small{color:var(--pw-muted);font-size:12px}.goal-overview-run strong{grid-row:2;font-size:13px}.goal-overview-run svg{grid-area:1/2/3}.goal-overview-usage{border-block:1px solid var(--pw-line);flex-wrap:wrap;align-items:center;gap:12px 24px;padding-block:12px;display:flex}.goal-overview-usage h3{color:var(--pw-muted);font-size:12px;font-weight:400}.goal-overview-usage dl{flex-wrap:wrap;gap:12px 24px;margin:0;display:flex}.goal-overview-usage dl>div{align-items:baseline;gap:8px;font-size:12px;display:flex}.goal-overview-usage dt{color:var(--pw-muted)}.goal-overview-usage dd{font-variant-numeric:tabular-nums;margin:0}@media (width<=640px){.goal-overview-summary.has-attention{grid-template-columns:1fr}}.personal-workspace-shell{--pw-bg:#fbfaf7;--pw-card:#fff;--pw-line:#eceae3;--pw-line-strong:#e0ddd4;--pw-muted:#82889a;--pw-faint:#aab0bf;--pw-text:#23262e;--pw-blue:#2f66e9;--pw-blue-ink:#2456c8;--pw-blue-soft:#ebf1fe;--pw-amber:#a86a12;--pw-amber-bg:#fbf2df;--pw-red:#c2402f;--pw-red-bg:#fcecea;--pw-green:#2e7d5b;--pw-green-bg:#e6f3ec;background:var(--pw-bg);min-height:100vh;color:var(--pw-text);grid-template-columns:272px minmax(520px,1fr);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;display:grid}.personal-workspace-shell.has-drawer{grid-template-columns:256px minmax(500px,1fr) minmax(340px,404px)}.personal-workspace-shell.has-task-inspector{grid-template-columns:minmax(520px,1fr) minmax(520px,50vw)}.personal-workspace-shell.has-task-inspector .personal-workspace-sidebar{display:none}.personal-workspace-shell.has-task-inspector.is-task-inspector-full{grid-template-columns:minmax(600px,1fr)}.personal-workspace-shell.is-task-inspector-full .personal-workspace-main{display:none}.personal-workspace-sidebar{border-right:1px solid var(--pw-line);background:#f5f3ee;min-width:0}.personal-workspace-sidebar-inner{width:100%;height:100%}.personal-sr-only{clip:rect(0, 0, 0, 0)!important;white-space:nowrap!important;border:0!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;position:absolute!important;overflow:hidden!important}.personal-workspace-main{min-width:0}.personal-workspace-drawer{border-left:1px solid var(--pw-line);background:#fff;min-width:0;position:relative;box-shadow:-14px 0 36px #1e1c140d}.personal-workspace-drawer[data-drawer-mode=inspector]{z-index:3;width:auto;position:relative;box-shadow:-8px 0 24px #1e284014}.personal-workspace-drawer[data-drawer-mode=inspector-full]{min-width:0;box-shadow:none;grid-column:1}.personal-sidebar-backdrop{display:none}.personal-workspace-shell :focus-visible:not(textarea):not(input){outline-offset:2px;outline:2px solid #5f87ed}.personal-goal-directory{flex-direction:column;width:100%;height:100vh;display:flex;position:sticky;top:0}.personal-sidebar-brand{border-bottom:1px solid var(--pw-line);align-items:center;gap:11px;height:74px;padding:0 18px;display:flex}.personal-sidebar-brand>span:last-child{gap:1px;display:grid}.personal-sidebar-brand strong{letter-spacing:.01em;font-size:16px}.personal-sidebar-brand small{color:var(--pw-muted);font-size:11px}.personal-brand-mark,.personal-manager-icon{color:#fff;background:linear-gradient(135deg,#2f66e9,#6f9bff);border-radius:10px;place-items:center;display:grid;box-shadow:0 2px 6px #2f66e947}.personal-brand-mark{width:34px;height:34px}.personal-manager-icon{width:30px;height:30px;color:var(--pw-blue-ink);background:var(--pw-blue-soft);box-shadow:none}.personal-status-source{border-bottom:1px solid var(--pw-line);gap:7px;padding:12px 14px;display:grid;position:relative}.personal-status-source>header{color:var(--pw-faint);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;align-items:center;padding:0 3px;font-size:10px;font-weight:700;display:flex}.personal-status-source>header button,.personal-status-source-meta button,.personal-status-source-form header button{width:25px;height:25px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;padding:0;display:grid}.personal-status-source>header button:hover,.personal-status-source-meta button:hover,.personal-status-source-form header button:hover{color:var(--pw-text);background:#fff;box-shadow:0 1px 3px #1e1c141a}.personal-status-source-select{width:100%}.personal-status-source-meta{min-width:0;color:var(--pw-muted);align-items:center;gap:7px;padding:0 3px;font-size:10.5px;display:flex}.personal-status-source-meta>span{white-space:nowrap;align-items:center;gap:5px;display:inline-flex}.personal-status-source-meta>span i{background:#3fbf82;border-radius:50%;width:6px;height:6px}.personal-status-source-meta>span.is-loading i{background:#e5a33d}.personal-status-source-meta>span.is-error i{background:#dd5b47}.personal-status-source-meta small{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.personal-status-source-meta button{width:22px;height:22px;color:var(--pw-faint);margin-left:auto}.personal-status-source-error{color:var(--pw-red);overflow-wrap:anywhere;margin:0 3px;font-size:10px;line-height:1.4}.personal-status-source-form{z-index:12;border:1px solid var(--pw-line-strong);background:#fff;border-radius:12px;gap:10px;padding:13px;display:grid;position:absolute;top:calc(100% - 4px);left:12px;right:12px;box-shadow:0 12px 32px #1e1c1424}.personal-status-source-form>header{justify-content:space-between;align-items:center;font-size:12.5px;display:flex}.personal-status-source-form label{color:var(--pw-muted);gap:5px;font-size:10.5px;display:grid}.personal-status-source-form input,.personal-status-source-form select{border:1px solid var(--pw-line-strong);width:100%;min-width:0;height:34px;color:var(--pw-text);background:#fff;border-radius:8px;outline:0;padding:0 9px;font:12px/1.2 inherit}.personal-status-source-form input:focus,.personal-status-source-form select:focus{border-color:#8aa7ed;box-shadow:0 0 0 2px #2f66e91a}.personal-status-source-form input:disabled,.personal-status-source-form select:disabled{color:var(--pw-faint);background:#f6f5f2}.personal-status-source-form p{color:var(--pw-muted);overflow-wrap:anywhere;margin:0;font-size:10px;line-height:1.45}.personal-status-source-form p.is-error{color:var(--pw-red)}.personal-status-source-form code{font:9.5px/1.5 SF Mono,ui-monospace,Menlo,Consolas,monospace}.personal-status-source-add{background:var(--pw-blue);color:#fff;cursor:pointer;border:0;border-radius:8px;min-height:34px;font-size:11.5px;font-weight:650}.personal-status-source-add:hover{background:var(--pw-blue-ink)}.personal-status-source-add:disabled{cursor:not-allowed;opacity:.48}.personal-status-source-modes{background:#f2f1ed;border-radius:9px;grid-template-columns:1fr 1fr;gap:3px;padding:3px;display:grid}.personal-status-source-modes button{min-height:28px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;padding:0 8px;font-size:10.5px;font-weight:650}.personal-status-source-modes button[aria-selected=true]{color:var(--pw-text);background:#fff;box-shadow:0 1px 3px #1e1c141a}.personal-status-source-field-row{grid-template-columns:minmax(0,1fr) 34px;gap:6px;display:grid}.personal-status-source-field-row>button{border:1px solid var(--pw-line-strong);width:34px;height:34px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:8px;place-items:center;padding:0;display:grid}.personal-status-source-field-row>button:hover{color:var(--pw-text);background:#f8f7f4}.personal-status-source-field-row>button:disabled{cursor:wait;opacity:.45}.personal-status-source-command{background:#f6f5f2;border-radius:8px;gap:7px;padding:8px 9px;display:grid}.personal-status-source-command code{color:#4e5668;overflow-wrap:anywhere}.personal-status-source-command button{border:1px solid var(--pw-line-strong);min-height:25px;color:var(--pw-blue-ink);cursor:pointer;background:#fff;border-radius:7px;justify-content:center;justify-self:end;align-items:center;gap:5px;padding:0 8px;font-size:10px;font-weight:650;display:inline-flex}.personal-status-source-command button:disabled{color:var(--pw-faint);cursor:not-allowed}.personal-sidebar-nav{flex:1;padding:12px;overflow:auto}.personal-manager-link,.personal-goal-link,.personal-sidebar-utility{width:100%;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0}.personal-manager-link{border-radius:11px;grid-template-columns:30px 1fr auto auto;align-items:center;gap:10px;padding:8px 10px;font-weight:650;display:grid}.personal-manager-link:hover,.personal-goal-link:hover{background:#ffffffa6}.personal-manager-link[aria-current=page],.personal-goal-link[aria-current=page]{background:#fff;box-shadow:0 1px 4px #1e1c141a}.personal-sidebar-count{background:var(--pw-amber-bg);min-width:22px;color:var(--pw-amber);text-align:center;border-radius:99px;padding:2px 7px;font-size:11px;font-weight:650}.personal-sidebar-section-title{color:var(--pw-faint);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;padding:20px 10px 7px;font-size:11px;font-weight:650;display:flex}.personal-sidebar-title-actions{align-items:center;gap:6px;display:flex}.personal-sidebar-title-actions button{width:28px;height:28px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;padding:0;display:grid}.personal-sidebar-title-actions button:hover{color:var(--pw-text);background:#fff;box-shadow:0 1px 3px #1e1c141f}.personal-goal-list{gap:2px;display:grid}.personal-goal-row{border-radius:11px;grid-template-columns:minmax(0,1fr) 28px 28px;align-items:center;gap:2px;display:grid}.personal-goal-row:has(.personal-goal-move-actions){grid-template-columns:minmax(0,1fr) 52px 28px}.personal-goal-row[data-reorder-goal]>.personal-goal-link{cursor:grab;-webkit-user-select:none;user-select:none}.personal-goal-row[data-reorder-goal]>.personal-goal-link:active{cursor:grabbing}.personal-goal-row.is-drop-before{box-shadow:0 -2px var(--color-link,#0070f3)}.personal-goal-row.is-drop-after{box-shadow:0 2px var(--color-link,#0070f3)}.personal-goal-move-actions{display:flex}.personal-goal-move-actions button{min-width:26px;min-height:44px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;place-items:center;display:grid}.personal-goal-move-actions button:disabled{opacity:.35;cursor:default}.personal-goal-move-actions button:not(:disabled):hover{background:var(--color-surface-soft,#f2f2f2)}.personal-goal-link{border-radius:11px;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:44px;padding:7px 5px 7px 10px;display:grid}.personal-goal-lifecycle{width:26px;height:26px;color:var(--pw-faint);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;padding:0;display:grid}.personal-goal-lifecycle:hover{color:var(--pw-text);background:#fff;box-shadow:0 1px 3px #1e1c141f}.personal-goal-lifecycle:disabled{opacity:.45;cursor:wait}.personal-goal-lifecycle.is-pending svg{animation:.8s linear infinite personal-goal-lifecycle-spin}@keyframes personal-goal-lifecycle-spin{to{transform:rotate(360deg)}}.personal-goal-delete:hover{color:var(--pw-danger)}.personal-goal-link-copy{gap:2px;min-width:0;display:grid}.personal-goal-link-copy strong,.personal-goal-link-copy small{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-goal-link-copy strong{font-size:13px;font-weight:600}.personal-goal-link-copy small{color:var(--pw-muted);align-items:center;gap:5px;font-size:11px;display:flex}.personal-goal-state-dot{background:#e8ecf1;border-radius:9px;width:30px;height:30px;position:relative}.personal-goal-state-dot:after{content:"";background:#9aa3b2;border-radius:50%;width:7px;height:7px;position:absolute;bottom:3px;right:3px;box-shadow:0 0 0 2px #ffffffd9}.personal-goal-row:nth-child(5n+1) .personal-goal-state-dot{background:#e3ebfd}.personal-goal-row:nth-child(5n+2) .personal-goal-state-dot{background:#eee7fb}.personal-goal-row:nth-child(5n+3) .personal-goal-state-dot{background:#e2f2e4}.personal-goal-row:nth-child(5n+4) .personal-goal-state-dot{background:#fbf0dc}.personal-goal-row:nth-child(5n) .personal-goal-state-dot{background:#e8ecf1}.personal-goal-state-dot.is-danger:after{background:#dd5b47}.personal-goal-state-dot.is-warning:after{background:#e5a33d}.personal-goal-state-dot.is-info:after{background:#54a5e8}.personal-goal-state-dot.is-success:after{background:#3fae7c}.personal-goal-state-dot.is-quiet:after{background:#b6bcc9}.personal-goal-state-dot.is-stopped:after{background:#8f96a4}.personal-stopped-goals{border-top:1px solid var(--pw-line);margin-top:14px;padding-top:8px}.personal-stopped-goals>summary{min-height:34px;color:var(--pw-muted);cursor:pointer;letter-spacing:.04em;border-radius:9px;grid-template-columns:16px minmax(0,1fr) auto;align-items:center;gap:6px;padding:5px 10px;font-size:11px;font-weight:650;list-style:none;display:grid}.personal-stopped-goals>summary::-webkit-details-marker{display:none}.personal-stopped-goals>summary:hover{color:var(--pw-text);background:#ffffff8c}.personal-stopped-goals>summary>svg:first-child{transition:transform .14s}.personal-stopped-goals[open]>summary>svg:first-child{transform:rotate(180deg)}.personal-stopped-goals>summary small{text-align:center;background:#ebe9e3;border-radius:99px;min-width:22px;padding:2px 6px}.personal-goal-list.is-stopped{opacity:.82;margin-top:2px}.personal-stopped-goal-error{background:var(--pw-red-bg);color:var(--pw-red);border:1px solid #edc1ba;border-radius:9px;gap:7px;margin:6px 8px;padding:9px 10px;font-size:11px;line-height:1.45;display:grid}.personal-stopped-goal-error button{min-height:28px;color:inherit;cursor:pointer;font:inherit;background:0 0;border:1px solid;border-radius:7px;justify-self:start;padding:0 9px;font-weight:650}.personal-priority-dot{background:#aab2bf;border-radius:50%;width:7px;height:7px}.personal-priority-dot.is-high{background:#dd5b47}.personal-priority-dot.is-medium{background:#e5a33d}.personal-priority-dot.is-low{background:#3fae7c}.personal-sidebar-footer{border-top:1px solid var(--pw-line);flex-shrink:0;padding:12px}.personal-update-trigger{width:100%;min-height:44px;color:var(--pw-text);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:0 9px;font-size:13px;display:flex}.personal-update-trigger span{text-align:left;flex:1}.personal-update-trigger:hover{background:var(--pw-card)}.personal-update-trigger:focus-visible{outline-offset:2px;outline:2px solid #0070f3}.personal-update-panel{box-sizing:border-box;width:min(320px,100vw - 24px);max-height:calc(100dvh - 104px);color:var(--pw-text);background:var(--pw-card,#fff);font:inherit;border:1px solid var(--pw-line);border-radius:12px;margin:0;padding:16px;font-size:13px;line-height:1.6;position:fixed;inset:auto auto 80px 12px;overflow-y:auto;box-shadow:0 8px 28px #0000001f}.personal-update-panel header{justify-content:space-between;align-items:center;display:flex}.personal-update-panel button{min-height:44px;color:inherit;background:var(--pw-card,#fff);border:1px solid var(--pw-line);cursor:pointer;border-radius:6px;padding:6px 10px}.personal-update-panel header button{border:0;place-items:center;min-width:44px;display:grid}.personal-update-panel summary{cursor:pointer;align-content:center;min-height:44px}.personal-update-panel p{margin:10px 0}.personal-update-panel label,.personal-update-panel small,.personal-update-panel code{display:block}.personal-update-panel select{width:100%;min-height:44px;color:inherit;background:var(--pw-card);border:1px solid var(--pw-line);border-radius:6px;margin-top:6px}.personal-update-actions{flex-wrap:wrap;gap:8px;display:flex}.personal-update-actions button{border:1px solid var(--pw-line);border-radius:6px;min-height:44px;padding:6px 10px}.personal-update-panel a{text-decoration:underline}.personal-update-panel :focus-visible{outline-offset:2px;outline:2px solid #0070f3}.personal-sidebar-utility{border:1px solid var(--pw-line-strong);background:#fff;border-radius:10px;grid-template-columns:32px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:54px;padding:7px 9px;font-size:13px;display:grid;box-shadow:0 1px 4px #1e1c1412}.personal-sidebar-utility:hover{background:#fff;border-color:#d6d2c8;box-shadow:0 2px 7px #1e1c141a}.personal-sidebar-utility-icon{background:var(--pw-blue-soft);width:32px;height:32px;color:var(--pw-blue-ink);border-radius:9px;place-items:center;display:grid}.personal-sidebar-utility-copy{gap:2px;min-width:0;display:grid}.personal-sidebar-utility-copy strong,.personal-sidebar-utility-copy small{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-sidebar-utility-copy strong{font-size:13px;font-weight:700}.personal-sidebar-utility-copy small{color:var(--pw-muted);font-size:10.5px}.personal-sidebar-utility>svg{color:var(--pw-faint)}.personal-owner-row{min-height:40px;color:var(--pw-muted);border-radius:10px;align-items:center;gap:10px;margin-top:2px;padding:8px 10px;font-size:13px;display:flex}.personal-channel{grid-template-rows:auto minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);min-width:0;height:100vh;display:grid}.personal-channel-header{z-index:8;border-bottom:1px solid var(--pw-line);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fbfaf7eb;justify-content:space-between;align-items:center;gap:16px;min-height:72px;padding:12px 26px;display:flex;position:relative;overflow:visible}.personal-goal-tabs{background:#f2f1ed;border-radius:10px;align-self:center;align-items:center;gap:2px;margin-left:auto;padding:3px;display:flex}.personal-goal-tabs button{min-height:30px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:8px;padding:0 13px;font-size:12.5px;font-weight:600}.personal-goal-tabs button:hover{color:var(--pw-text)}.personal-goal-tabs button[aria-current=page]{color:var(--pw-text);background:#fff;box-shadow:0 1px 3px #1e1c141a}.personal-channel-title{min-width:0}.personal-channel-title h1{letter-spacing:-.015em;margin:0;font-size:17.5px;font-weight:700;line-height:1.25}.personal-channel-title p{color:var(--pw-muted);white-space:nowrap;text-overflow:ellipsis;margin:3px 0 0;font-size:12px;overflow:hidden}.personal-channel-title p.personal-manager-execution{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.personal-execution-chip{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:999px;flex:none;align-items:center;gap:6px;padding:0 8px;font-family:SFMono-Regular,Consolas,monospace;font-size:11px;line-height:18px;display:inline-flex}.personal-execution-chip-endpoint{color:var(--pw-text);font-weight:650}.personal-execution-chip-kind{color:var(--pw-faint)}.personal-execution-chip-model,.personal-execution-chip-budget{color:var(--pw-muted)}.personal-execution-chip.is-unavailable{border-color:var(--pw-amber);background:var(--pw-amber-bg)}.personal-execution-chip.is-unavailable .personal-execution-chip-endpoint,.personal-execution-chip.is-unavailable .personal-execution-chip-kind,.personal-execution-chip.is-unavailable .personal-execution-chip-model,.personal-execution-chip.is-unavailable .personal-execution-chip-budget{color:var(--pw-amber)}@media (width<=640px){.personal-channel-header:has(.personal-execution-chip-budget) .personal-channel-title{display:contents}.personal-channel-header:has(.personal-execution-chip-budget) .personal-channel-title h1{grid-area:1/2}.personal-channel-header:has(.personal-execution-chip-budget) .personal-channel-actions{grid-area:1/3}.personal-channel-header:has(.personal-execution-chip-budget) p.personal-manager-execution{grid-area:2/1/auto/-1;overflow:visible}.personal-channel-header:has(.personal-execution-chip-budget) .personal-execution-chip{border-radius:6px;flex-wrap:wrap;gap:0 6px;max-width:100%}}.personal-execution-note{color:var(--pw-muted);text-overflow:ellipsis;font-size:11px;overflow:hidden}.personal-execution-rule-note{color:var(--pw-faint);text-overflow:ellipsis;font-size:11px;overflow:hidden}.personal-workspace-shell[data-pw-theme=brutal] .personal-execution-chip{border-color:#141414;border-radius:4px}.personal-channel-actions{flex:none;align-items:center;gap:9px;display:flex}.personal-icon-button.personal-mobile-menu{display:none}.personal-select{min-width:0;position:relative}.personal-select-trigger{border:1px solid var(--pw-line-strong);width:100%;min-height:36px;color:var(--pw-text);cursor:pointer;text-align:left;background:#fff;border-radius:10px;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:7px;padding:0 9px;font-size:12px;font-weight:500;line-height:16px;display:grid}.personal-select-trigger:hover,.personal-select-trigger[aria-expanded=true]{border-color:var(--pw-faint)}.personal-select-trigger:focus-visible{border-color:var(--pw-blue);outline-offset:1px;outline:2px solid #0070f329}.personal-select-trigger>svg{color:var(--pw-muted);transition:transform .15s}.personal-select-trigger>svg.is-open{transform:rotate(180deg)}.personal-select-icon{color:var(--pw-muted);place-items:center;display:grid}.personal-select-value{white-space:nowrap;align-items:center;gap:6px;min-width:0;display:flex}.personal-select-value>small{color:var(--pw-faint);flex:none;font-size:10px;font-weight:500}.personal-select-value>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.personal-select-listbox{z-index:50;border:1px solid var(--pw-line);background:#fff;border-radius:12px;min-width:max(100%,204px);max-width:min(300px,80vw);max-height:260px;padding:4px;display:grid;position:absolute;top:calc(100% + 5px);left:0;overflow:auto;box-shadow:0 10px 24px #00000017}.personal-agent-select .personal-select-listbox{min-width:216px;left:auto;right:0}.personal-select-option-wrap{display:grid}.personal-select-group-label{color:var(--pw-faint);letter-spacing:0;text-transform:uppercase;padding:8px 8px 4px;font:500 10px/14px Geist Mono Variable,Geist Mono,monospace}.personal-select-option{width:100%;min-height:32px;color:var(--pw-text);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:8px;grid-template-columns:minmax(0,1fr) 16px;align-items:center;gap:10px;padding:6px 8px;font-size:12px;font-weight:400;line-height:16px;display:grid}.personal-select-option:hover,.personal-select-option:focus-visible{background:#f2f2f2;outline:0}.personal-select-option[aria-selected=true]{font-weight:600}.personal-select-option[disabled]{color:var(--pw-faint);cursor:not-allowed}.personal-select-option>svg{color:var(--pw-text);justify-self:end}.personal-agent-select{width:188px}.personal-read-only-source{border:1px solid var(--pw-line-strong);max-width:190px;height:38px;color:var(--pw-text);white-space:nowrap;background:#fff;border-radius:10px;align-items:center;gap:7px;padding:0 10px;font-size:12.5px;font-weight:600;display:inline-flex;overflow:hidden}.personal-read-only-source>svg{color:var(--pw-muted);flex:none}.personal-read-only-source>small{color:var(--pw-muted);background:#f2f1ed;border-radius:99px;padding:2px 6px;font-size:9.5px;font-weight:650}.personal-composer-attach{cursor:pointer;border:0;flex:none;place-items:center;display:grid;position:relative;overflow:hidden}.personal-composer-attach:disabled{cursor:not-allowed;opacity:.45}.personal-composer-file-input{opacity:0;pointer-events:none;width:1px;height:1px;position:fixed;overflow:hidden}.personal-action-feedback{border:1px solid var(--pw-line);background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;margin:0 0 8px;padding:9px 12px;font-size:13px;font-weight:650;display:flex}.personal-action-feedback button{color:inherit;cursor:pointer;background:0 0;border:0;place-items:center;display:grid}.personal-refresh-control{flex:none;align-items:center;gap:6px;display:inline-flex}.personal-refresh-control small{color:var(--pw-muted);white-space:nowrap;font-size:11px}.personal-refresh-control.is-error small{color:var(--pw-danger)}.personal-icon-button{border:1px solid var(--pw-line);width:36px;min-width:36px;height:36px;min-height:36px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:10px;flex:0 0 36px;place-items:center;padding:0;display:inline-grid}.personal-icon-button:hover{border-color:var(--pw-line-strong);color:var(--pw-text)}.personal-channel-scroll{min-width:0;min-height:0;padding:22px max(26px,50% - 410px);overflow:auto}.personal-channel-scroll[data-active-goal-view=tasks]:has(.personal-task-kanban){padding-inline:max(26px,50vw - 770px)}.personal-channel-scroll[data-active-goal-view=tasks]:has(.personal-task-board){overflow:hidden}.personal-manager-greeting{align-items:center;gap:14px;margin-bottom:16px;padding:18px 20px;display:flex}.personal-system-health-banner{color:#991b1b;background:#fef2f2;border:1px solid #fecaca;border-radius:12px;margin-bottom:16px;padding:12px 16px}.personal-system-health-header{align-items:center;gap:8px;font-size:13px;font-weight:600;display:flex}.personal-system-health-header small{color:#b91c1c;font-size:11.5px;font-weight:400}.personal-system-health-issues{color:#b91c1c;margin:6px 0 0 24px;padding:0;font-size:12px;line-height:1.5}.personal-home-lane{border:1px solid var(--pw-line);background:#fff;border-radius:16px;flex-direction:column;min-width:0;min-height:100%;display:flex;box-shadow:0 1px 4px #1e1c140a}.personal-manager-greeting>span{background:var(--pw-blue-soft);width:38px;height:38px;color:var(--pw-blue);border-radius:12px;place-items:center;display:grid}.personal-manager-greeting div{gap:3px;display:grid}.personal-manager-greeting strong{letter-spacing:-.01em}.personal-manager-greeting p{color:var(--pw-muted);margin:0;font-size:13px}.personal-proposal-explainer{background:var(--pw-blue-soft);color:var(--pw-text);border-radius:10px;padding:10px 12px;font-size:12px;line-height:1.55}.personal-home-board{gap:12px;min-width:0;display:grid}.personal-home-lanes{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:10px;min-width:0;display:grid}.personal-home-lane{border:1px solid var(--pw-line);background:#ffffff85;border-radius:15px;align-content:start;min-width:0;min-height:0;padding:12px;display:grid}.personal-home-lane>header{justify-content:space-between;align-items:center;gap:10px;display:flex}.personal-home-lane>header span{align-items:center;gap:7px;font-size:13px;font-weight:700;display:inline-flex}.personal-home-lane>header i{background:var(--pw-faint);border-radius:50%;width:8px;height:8px}.personal-home-lane>header b{min-width:24px;color:var(--pw-muted);font-variant-numeric:tabular-nums;text-align:right;font-size:12px}.personal-home-lane>p{min-height:34px;color:var(--pw-muted);margin:7px 0 10px;font-size:10.5px;line-height:1.55}.personal-home-lane.is-needs_you>header i{background:var(--pw-amber)}.personal-home-lane.is-running>header i{background:var(--pw-green)}.personal-home-lane.is-observing>header i{background:var(--pw-blue)}.personal-home-lane.is-scheduled>header i{background:#8b6bd8}.personal-home-lane-list{align-content:start;gap:9px;display:grid}.personal-home-goal-card{border:1px solid var(--pw-line);width:100%;min-width:0;color:inherit;cursor:pointer;text-align:left;background:#fff;border-radius:12px;gap:7px;padding:12px;transition:border-color .14s,transform .14s,box-shadow .14s;display:grid;box-shadow:0 1px 4px #1e1c140f}.personal-home-goal-card:hover{border-color:var(--pw-line-strong);transform:translateY(-1px);box-shadow:0 4px 12px #1e1c1414}.personal-home-goal-card:focus-visible{outline-offset:2px;outline:2px solid #7da2ff}.personal-home-goal-meta{min-width:0;color:var(--pw-muted);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:6px;font-size:10.5px;display:flex;overflow:hidden}.personal-home-goal-card>strong{text-overflow:ellipsis;font-size:13px;line-height:1.45;overflow:hidden}.personal-home-goal-card>p{color:var(--pw-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:11px;line-height:1.55;display:-webkit-box;overflow:hidden}.personal-home-goal-card>footer{justify-content:space-between;align-items:center;gap:8px;padding-top:2px;display:flex}.personal-home-goal-card>footer span{color:var(--pw-muted);background:#f2f1ed;border-radius:99px;flex:none;padding:2px 7px;font-size:9.5px}.personal-home-goal-card>footer small{color:var(--pw-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9.5px;overflow:hidden}.personal-home-history{border:1px solid var(--pw-line);background:#fff9;border-radius:13px}.personal-home-history>summary{cursor:pointer;align-items:center;gap:9px;min-height:44px;padding:0 14px;list-style:none;display:flex}.personal-home-history>summary::-webkit-details-marker{display:none}.personal-home-history>summary span{font-size:12.5px;font-weight:700}.personal-home-history>summary b{color:var(--pw-muted);font-size:11px}.personal-home-history>summary small{color:var(--pw-faint);margin-left:auto;font-size:10.5px}.personal-home-history>div{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:9px;padding:0 12px 12px;display:grid}.personal-session-record{background:var(--pw-blue-soft);border:1px solid #cfdcf9;border-radius:14px;grid-template-columns:minmax(0,1fr) auto;gap:10px 16px;margin-bottom:12px;padding:14px 16px;display:grid}.personal-session-record>header{grid-column:1/-1;justify-content:space-between;align-items:center;gap:12px;display:flex}.personal-session-record>header span{color:var(--pw-blue-ink);align-items:center;gap:7px;font-size:12px;font-weight:700;display:inline-flex}.personal-session-record>header button{width:28px;height:28px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:8px;place-items:center;padding:0;display:grid}.personal-session-record>header button:hover{color:var(--pw-text);background:#ffffffb3}.personal-session-record>div{min-width:0}.personal-session-record>div strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;display:block;overflow:hidden}.personal-session-record>div p{color:var(--pw-muted);margin:4px 0 0;font-size:11px}.personal-session-record dl{grid-column:1/-1;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;display:grid}.personal-session-record dl div{background:#ffffff9e;border-radius:9px;gap:2px;min-width:0;padding:8px 10px;display:grid}.personal-session-record dt{color:var(--pw-faint);font-size:9.5px}.personal-session-record dd{color:var(--pw-text);text-overflow:ellipsis;white-space:nowrap;margin:0;font:10.5px/1.4 SF Mono,ui-monospace,Menlo,Consolas,monospace;overflow:hidden}.personal-session-record>.personal-secondary-action{grid-area:2/2;align-self:center}.personal-channel-timeline{gap:10px;display:grid}.personal-live-region{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:fixed;overflow:hidden}.personal-timeline-row{border:1px solid var(--pw-line);background:var(--pw-card);width:100%;min-height:64px;color:inherit;cursor:pointer;text-align:left;border-radius:14px;grid-template-columns:38px minmax(0,1fr) auto auto 16px;align-items:center;gap:12px;padding:11px 15px;transition:border-color .14s,box-shadow .14s;display:grid}.personal-timeline-row:hover{border-color:var(--pw-line-strong);box-shadow:0 2px 8px #1e1c140f}.personal-timeline-row:focus-visible{outline-offset:2px;outline:2px solid #7da2ff}.personal-row-icon{border-radius:11px;place-items:center;width:34px;height:34px;display:grid}.personal-row-icon.is-attention{color:var(--pw-amber);background:var(--pw-amber-bg)}.personal-row-icon.is-run{color:var(--pw-blue-ink);background:var(--pw-blue-soft)}.personal-row-icon.is-output{color:var(--pw-green);background:var(--pw-green-bg)}.personal-row-copy{gap:3px;min-width:0;display:grid}.personal-row-copy strong,.personal-row-copy small,.personal-row-copy span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.personal-row-copy strong{font-size:13.5px;font-weight:600}.personal-row-copy small,.personal-row-copy span{color:var(--pw-muted);font-size:11px}.personal-row-status{color:var(--pw-muted);white-space:nowrap;background:#f2f1ed;border-radius:99px;align-items:center;gap:5px;padding:2.5px 10px;font-size:11px;font-weight:600;display:inline-flex}.personal-row-status.is-running{background:var(--pw-green-bg);color:var(--pw-green)}.personal-output-row time{color:var(--pw-muted);font-size:11px}.personal-spin{animation:1.2s linear infinite pw-spin}@keyframes pw-spin{to{transform:rotate(360deg)}}.personal-message{gap:11px;max-width:84%;padding:6px 2px;display:flex}.personal-message.is-user{background:var(--pw-blue-soft);color:var(--pw-text);border:1px solid #dbe7fd;border-radius:16px 16px 4px;justify-self:end;padding:11px 15px}.personal-message-avatar{background:var(--pw-blue-soft);height:34px;color:var(--pw-blue-ink);border-radius:11px;flex:0 0 34px;place-items:center;display:grid}.personal-message header{align-items:baseline;gap:8px;display:flex}.personal-message header strong{font-size:12px}.personal-message time{color:var(--pw-faint);font-size:10px}.personal-message p{white-space:pre-wrap;margin:6px 0 0;font-size:13.5px;line-height:1.7}.personal-message-pending{color:var(--pw-muted);font-size:11px}.personal-return-delivery{color:var(--pw-muted);margin-top:7px;font-size:11px;font-weight:600;display:inline-block}.personal-return-delivery.is-delivered{color:var(--pw-green)}.personal-return-delivery.is-verification_required{color:var(--pw-blue-ink)}.personal-return-delivery.is-explicit_unverified{color:var(--pw-amber)}.personal-message-images{flex-wrap:wrap;gap:7px;margin-top:8px;display:flex}.personal-message-images img{object-fit:cover;border:1px solid var(--pw-line-strong);background:#fff;border-radius:10px;width:min(220px,100%);max-height:180px}.personal-md{overflow-wrap:anywhere;font-size:13.5px;line-height:1.7}.personal-md>*+*{margin-top:8px}.personal-md p{margin:0}.personal-md-heading.is-h1,.personal-md-heading.is-h2{font-size:14.5px}.personal-md-code{color:#4d5361;background:#f0efe9;border-radius:5px;padding:1px 5px;font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;font-size:.86em}.personal-md-pre{color:#e8ecf3;white-space:pre;background:#23262e;border-radius:10px;margin:0;padding:12px 14px;font:12px/1.65 SF Mono,ui-monospace,Menlo,Consolas,monospace;overflow-x:auto}.personal-md-pre code{font:inherit}.personal-md-link{color:var(--pw-blue-ink);text-underline-offset:2px;word-break:break-all;text-decoration:underline}.personal-agent-avatar{color:#fff;background:linear-gradient(135deg,#2f66e9,#6f9bff);border-radius:13px;flex:none;place-items:center;width:44px;height:44px;font-size:18px;font-weight:700;display:grid;box-shadow:0 2px 6px #2f66e947}.personal-agent-health.is-off{color:var(--pw-muted);background:#f2f1ed}.personal-agent-persona dl{border-top:1px solid var(--pw-line);margin-top:14px;padding-top:13px}.personal-detail-card-title{justify-content:space-between;align-items:center;gap:10px;display:flex}.personal-detail-card-title em{color:var(--pw-muted);background:#f1f1ee;border-radius:99px;padding:2px 8px;font-size:10px;font-style:normal;font-weight:650}.personal-goal-repository h3{align-items:center;gap:8px;display:flex}.personal-goal-notification h3{justify-content:space-between;align-items:center;gap:8px;display:flex}.personal-connection-status{background:var(--pw-green-bg);color:var(--pw-green);border-radius:99px;padding:2px 8px;font-size:10px;font-weight:650}.personal-subagent-heading{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.personal-subagent-heading h3{align-items:center;gap:7px;margin-bottom:0;display:flex}.personal-subagent-switch{border:1px solid var(--pw-line-strong);min-height:32px;color:var(--pw-muted);cursor:pointer;background:#f2f1ed;border-radius:99px;flex:none;align-items:center;gap:7px;padding:4px 9px 4px 5px;font-size:11px;font-weight:700;display:inline-flex}.personal-subagent-switch>span{background:#c8c8c2;border-radius:99px;width:30px;height:18px;transition:background .18s;position:relative}.personal-subagent-switch>span:after{content:"";background:#fff;border-radius:50%;width:12px;height:12px;transition:transform .18s;position:absolute;top:3px;left:3px}.personal-subagent-switch[aria-checked=true]{background:var(--pw-green-bg);color:var(--pw-green);border-color:#b9dccb}.personal-subagent-switch[aria-checked=true]>span{background:var(--pw-green)}.personal-subagent-switch[aria-checked=true]>span:after{transform:translate(12px)}.personal-subagent-switch[data-pending=true]{color:#8a6b00;opacity:1;background:#fffbed;border-color:#d8c67a}.personal-subagent-switch:disabled{cursor:default;opacity:.55}.personal-subagent-switch[data-pending=true]:disabled{opacity:1}.personal-subagent-fields{border-top:1px solid var(--pw-line);grid-template-columns:minmax(0,1fr) 112px;gap:10px;margin-top:14px;padding-top:13px;display:grid}.personal-subagent-fields label{color:var(--pw-text);align-content:start;gap:6px;font-size:11.5px;font-weight:650;display:grid}.personal-subagent-fields input:not([type=checkbox]),.personal-subagent-fields select{border:1px solid var(--pw-line-strong);min-width:0;min-height:38px;color:var(--pw-text);font:inherit;background:#fff;border-radius:9px;padding:0 10px;font-size:12px}.personal-subagent-fields label small{color:var(--pw-faint);font-size:10.5px;font-weight:450;line-height:1.45}.personal-subagent-domain-picker{border:0;grid-column:1/-1;min-width:0;margin:0;padding:0}.personal-subagent-domain-picker>legend{color:var(--pw-text);margin-bottom:7px;padding:0;font-size:11.5px;font-weight:650}.personal-subagent-domain-picker>small{color:var(--pw-faint);margin-top:7px;font-size:10.5px;line-height:1.45;display:block}.personal-subagent-domain-options{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;display:grid}.personal-subagent-domain-option{border:1px solid var(--pw-line-strong);cursor:pointer;background:#fff;border-radius:9px;grid-template-columns:auto minmax(0,1fr);min-height:44px;padding:8px 9px;align-items:center!important;display:grid!important}.personal-subagent-domain-option:hover{border-color:#b9c9dc}.personal-subagent-domain-option:has(input:focus-visible){outline:2px solid var(--pw-blue);outline-offset:2px}.personal-subagent-domain-option.is-selected{background:var(--pw-blue-soft);border-color:#9fc4ed}.personal-subagent-domain-option input{width:15px;height:15px;accent-color:var(--pw-blue);margin:0}.personal-subagent-domain-option>span{gap:1px;min-width:0;display:grid}.personal-subagent-domain-option strong{text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.personal-subagent-domain-option small{font-size:9.5px!important;font-weight:450!important}.personal-subagent-domain-empty{border:1px dashed var(--pw-line-strong);background:var(--pw-bg);color:var(--pw-muted);border-radius:9px;grid-column:1/-1;margin:0;padding:10px;font-size:10.5px;line-height:1.5}.personal-subagent-limit-field{grid-column:1/-1;width:112px}.personal-subagent-fields .personal-secondary-action{grid-column:1/-1;margin-top:0}.personal-subagent-preview{background:#fffbed;border:1px solid #d8c67a;border-radius:10px;margin-top:10px;padding:12px}.personal-subagent-preview>strong{font-size:12.5px}.personal-subagent-preview>p{margin:5px 0 0}.personal-subagent-preview>div{grid-template-columns:1fr 1fr;gap:8px;display:grid}.personal-subagent-preview .personal-primary-action,.personal-subagent-preview .personal-secondary-action{min-height:38px;margin-top:10px}.personal-subagent-feedback{align-items:flex-start;gap:7px;display:flex;margin:10px 0 0!important}.personal-subagent-feedback.is-success{color:var(--pw-green)!important}.personal-subagent-feedback.is-warning{color:#8a6b00!important}.personal-subagent-feedback.is-error{color:var(--pw-red)!important}.personal-subagent-read-only{margin-bottom:0}.personal-settings-page{--pw-bg:#fbfaf7;--pw-card:#fff;--pw-line:#eceae3;--pw-line-strong:#e0ddd4;--pw-muted:#82889a;--pw-faint:#aab0bf;--pw-text:#23262e;--pw-blue:#2f66e9;--pw-blue-ink:#2456c8;--pw-blue-soft:#ebf1fe;--pw-red:#c2402f;--pw-red-bg:#fcecea;--pw-green:#2e7d5b;--pw-green-bg:#e6f3ec;background:var(--pw-bg);height:100dvh;min-height:0;color:var(--pw-text);grid-template-rows:minmax(0,1fr);grid-template-columns:268px minmax(0,1fr);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;display:grid;overflow:hidden}.personal-settings-sidebar{overscroll-behavior:contain;scrollbar-gutter:stable;border-right:1px solid var(--pw-line);background:#f5f3ee;flex-direction:column;gap:14px;min-width:0;height:100%;min-height:0;padding:18px 14px;display:flex;position:relative;overflow-y:auto}.personal-settings-page :focus-visible{outline-offset:2px;outline:2px solid #5f87ed}.personal-settings-back{width:100%;min-height:40px;color:var(--pw-muted);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:10px;align-items:center;gap:8px;padding:0 10px;font-size:13px;font-weight:650;display:inline-flex}.personal-settings-back:hover{color:var(--pw-text);background:#ffffffa6}.personal-settings-title{border-bottom:1px solid var(--pw-line);gap:3px;padding:8px 10px 10px;display:grid}.personal-settings-title small{color:var(--pw-faint);letter-spacing:.08em;text-transform:uppercase;font-size:10px;font-weight:700}.personal-settings-title strong{letter-spacing:-.02em;font-size:18px}.personal-settings-header{justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:24px;display:flex}.personal-settings-header small{color:var(--pw-blue);letter-spacing:.08em;text-transform:uppercase;font-size:11px;font-weight:700}.personal-settings-header h1{letter-spacing:-.035em;margin:4px 0 2px;font-size:28px}.personal-settings-tabs{gap:3px;display:grid}.personal-settings-tabs button{width:100%;min-height:54px;color:var(--pw-muted);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:11px;grid-template-columns:32px minmax(0,1fr);align-items:center;gap:9px;padding:8px 10px;display:grid}.personal-settings-tabs button:hover{color:var(--pw-text);background:#ffffffa6}.personal-settings-tabs button[aria-current=page]{color:var(--pw-text);background:#fff;box-shadow:0 1px 4px #1e1c141a}.personal-settings-tabs button>span{gap:2px;min-width:0;display:grid}.personal-settings-tabs strong{font-size:13px}.personal-settings-body{overscroll-behavior:contain;scrollbar-gutter:stable;min-width:0;min-height:0;padding:30px clamp(24px,5vw,72px);overflow:auto}.personal-settings-body:has(>.personal-capability-settings){grid-template-rows:auto minmax(0,1fr);display:grid;overflow:hidden}.personal-settings-body>.personal-settings-header{min-width:0}.personal-settings-page *,.personal-settings-page :before,.personal-settings-page :after{box-sizing:border-box}.personal-appearance-settings{max-width:680px}.personal-settings-choice-group{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px;display:grid}.personal-settings-choice-group button{border:1px solid var(--pw-line);min-height:60px;color:inherit;cursor:pointer;text-align:left;background:#fff;border-radius:12px;grid-template-columns:34px minmax(0,1fr);align-items:center;gap:10px;padding:13px;display:grid}.personal-settings-choice-group button:hover{border-color:var(--pw-line-strong);box-shadow:0 2px 8px #1e1c140f}.personal-settings-choice-group button[aria-checked=true]{background:#f7f9ff;border-color:#9fb9f4;box-shadow:0 0 0 3px #2f66e91a}.personal-settings-choice-group strong{align-self:center;font-size:13px}.personal-settings-theme-swatch{border:1px solid var(--pw-line-strong);border-radius:10px;width:34px;height:34px;display:block}.personal-settings-theme-swatch.is-loopx{background:linear-gradient(135deg,#171717 0 44%,#0070f3 44% 54%,#fafafa 54% 76%,#fff 76%);border-radius:6px}.personal-settings-theme-swatch.is-paper{background:linear-gradient(135deg,#fbfaf7 0 48%,#2f66e9 48% 58%,#fff 58%)}.personal-settings-theme-swatch.is-brutal{background:linear-gradient(135deg,#ffd91a 0 45%,#ff8fd0 45% 70%,#8fdcff 70%);border:2px solid #141414;border-radius:5px;box-shadow:2px 2px #141414}.personal-lark-settings{background:var(--pw-bg);min-height:100vh;color:var(--pw-text);padding:30px clamp(24px,5vw,72px);position:relative}.personal-lark-settings.is-embedded{background:0 0;min-height:0;padding:0}.personal-lark-header{justify-content:space-between;align-items:flex-start;gap:24px;max-width:1180px;margin:0 auto;display:flex}.personal-lark-header small{color:var(--pw-blue);letter-spacing:.08em;text-transform:uppercase;font-size:11px;font-weight:700}.personal-lark-header h1{letter-spacing:-.035em;margin:4px 0 2px;font-size:28px}.personal-lark-header p{color:var(--pw-muted);margin:0;font-size:13px}.personal-lark-tabs{border-bottom:1px solid var(--pw-line);gap:24px;max-width:1180px;margin:28px auto 20px;display:flex}.personal-lark-settings.is-embedded .personal-lark-tabs{margin-top:0}.personal-lark-tabs button{min-height:42px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:8px;padding:0 2px;font-weight:650;display:flex}.personal-lark-tabs button[aria-current=page]{border-color:var(--pw-blue);color:var(--pw-text)}.personal-lark-tabs span{min-width:20px;height:20px;color:var(--pw-muted);background:#efeee9;border-radius:99px;place-items:center;padding:0 5px;font-size:10px;display:inline-grid}.personal-lark-section-heading{max-width:1180px;margin:0 auto 18px}.personal-lark-section-heading small{color:var(--pw-blue);letter-spacing:.07em;text-transform:uppercase;font-size:10px;font-weight:700}.personal-lark-section-heading h2{letter-spacing:-.025em;margin:4px 0;font-size:21px}.personal-lark-section-heading p{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.6}.personal-lark-subtabs{margin-top:0}.personal-settings-content{max-width:1180px;margin:0 auto}.personal-settings-card{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:16px;max-width:720px;overflow:hidden;box-shadow:0 8px 30px #1e1c140a}.personal-settings-card>header{border-bottom:1px solid var(--pw-line);align-items:center;gap:13px;padding:20px;display:flex}.personal-settings-card>header h2{letter-spacing:-.02em;margin:0;font-size:17px}.personal-settings-card>header p{color:var(--pw-muted);margin:4px 0 0;font-size:12px;line-height:1.5}.personal-settings-icon{background:var(--pw-blue-soft);width:40px;height:40px;color:var(--pw-blue);border-radius:12px;flex:none;place-items:center;display:grid}.personal-language-options{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:18px 20px;display:grid}.personal-language-options>button{border:1px solid var(--pw-line);min-height:66px;color:var(--pw-text);cursor:pointer;text-align:left;background:#fff;border-radius:12px;justify-content:space-between;align-items:center;gap:18px;padding:13px 15px;transition:border-color .15s,background-color .15s,box-shadow .15s;display:flex}.personal-language-options>button:hover{border-color:var(--pw-line-strong);background:#fcfbf8}.personal-language-options>button.is-selected{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-color:#9bb5f0;box-shadow:0 0 0 1px #2f66e814}.personal-language-options>button>span{gap:4px;display:grid}.personal-language-options strong{font-size:13px}.personal-settings-card>footer{border-top:1px solid var(--pw-line);color:var(--pw-faint);background:#faf9f6;padding:13px 20px;font-size:11px}.personal-machine-loading{min-height:220px;color:var(--pw-muted);place-items:center;font-size:13px;display:grid}.personal-machine-layout{grid-template-columns:210px minmax(0,1fr);gap:22px;max-width:1080px;display:grid}.personal-machine-namespaces{min-width:0}.personal-machine-namespaces>div{gap:3px;margin-bottom:10px;padding:0 4px;display:grid}.personal-machine-namespaces>div small,.personal-machine-editor>header small,.personal-machine-editor-bar small{color:var(--pw-blue);letter-spacing:.07em;text-transform:uppercase;font-size:10px;font-weight:700}.personal-machine-namespaces>div strong{font-size:13px}.personal-machine-namespaces nav{gap:5px;display:grid}.personal-machine-namespaces button{width:100%;min-height:52px;color:var(--pw-muted);cursor:pointer;text-align:left;background:0 0;border:1px solid #0000;border-radius:10px;gap:3px;padding:9px 11px;display:grid}.personal-machine-namespaces button:hover{border-color:var(--pw-line);background:#fff9}.personal-machine-namespaces button[aria-current=page]{border-color:var(--pw-line-strong);color:var(--pw-text);background:#fff;box-shadow:0 2px 8px #1e1c140d}.personal-machine-namespaces button span{overflow-wrap:anywhere;font-size:12px;font-weight:650}.personal-machine-namespaces button small{color:var(--pw-muted);font-size:10px}.personal-machine-content{min-width:0}.personal-machine-summary{border:1px solid var(--pw-line);background:#fff;border-radius:14px;justify-content:space-between;align-items:center;gap:20px;margin-bottom:14px;padding:14px 16px;display:flex}.personal-machine-summary>div{align-items:center;gap:11px;min-width:0;display:flex}.personal-machine-summary>div>span:last-child{gap:3px;display:grid}.personal-machine-summary>div small{color:var(--pw-muted);text-transform:uppercase;font-size:10px;font-weight:650}.personal-machine-summary>div strong{font-size:13px}.personal-machine-summary dl{gap:22px;margin:0;display:flex}.personal-machine-summary dl div{gap:3px;display:grid}.personal-machine-summary dt{color:var(--pw-muted);font-size:10px}.personal-machine-summary dd{margin:0;font-family:SFMono-Regular,Consolas,monospace;font-size:11px;font-weight:650}.personal-machine-editor-bar{justify-content:space-between;align-items:center;gap:14px;margin-bottom:10px;padding:0 2px;display:flex}.personal-machine-editor-mode{border:1px solid var(--pw-line);background:#f5f4f0;border-radius:9px;flex:none;gap:3px;padding:3px;display:flex}.personal-machine-editor-mode button{min-height:44px;color:var(--pw-muted);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:6px;padding:0 12px;font-size:11px;font-weight:650}.personal-machine-editor-mode button[aria-pressed=true]{color:var(--pw-text);background:#fff;box-shadow:0 1px 4px #1e1c1414}.personal-machine-editor{border:1px solid var(--pw-line);background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 8px 30px #1e1c140a}.personal-machine-editor>header{border-bottom:1px solid var(--pw-line);justify-content:space-between;align-items:flex-start;gap:20px;padding:20px;display:flex}.personal-machine-editor>header h2{letter-spacing:-.02em;margin:4px 0 3px;font-size:18px}.personal-machine-editor>header p{max-width:610px;color:var(--pw-muted);margin:0;font-size:12px;line-height:1.55}.personal-machine-switch{min-height:44px;color:var(--pw-muted);cursor:pointer;white-space:nowrap;flex:none;align-items:center;gap:9px;font-size:12px;font-weight:650;display:flex}.personal-machine-switch input{width:42px;height:24px;accent-color:var(--pw-blue);cursor:pointer;margin:0}.personal-machine-scope-note{color:var(--pw-blue-ink);background:#f6f8fd;border:1px solid #cfdaf3;border-radius:12px;align-items:flex-start;gap:10px;margin:18px 20px 0;padding:13px 14px;display:flex}.personal-machine-scope-note svg{flex:none;margin-top:1px}.personal-machine-scope-note strong{font-size:12px}.personal-machine-scope-note p{color:#52627f;margin:3px 0 0;font-size:11px;line-height:1.55}.personal-machine-editor fieldset{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:0;padding:20px;display:grid}.personal-machine-editor fieldset label{align-content:start;gap:6px;min-width:0;display:grid}.personal-machine-editor fieldset label:last-child{grid-column:1/-1}.personal-machine-editor fieldset label>span{font-size:12px;font-weight:650}.personal-machine-editor fieldset label>small{color:var(--pw-muted);font-size:10.5px;line-height:1.45}.personal-machine-editor input[type=text],.personal-machine-editor fieldset input{border:1px solid var(--pw-line-strong);width:100%;min-width:0;min-height:42px;color:var(--pw-text);font:inherit;background:#fff;border-radius:9px;padding:0 11px;font-size:13px}.personal-machine-editor fieldset:disabled{opacity:.58}.personal-machine-editor fieldset:disabled input{cursor:not-allowed}.personal-machine-json-editor>label{gap:7px;padding:20px;display:grid}.personal-machine-json-editor>label>span{font-size:12px;font-weight:650}.personal-machine-json-editor>label>small{color:var(--pw-muted);font-size:10.5px;line-height:1.5}.personal-machine-json-editor textarea{resize:vertical;border:1px solid var(--pw-line-strong);width:100%;min-width:0;color:var(--pw-text);tab-size:2;background:#fafafa;border-radius:9px;padding:12px 13px;font:12px/1.6 SFMono-Regular,Consolas,monospace}.personal-machine-json-editor textarea:focus-visible{outline:2px solid var(--pw-blue);outline-offset:2px}.personal-machine-validation,.personal-machine-error,.personal-machine-notice{border-radius:9px;margin:0 20px 16px;padding:10px 12px;font-size:11px;line-height:1.5}.personal-machine-validation,.personal-machine-error{background:var(--pw-red-bg);color:var(--pw-red);border:1px solid #edc1ba}.personal-machine-notice{background:var(--pw-green-bg);color:var(--pw-green);border:1px solid #bcdacb;align-items:center;gap:8px;display:flex}.personal-machine-preview{background:#f8faff;border:1px solid #aebfec;border-radius:12px;margin:0 20px 18px;padding:14px}.personal-machine-preview header{justify-content:space-between;align-items:center;gap:12px;display:flex}.personal-machine-preview header strong{font-size:12px}.personal-machine-preview header span{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:99px;padding:3px 8px;font-size:10px;font-weight:650}.personal-machine-preview dl{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0;display:grid}.personal-machine-preview dl div{background:#fff;border:1px solid #dfe5f3;border-radius:8px;min-width:0;padding:8px}.personal-machine-preview dt{color:var(--pw-muted);font-size:9.5px}.personal-machine-preview dd{overflow-wrap:anywhere;margin:4px 0 0;font-family:SFMono-Regular,Consolas,monospace;font-size:10.5px;font-weight:650}.personal-machine-preview p{color:#52627f;margin:0;font-size:10.5px;line-height:1.5}.personal-machine-rollback{border:1px solid var(--pw-line);background:#faf9f6;border-radius:12px;justify-content:space-between;align-items:center;gap:18px;margin:0 20px 18px;padding:13px 14px;display:flex}.personal-machine-rollback strong{font-size:12px}.personal-machine-rollback p{color:var(--pw-muted);margin:3px 0 0;font-size:10.5px;line-height:1.45}.personal-machine-rollback .personal-secondary-action{flex:none;width:auto;min-height:40px;margin:0;padding:0 13px}.personal-machine-editor>footer{border-top:1px solid var(--pw-line);background:#faf9f6;justify-content:flex-end;gap:10px;padding:15px 20px;display:flex}.personal-machine-editor>footer .personal-primary-action,.personal-machine-editor>footer .personal-secondary-action,.personal-machine-editor>footer .personal-danger-action{width:auto;min-height:42px;margin:0;padding:0 15px}.personal-machine-unavailable{border:1px dashed var(--pw-line-strong);min-height:180px;color:var(--pw-muted);background:#fff;border-radius:14px;justify-items:start;gap:8px;padding:26px;display:grid}.personal-machine-unavailable strong{color:var(--pw-text);font-size:13px}.personal-machine-unavailable p{max-width:540px;margin:0;font-size:11px;line-height:1.6}.personal-lark-loading,.personal-lark-empty{min-height:130px;color:var(--pw-muted);justify-content:center;align-items:center;gap:8px;font-size:13px;display:flex}.personal-lark-apps{max-width:1180px;margin:0 auto}.personal-lark-app-toolbar{color:var(--pw-muted);justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;font-size:11px;display:flex}.personal-lark-app-toolbar .personal-primary-action{width:auto;min-height:40px;margin:0;padding:0 16px}.personal-lark-app-grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;display:grid}.personal-lark-app-card{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:15px;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:11px;padding:18px;display:grid}.personal-lark-app-avatar{background:var(--pw-blue-soft);width:42px;height:42px;color:var(--pw-blue);border-radius:12px;place-items:center;display:grid}.personal-lark-app-card div{gap:3px;display:grid}.personal-lark-app-card small,.personal-lark-app-card p{color:var(--pw-muted);font-size:11px}.personal-lark-app-card em{border-radius:99px;padding:3px 9px;font-size:10px;font-style:normal;font-weight:650}.personal-lark-app-card em.is-ready{background:var(--pw-green-bg);color:var(--pw-green)}.personal-lark-app-card em.is-off{color:var(--pw-muted);background:#f1f1ee}.personal-lark-app-card p{grid-column:2/-1;margin:0}.personal-lark-connections{max-width:1180px;margin:0 auto}.personal-lark-route-readiness{background:var(--pw-amber-bg);color:var(--pw-amber);border:1px solid #ead49a;border-radius:10px;align-items:center;gap:8px;margin:0 0 12px;padding:10px 12px;font-size:12px;font-weight:650;line-height:1.5;display:flex}.personal-lark-route-readiness svg{flex:none}.personal-lark-toolbar{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.personal-lark-toolbar>label{border:1px solid var(--pw-line);max-width:680px;height:40px;color:var(--pw-faint);background:#fff;border-radius:10px;flex:1;align-items:center;gap:8px;padding:0 12px;display:flex}.personal-lark-toolbar input{width:100%;font:inherit;background:0 0;border:0;outline:0}.personal-lark-toolbar .personal-primary-action{flex:none;width:auto;min-height:40px;margin-top:0;padding:0 16px}.personal-lark-table{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:14px;overflow:hidden}.personal-lark-table-head,.personal-lark-table-row{grid-template-columns:1.35fr 1.35fr .72fr .72fr 100px;align-items:center;gap:16px;padding:12px 16px;display:grid}.personal-lark-table-head{border-bottom:1px solid var(--pw-line);min-height:42px;color:var(--pw-faint);letter-spacing:.04em;text-transform:uppercase;font-size:10px;font-weight:700}.personal-lark-table-row{border-bottom:1px solid var(--pw-line);min-height:70px;font-size:12px}.personal-lark-table-row:last-of-type{border-bottom:0}.personal-lark-table-row>span{gap:3px;min-width:0;display:grid}.personal-lark-table-row strong,.personal-lark-table-row small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.personal-lark-table-row small{color:var(--pw-muted);font-size:10px}.personal-lark-row-actions{justify-content:flex-end;display:flex!important}.personal-lark-row-actions button,.personal-lark-modal header button{border:1px solid var(--pw-line);min-height:30px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:8px;align-items:center;gap:4px;padding:0 8px;font-size:10px;display:inline-flex}.personal-lark-row-actions button.is-confirm{background:var(--pw-red-bg);color:var(--pw-red);border-color:#e6b0aa}.personal-lark-modal-backdrop{z-index:80;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#1e1f2361;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.personal-lark-modal{border:1px solid var(--pw-line);background:#fff;border-radius:18px;gap:14px;width:min(560px,100%);max-height:calc(100vh - 48px);padding:22px;display:grid;overflow:auto;box-shadow:0 24px 70px #14182340}.personal-lark-modal header{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.personal-lark-modal header small{color:var(--pw-muted);font-size:10px}.personal-lark-modal h2{letter-spacing:-.02em;margin:3px 0 0;font-size:20px}.personal-lark-modal>label{color:var(--pw-muted);gap:7px;font-size:11px;font-weight:650;display:grid}.personal-lark-modal>label>small{color:var(--pw-faint);font-size:10px;font-weight:450;line-height:1.45}.personal-lark-modal input[type=search],.personal-lark-modal input[type=text],.personal-lark-modal input:not([type]),.personal-lark-modal select{border:1px solid var(--pw-line-strong);width:100%;min-height:40px;color:var(--pw-text);font:inherit;background:#fff;border-radius:9px;padding:0 11px}.personal-lark-modal label:has(input[type=search]){grid-template-columns:1fr}.personal-lark-modal label:has(input[type=search]) input{margin-bottom:2px}.personal-lark-group-state{border:1px dashed var(--pw-line-strong);min-height:40px;color:var(--pw-muted);background:#fafaf8;border-radius:9px;align-items:center;gap:7px;padding:9px 11px;font-size:11px;font-weight:500;line-height:1.45;display:flex}.personal-lark-group-state.is-error{background:var(--pw-red-bg);color:var(--pw-red);border-style:solid;border-color:#efc3bd}.personal-lark-check{border:1px solid var(--pw-line);background:#fafaf8;border-radius:10px;align-items:flex-start;padding:12px;gap:10px!important;display:flex!important}.personal-lark-check input{accent-color:var(--pw-blue);margin-top:2px}.personal-lark-check span{gap:2px;display:grid}.personal-lark-check strong{color:var(--pw-text)}.personal-lark-check small{font-weight:400}.personal-lark-agent-apps{color:var(--pw-muted);border:0;gap:7px;margin:0;padding:0;display:grid}.personal-lark-agent-apps legend{margin-bottom:1px;font-size:11px;font-weight:650}.personal-lark-agent-apps>small{color:var(--pw-faint);font-size:10px;line-height:1.45}.personal-lark-agent-apps>div{gap:8px;display:grid}.personal-lark-agent-apps label{border:1px solid var(--pw-line);background:#fafaf8;border-radius:10px;grid-template-columns:minmax(0,1fr) minmax(180px,1fr);align-items:center;gap:12px;padding:10px 11px;display:grid}.personal-lark-agent-apps label>span{gap:2px;min-width:0;display:grid}.personal-lark-agent-apps label strong{color:var(--pw-text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.personal-lark-agent-apps label small{color:var(--pw-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.personal-lark-agent-apps select{min-width:0}.personal-lark-ingress{color:var(--pw-muted);border:0;gap:7px;margin:0;padding:0;display:grid}.personal-lark-ingress legend{margin-bottom:1px;font-size:11px;font-weight:650}.personal-lark-ingress>div{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.personal-lark-ingress label{border:1px solid var(--pw-line-strong);cursor:pointer;background:#fff;border-radius:10px;min-height:84px;padding:11px;display:block;position:relative}.personal-lark-ingress label.is-active{border-color:var(--pw-blue);background:#2f69eb0f;box-shadow:0 0 0 1px #2f69eb24}.personal-lark-ingress input{opacity:0;width:1px;height:1px;position:absolute}.personal-lark-ingress span{gap:5px;display:grid}.personal-lark-ingress strong{color:var(--pw-text);font-size:11px}.personal-lark-ingress small{color:var(--pw-faint);font-size:9px;font-weight:450;line-height:1.35}.personal-lark-topic-preview{border:1px solid var(--pw-line);min-height:40px;color:var(--pw-text);background:#f7f7f4;border-radius:9px;align-items:center;gap:8px;padding:0 11px;font-size:12px;font-weight:500;display:flex}.personal-lark-topic-preview.is-locked{color:var(--pw-muted)}.personal-lark-cardinality{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:9px;align-items:center;gap:8px;margin:0;padding:10px 12px;font-size:11px;display:flex}.personal-lark-modal footer{z-index:2;border-top:1px solid var(--pw-line);background:#fff;justify-content:flex-end;gap:9px;margin:0 -22px -22px;padding:12px 22px 22px;display:flex;position:sticky;bottom:-22px}.personal-lark-modal footer button{width:auto;min-width:96px;margin-top:0;padding:0 16px}@media (width<=640px){.personal-lark-agent-apps label{grid-template-columns:1fr}}.personal-lark-modal-backdrop.is-setup{z-index:90}.personal-lark-setup-modal{width:min(620px,100%)}.personal-lark-setup-copy{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.6}.personal-lark-setup-progress{border:1px solid var(--pw-line);background:#fafaf8;border-radius:13px;grid-template-columns:46px minmax(0,1fr);align-items:center;gap:13px;min-height:132px;padding:18px;display:grid}.personal-lark-setup-progress>div{gap:5px;display:grid}.personal-lark-setup-progress p{color:var(--pw-muted);margin:0;font-size:11px;line-height:1.5}.personal-lark-setup-progress a{width:fit-content;color:var(--pw-blue);grid-column:2;align-items:center;gap:6px;font-size:11px;font-weight:650;text-decoration:none;display:inline-flex}.personal-lark-setup-icon{background:var(--pw-blue-soft);width:46px;height:46px;color:var(--pw-blue);border-radius:13px;place-items:center;display:grid}.personal-lark-setup-icon.is-ready{background:var(--pw-green-bg);color:var(--pw-green)}.personal-lark-setup-icon.is-failed,.personal-row-status.is-blocking{background:var(--pw-red-bg);color:var(--pw-red)}.personal-proposal-row{width:100%;color:inherit;cursor:pointer;text-align:left;background:#f5f8ff;border:1px solid #c3d3f9;border-radius:14px;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:12px;padding:14px;display:grid}.personal-proposal-row:hover{border-color:#8fabe9;box-shadow:0 2px 10px #2f66e814}.personal-proposal-row>span:first-child{color:#315fc8;background:#e4ebff;border-radius:11px;place-items:center;width:36px;height:36px;display:grid}.personal-proposal-row>span:nth-child(2){gap:3px;min-width:0;display:grid}.personal-proposal-row small{color:#5f74ad;font-size:10px}.personal-proposal-row strong{font-size:13px}.personal-proposal-row p{color:#686f7c;margin:0;font-size:11px}.personal-proposal-row>b{color:#315fc8;font-size:11px}.personal-proposal-row.is-applied{background:#f3fbf7;border-color:#b5ddcc}.personal-proposal-row.is-error,.personal-proposal-row.is-stale{background:#fff7f7;border-color:#efc3c3}.personal-proposal-row.is-gated{background:#fffaf0;border-color:#ead39c}.personal-gated-summary{background:#fffaf0;border:1px solid #ead39c;border-radius:14px}.personal-gated-summary>summary{color:#6d5620;cursor:pointer;align-items:center;gap:9px;padding:12px 14px;list-style:none;display:flex}.personal-gated-summary>summary::-webkit-details-marker{display:none}.personal-gated-summary>summary>span{color:#9a741d;background:#fff1c9;border-radius:9px;place-items:center;width:30px;height:30px;display:grid}.personal-gated-summary>summary small{color:#927d4c;margin-left:auto}.personal-gated-summary>div{gap:8px;padding:0 8px 8px;display:grid}.personal-gated-summary .personal-proposal-row{background:#fffdf7}.personal-schedule-row{border:1px solid var(--pw-line);background:var(--pw-card);width:100%;color:inherit;cursor:pointer;text-align:left;border-radius:14px;grid-template-columns:36px minmax(0,1fr) auto 16px;align-items:center;gap:12px;padding:13px 15px;display:grid}.personal-schedule-row:hover{border-color:var(--pw-line-strong);box-shadow:0 2px 8px #1e1c140f}.personal-schedule-icon{width:34px;height:34px;color:var(--pw-muted);background:#f2f1ed;border-radius:11px;place-items:center;display:grid}.personal-schedule-copy{gap:2px;min-width:0;display:grid}.personal-schedule-copy small,.personal-schedule-copy p{color:var(--pw-muted);margin:0;font-size:10px}.personal-schedule-copy strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.personal-schedule-status{background:var(--pw-green-bg);color:var(--pw-green);border-radius:99px;align-items:center;padding:2.5px 10px;font-size:11px;font-weight:600;display:inline-flex}.personal-schedule-status.is-paused{color:var(--pw-muted);background:#f2f1ed}.personal-timeline-empty{text-align:center;place-items:center;padding:70px 20px;display:grid}.personal-timeline-empty>span{background:var(--pw-blue-soft);width:44px;height:44px;color:var(--pw-blue);border-radius:14px;place-items:center;margin-bottom:14px;display:grid}.personal-timeline-empty p{max-width:420px;color:var(--pw-muted);font-size:13px}.personal-object-list{border:1px solid var(--pw-line);background:#fff;border-radius:14px;overflow:hidden}.personal-object-list>header,.personal-object-list>button{border:0;border-bottom:1px solid var(--pw-line);width:100%;min-height:52px;color:inherit;text-align:left;background:0 0;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 15px;display:grid}.personal-object-list>header{min-height:46px;color:var(--pw-faint);letter-spacing:.06em;grid-template-columns:minmax(0,1fr) auto;font-size:12px;font-weight:650}.personal-object-list>button{cursor:pointer}.personal-object-list>button:hover{background:#faf9f6}.personal-object-list>button:last-child{border-bottom:0}.personal-object-list>button>p{color:var(--pw-muted);text-overflow:ellipsis;white-space:nowrap;grid-column:2/-1;margin:-3px 0 0;font-size:12px;line-height:1.45;overflow:hidden}.personal-object-list>button>em{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:999px;justify-self:end;padding:2px 7px;font-size:10px;font-style:normal;font-weight:700}.personal-object-list small{color:var(--pw-muted)}.personal-object-list>button>small{white-space:nowrap;align-items:center;gap:8px;display:inline-flex}.personal-object-list-state{border-bottom:1px solid var(--pw-line);color:var(--pw-muted);align-items:center;gap:8px;margin:0;padding:14px 15px;font-size:12px;line-height:1.5;display:flex}.personal-object-list-state.is-error{color:var(--pw-red);background:var(--pw-red-bg)}.personal-object-list .is-done{color:var(--pw-green)}.personal-object-list .is-attention{color:var(--pw-amber);font-weight:700}.personal-task-age{color:var(--pw-faint);font-size:11px}.personal-task-empty{color:var(--pw-muted);margin:0;padding:4px 15px 16px;font-size:12.5px}.personal-task-lane-filter{border:1px solid var(--pw-line);background:#fff;border-radius:10px;justify-content:space-between;align-items:center;gap:16px;min-height:50px;padding:8px 12px;display:flex}.personal-capability-settings{grid-template-rows:auto minmax(0,1fr);gap:16px;width:100%;min-width:0;max-width:1050px;min-height:0;display:grid;overflow:hidden}.personal-capability-body{flex-direction:column;gap:16px;min-width:0;min-height:0;display:flex;overflow:hidden}.personal-capability-body>.personal-capability-layout{flex:auto}.personal-provider-settings{width:100%;min-width:0;max-width:1050px}.personal-provider-settings>.personal-operator-credential{margin-top:0}.personal-capability-scope-note{overscroll-behavior:contain;max-height:120px;color:var(--pw-muted);padding:12px 0;overflow:auto}.personal-capability-scope-note summary{cursor:pointer;align-items:center;gap:8px;font-size:12px;display:flex}.personal-capability-scope-note p{padding:10px 0 0 25px}.personal-capability-scope-note svg{flex:none;margin-top:2px}.personal-operator-credential{border:1px solid var(--pw-border);background:var(--pw-surface);border-radius:10px;gap:12px;margin:16px 0 24px;padding:16px;display:grid}.personal-operator-credential>header{grid-template-columns:auto 1fr auto;align-items:start;gap:10px;display:grid}.personal-operator-credential>header strong{font-size:13px;display:block}.personal-operator-credential>header p{color:var(--pw-muted);margin:4px 0 0;font-size:12px;line-height:1.5}.personal-operator-credential-status{color:var(--pw-muted);font-family:var(--pw-font-mono);font-size:11px}.personal-operator-credential-readback{gap:6px;margin:0;font-size:12px;display:grid}.personal-operator-credential-readback>div{grid-template-columns:140px 1fr;gap:10px;display:grid}.personal-operator-credential-readback dt{color:var(--pw-muted)}.personal-operator-credential-readback dd{overflow-wrap:anywhere;margin:0}.personal-operator-credential label{gap:4px;font-size:12px;display:grid}.personal-operator-credential input{border:1px solid var(--pw-border);background:var(--pw-canvas);color:inherit;border-radius:8px;padding:7px 9px;font-size:12px}.personal-operator-credential input:disabled{opacity:.6}.personal-capability-scope-note p{margin:0;font-size:12px;line-height:1.55}.personal-capability-scope-note strong{color:var(--pw-text);display:block}.personal-capability-layout{grid-template-columns:220px minmax(0,1fr);align-items:stretch;gap:24px;min-width:0;min-height:0;display:grid;overflow:hidden}.personal-capability-list{overscroll-behavior:contain;scrollbar-gutter:stable;align-content:start;gap:6px;min-height:0;padding:3px;display:grid;overflow-y:auto}.personal-capability-list button{min-height:44px;color:var(--pw-text);cursor:pointer;text-align:left;background:#fff;border:1px solid #0000;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}.personal-capability-list button:hover{border-color:#b8c9f5}.personal-capability-list button[aria-current=page]{background:#f4f7ff;border-color:#8cacf0;box-shadow:0 0 0 3px #2f66e914}.personal-capability-list button>span{gap:2px;min-width:0;display:grid}.personal-capability-list em{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:999px;flex:none;padding:3px 6px;font-size:9px;font-style:normal;font-weight:750}.personal-capability-list strong{overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:1.5}.personal-capability-detail{overscroll-behavior:contain;scrollbar-gutter:stable;border:1px solid var(--pw-line);background:#fff;border-radius:14px;align-self:start;min-width:0;min-height:0;max-height:100%;overflow:auto}.personal-capability-detail>header{border-bottom:1px solid var(--pw-line);align-items:flex-start;gap:12px;padding:24px;display:flex}.personal-capability-detail>header>div{flex:1;min-width:0}.personal-capability-help{color:var(--pw-muted);margin-top:8px;font-size:12px}.personal-capability-help summary{cursor:pointer}.personal-capability-help p{padding-top:12px}.personal-capability-help dl{gap:12px;margin-bottom:0;display:grid}.personal-capability-help dt{color:var(--pw-text);font-weight:500}.personal-capability-help dd{margin:4px 0 0;line-height:1.6}.personal-capability-detail h2{margin:2px 0 4px;font-size:17px}.personal-capability-detail p{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.55}.personal-capability-value-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:16px 18px;display:grid}.personal-capability-raw-values{border-top:1px solid var(--pw-line)}.personal-capability-raw-values>summary{cursor:pointer;color:var(--pw-text);padding:16px 18px;font-size:12px}.personal-capability-raw-values>summary:focus-visible{outline:2px solid var(--pw-blue);outline-offset:-2px}.personal-capability-value-grid section{min-width:0}.personal-capability-value-grid strong,.personal-capability-field-summary>strong{font-size:11px}.personal-capability-value-grid pre{border:1px solid var(--pw-line);min-height:72px;max-height:220px;color:var(--pw-text);background:#faf9f6;border-radius:9px;margin:7px 0 0;padding:11px;font-size:10.5px;line-height:1.5;overflow:auto}.personal-capability-editor-status{border-radius:10px;align-items:flex-start;gap:10px;margin:20px 24px;padding:12px;display:flex}.personal-capability-heading-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;display:flex}.personal-capability-heading-row .personal-capability-effective-source{color:var(--pw-muted);align-items:center;gap:6px;margin:0;display:flex}.personal-capability-effective-source span{color:var(--pw-muted);flex-wrap:wrap;gap:6px;font-size:11px;display:flex}.personal-capability-effective-source strong{color:var(--pw-text)}.personal-capability-editor-status svg{flex:none;margin-top:1px}.personal-capability-editor-status strong{font-size:12px}.personal-capability-editor-status p{margin-top:3px}.personal-capability-editor-status.is-preview{background:var(--pw-blue-soft);color:var(--pw-blue-ink)}.personal-capability-editor-status.is-read-only{color:#9a5a10;background:#fff5e8}.personal-capability-linked-setting{border:1px solid var(--pw-line);background:var(--pw-bg);border-radius:10px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:16px;margin:0 24px 20px;padding:14px;display:grid}.personal-capability-linked-setting>div{gap:4px;display:grid}.personal-capability-linked-setting strong{font-size:12px}.personal-capability-linked-setting .personal-notification-toggle{justify-self:end;min-height:44px}.personal-capability-linked-setting .personal-notification-error{grid-column:1/-1}.personal-capability-behavior-note{border:1px solid var(--pw-line);background:var(--pw-amber-bg);color:var(--pw-amber);border-radius:6px;align-items:flex-start;gap:10px;margin:16px 24px;padding:12px;display:flex}.personal-capability-behavior-note svg{flex:none;margin-top:1px}.personal-capability-behavior-note strong{font-size:12px}.personal-capability-behavior-note p{color:inherit;margin-top:3px}.personal-capability-editor-mode{color:var(--pw-muted);justify-content:flex-end;align-items:center;gap:12px;margin:8px 24px 0;font-size:11px;display:flex}.personal-capability-editor-mode button{min-height:44px;color:var(--pw-muted);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-size:11px;font-weight:650;display:inline-flex}.personal-capability-editor-mode button:hover{background:var(--pw-blue-soft);color:var(--pw-text)}.personal-capability-editor-mode button:disabled{cursor:not-allowed;opacity:.45}.personal-capability-field-summary{padding:20px 24px 24px}.personal-capability-field-summary .personal-capability-fields{margin-top:0}.personal-capability-fields{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0;padding:0;display:grid}.personal-report-schedule{grid-column:1/-1;grid-template-columns:repeat(auto-fit,minmax(min(180px,100%),1fr));gap:12px;min-width:0;display:grid}.personal-report-schedule p{color:var(--pw-muted);overflow-wrap:anywhere;grid-column:1/-1;margin:0;font-size:12px}.personal-capability-fields label{align-content:start;gap:6px;min-width:0;display:grid}.personal-capability-fields label>span{font-size:12px;font-weight:650}.personal-capability-fields input:not([type=checkbox]),.personal-capability-fields select,.personal-capability-fields textarea{border:1px solid var(--pw-line-strong);width:100%;min-width:0;min-height:42px;color:var(--pw-text);font:inherit;background:#fff;border-radius:9px;padding:8px 11px;font-size:13px}.personal-capability-fields .is-boolean{border-bottom:1px solid var(--pw-line);grid-column:1/-1;grid-template-columns:minmax(0,1fr) auto;align-items:center;min-height:48px;padding-bottom:12px}.personal-capability-enabled-row{border-bottom:1px solid var(--pw-line);grid-column:1/-1;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:16px;min-width:0;min-height:60px;padding-bottom:12px;display:grid}.personal-capability-enabled-row>.is-boolean{display:contents}.personal-capability-enabled-row>.is-boolean>span{grid-area:1/1}.personal-capability-enabled-row>.is-boolean>input{grid-area:1/3}.personal-capability-enabled-row>.personal-capability-edit-json{grid-area:1/2}.personal-capability-edit-json{min-height:44px;color:var(--pw-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;align-items:center;gap:6px;padding:0 8px;font-size:11px;display:inline-flex}.personal-capability-edit-json:hover{background:var(--pw-blue-soft);color:var(--pw-text)}.personal-capability-edit-json:disabled{cursor:not-allowed;opacity:.45}.personal-capability-fields .is-boolean input{appearance:none;border:1px solid var(--pw-line-strong);background:var(--pw-line);cursor:pointer;border-radius:999px;width:40px;height:24px;margin:0;padding:2px}.personal-capability-fields .is-boolean input:before{content:"";background:#fff;border-radius:50%;width:18px;height:18px;display:block}.personal-capability-fields .is-boolean input:checked{background:var(--pw-text)}.personal-capability-fields .is-boolean input:checked:before{transform:translate(16px)}.personal-capability-fields .is-boolean input:focus-visible{outline:2px solid var(--pw-blue);outline-offset:3px}.personal-capability-fields:disabled{opacity:.62}.personal-capability-json-editor{gap:7px;margin:0;padding:0 18px 18px;display:grid}.personal-capability-json-editor>span{font-size:11px;font-weight:650}.personal-capability-json-editor>small{color:var(--pw-muted);font-size:10.5px;line-height:1.5}.personal-capability-json-editor textarea{resize:vertical;border:1px solid var(--pw-line-strong);width:100%;min-width:0;color:var(--pw-text);tab-size:2;background:#fafafa;border-radius:9px;padding:12px 13px;font:12px/1.6 SFMono-Regular,Consolas,monospace}.personal-capability-json-editor textarea:focus-visible{outline:2px solid var(--pw-blue);outline-offset:2px}.personal-capability-preview{background:#f4f7ff;border:1px solid #9fb9f4;border-radius:10px;grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;margin:0 18px 16px;padding:12px;display:grid}.personal-capability-preview strong{font-size:12px}.personal-capability-preview span{color:var(--pw-blue-ink);font-size:11px;font-weight:700}.personal-capability-preview small{color:var(--pw-muted);grid-column:1/-1;font-size:10.5px}.personal-capability-actions,.personal-operator-credential-actions{border-top:1px solid var(--pw-line);background:0 0;justify-content:flex-end;gap:9px;padding:14px 18px;display:flex}.personal-capability-actions button,.personal-operator-credential-actions button{border:1px solid var(--pw-line-strong);min-height:44px;color:var(--pw-text);cursor:pointer;font:inherit;background:#fff;border-radius:9px;padding:0 14px;font-size:12px;font-weight:700}.personal-capability-actions button.is-primary,.personal-operator-credential-actions button.is-primary{border-color:var(--pw-blue);background:var(--pw-blue);color:#fff}.personal-capability-actions button.is-danger,.personal-operator-credential-actions button.is-danger{color:var(--pw-red);align-items:center;gap:6px;margin-right:auto;display:inline-flex}.personal-capability-actions button:disabled,.personal-operator-credential-actions button:disabled{cursor:not-allowed;opacity:.5}.personal-capability-empty,.personal-capability-error{border:1px solid var(--pw-line);max-width:720px;min-height:56px;color:var(--pw-muted);background:#fff;border-radius:11px;align-items:center;gap:9px;margin:0;padding:14px;font-size:12px;display:flex}.personal-capability-error{color:var(--pw-red);border-color:#efc1ba}.personal-capability-error span{gap:2px;display:grid}.personal-capability-error small{color:var(--pw-muted)}.personal-capability-error button{min-height:44px;color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:9px;align-items:center;gap:6px;margin-left:auto;padding:0 12px;display:inline-flex}.personal-capability-recovery{color:#74530d;background:#fffaf0;border:1px solid #dfc98d;border-radius:10px;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:9px;margin:0 20px 16px;padding:12px;font-size:11px;line-height:1.5;display:grid}.personal-capability-recovery div{gap:3px;display:grid}.personal-capability-recovery p{margin:0}.personal-capability-recovery small{color:var(--pw-muted);overflow-wrap:anywhere}.personal-capability-recovery button{min-height:40px;color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:8px;align-items:center;gap:6px;padding:0 10px;display:inline-flex}.personal-task-lane-filter>div{min-width:0;color:var(--pw-muted);align-items:center;gap:9px;display:flex}.personal-task-lane-filter>div>span{gap:1px;display:grid}.personal-task-lane-filter strong{color:var(--pw-text);font-size:12px}.personal-task-lane-filter small{color:var(--pw-faint);font-size:10.5px}.personal-task-lane-filter label{border:1px solid var(--pw-line-strong);background:var(--pw-bg);border-radius:8px;align-items:center;gap:6px;min-height:34px;padding:0 9px;display:flex}.personal-task-lane-filter select{max-width:300px;color:var(--pw-text);font:inherit;appearance:none;background:0 0;border:0;outline:0;font-size:11.5px;font-weight:600}.personal-task-board{flex-direction:column;gap:12px;height:100%;min-height:0;display:flex}.personal-channel-scroll[data-active-goal-view=tasks]:has(.personal-task-board.is-list-view){overflow-y:auto}.personal-task-board.is-list-view{gap:24px;height:auto;min-height:100%}.personal-task-view-toolbar{flex:none;justify-content:space-between;align-items:center;gap:16px;display:flex}.personal-task-view-toolbar>div:first-child{gap:4px;display:grid}.personal-task-view-toolbar strong{font-size:16px;font-weight:600}.personal-task-view-toolbar span{color:var(--pw-muted);font-size:12px}.personal-task-view-switch{border:1px solid var(--pw-line);background:var(--pw-bg);border-radius:8px;flex:none;padding:3px;display:flex}.personal-task-view-switch button{min-height:36px;color:var(--pw-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:5px;padding:0 14px;font-size:13px}.personal-task-view-switch button[aria-pressed=true]{background:var(--pw-text);color:var(--pw-bg)}.personal-task-grouped-list{gap:24px;padding-bottom:24px;display:grid}.personal-completed-list{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px}.personal-completed-list>header{min-height:48px;color:var(--pw-text);padding:2px 16px}.personal-completed-list>header>button{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;min-height:44px;padding:0}.personal-completed-list .personal-task-lane-scroll{height:480px;max-height:60vh;overflow-y:auto}.personal-completed-list .personal-task-lane-scroll[hidden]{display:none}.personal-completed-list .personal-completed-row>button{border:0;border-bottom:1px solid var(--pw-line);text-align:left;background:0 0;grid-template-columns:20px minmax(0,1fr);gap:8px 12px;width:100%;height:100%;padding:16px;display:grid}.personal-completed-list .personal-completed-row>button>strong{-webkit-line-clamp:2}.personal-completed-list .personal-completed-row>button>small{grid-column:2}.personal-task-group{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px;min-width:0}.personal-task-group>summary{cursor:pointer;align-items:center;gap:8px;min-height:48px;padding:10px 16px;list-style:none;display:flex}.personal-task-group>summary::-webkit-details-marker{display:none}.personal-task-group>summary strong{font-size:12px;font-weight:600;line-height:18px}.personal-task-group>summary span{background:var(--pw-line);color:var(--pw-muted);border-radius:6px;padding:2px 7px;font-size:12px}.personal-task-group>summary svg{color:var(--pw-muted);transform:rotate(-90deg)}.personal-task-group[open]>summary svg{transform:none}.personal-task-group.tone-attention>summary{color:var(--pw-amber)}.personal-task-list-rows{padding:0 16px 8px}.personal-task-list-rows>button,.personal-task-list-rows>.personal-task-card>button{border:0;border-top:1px solid var(--pw-line);width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border-radius:0;grid-template-columns:20px minmax(0,1fr);gap:8px 12px;padding:16px 4px;display:grid}.personal-task-list-rows>button:hover,.personal-task-list-rows>.personal-task-card>button:hover{background:var(--pw-line)}.personal-task-list-rows>button>strong,.personal-task-list-rows>.personal-task-card>button>strong{-webkit-line-clamp:2;overflow-wrap:anywhere;-webkit-box-orient:vertical;font-size:14px;font-weight:500;line-height:20px;display:-webkit-box;overflow:hidden}.personal-task-list-rows>button>small,.personal-task-list-rows>.personal-task-card>button>small{color:var(--pw-muted);overflow-wrap:anywhere;flex-wrap:wrap;grid-column:2;align-items:center;gap:8px;font-size:12px;line-height:16px;display:flex}.personal-task-list-rows .personal-task-card-actions{background:var(--pw-card);top:auto;bottom:12px}@media (width>=721px){.personal-channel-header:has(~.personal-channel-scroll[data-active-goal-view=tasks] .is-list-view){flex-wrap:wrap}.personal-channel-header:has(~.personal-channel-scroll[data-active-goal-view=tasks] .is-list-view) .personal-channel-title{flex-basis:100%}}.personal-task-kanban{flex:1;grid-template-columns:repeat(auto-fit,minmax(172px,1fr));align-items:stretch;gap:12px;min-height:0;display:grid}.personal-task-chat-receipt{background:#f8faff;border:1px solid #d8e2f8;border-radius:10px;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:10px;padding:8px 12px;display:grid;box-shadow:0 1px 3px #2f66e90a}.personal-task-chat-icon{background:var(--pw-blue-soft);width:28px;height:28px;color:var(--pw-blue-ink);border-radius:8px;place-items:center;display:grid}.personal-task-chat-receipt>div{min-width:0}.personal-task-chat-receipt header{align-items:center;gap:8px;display:flex}.personal-task-chat-receipt header strong{font-size:12px;font-weight:650}.personal-task-chat-receipt header small{color:var(--pw-faint);font-size:10px}.personal-task-chat-receipt .personal-task-reply-preview{min-width:0;overflow:hidden}.personal-task-chat-receipt .personal-task-reply-preview .personal-md{margin:0}.personal-task-chat-receipt .personal-task-reply-preview p{color:var(--pw-text);text-overflow:ellipsis;white-space:nowrap;margin:3px 0;font-size:12px;line-height:1.4;display:block;overflow:hidden}.personal-task-chat-receipt footer{gap:6px;display:flex}.personal-task-chat-receipt footer button{min-height:36px;color:var(--pw-blue-ink);cursor:pointer;white-space:nowrap;background:#fff;border:1px solid #b9c9ee;border-radius:7px;align-items:center;gap:4px;padding:6px 10px;font-size:10.5px;font-weight:650;display:inline-flex}.personal-task-chat-receipt footer button:hover{border-color:var(--pw-blue);background:var(--pw-blue-soft)}.personal-task-kanban .personal-object-list{background:#f6f4ee;flex-direction:column;min-height:0;padding:0;display:flex}.personal-task-kanban .personal-object-list>header{background:#f6f4ee;border-bottom:1px solid #e0ddd4b8;flex:none;align-items:center;gap:8px;min-height:38px;padding:10px 16px 7px;display:flex}.personal-task-kanban .personal-object-list>header>strong{align-items:center;gap:7px;min-width:0;font-size:12px;display:inline-flex}.personal-task-kanban .personal-object-list>header>span{margin-left:auto}.personal-task-lane-scroll{overscroll-behavior-y:contain;scrollbar-color:#bebbb2 transparent;scrollbar-gutter:stable;scrollbar-width:thin;-webkit-overflow-scrolling:touch;flex-direction:column;flex:auto;gap:8px;min-height:0;padding:8px;scroll-padding-block:8px;display:flex;overflow-y:auto}.personal-task-lane-scroll:focus-visible{outline:2px solid var(--pw-blue);outline-offset:-3px}.personal-task-lane-scroll.has-overflow-before{box-shadow:inset 0 12px 10px -13px #34312b94}.personal-task-lane-scroll.has-overflow-after{box-shadow:inset 0 -16px 12px -15px #34312bb3}.personal-task-lane-scroll.has-overflow-before.has-overflow-after{box-shadow:inset 0 12px 10px -13px #34312b94,inset 0 -16px 12px -15px #34312bb3}.personal-task-lane-scroll::-webkit-scrollbar{width:10px}.personal-task-lane-scroll::-webkit-scrollbar-track{background:0 0}.personal-task-lane-scroll::-webkit-scrollbar-thumb{background:#bebbb2 padding-box padding-box;border:3px solid #0000;border-radius:999px;min-height:40px}.personal-task-lane-scroll::-webkit-scrollbar-thumb:hover{background:#97938a padding-box padding-box}.personal-kanban-dot{background:var(--pw-faint);border-radius:50%;width:8px;height:8px}.personal-kanban-dot.tone-attention{background:var(--pw-amber)}.personal-kanban-dot.tone-progress{background:var(--pw-blue)}.personal-kanban-dot.tone-schedule{background:#8a6fd6}.personal-kanban-dot.tone-done{background:var(--pw-green)}.personal-task-kanban .personal-task-lane-scroll>button,.personal-task-kanban .personal-task-card>button{border:1px solid var(--pw-line);width:100%;min-height:0;color:inherit;text-align:left;cursor:pointer;background:#fff;border-radius:10px;grid-template-columns:18px minmax(0,1fr);align-items:center;gap:6px 8px;padding:10px 12px;display:grid;box-shadow:0 1px 3px #1e1c140f}.personal-task-kanban .personal-task-lane-scroll>button:hover,.personal-task-kanban .personal-task-card>button:hover{border-color:var(--pw-line-strong);background:#fff;box-shadow:0 2px 8px #1e1c1417}.personal-task-kanban .personal-task-lane-scroll>button>small,.personal-task-kanban .personal-task-card>button>small{white-space:normal;text-align:left;flex-wrap:wrap;grid-column:1/-1;justify-content:flex-start;align-items:center;gap:8px;display:inline-flex}.personal-task-kanban .personal-task-lane-scroll>button:last-child{border-bottom:1px solid var(--pw-line)}.personal-task-kanban .personal-task-lane-scroll>button:last-child:hover{border-color:var(--pw-line-strong)}.personal-task-lane-scroll>button,.personal-task-card{flex:none;min-width:0}.personal-task-lane-scroll>button>small,.personal-task-card>button>small{font-size:12px;line-height:16px}.personal-task-lane-scroll>button>strong,.personal-task-card>button>strong{-webkit-line-clamp:3;overflow-wrap:anywhere;-webkit-box-orient:vertical;font-size:14px;font-weight:500;line-height:20px;display:-webkit-box;overflow:hidden}.personal-task-card{position:relative}.personal-completed-window{flex-shrink:0;position:relative}.personal-completed-row{padding-bottom:8px;position:absolute;inset-inline:0}.personal-completed-row>button{width:100%;height:100%}.personal-completed-row>button>strong{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.personal-completed-footer{color:var(--pw-muted);text-align:center;flex-shrink:0;padding:12px 4px;font-size:12px}.personal-completed-footer button{border:1px solid var(--pw-line);min-height:32px;color:inherit;cursor:pointer;background:0 0;border-radius:6px}.personal-task-card>button{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:start;display:grid}.personal-task-card-actions{opacity:0;gap:4px;transition:opacity .12s;display:flex;position:absolute;top:6px;right:6px}.personal-task-card:hover .personal-task-card-actions,.personal-task-card:focus-within .personal-task-card-actions,.personal-task-card.has-session .personal-task-card-actions{opacity:1}.personal-task-card.is-selected>button,.personal-task-kanban .personal-task-lane-scroll>button.is-selected{background:#f5f8ff;border-color:#7c9df1;box-shadow:0 0 0 2px #2f66e91f,0 4px 14px #1e34681a}.personal-task-card.is-selected:before{z-index:2;background:var(--pw-blue);content:"";border-radius:0 3px 3px 0;width:3px;position:absolute;top:8px;bottom:8px;left:0}.personal-task-card-actions button{border:1px solid var(--pw-line-strong);width:28px;height:28px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:7px;place-items:center;padding:0;display:grid;box-shadow:0 1px 3px #1e1c141f}.personal-task-card-actions button:hover{color:var(--pw-text);border-color:var(--pw-text)}.personal-task-card-actions button:disabled{cursor:wait;opacity:.72}.personal-task-card-actions .personal-task-session-link{width:auto;color:var(--pw-blue-ink);opacity:1;gap:5px;padding:0 8px;display:flex}.personal-task-session-link span{white-space:nowrap;font-size:10.5px;font-weight:650}.personal-task-session-status{color:var(--pw-blue-ink);font-weight:650}.personal-task-kanban .personal-task-empty{border:1px dashed var(--pw-line-strong);text-align:center;border-radius:10px;margin:2px 0 4px;padding:16px 10px;font-size:12px}.personal-workspace-shell.has-drawer .personal-task-kanban{grid-template-columns:repeat(2,minmax(0,1fr))}.personal-workspace-shell.has-task-inspector .personal-channel-scroll[data-active-goal-view=tasks]:has(.personal-task-kanban){padding-inline:20px}.personal-workspace-shell.has-task-inspector .personal-task-kanban{grid-template-columns:repeat(4,260px);width:max-content;min-width:100%}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-chat-receipt{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-chat-icon{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-chat-receipt footer button{color:#141414;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-composer-wrap{background:linear-gradient(transparent, var(--pw-bg) 22%);padding:10px max(26px,50% - 410px) 20px}.personal-read-only-notice{border:1px solid var(--pw-line);min-height:46px;color:var(--pw-muted);background:#f5f4f1;border-radius:12px;justify-content:center;align-items:center;gap:8px;padding:10px 16px;font-size:11.5px;display:flex}.personal-read-only-notice strong{color:var(--pw-text);white-space:nowrap}.personal-manager-conversation-tray{width:100%;max-height:320px;color:inherit;font:inherit;text-align:left;background:#fffffff7;border:1px solid #bfcdf1;border-radius:14px;gap:9px;margin-bottom:10px;padding:12px 14px;animation:.16s cubic-bezier(.16,1,.3,1) pw-tray-in;display:grid;overflow:hidden;box-shadow:0 5px 20px #223e781a}@keyframes pw-tray-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.personal-manager-conversation-tray:hover{border-color:#8fa9ee;box-shadow:0 7px 24px #223e7824}.personal-manager-conversation-tray:focus-within{border-color:var(--pw-blue);box-shadow:0 0 0 3px #2f66e921,0 5px 20px #223e781a}.personal-manager-conversation-tray>header{justify-content:space-between;align-items:center;gap:12px;display:flex}.personal-manager-conversation-tray>header>span{color:var(--pw-blue-ink);align-items:center;gap:7px;display:flex}.personal-manager-conversation-tray>header strong{font-size:16px;font-weight:600;line-height:24px}.personal-manager-conversation-tray>header small{color:var(--pw-faint);font-size:12px;font-weight:500;line-height:16px}.personal-manager-conversation-actions{align-items:center;gap:8px;display:flex}.personal-manager-conversation-btn{min-height:32px;color:var(--pw-blue-ink);cursor:pointer;background:#f4f7fe;border:1px solid #b9c9ee;border-radius:8px;align-items:center;gap:5px;padding:5px 10px;font-size:12px;font-weight:600;line-height:16px;transition:all .12s;display:inline-flex}.personal-manager-conversation-btn:hover{background:var(--pw-blue-soft);border-color:var(--pw-blue)}.personal-manager-conversation-link{min-height:32px;color:var(--pw-blue);cursor:pointer;background:0 0;border:0;border-radius:7px;align-items:center;padding:5px 8px;font-size:14px;font-weight:500;line-height:20px;transition:background .12s;display:inline-flex}.personal-manager-conversation-link:hover{background:var(--pw-blue-soft)}.personal-manager-conversation-close{width:32px;height:32px;color:var(--pw-faint);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;transition:all .12s;display:inline-flex}.personal-manager-conversation-close:hover{color:#ef4444;background:#fee2e2}.personal-manager-conversation-messages{gap:7px;max-height:220px;display:grid;overflow-y:auto}.personal-manager-conversation-messages article{background:#f5f7fc;border-radius:10px;grid-template-columns:86px minmax(0,1fr);gap:10px;padding:10px 12px;font-size:14px;line-height:20px;display:grid}.personal-manager-conversation-messages article.is-user{background:#edf3ff}.personal-manager-conversation-messages article strong{color:var(--pw-muted);font-size:12px;font-weight:500;line-height:16px}.personal-manager-conversation-bubble{min-width:0}.personal-manager-conversation-bubble p{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.personal-manager-conversation-bubble .personal-md{font-size:14px;line-height:20px}.personal-manager-conversation-bubble small{color:var(--pw-blue);margin-top:4px;font-size:12px;line-height:16px;display:inline-block}.personal-quick-prompts{flex-wrap:wrap;gap:8px;margin-bottom:9px;display:flex}.personal-quick-prompts button{border:1px solid var(--pw-line-strong);min-height:32px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:99px;align-items:center;gap:6px;padding:5px 12px;font-size:12.5px;transition:all .14s;display:inline-flex}.personal-quick-prompts button:hover{border-color:var(--pw-blue);color:var(--pw-blue-ink)}.personal-quick-prompts button:disabled{opacity:.45;cursor:default}.personal-goal-draft-status{color:var(--pw-muted);background:#f5f7ff;border:1px solid #cfd9f5;border-radius:10px;align-items:center;gap:8px;margin-bottom:9px;padding:8px 11px;font-size:11px;display:flex}.personal-goal-draft-status strong{color:var(--pw-text)}.personal-channel-composer{border:1px solid var(--pw-line-strong);background:#fff;border-radius:16px;grid-template-columns:36px minmax(0,1fr) 40px;align-items:center;min-height:56px;padding:7px 7px 7px 14px;transition:border-color .15s,box-shadow .15s;display:grid;box-shadow:0 2px 10px #1e1c1412}.personal-channel-composer:focus-within{border-color:var(--pw-blue);box-shadow:0 0 0 3px #2f66e921,0 2px 10px #1e1c1412}.personal-channel-composer textarea{resize:none;border:0;border-left:1px solid var(--pw-line);width:100%;max-height:120px;color:inherit;font:inherit;background:0 0;outline:0;padding:9px 12px;line-height:1.4}.personal-channel-composer>button,.personal-correction-composer button{background:var(--pw-blue);color:#fff;cursor:pointer;border:0;border-radius:12px;place-items:center;width:40px;height:40px;display:grid;box-shadow:0 2px 6px #2f66e952}.personal-channel-composer>button:hover{background:var(--pw-blue-ink)}.personal-channel-composer>button:disabled,.personal-correction-composer button:disabled{opacity:.4;cursor:default;box-shadow:none}.personal-channel-composer>.personal-composer-attach{width:34px;height:34px;color:var(--pw-muted);box-shadow:none;background:0 0;border-radius:9px}.personal-channel-composer>.personal-composer-attach:hover{background:var(--pw-blue-soft);color:var(--pw-blue-ink)}.personal-composer-images{gap:8px;margin:0 0 8px;display:flex;overflow-x:auto}.personal-composer-images figure{flex:0 0 74px;height:58px;margin:0;position:relative}.personal-composer-images img{object-fit:cover;border:1px solid var(--pw-line-strong);background:#fff;border-radius:10px;width:100%;height:100%}.personal-composer-images button{border:1px solid var(--pw-line-strong);width:20px;height:20px;color:var(--pw-text);cursor:pointer;background:#fff;border-radius:50%;place-items:center;padding:0;display:grid;position:absolute;top:-5px;right:-5px;box-shadow:0 1px 4px #1e1c142e}.personal-composer-error{color:var(--pw-red);margin:0 0 7px;font-size:11.5px}.personal-context-drawer{grid-template-rows:auto minmax(0,1fr);height:100vh;display:grid}.personal-drawer-header{border-bottom:1px solid var(--pw-line);justify-content:space-between;align-items:flex-start;min-height:84px;padding:20px 18px 16px;display:flex}.personal-drawer-header h2{letter-spacing:-.01em;margin:0;font-size:15.5px;font-weight:700}.personal-drawer-header p{color:var(--pw-faint);letter-spacing:.07em;text-transform:uppercase;margin:4px 0 0;font-size:11px;font-weight:650}.personal-drawer-close{flex:0 0 44px;width:44px;height:44px;margin-top:2px}.personal-drawer-body{padding:18px;overflow:auto}.personal-context-drawer[data-context-kind=todo]{background:#fbfbfc}.personal-context-drawer[data-context-kind=todo] .personal-drawer-header{background:#fff;min-height:68px;padding:11px 22px}.personal-context-drawer[data-context-kind=todo] .personal-drawer-header h2{font-size:14px}.personal-context-drawer[data-context-kind=todo] .personal-drawer-header p{text-overflow:ellipsis;white-space:nowrap;max-width:330px;overflow:hidden}.personal-drawer-header-actions{align-items:center;gap:6px;display:flex}.personal-drawer-header-actions .personal-icon-button{flex:none}.personal-context-drawer[data-context-kind=todo] .personal-drawer-body{padding:0}.personal-task-inspector-summary{border-bottom:1px solid var(--pw-line);background:#fff;padding:24px 24px 20px}.personal-task-inspector-summary h3{letter-spacing:-.015em;overflow-wrap:anywhere;margin:14px 0 0;font-size:18px;font-weight:680;line-height:1.55}.personal-task-inspector-status{flex-wrap:wrap;align-items:center;gap:7px;display:flex}.personal-task-inspector-status>span{color:#62697a;background:#f1f2f5;border-radius:6px;align-items:center;gap:6px;min-height:24px;padding:2px 8px;font-size:11px;font-weight:650;display:inline-flex}.personal-task-inspector-status>span:first-child{padding-left:7px}.personal-task-inspector-status i{background:var(--pw-blue);border-radius:50%;width:7px;height:7px}.personal-task-inspector-status .is-done{background:var(--pw-green-bg);color:var(--pw-green)}.personal-task-inspector-status .is-done i{background:var(--pw-green)}.personal-task-inspector-status .is-blocked{background:var(--pw-red-bg);color:var(--pw-red)}.personal-task-inspector-status .is-blocked i{background:var(--pw-red)}.personal-task-inspector-fields{background:#fff;padding:20px 24px 22px}.personal-task-inspector-fields h4{color:var(--pw-text);margin:0 0 9px;font-size:12px;font-weight:700}.personal-task-inspector-fields dl{border-top:1px solid var(--pw-line);margin:0}.personal-task-inspector-fields dl div{border-bottom:1px solid var(--pw-line);grid-template-columns:92px minmax(0,1fr);gap:14px;min-height:44px;padding:11px 0;font-size:12px;line-height:1.55;display:grid}.personal-task-inspector-fields dt{color:var(--pw-muted)}.personal-task-inspector-fields dd{color:var(--pw-text);overflow-wrap:anywhere;margin:0}.personal-task-inspector-actions{border-top:1px solid var(--pw-line-strong);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fffffff5;grid-template-columns:auto minmax(170px,1fr);gap:10px;padding:13px 18px;display:grid;position:sticky;bottom:0;box-shadow:0 -8px 26px #1e284012}.personal-task-inspector-actions>.personal-primary-action{min-height:40px;margin:0}.personal-task-management{position:relative}.personal-task-management>summary{border:1px solid var(--pw-line-strong);min-width:128px;min-height:40px;color:var(--pw-text);cursor:pointer;background:#fff;border-radius:9px;justify-content:center;align-items:center;gap:7px;padding:0 14px;font-size:12px;font-weight:650;list-style:none;display:flex}.personal-task-management>summary::-webkit-details-marker{display:none}.personal-task-management[open]>summary{color:var(--pw-blue-ink);border-color:#9db3e9}.personal-task-management>div{border:1px solid var(--pw-line-strong);background:#fff;border-radius:12px;gap:9px;width:390px;padding:14px;display:grid;position:absolute;bottom:calc(100% + 9px);left:0;box-shadow:0 16px 38px #1e284029}.personal-task-management>div>strong{color:var(--pw-muted);font-size:10.5px;font-weight:650}.personal-task-management-secondary{border-top:1px solid var(--pw-line);grid-template-columns:1fr 1fr;gap:7px;padding-top:4px;display:grid}.personal-task-management-secondary button{border:1px solid var(--pw-line-strong);min-height:34px;color:var(--pw-text);cursor:pointer;background:#fff;border-radius:8px;font-size:11.5px}.personal-task-management-secondary button:hover{background:#f6f7fa}.personal-task-completed-note{background:var(--pw-green-bg);color:var(--pw-green);border:1px solid #cde4d8;border-radius:10px;align-items:center;gap:10px;margin:12px 24px 24px;padding:12px 14px;display:flex}.personal-task-completed-note>span{gap:2px;display:grid}.personal-task-completed-note strong{font-size:12px}.personal-task-completed-note small{color:#5d786c;font-size:10.5px}.personal-detail-card,.personal-correction-panel{border:1px solid var(--pw-line);background:#fff;border-radius:14px;padding:15px}.personal-proposal-card{background:#f5f8ff;border:1px solid #c3d3f9;border-radius:14px;padding:16px}.personal-proposal-card>small{color:#5270bd;letter-spacing:.05em;font-size:11px;font-weight:650}.personal-proposal-card h3{margin:8px 0;font-size:15.5px}.personal-proposal-card p{color:#5f6570;font-size:12px;line-height:1.55}.personal-proposal-card dl{gap:8px;margin:14px 0 0;display:grid}.personal-proposal-card dl div{grid-template-columns:82px minmax(0,1fr);gap:10px;font-size:11.5px;display:grid}.personal-proposal-card dt{color:var(--pw-faint)}.personal-proposal-card dd{overflow-wrap:anywhere;margin:0}.personal-context-drawer .personal-team-plan-result{border-color:var(--pw-line);background:var(--pw-card)}.personal-context-drawer .personal-team-plan-result h3{margin:0;font-size:18px;font-weight:600}.personal-context-drawer .personal-team-plan-result>p{color:var(--pw-muted);margin:16px 0 0;font-weight:400}.personal-team-plan-result .personal-team-plan-assignments{gap:16px;margin:20px 0}.personal-team-plan-result .personal-team-plan-assignments>div{grid-template-columns:minmax(0,1fr);gap:4px;font-size:13px}.personal-team-plan-result .personal-team-plan-assignments dt{color:var(--pw-muted);font-size:12px}.personal-team-plan-result .is-pending dd{color:var(--pw-muted)}.personal-team-plan-result details{border-top:1px solid var(--pw-line);margin-top:16px;padding-top:12px}.personal-team-plan-result summary{cursor:pointer;color:var(--pw-muted);font-size:12px}.personal-proposal-state{border-radius:9px;align-items:center;gap:7px;margin:10px 0 0;padding:10px 12px;font-size:11px;display:flex}.personal-proposal-state.is-applied{background:var(--pw-green-bg);color:var(--pw-green)}.personal-proposal-state.is-stale,.personal-proposal-state.is-error{background:var(--pw-red-bg);color:var(--pw-red)}.personal-proposal-state.is-gated{color:#825a00;background:#fff6df;gap:6px;display:grid}.personal-proposal-state.is-gated>span{gap:3px;display:grid}.personal-proposal-state.is-gated small{line-height:1.5}.personal-workspace-candidates{gap:8px;margin-top:10px;display:grid}.personal-workspace-candidates button{color:#263e76;cursor:pointer;text-align:left;background:#fff;border:1px solid #c3d3f9;border-radius:10px;gap:3px;min-height:48px;padding:9px 12px;display:grid}.personal-workspace-candidates small{color:var(--pw-muted)}.personal-detail-card.is-attention{background:#fffdf7;border-color:#f1d8ac}.personal-detail-card small{color:var(--pw-muted);font-size:11px}.personal-detail-card h3{margin:7px 0;font-size:14.5px;line-height:1.5}.personal-detail-card p,.personal-correction-panel p{color:var(--pw-muted);font-size:12px;line-height:1.55}.personal-detail-card dl{gap:9px;margin:14px 0 0;display:grid}.personal-detail-card dl div{grid-template-columns:74px minmax(0,1fr);gap:10px;font-size:12px;display:grid}.personal-detail-card dt{color:var(--pw-faint)}.personal-detail-card dd{overflow-wrap:anywhere;margin:0}.personal-run-drawer-tabs{background:#efefec;border-radius:11px;grid-template-columns:1fr 1fr;gap:4px;padding:4px;display:grid}.personal-run-drawer-tabs button{min-height:36px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:8px;padding:0 8px;font-size:12px;font-weight:650}.personal-run-drawer-tabs button[aria-selected=true]{color:var(--pw-text);background:#fff;box-shadow:0 1px 4px #1e1c141f}.personal-session-summary{margin-top:12px}.personal-session-message-record{margin-top:14px}.personal-session-message-record>h3{color:var(--pw-faint);letter-spacing:.06em;text-transform:uppercase;margin:0 0 10px;font-size:11px}.personal-session-message-record ol{gap:0;margin:0;padding:0;list-style:none;display:grid}.personal-session-message-record li{grid-template-columns:13px minmax(0,1fr);gap:9px;padding-bottom:15px;display:grid}.personal-session-message-record li>i,.personal-session-active-step>i{background:var(--pw-green);width:9px;height:9px;box-shadow:0 0 0 3px var(--pw-green-bg);border-radius:50%;margin-top:5px}.personal-session-message-record li.is-user>i{background:var(--pw-blue);box-shadow:0 0 0 3px var(--pw-blue-soft)}.personal-session-message-record li.is-error>i{background:var(--pw-red);box-shadow:0 0 0 3px var(--pw-red-bg)}.personal-session-message-record li>div{border-bottom:1px solid var(--pw-line);gap:5px;min-width:0;padding:0 0 15px;display:grid}.personal-session-message-record li header{justify-content:space-between;align-items:center;gap:8px;display:flex}.personal-session-message-record li strong{font-size:12px}.personal-session-message-record time{color:var(--pw-faint);font-size:10px}.personal-session-message-record li p{max-height:180px;color:var(--pw-muted);white-space:pre-wrap;margin:0;font-size:11.5px;line-height:1.6;overflow:auto}.personal-session-empty{border:1px dashed var(--pw-line-strong);color:var(--pw-muted);text-align:center;border-radius:10px;margin:0;padding:18px 12px;font-size:11.5px}.personal-session-active-step{grid-template-columns:13px minmax(0,1fr);align-items:start;gap:9px;padding-top:4px;display:grid}.personal-session-active-step>i{background:var(--pw-blue);box-shadow:0 0 0 3px var(--pw-blue-soft);animation:1.4s ease-in-out infinite personal-session-pulse}.personal-session-active-step>span{gap:3px;display:grid}.personal-session-active-step strong{font-size:12px}.personal-session-active-step small{color:var(--pw-muted);font-size:10.5px}@keyframes personal-session-pulse{50%{opacity:.35}}.personal-todo-actions{grid-template-columns:1fr 1fr;gap:8px;margin-top:12px;display:grid}.personal-todo-actions>button{margin-top:0}.personal-todo-actions-title{color:var(--pw-faint);letter-spacing:.06em;grid-column:1/-1;font-size:11px;font-weight:650}.personal-todo-actions .personal-primary-action,.personal-todo-actions .personal-compact-menu{grid-column:1/-1;margin-top:0}.personal-inline-agent-select{border:1px solid var(--pw-line);color:var(--pw-muted);border-radius:10px;grid-column:1/-1;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;padding:8px;font-size:11px;display:grid}.personal-inline-agent-select select{border:1px solid var(--pw-line-strong);color:#333;background:#fff;border-radius:8px;min-width:0;min-height:36px;padding:0 8px}.personal-inline-agent-select .personal-secondary-action{width:auto;min-height:36px;margin:0;padding:0 12px}.personal-inline-resume-when input{border:1px solid var(--pw-line-strong);color:#333;background:#fff;border-radius:8px;min-width:0;min-height:36px;padding:0 8px}.personal-inline-resume-when small{color:var(--pw-faint);grid-column:2/-1}.personal-primary-action,.personal-secondary-action,.personal-danger-action{cursor:pointer;border-radius:11px;justify-content:center;align-items:center;gap:8px;width:100%;min-height:42px;margin-top:12px;font-size:13.5px;font-weight:650;display:flex}.personal-primary-action{border:1px solid var(--pw-blue);background:var(--pw-blue);color:#fff;box-shadow:0 2px 6px #2f66e947}.personal-primary-action:hover{background:var(--pw-blue-ink)}.personal-secondary-action{border:1px solid var(--pw-line-strong);color:var(--pw-text);background:#fff}.personal-secondary-action:hover{border-color:var(--pw-faint)}.personal-danger-action{color:var(--pw-red);background:#fff;border:1px solid #efd2cd}.personal-danger-action:hover{background:var(--pw-red-bg)}.personal-primary-action:disabled,.personal-secondary-action:disabled,.personal-danger-action:disabled{opacity:.46;cursor:default;box-shadow:none}.personal-drawer-action-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.personal-correction-panel{margin-top:12px}.personal-correction-panel header{justify-content:space-between;align-items:center;display:flex}.personal-correction-panel header span{align-items:center;gap:7px;font-size:12px;font-weight:700;display:flex}.personal-correction-panel header button{color:var(--pw-muted);cursor:pointer;background:0 0;border:0}.personal-correction-composer{border:1px solid var(--pw-line-strong);border-radius:12px;position:relative;overflow:hidden}.personal-correction-composer:focus-within{border-color:var(--pw-blue)}.personal-correction-composer textarea{resize:vertical;width:100%;min-height:84px;font:inherit;border:0;outline:0;padding:10px 56px 10px 12px;font-size:12.5px}.personal-correction-composer button{border-radius:10px;width:34px;height:34px;position:absolute;bottom:6px;right:6px}.personal-recovery-panel{background:#fffaf0;border:1px solid #eccf94;border-radius:12px;margin-top:12px;padding:14px}.personal-recovery-panel>strong{font-size:13px}.personal-recovery-panel>p,.personal-preview-unavailable{color:var(--pw-muted);font-size:12px;line-height:1.5}.personal-compact-menu{margin-top:12px;position:relative}.personal-compact-menu>summary{border:1px solid var(--pw-line-strong);cursor:pointer;background:#fff;border-radius:11px;justify-content:center;align-items:center;gap:8px;min-height:42px;padding:0 12px;font-size:12.5px;font-weight:650;list-style:none;display:flex}.personal-compact-menu>summary::-webkit-details-marker{display:none}.personal-compact-menu[open]>summary{border-color:var(--pw-faint)}.personal-compact-menu>div{border:1px solid var(--pw-line);background:#fff;border-radius:11px;margin-top:6px;padding:6px;display:grid;box-shadow:0 8px 24px #1e1c141a}.personal-compact-menu>div button{min-height:40px;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;gap:8px;padding:0 10px;display:flex}.personal-compact-menu>div button:hover{background:#f5f4f1}.personal-compact-menu>div button:disabled{color:var(--pw-faint);cursor:default;opacity:.55}.personal-safe-preview{border:1px solid var(--pw-line);color:#333943;white-space:pre-wrap;overflow-wrap:anywhere;background:#f7f6f3;border-radius:11px;max-height:280px;margin:12px 0 0;padding:14px;font:12px/1.6 Geist Mono,SFMono-Regular,Consolas,monospace;overflow:auto}.personal-report-detail{border:1px solid var(--pw-line);background:#fff;border-radius:14px;margin-top:12px;padding:14px}.personal-report-detail>header{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.personal-report-detail>header span{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:10px;flex-direction:column;gap:2px;padding:10px;font-size:10px;font-weight:650;display:flex}.personal-report-detail>header strong{font-size:18px}.personal-report-detail>p{color:var(--pw-muted);margin:10px 0;font-size:11px}.personal-report-detail ol{gap:8px;margin:0;padding:0;list-style:none;display:grid}.personal-report-detail li{border:1px solid var(--pw-line);border-radius:10px;gap:4px;padding:10px;display:grid}.personal-report-detail li[data-change-kind=changed]{background:#fffaf0;border-color:#e8d3a5}.personal-report-detail li small{color:var(--pw-muted);text-transform:uppercase;font-size:10px}.personal-report-detail li strong{font-size:12px;line-height:1.45}.personal-report-detail li p{color:var(--pw-muted);margin:0;font-size:11px;line-height:1.5}.personal-report-detail>footer{color:var(--pw-faint);overflow-wrap:anywhere;gap:4px;margin-top:10px;font:10px/1.5 Geist Mono,SFMono-Regular,Consolas,monospace;display:grid}.personal-execution-history{margin-top:18px}.personal-execution-history h3{letter-spacing:.07em;text-transform:uppercase;color:var(--pw-faint);margin:0 0 10px;font-size:11.5px;font-weight:650}.personal-execution-history>p{color:var(--pw-muted);font-size:12px}.personal-execution-history ol{border-top:1px solid var(--pw-line);margin:0;padding:0;list-style:none}.personal-execution-history li{border-bottom:1px solid var(--pw-line);justify-content:space-between;align-items:center;gap:12px;min-height:50px;display:flex}.personal-execution-history li>span{gap:3px;display:grid}.personal-execution-history li strong{font-size:12px}.personal-execution-history li small{color:var(--pw-muted);font-size:10px}.personal-execution-history li em{color:var(--pw-muted);font-size:10px;font-style:normal}.personal-execution-history li em.is-completed{color:var(--pw-green)}.personal-execution-history li em.is-failed{color:var(--pw-red)}.personal-mobile-back{display:none}.personal-message:not(.is-user)>div{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:4px 16px 16px;flex:1;min-width:0;padding:10px 14px}.personal-md{gap:8px;margin-top:5px;font-size:13.5px;line-height:1.7;display:grid}.personal-md p{white-space:normal;overflow-wrap:anywhere;margin:0}.personal-md-heading{letter-spacing:-.01em;font-weight:700}.personal-md-heading.is-h1{font-size:15.5px}.personal-md-heading.is-h2{font-size:14.5px}.personal-md-heading.is-h3,.personal-md-heading.is-h4{font-size:13.5px}.personal-md-list{gap:4px;margin:0;padding-left:20px;display:grid}.personal-md ul.personal-md-list{list-style-type:disc}.personal-md ol.personal-md-list{list-style-type:decimal}.personal-md-list li{overflow-wrap:anywhere;padding-left:2px}.personal-md-list li::marker{color:var(--pw-faint)}.personal-md-code{border:1px solid var(--pw-line);overflow-wrap:anywhere;background:#f5f4f1;border-radius:6px;padding:1px 5px;font:12px/1.5 SF Mono,ui-monospace,Menlo,Consolas,monospace}.personal-md-pre{border:1px solid var(--pw-line);background:#f7f6f3;border-radius:11px;margin:0;padding:12px 14px;overflow-x:auto}.personal-md-pre code{color:#333943;white-space:pre;font:12px/1.65 SF Mono,ui-monospace,Menlo,Consolas,monospace}.personal-md-link{color:var(--pw-blue-ink);border-bottom:1px solid #c3d3f9;text-decoration:none}.personal-md-link:hover{border-bottom-color:var(--pw-blue-ink)}.personal-agent-persona-head{align-items:center;gap:12px;display:flex}.personal-agent-avatar{color:#fff;background:linear-gradient(135deg,#2f66e9,#6f9bff);border-radius:14px;flex:0 0 46px;place-items:center;height:46px;font-size:19px;font-weight:700;display:grid;box-shadow:0 2px 8px #2f66e942}.personal-agent-persona-id{flex:1;min-width:0}.personal-agent-persona-id h3{margin:0}.personal-agent-persona-id p{margin:2px 0 0}.personal-agent-health{border-radius:99px;flex:none;padding:2.5px 10px;font-size:11px;font-weight:650}.personal-agent-health.is-ok{background:var(--pw-green-bg);color:var(--pw-green)}.personal-agent-health.is-off,.personal-row-status.is-blocking{background:var(--pw-red-bg);color:var(--pw-red)}.personal-row-status.is-pending{background:var(--pw-amber-bg);color:var(--pw-amber)}.personal-row-status.is-failed{background:var(--pw-red-bg);color:var(--pw-red)}.personal-row-status.is-completed{background:var(--pw-green-bg);color:var(--pw-green)}.personal-row-status.is-queued,.personal-row-status.is-waiting,.personal-row-status.is-interrupted{color:var(--pw-muted);background:#f2f1ed}.personal-diagnostics-trigger{border:0;border-top:1px solid var(--pw-line);width:100%;color:var(--pw-muted);cursor:pointer;background:0 0;justify-content:space-between;align-items:center;margin-top:18px;padding:12px 0;font-size:12.5px;display:flex}.personal-diagnostics-trigger svg{transition:transform .16s}.personal-diagnostics-trigger svg.is-open{transform:rotate(180deg)}.personal-diagnostics{color:var(--pw-muted);overflow-wrap:anywhere;background:#f5f4f1;border-radius:10px;gap:7px;padding:12px;font-size:10.5px;display:grid}.personal-copy-feedback{color:var(--pw-green);margin:7px 0 0;font-size:11px}.personal-copy-feedback.is-error{color:var(--pw-red)}@media (width<=1300px){.personal-workspace-shell.has-drawer .personal-channel-title p{max-width:260px}}@media (width<=1100px){.personal-machine-layout{grid-template-columns:1fr;gap:14px}.personal-machine-namespaces nav{overscroll-behavior-x:contain;scroll-snap-type:x proximity;display:flex;overflow-x:auto}.personal-machine-namespaces button{scroll-snap-align:start;flex:0 0 180px}.personal-machine-summary{flex-wrap:wrap;align-items:flex-start}.personal-machine-editor-bar{flex-direction:column;align-items:stretch}.personal-machine-editor-mode{width:100%}.personal-machine-editor-mode button{flex:1 1 0}.personal-machine-editor fieldset{grid-template-columns:1fr}.personal-machine-editor fieldset label:last-child{grid-column:auto}.personal-machine-preview dl{grid-template-columns:1fr}}@media (width<=1050px){.personal-workspace-shell,.personal-workspace-shell.has-drawer{grid-template-columns:minmax(0,1fr)}.personal-workspace-sidebar{z-index:40;width:min(310px,86vw);display:none;position:fixed;inset:0 auto 0 0;box-shadow:18px 0 50px #1e1c1429}.personal-workspace-shell.mobile-sidebar-open .personal-workspace-sidebar{display:block}.personal-sidebar-backdrop{z-index:35;cursor:default;background:#14182047;border:0;display:block;position:fixed;inset:0}.personal-icon-button.personal-mobile-menu{flex:0 0 36px;display:inline-grid}.personal-workspace-drawer{z-index:30;width:min(410px,90vw);position:fixed;inset:0 0 0 auto}.personal-workspace-drawer[data-drawer-mode=inspector],.personal-workspace-drawer[data-drawer-mode=inspector-full]{z-index:30;width:min(520px,92vw);position:fixed;inset:0 0 0 auto;box-shadow:-18px 0 44px #1e284024}.personal-run-row{grid-template-columns:36px minmax(0,1fr) auto 16px}}@media (width<=720px){.personal-workspace-shell,.personal-workspace-shell.has-drawer{grid-template-columns:1fr}.personal-workspace-shell,.personal-workspace-main,.personal-channel{width:100%;max-width:100vw;overflow-x:hidden}.personal-workspace-sidebar{z-index:40;width:min(310px,86vw);display:none;position:fixed;inset:0 auto 0 0;box-shadow:18px 0 50px #1e1c1429}.personal-workspace-shell.mobile-sidebar-open .personal-workspace-sidebar{display:block}.personal-icon-button.personal-mobile-menu{flex:0 0 36px;display:inline-grid}.personal-channel-header{grid-template-columns:36px minmax(0,1fr) auto;gap:10px;min-height:60px;padding:10px 14px;display:grid}.personal-channel-title p{display:none}.personal-channel-title p.personal-manager-execution{display:flex}.personal-channel-actions{min-width:0}.personal-agent-select{min-width:0;max-width:132px}.personal-channel-actions>.personal-icon-button{display:none}.personal-goal-tabs{order:4;grid-column:1/-1;align-self:auto;margin-left:0;overflow-x:auto}.personal-channel-scroll,.personal-composer-wrap{padding-left:14px;padding-right:14px}.personal-channel-scroll[data-active-goal-view=tasks]:has(.personal-task-board){overflow-y:auto}.personal-task-board{height:auto;min-height:100%}.personal-task-kanban,.personal-workspace-shell.has-drawer .personal-task-kanban,.personal-workspace-shell.has-task-inspector .personal-task-kanban{grid-template-columns:minmax(0,1fr);width:100%;height:auto}.personal-task-kanban .personal-object-list{min-height:auto}.personal-task-lane-scroll,.personal-task-lane-scroll.has-overflow-before,.personal-task-lane-scroll.has-overflow-after{min-height:auto;box-shadow:none;scrollbar-gutter:auto;flex:none;padding-right:8px;overflow:visible}.personal-quick-prompts{flex-wrap:nowrap;overflow-x:auto}.personal-quick-prompts button{flex:none;min-height:36px}.personal-manager-conversation-tray>header{flex-wrap:wrap;align-items:flex-start}.personal-manager-conversation-actions{justify-content:flex-end;width:100%}.personal-manager-conversation-messages article{grid-template-columns:minmax(0,1fr);gap:4px}.personal-timeline-row,.personal-output-row{grid-template-columns:34px minmax(0,1fr) 14px;gap:9px;padding:10px 12px}.personal-timeline-row>time,.personal-timeline-row>.personal-row-status,.personal-timeline-row .personal-priority-dot{display:none}.personal-task-chat-receipt{grid-template-columns:32px minmax(0,1fr);padding:11px}.personal-task-lane-filter{flex-direction:column;align-items:stretch;gap:8px}.personal-task-lane-filter label,.personal-task-lane-filter select{width:100%;max-width:none}.personal-capability-layout,.personal-capability-value-grid,.personal-capability-fields,.personal-capability-linked-setting{grid-template-columns:minmax(0,1fr)}.personal-capability-linked-setting .personal-notification-toggle{justify-self:start}.personal-capability-layout{grid-template-rows:auto minmax(0,1fr)}.personal-capability-list{min-width:0;max-height:90px;padding:3px;display:flex;overflow-x:auto}.personal-capability-list button{flex:0 0 180px}.personal-task-chat-icon{width:32px;height:32px}.personal-task-chat-receipt footer{flex-wrap:wrap;grid-column:1/-1;justify-content:flex-end}.personal-task-chat-receipt footer button{min-height:44px}.personal-composer-wrap{max-width:100vw}.personal-workspace-drawer,.personal-workspace-drawer[data-drawer-mode=inspector],.personal-workspace-drawer[data-drawer-mode=inspector-full]{width:100vw}.personal-inspector-size{display:none!important}.personal-context-drawer{height:100dvh}.personal-drawer-body{padding-bottom:max(18px, env(safe-area-inset-bottom))}.personal-composer-wrap{padding-bottom:max(16px, env(safe-area-inset-bottom))}.personal-mobile-back{display:block}.personal-desktop-close{display:none}.personal-goal-tabs button{min-height:34px}.personal-correction-composer{padding-bottom:2px}.personal-correction-composer textarea{min-height:84px;padding-right:56px;padding-bottom:max(14px, env(safe-area-inset-bottom))}.personal-correction-composer button{width:40px;height:40px}.personal-todo-actions{grid-template-columns:1fr}.personal-task-management>div{width:calc(100vw - 28px)}.personal-home-lanes{grid-template-columns:1fr}.personal-home-lane{min-height:0}.personal-session-record,.personal-session-record dl{grid-template-columns:1fr}.personal-session-record>.personal-secondary-action{grid-area:auto/1}.personal-settings-page{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}.personal-settings-sidebar{border-right:0;border-bottom:1px solid var(--pw-line);gap:10px;height:auto;max-height:30dvh;padding:12px 14px;position:static;overflow:auto}.personal-settings-title{display:none}.personal-settings-tabs{display:flex;overflow-x:auto}.personal-settings-tabs button{flex:0 0 180px}.personal-settings-body{padding:20px 14px}.personal-settings-header{align-items:center;gap:14px}.personal-settings-header h1{font-size:24px}.personal-machine-layout{grid-template-columns:1fr;gap:14px}.personal-machine-namespaces nav{overscroll-behavior-x:contain;scroll-snap-type:x proximity;display:flex;overflow-x:auto}.personal-machine-namespaces button{scroll-snap-align:start;flex:0 0 180px}.personal-machine-summary{align-items:flex-start}.personal-machine-editor-bar{flex-direction:column;align-items:stretch}.personal-machine-editor-mode{width:100%}.personal-machine-editor-mode button{flex:1 1 0}.personal-machine-summary dl{flex-direction:column;gap:8px}.personal-machine-editor fieldset{grid-template-columns:1fr}.personal-machine-editor fieldset label:last-child{grid-column:auto}.personal-machine-preview dl{grid-template-columns:1fr}.personal-machine-rollback{flex-direction:column;align-items:stretch}.personal-machine-rollback .personal-secondary-action{width:100%}.personal-lark-settings.is-embedded .personal-lark-tabs{overflow-x:auto}.personal-lark-settings.is-embedded .personal-lark-tabs button{flex:none}}@media (prefers-reduced-motion:reduce){.personal-timeline-row,.personal-diagnostics-trigger svg,.personal-workspace-sidebar,.personal-stopped-goals>summary>svg:first-child,.personal-subagent-switch>span,.personal-subagent-switch>span:after{transition:none}.personal-goal-lifecycle.is-pending svg,.personal-spin{animation:none}}.personal-workspace-shell[data-pw-theme=loopx],.personal-settings-page[data-pw-theme=loopx]{--pw-bg:#fafafa;--pw-card:#fff;--pw-line:#ebebeb;--pw-line-strong:#dedede;--pw-muted:#6b6b6b;--pw-faint:#8f8f8f;--pw-text:#171717;--pw-blue:#0070f3;--pw-blue-ink:#0060d1;--pw-blue-soft:#edf6ff;--pw-amber:#9a6200;--pw-amber-bg:#fff7df;--pw-red:#d90000;--pw-red-bg:#fff0f0;--pw-green:#197342;--pw-green-bg:#edf9f1;font-family:Geist Variable,Geist,Inter,Helvetica Neue,Arial,PingFang SC,Microsoft YaHei,sans-serif}.personal-workspace-shell[data-pw-theme=loopx] .personal-workspace-sidebar,.personal-settings-page[data-pw-theme=loopx] .personal-settings-sidebar{background:#fff}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-header{box-shadow:none;background:#fafafaf0}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-title h1{letter-spacing:0;font-size:20px;font-weight:600;line-height:28px}.personal-workspace-shell[data-pw-theme=loopx] .personal-sidebar-section-title{letter-spacing:0;font-size:12px;font-weight:500;line-height:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-link-copy strong,.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane>header span,.personal-workspace-shell[data-pw-theme=loopx] .personal-home-goal-card>strong{font-size:14px;font-weight:600;line-height:20px}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-link-copy small,.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane>p,.personal-workspace-shell[data-pw-theme=loopx] .personal-home-goal-card>p{font-size:12px;line-height:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-select-trigger,.personal-workspace-shell[data-pw-theme=loopx] .personal-select-option{border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-workspace-drawer{box-shadow:none}.personal-workspace-shell[data-pw-theme=loopx] .personal-brand-mark{box-shadow:none;background:#171717;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-manager-icon{color:#171717;background:#f2f2f2;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-manager-greeting>span{color:#171717;background:#fff;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-manager-link,.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-link,.personal-workspace-shell[data-pw-theme=loopx] .personal-sidebar-utility,.personal-settings-page[data-pw-theme=loopx] .personal-settings-back,.personal-settings-page[data-pw-theme=loopx] .personal-settings-tabs button{border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-manager-link:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-link:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-sidebar-utility:hover,.personal-settings-page[data-pw-theme=loopx] .personal-settings-back:hover,.personal-settings-page[data-pw-theme=loopx] .personal-settings-tabs button:hover{background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-manager-link[aria-current=page],.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-link[aria-current=page],.personal-settings-page[data-pw-theme=loopx] .personal-settings-tabs button[aria-current=page]{box-shadow:none;background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs,.personal-workspace-shell[data-pw-theme=loopx] .personal-status-source-modes{background:#f2f2f2;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs button,.personal-workspace-shell[data-pw-theme=loopx] .personal-status-source-modes button{border-radius:4px}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs button[aria-current=page],.personal-workspace-shell[data-pw-theme=loopx] .personal-status-source-modes button[aria-selected=true]{box-shadow:0 1px 2px #0000000f}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs{background:0 0;border-radius:0;align-self:stretch;gap:20px;padding:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs button{border-radius:0;min-height:46px;padding:0 1px;font-size:12px;font-weight:500;position:relative}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs button[aria-current=page]{box-shadow:none;color:#171717;background:0 0}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs button[aria-current=page]:after{content:"";background:#171717;height:2px;position:absolute;bottom:-1px;left:0;right:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-sidebar-count{color:#4d4d4d;background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-state-dot,.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-row:nth-child(n) .personal-goal-state-dot{background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-agent-select .personal-select-trigger,.personal-workspace-shell[data-pw-theme=loopx] .personal-read-only-source,.personal-workspace-shell[data-pw-theme=loopx] .personal-icon-button,.personal-workspace-shell[data-pw-theme=loopx] .personal-status-source-select .personal-select-trigger,.personal-settings-page[data-pw-theme=loopx] .personal-primary-action,.personal-settings-page[data-pw-theme=loopx] .personal-secondary-action{border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane,.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-row,.personal-workspace-shell[data-pw-theme=loopx] .personal-detail-card,.personal-settings-page[data-pw-theme=loopx] .personal-detail-card,.personal-settings-page[data-pw-theme=loopx] .personal-settings-card,.personal-settings-page[data-pw-theme=loopx] .personal-lark-app-card,.personal-settings-page[data-pw-theme=loopx] .personal-lark-table,.personal-settings-page[data-pw-theme=loopx] .personal-lark-topic-panel{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lanes{border-block:1px solid #ebebeb;gap:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane{border:0;background:0 0;border-left:1px solid #ebebeb;border-radius:0;min-height:0;padding:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane:first-child{border-left:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-goal-card{box-shadow:none;border-radius:12px;transform:none}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-goal-card:hover{box-shadow:none;border-color:#a1a1a1;transform:none}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-timeline{gap:8px}.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-row,.personal-workspace-shell[data-pw-theme=loopx] .personal-schedule-row{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-row:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-schedule-row:hover{box-shadow:none;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-row-icon{color:#4d4d4d;background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-message.is-user{background:#f2f2f2;border-color:#dedede;border-radius:12px 12px 4px;padding:10px 12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-message-avatar{color:#171717;background:#fff;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-message:not(.is-user)>div{box-shadow:none;border-radius:4px 12px 12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-message p,.personal-workspace-shell[data-pw-theme=loopx] .personal-md{font-size:13px;line-height:1.65}.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-empty>span{color:#171717;background:#fff;border:1px solid #ebebeb;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row{box-shadow:none;background:#fff;border-color:#dedede;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row:hover{box-shadow:none;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row>span:first-child{color:#171717;background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row small,.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row>b{color:#4d4d4d}.personal-workspace-shell[data-pw-theme=loopx] .personal-session-record{background:#fff;border-color:#dedede;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-session-record>header span{color:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-session-record dl div{background:#fafafa;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-receipt{box-shadow:none;background:#fff;border-color:#dedede;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-icon{color:#171717;background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-receipt footer button{color:#171717;border-color:#dedede;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-receipt footer button:hover{background:#f2f2f2;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban{border-block:1px solid #ebebeb;gap:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list{border:0;background:0 0;border-left:1px solid #ebebeb;border-radius:0;gap:8px;padding:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list:first-child{border-left:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>header{padding:4px 2px 8px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>header>strong{font-size:12px;font-weight:600}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-lane-scroll>button>strong,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button>strong{overflow-wrap:anywhere;font-size:14px;font-weight:500;line-height:20px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button>small,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button>small{color:#6b6b6b;font-size:12px;line-height:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button:hover{box-shadow:none;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card.is-selected>button,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button.is-selected{background:#fff;border-color:#171717;box-shadow:0 0 0 1px #171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card.is-selected:before{background:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card-actions button{box-shadow:none;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card-actions .personal-task-session-link,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-session-status{color:#4d4d4d}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-empty{border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>header{letter-spacing:0;min-height:44px;padding:8px 14px;font-weight:500}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button{min-height:58px;padding:10px 14px}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button:hover{background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-file-icon{color:#4d4d4d;background:#fafafa;border:1px solid #ebebeb;border-radius:6px;place-items:center;width:28px;height:28px;display:grid}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button>strong{font-size:13px;font-weight:600}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button>p,.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button>small{font-size:12px;line-height:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-primary-action,.personal-settings-page[data-pw-theme=loopx] .personal-primary-action{box-shadow:none;background:#171717;border-color:#171717;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-primary-action:hover,.personal-settings-page[data-pw-theme=loopx] .personal-primary-action:hover{background:#333;border-color:#333}.personal-workspace-shell[data-pw-theme=loopx] .personal-md-code,.personal-workspace-shell[data-pw-theme=loopx] .personal-safe-preview,.personal-workspace-shell[data-pw-theme=loopx] .personal-diagnostics{background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-md-pre{color:#fafafa;background:#171717;border:1px solid #242424}.personal-workspace-shell[data-pw-theme=loopx] .personal-digest-card{background:#fff;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-action-feedback{color:#171717;background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button{color:#171717;box-shadow:none;background:#fff;border-color:#dedede;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button:hover{color:#171717;box-shadow:none;background:#f2f2f2;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-draft-status{color:#6b6b6b;background:#f2f2f2;border-color:#dedede;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-draft-status strong{color:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-composer{box-shadow:none;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-composer:focus-within{border-color:#0070f3;box-shadow:0 0 0 2px #0070f31f}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-composer>button,.personal-workspace-shell[data-pw-theme=loopx] .personal-correction-composer button{box-shadow:none;background:#171717;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-composer>button:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-correction-composer button:hover{background:#333}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-composer>.personal-composer-attach{color:#6b6b6b;background:0 0}.personal-settings-theme-swatch.is-loopx{background:linear-gradient(135deg,#171717 0 48%,#fafafa 48% 78%,#fff 78%)}.personal-settings-page[data-pw-theme=loopx] .personal-settings-header small,.personal-settings-page[data-pw-theme=loopx] .personal-lark-header small,.personal-settings-page[data-pw-theme=loopx] .personal-lark-section-heading small{color:#0070f3;font-family:Geist Mono Variable,Geist Mono,JetBrains Mono,SFMono-Regular,monospace;font-weight:500}.personal-settings-page[data-pw-theme=loopx] .personal-settings-choice-group button{box-shadow:none;border-radius:12px}.personal-settings-page[data-pw-theme=loopx] .personal-settings-choice-group button:hover{box-shadow:none;border-color:#c8c8c8}.personal-settings-page[data-pw-theme=loopx] .personal-settings-choice-group button[aria-checked=true]{background:#fff;border-color:#171717;box-shadow:0 0 0 1px #171717}@media (width<=720px){.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list{border-top:1px solid #ebebeb;border-left:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane:first-child,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list:first-child{border-top:0}}.personal-workspace-shell[data-pw-theme=brutal],.personal-settings-page[data-pw-theme=brutal]{--pw-bg:#fdf8e7;--pw-card:#fff;--pw-line:#141414;--pw-line-strong:#141414;--pw-muted:#3f3f3f;--pw-faint:#666;--pw-text:#141414;--pw-blue:#141414;--pw-blue-ink:#141414;--pw-blue-soft:#ffe23f;--pw-amber:#141414;--pw-amber-bg:#ffd23f;--pw-red:#141414;--pw-red-bg:#ff9d8a;--pw-green:#141414;--pw-green-bg:#8fe6a4}.personal-workspace-shell[data-pw-theme=brutal] :focus-visible:not(textarea):not(input),.personal-settings-page[data-pw-theme=brutal] :focus-visible:not(textarea):not(input){outline-color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-workspace-sidebar{background:#ffd91a;border-right:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-brand{border-bottom:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-brand-mark{color:#ffd91a;box-shadow:none;background:#141414;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-icon{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-link:hover,.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-link:hover,.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-utility:hover{background:#ffffff8c}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-link[aria-current=page],.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-link[aria-current=page]{background:#ff8fd0;border:2px solid #141414;border-radius:4px;font-weight:700;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-count{color:#141414;background:#fff;border:2px solid #141414;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-section-title{color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-title-actions button:hover{box-shadow:none;background:#fff;border:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-footer{border-top:2px solid #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-sidebar{background:#ffd91a;border-right:2px solid #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-title{border-bottom:2px solid #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-title small,.personal-settings-page[data-pw-theme=brutal] .personal-settings-header small,.personal-settings-page[data-pw-theme=brutal] .personal-settings-back,.personal-settings-page[data-pw-theme=brutal] .personal-settings-tabs button{color:#141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-back:hover,.personal-settings-page[data-pw-theme=brutal] .personal-settings-tabs button:hover{background:#ffffff8c}.personal-settings-page[data-pw-theme=brutal] .personal-settings-tabs button[aria-current=page]{color:#141414;background:#ff8fd0;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-detail-card,.personal-settings-page[data-pw-theme=brutal] .personal-machine-editor,.personal-settings-page[data-pw-theme=brutal] .personal-machine-summary,.personal-settings-page[data-pw-theme=brutal] .personal-lark-app-card,.personal-settings-page[data-pw-theme=brutal] .personal-lark-table,.personal-settings-page[data-pw-theme=brutal] .personal-lark-topic-panel{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-choice-group button{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-machine-namespaces button[aria-current=page],.personal-settings-page[data-pw-theme=brutal] .personal-machine-preview,.personal-settings-page[data-pw-theme=brutal] .personal-machine-scope-note,.personal-settings-page[data-pw-theme=brutal] .personal-machine-rollback{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-choice-group button:hover{background:#fff8d6;border-color:#141414;transform:translate(-1px,-1px);box-shadow:4px 4px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-choice-group button[aria-checked=true]{background:#ffe23f;border-color:#141414;box-shadow:3px 3px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-primary-action,.personal-settings-page[data-pw-theme=brutal] .personal-secondary-action,.personal-settings-page[data-pw-theme=brutal] .personal-lark-toolbar label{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-primary-action{background:#ffe23f}.personal-settings-page[data-pw-theme=brutal] .personal-lark-tabs{border-bottom:2px solid #141414}.personal-settings-page[data-pw-theme=brutal] .personal-lark-tabs button[aria-current=page]{color:#141414;border-color:#141414}.personal-settings-page[data-pw-theme=brutal] .personal-lark-tabs span,.personal-settings-page[data-pw-theme=brutal] .personal-lark-app-card em,.personal-settings-page[data-pw-theme=brutal] .personal-connection-status{color:#141414;background:#ffe23f;border:1.5px solid #141414;border-radius:3px}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-header{background:#fdf8e7;border-bottom:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-tabs{background:0 0;gap:6px;padding:0}.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-tabs button{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-tabs button[aria-current=page]{background:#ffe23f;font-weight:700;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-agent-select .personal-select-trigger,.personal-workspace-shell[data-pw-theme=brutal] .personal-icon-button{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-message.is-user{background:#8fdcff;border:2px solid #141414;border-radius:8px 8px 2px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-message-avatar{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-md-pre{color:#fdf8e7;background:#141414;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-md-code{color:#141414;background:#ffe23f;border:1.5px solid #141414;border-radius:3px}.personal-workspace-shell[data-pw-theme=brutal] .personal-md-link{color:#141414;text-decoration-thickness:2px}.personal-workspace-shell[data-pw-theme=brutal] .personal-object-list{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-object-list>button:hover{background:#fff8d6}.personal-workspace-shell[data-pw-theme=brutal] .personal-row-status{border:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-object-list{background:#fff}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-object-list>header{background:#fff;border-bottom:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-lane-scroll>button,.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-card>button{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-lane-scroll>button:hover,.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-card:hover>button{background:#fff;border-color:#141414;transform:translate(-1px,-1px);box-shadow:4px 4px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-object-list>header>span{color:#fff;background:#141414;border-radius:3px;padding:1px 7px}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot{border:2px solid #141414;border-radius:2px;width:10px;height:10px}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-attention{background:#ff9d5c}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-progress{background:#35c5f0}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-schedule{background:#b49bf0}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-done{background:#7ddb8a}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-empty{border:2px dashed #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-card-actions button{color:#141414;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-composer-wrap{background:linear-gradient(transparent, var(--pw-bg) 22%)}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-banner{color:#141414;background:#fee2e2;border:2px solid #141414;border-radius:6px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-header{color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-header small{color:#555}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-issues{color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-tray{background:#fff;border:2px solid #141414;border-radius:6px;box-shadow:4px 4px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-tray:hover,.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-tray:focus-within{border-color:#141414;box-shadow:5px 5px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-btn{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-btn:hover{background:#ffd91a}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-link{color:#141414;text-decoration:underline}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-close{color:#141414;border:1.5px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-messages article{background:#fdf8e7;border:1.5px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-messages article.is-user{background:#8fdcff}.personal-workspace-shell[data-pw-theme=brutal] .personal-quick-prompts button{color:#141414;background:#fff;border:2px solid #141414;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-quick-prompts button:hover{color:#141414;background:#ffe23f;border-color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer{border:2px solid #141414;border-radius:6px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer:focus-within{border-color:#141414;box-shadow:5px 5px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer textarea{border-left:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer>button,.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer>.personal-composer-attach,.personal-workspace-shell[data-pw-theme=brutal] .personal-correction-composer button{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer>button:hover{background:#ffd91a;transform:translate(1px,1px);box-shadow:1px 1px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-correction-composer{border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-correction-composer:focus-within{border-color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-workspace-drawer{box-shadow:none;border-left:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-detail-card,.personal-workspace-shell[data-pw-theme=brutal] .personal-correction-panel{border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-detail-card.is-attention{background:#fff3c9;border-color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-primary-action{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-primary-action:hover{background:#ffd91a;transform:translate(1px,1px);box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-secondary-action{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-secondary-action:hover{border-color:#141414;transform:translate(1px,1px);box-shadow:1px 1px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-danger-action{color:#141414;background:#ff9d8a;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-compact-menu>summary{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-compact-menu>div{border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-compact-menu>div button:hover{background:#fff8d6}.personal-workspace-shell[data-pw-theme=brutal] .personal-inline-agent-select{border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-inline-agent-select select,.personal-workspace-shell[data-pw-theme=brutal] .personal-inline-resume-when input,.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-switch,.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-fields input:not([type=checkbox]),.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-fields select,.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-domain-option,.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-preview{color:#141414;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-switch{background:#fff;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-switch[aria-checked=true]{background:#baf2c7}.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-switch>span{background:#777}.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-switch[aria-checked=true]>span{background:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-preview{background:#fff3c9;box-shadow:2px 2px #141414}.personal-digest-card{border:1px solid var(--pw-line);background:linear-gradient(135deg,#fff,#fbf7ee);border-radius:14px;justify-content:space-between;align-items:center;gap:14px;margin-bottom:12px;padding:13px 16px;display:flex}.personal-digest-card>strong{letter-spacing:.01em;font-size:13px}.personal-digest-stats{gap:8px;display:flex}.personal-digest-stats span{border:1px solid var(--pw-line-strong);color:var(--pw-muted);background:#fff;border-radius:99px;align-items:baseline;gap:6px;padding:6px 13px;font-size:12px;display:inline-flex}.personal-digest-stats b{color:var(--pw-text);font-size:14px}.personal-priority-badge{color:var(--pw-muted);background:#f2f1ed;border-radius:6px;padding:1px 7px;font-size:10.5px;font-weight:700}.personal-priority-badge.is-p0{background:var(--pw-red-bg);color:var(--pw-red)}.personal-priority-badge.is-p1{background:var(--pw-amber-bg);color:var(--pw-amber)}.personal-priority-badge.is-blocked{background:var(--pw-red-bg);color:var(--pw-red)}.personal-workspace-shell[data-pw-theme=brutal] .personal-digest-card{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-digest-stats span{color:#141414;border:2px solid #141414;border-radius:99px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-priority-badge{border:1.5px solid #141414;border-radius:3px}.personal-goal-notification code{border:1px solid var(--pw-line);background:var(--pw-bg,#f7f6f2);word-break:break-all;border-radius:5px;padding:1px 5px;font-size:11px}.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-notification code{background:#fff;border:1.5px solid #141414;border-radius:3px}.personal-proposal-state.is-error:has(small){align-items:start;gap:4px;display:grid}.personal-proposal-state.is-error small{word-break:break-all;line-height:1.5}.personal-gate-cli-hint{gap:6px;margin-top:10px;display:grid}.personal-gate-cli-hint code{border:1px solid var(--pw-line);background:var(--pw-bg,#f7f6f2);-webkit-user-select:all;user-select:all;word-break:break-all;border-radius:7px;padding:8px 10px;font-size:11.5px;line-height:1.5;display:block}.personal-gate-cli-hint small{color:var(--pw-muted);line-height:1.5}.personal-notification-list{gap:0;margin:12px 0 0;padding:0;list-style:none;display:grid}.personal-notification-row{border-top:1px solid var(--pw-line);gap:8px;padding:12px 0;display:grid}.personal-notification-row:first-child{border-top:0;padding-top:4px}.personal-notification-row-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.personal-notification-row-head strong{font-size:13px}.personal-notification-badge{border-radius:99px;flex:none;padding:2px 8px;font-size:11px;font-weight:650}.personal-notification-badge.is-on{background:var(--pw-green-bg);color:var(--pw-green)}.personal-notification-badge.is-off{background:var(--pw-bg,#f5f4ef);color:var(--pw-muted)}.personal-notification-meta{color:var(--pw-muted);flex-wrap:wrap;gap:4px 12px;font-size:11.5px;display:flex}.personal-notification-toggle{color:var(--pw-text);cursor:pointer;align-items:center;gap:8px;font-size:12.5px;display:flex}.personal-notification-toggle input{accent-color:var(--pw-blue);cursor:pointer;width:15px;height:15px}.personal-notification-bind{gap:8px;display:flex}.personal-notification-bind select{border:1px solid var(--pw-line-strong);min-width:0;height:34px;color:var(--pw-text);background:#fff;border-radius:8px;flex:1;padding:0 10px;font-size:12.5px}.personal-notification-bind .personal-secondary-action{flex:none}.personal-notification-confirm{border:1px solid var(--pw-line);background:var(--pw-bg,#faf9f5);border-radius:9px;gap:8px;padding:10px 12px;display:grid}.personal-notification-confirm p{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.6}.personal-notification-actions{gap:8px;display:flex}.personal-notification-error{color:var(--pw-red);margin:0;font-size:12px;line-height:1.5}.personal-notification-hint{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.6}.personal-notification-hint code{border:1px solid var(--pw-line);background:var(--pw-bg,#f7f6f2);-webkit-user-select:all;user-select:all;border-radius:5px;margin-top:4px;padding:2px 7px;font-size:11px;display:inline-block}.is-spinning{animation:.9s linear infinite personal-notification-spin}@keyframes personal-notification-spin{to{transform:rotate(360deg)}}.personal-workspace-shell[data-pw-theme=brutal] .personal-notification-badge{border:1.5px solid #141414;border-radius:3px}.personal-workspace-shell[data-pw-theme=brutal] .personal-notification-bind select{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-notification-confirm{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-settings-card{border:2px solid #141414;border-radius:4px;box-shadow:4px 4px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-settings-icon{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-language-options>button{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-language-options>button.is-selected{color:#141414;background:#8fdcff}@media (width<=720px){.personal-lark-settings{padding:20px 16px calc(24px + env(safe-area-inset-bottom))}.personal-lark-header h1{font-size:24px}.personal-lark-tabs{gap:18px;margin-top:20px}.personal-settings-card>header,.personal-language-options{padding-left:15px;padding-right:15px}}.personal-goal-acceptance h4{margin:16px 0 8px;font-size:14px}.personal-goal-acceptance .personal-acceptance-observation{border-top:1px solid var(--color-border,#ebebeb);padding:8px 0}.personal-goal-acceptance dd,.personal-goal-acceptance p{overflow-wrap:anywhere}.personal-goal-acceptance details{margin-top:16px}.personal-channel-scroll[data-active-goal-view=overview]{padding-inline:max(24px,50% - 560px)}.personal-channel-header[data-goal-selected=true]{grid-template-columns:auto minmax(0,1fr) auto;gap:4px 16px;padding-block:12px 0;display:grid}.personal-channel-header[data-goal-selected=true] .personal-channel-title{grid-area:1/1/auto/3}.personal-channel-header[data-goal-selected=true] .personal-channel-title h1{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-channel-header[data-goal-selected=true] .personal-channel-actions{grid-area:1/3}.personal-goal-navigation{grid-area:2/1/auto/-1;justify-content:space-between;align-items:center;gap:16px;min-width:0;display:flex}.personal-channel-header[data-goal-selected=true] .personal-goal-tabs{order:0;margin-left:0;overflow:visible}.personal-channel-actions>.personal-goal-settings-action{justify-content:center;align-items:center;min-width:44px;min-height:44px;display:inline-flex}@media (width<=1050px){.personal-channel-header[data-goal-selected=true] .personal-mobile-menu{grid-area:1/1}.personal-channel-header[data-goal-selected=true] .personal-channel-title{grid-column:2}}@media (width<=720px){.personal-channel-header[data-goal-selected=true]{gap:4px 8px}.personal-goal-navigation{gap:12px}.personal-goal-navigation .personal-agent-select{max-width:132px}.personal-goal-navigation .personal-select-value>small{display:none}.personal-channel-header[data-goal-selected=true] .personal-goal-tabs{gap:8px}.personal-goal-navigation .personal-goal-tabs button{min-width:44px;padding-inline:0}.personal-goal-navigation .personal-read-only-source{max-width:132px}.personal-channel-scroll[data-active-goal-view=overview]{padding-inline:14px}}.personal-channel:has(>.goal-loopx-mode){grid-template-rows:auto auto minmax(0,1fr) auto}.personal-run-row{grid-template-columns:38px minmax(0,1fr) auto 16px}.personal-activity-summary{border-bottom:1px solid var(--pw-line)}.personal-activity-summary>summary{cursor:pointer;min-height:44px;color:var(--pw-muted);flex-wrap:wrap;align-items:center;gap:10px;font-size:12px;display:flex}.personal-activity-summary>summary:after{content:"+";margin-left:auto}.personal-activity-summary[open]>summary:after{content:"−"}.personal-activity-summary>div{gap:8px;padding:8px 0 16px;display:grid}.personal-composer-tools{margin-bottom:6px}.personal-composer-tools>summary,.personal-runtime-details>summary{cursor:pointer;color:var(--pw-muted);min-height:44px;padding-block:12px;font-size:12px}.personal-composer-tools .personal-quick-prompts{flex-wrap:wrap;overflow:visible}.personal-composer-tools .personal-quick-prompts button{min-height:44px}.personal-runtime-details{position:relative}.personal-runtime-details[open]{padding-bottom:8px}.personal-channel-composer textarea{min-width:0}@media (width<=720px){.personal-run-row{grid-template-columns:32px minmax(0,1fr) auto 16px;gap:8px}.personal-run-row .personal-row-copy{display:grid}.personal-run-row>.personal-row-status{display:inline-flex}.personal-run-row .personal-row-copy strong,.personal-run-row .personal-row-copy small{overflow-wrap:anywhere;white-space:normal}}.benchmark-page{--benchmark-ink:#171717;--benchmark-body:#4d4d4d;--benchmark-muted:#767676;--benchmark-canvas:#fafafa;--benchmark-surface:#fff;--benchmark-soft:#f2f2f2;--benchmark-border:#e5e5e5;--benchmark-link:#0068d7;width:100%;max-width:100vw;min-height:100vh;color:var(--benchmark-ink);background:var(--benchmark-canvas);font-family:Geist,Inter,Helvetica Neue,Arial,sans-serif;overflow-x:clip}.benchmark-page,.benchmark-page *{box-sizing:border-box}.benchmark-hero{border-bottom:1px solid var(--benchmark-border);background:var(--benchmark-surface);padding:24px max(24px,50vw - 600px)}.benchmark-hero-topline,.benchmark-title-row,.benchmark-card-heading,.benchmark-footer>div{align-items:center;display:flex}.benchmark-hero-topline{justify-content:space-between;margin-bottom:64px}.benchmark-wordmark{color:var(--benchmark-ink);letter-spacing:-.04em;font-weight:650;text-decoration:none}.benchmark-readonly{color:var(--benchmark-muted);align-items:center;gap:8px;font-size:12px;display:inline-flex}.benchmark-hero-grid{grid-template-columns:minmax(0,1.5fr) minmax(260px,.5fr);align-items:end;gap:64px;display:grid}.benchmark-kicker,.benchmark-mono{color:var(--benchmark-muted);letter-spacing:.08em;text-transform:uppercase;margin:0 0 8px;font:500 11px/16px Geist Mono,JetBrains Mono,monospace}.benchmark-title-row{align-items:baseline;gap:16px}.benchmark-title-row h1{letter-spacing:-.05em;max-width:780px;margin:0;font-size:clamp(32px,4.5vw,48px);font-weight:600;line-height:1}.benchmark-lead{max-width:680px;color:var(--benchmark-body);margin:20px 0 0;font-size:16px;line-height:24px}.benchmark-identity,.benchmark-stat-list{margin:0}.benchmark-identity>div{border-top:1px solid var(--benchmark-border);grid-template-columns:80px minmax(0,1fr);gap:16px;padding:10px 0;display:grid}.benchmark-identity dt,.benchmark-stat-list dt{color:var(--benchmark-muted);font-size:12px}.benchmark-identity dd{text-overflow:ellipsis;white-space:nowrap;margin:0;font:500 12px/18px Geist Mono,monospace;overflow:hidden}.benchmark-kpi-grid{border:1px solid var(--benchmark-border);border-radius:12px;grid-template-columns:repeat(4,minmax(0,1fr));margin-top:64px;display:grid;overflow:hidden}.benchmark-kpi-grid article{border-right:1px solid var(--benchmark-border);min-width:0;padding:20px 24px}.benchmark-kpi-grid article:last-child{border-right:0}.benchmark-kpi-grid svg{color:var(--benchmark-muted)}.benchmark-kpi-grid span{color:var(--benchmark-muted);margin-top:16px;font-size:12px;display:block}.benchmark-kpi-grid strong{letter-spacing:-.04em;font-variant-numeric:tabular-nums;margin-top:6px;font-size:30px;font-weight:600;display:block}.benchmark-kpi-grid strong small{color:var(--benchmark-muted);letter-spacing:0;font-size:14px;font-weight:400}.benchmark-kpi-grid p{color:var(--benchmark-body);margin:8px 0 0;font-size:12px}.benchmark-state{border:1px solid var(--benchmark-border);width:fit-content;color:var(--benchmark-body);background:var(--benchmark-soft);text-transform:capitalize;border-radius:999px;align-items:center;padding:3px 8px;font:500 11px/16px Geist Mono,monospace;display:inline-flex}.benchmark-state-success{color:#087a44;background:#ecf9f2;border-color:#b8e7ce}.benchmark-state-warning{color:#8a5100;background:#fff8e8;border-color:#f0d2a3}.benchmark-state-info{color:#0057b8;background:#eef6ff;border-color:#b9d7f5}.benchmark-tabs{z-index:3;border-bottom:1px solid var(--benchmark-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fafafaf0;align-items:center;gap:4px;padding:12px max(24px,50vw - 600px);display:flex;position:sticky;top:0}.benchmark-tabs button,.benchmark-loading button{min-height:40px;color:var(--benchmark-body);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:0 14px;font-size:13px;font-weight:500}.benchmark-tabs button[aria-current=page]{color:#fff;background:var(--benchmark-ink)}.benchmark-tabs .benchmark-refresh{border:1px solid var(--benchmark-border);background:var(--benchmark-surface);align-items:center;gap:7px;margin-left:auto;display:inline-flex}.benchmark-tabs button:focus-visible,.benchmark-cell-link:focus-visible,.benchmark-run-link:focus-visible,.benchmark-loading button:focus-visible{outline:2px solid var(--benchmark-link);outline-offset:2px}.benchmark-content{width:min(100vw - 48px,1200px);min-width:0;margin:0 auto;padding:40px 0 64px}.benchmark-view-stack{gap:48px;min-width:0;display:grid}.benchmark-view-stack>section{min-width:0}.benchmark-section-heading{justify-content:space-between;align-items:end;gap:24px;margin-bottom:16px;display:flex}.benchmark-section-heading h2,.benchmark-detail-card h2,.benchmark-run-detail h2{letter-spacing:-.02em;margin:0;font-size:20px;line-height:28px}.benchmark-section-heading>p{max-width:420px;color:var(--benchmark-muted);text-align:right;margin:0;font-size:12px;line-height:18px}.benchmark-arm-grid,.benchmark-detail-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.benchmark-arm-card,.benchmark-detail-card,.benchmark-run-detail{border:1px solid var(--benchmark-border);background:var(--benchmark-surface);border-radius:12px;padding:24px}.benchmark-card-heading{justify-content:space-between;align-items:start;gap:24px}.benchmark-card-heading h3{letter-spacing:-.02em;margin:0;font-size:16px;line-height:24px}.benchmark-stat-list{margin-top:24px}.benchmark-stat-list>div{border-top:1px solid var(--benchmark-border);grid-template-columns:minmax(0,1fr) auto;gap:16px;padding:11px 0;display:grid}.benchmark-stat-list dd{font-variant-numeric:tabular-nums;text-align:right;margin:0;font:500 12px/18px Geist Mono,monospace}.benchmark-factor-row{flex-wrap:wrap;gap:8px;margin-top:20px;display:flex}.benchmark-factor-row span{color:var(--benchmark-muted);background:var(--benchmark-soft);border-radius:6px;padding:5px 8px;font-size:11px}.benchmark-runtime-list{flex-wrap:wrap;gap:8px;display:flex}.benchmark-runtime-list>div{border:1px solid var(--benchmark-border);background:var(--benchmark-surface);border-radius:6px;align-items:center;gap:20px;padding:9px 11px;font:500 11px/16px Geist Mono,monospace;display:inline-flex}.benchmark-runtime-list>div span{color:var(--benchmark-muted)}.benchmark-runtime-list>div strong{font-weight:600}.benchmark-table-shell{border:1px solid var(--benchmark-border);background:var(--benchmark-surface);border-radius:12px;width:100%;max-width:100%;overflow:auto}.benchmark-table-shell table{border-collapse:collapse;width:100%;font-size:12px}.benchmark-table-shell th,.benchmark-table-shell td{border-bottom:1px solid var(--benchmark-border);text-align:left;white-space:nowrap;padding:14px 16px}.benchmark-table-shell tr:last-child td{border-bottom:0}.benchmark-table-shell th{color:var(--benchmark-muted);background:var(--benchmark-soft);letter-spacing:.03em;text-transform:uppercase;font-size:11px;font-weight:500}.benchmark-table-shell td{color:var(--benchmark-body)}.benchmark-positive{color:#087a44!important}.benchmark-negative{color:#b42318!important}.benchmark-muted{color:var(--benchmark-muted)}.benchmark-wide-table{min-height:300px}.benchmark-cell-link,.benchmark-run-link{color:var(--benchmark-ink);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0}.benchmark-cell-link span{font-family:Geist Mono,monospace;display:block}.benchmark-cell-link small{color:var(--benchmark-link);align-items:center;gap:4px;margin-top:5px;display:flex}.benchmark-cell-link small+small{color:var(--benchmark-muted)}.benchmark-cell-link .benchmark-cell-metric{color:var(--benchmark-body);font-family:Geist Mono,monospace}.benchmark-run-link{max-width:280px;color:var(--benchmark-link);text-overflow:ellipsis;overflow:hidden}.benchmark-runs-layout{grid-template-columns:minmax(0,1.3fr) minmax(340px,.7fr);align-items:start;gap:16px;display:grid}.benchmark-table-shell tr[aria-selected=true] td{background:#f3f7fb}.benchmark-run-detail{position:sticky;top:82px}.benchmark-run-detail h2{overflow-wrap:anywhere;max-width:340px}.benchmark-run-facts dd{overflow-wrap:anywhere;white-space:normal;max-width:310px}.benchmark-run-metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:20px;display:grid}.benchmark-run-metrics>div{background:var(--benchmark-soft);border-radius:6px;padding:10px}.benchmark-run-metrics span,.benchmark-run-metrics strong{display:block}.benchmark-run-metrics span{color:var(--benchmark-muted);font-size:10px}.benchmark-run-metrics strong{margin-top:5px;font:600 12px/18px Geist Mono,monospace}.benchmark-insight{border-left:2px solid var(--benchmark-link);margin-top:20px;padding:4px 0 4px 14px}.benchmark-insight p{color:var(--benchmark-body);margin:8px 0;font-size:13px;line-height:20px}.benchmark-insight small{color:var(--benchmark-muted);line-height:18px}.benchmark-footer{border-top:1px solid var(--benchmark-border);color:var(--benchmark-muted);background:var(--benchmark-surface);justify-content:space-between;gap:24px;padding:20px max(24px,50vw - 600px);font-size:11px;display:flex}.benchmark-footer>div{flex-wrap:wrap;gap:12px}.benchmark-footer code{text-overflow:ellipsis;white-space:nowrap;max-width:360px;overflow:hidden}.benchmark-loading{text-align:center;place-content:center;min-height:100vh;display:grid}.benchmark-loading svg{color:var(--benchmark-muted);margin:0 auto}.benchmark-loading h1{margin:18px 0 0;font-size:24px}.benchmark-loading p{max-width:520px;color:var(--benchmark-muted);margin:8px auto 0}.benchmark-loading button{border:1px solid var(--benchmark-border);background:var(--benchmark-surface);align-items:center;gap:8px;margin:20px auto 0;display:inline-flex}@media (width<=900px){.benchmark-hero-grid,.benchmark-runs-layout{grid-template-columns:1fr}.benchmark-hero-grid{gap:32px}.benchmark-kpi-grid{grid-template-columns:repeat(2,1fr)}.benchmark-kpi-grid article:nth-child(2){border-right:0}.benchmark-kpi-grid article:nth-child(-n+2){border-bottom:1px solid var(--benchmark-border)}.benchmark-run-detail{position:static}}@media (width<=640px){.benchmark-hero{padding-inline:20px}.benchmark-hero-topline{margin-bottom:40px}.benchmark-title-row,.benchmark-section-heading,.benchmark-footer{flex-direction:column;align-items:flex-start}.benchmark-title-row h1{font-size:34px}.benchmark-kpi-grid,.benchmark-arm-grid,.benchmark-detail-grid{grid-template-columns:1fr}.benchmark-kpi-grid article{border-right:0;border-bottom:1px solid var(--benchmark-border)}.benchmark-kpi-grid article:last-child{border-bottom:0}.benchmark-tabs{padding-inline:20px;overflow-x:auto}.benchmark-tabs .benchmark-refresh{display:none}.benchmark-content{width:calc(100vw - 40px);padding-top:28px}.benchmark-section-heading>p{text-align:left}.benchmark-footer code{max-width:100%}}@media (prefers-reduced-motion:reduce){.benchmark-page *,.benchmark-page :before,.benchmark-page :after{scroll-behavior:auto!important;transition:none!important}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-latin-wght-normal-BgDaEnEv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-800:oklch(44.3% .11 240.79);--color-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-white:#fff;--spacing:.25rem;--container-xl:36rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-normal:0em;--radius-md:.375rem;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\!visible{visibility:visible!important}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fixed{position:fixed}.relative{position:relative}.static{position:static}.m-0{margin:calc(var(--spacing) * 0)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-64{min-height:calc(var(--spacing) * 64)}.min-h-\[calc\(100vh-80px\)\]{min-height:calc(100vh - 80px)}.min-h-screen{min-height:100vh}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-9{width:calc(var(--spacing) * 9)}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[1500px\]{max-width:1500px}.max-w-xl{max-width:var(--container-xl)}.min-w-\[260px\]{min-width:260px}.min-w-full{min-width:100%}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing) * 0);--tw-border-spacing-y:calc(var(--spacing) * 0);border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.animate-spin{animation:var(--animate-spin)}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-slate-100>:not(:last-child)){border-color:var(--color-slate-100)}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-rose-200{border-color:var(--color-rose-200)}.border-sky-200{border-color:var(--color-sky-200)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-200\/80{border-color:#e2e8f0cc}@supports (color:color-mix(in lab, red, red)){.border-slate-200\/80{border-color:color-mix(in oklab, var(--color-slate-200) 80%, transparent)}}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-900{border-color:var(--color-slate-900)}.border-transparent{border-color:#0000}.bg-\[\#f6f7f9\]{background-color:#f6f7f9}.bg-\[\#f7f7f4\]{background-color:#f7f7f4}.bg-amber-50{background-color:var(--color-amber-50)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-950{background-color:var(--color-slate-950)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.bg-white\/70{background-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.bg-white\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\/95{background-color:color-mix(in oklab, var(--color-white) 95%, transparent)}}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.pt-0{padding-top:calc(var(--spacing) * 0)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[11px\]{font-size:11px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-amber-950{color:var(--color-amber-950)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-emerald-950{color:var(--color-emerald-950)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-rose-900{color:var(--color-rose-900)}.text-sky-800{color:var(--color-sky-800)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-slate-950{color:var(--color-slate-950)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_1px_2px_rgba\(15\,23\,42\,0\.04\)\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#0f172a0a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-slate-400:focus{--tw-ring-color:var(--color-slate-400)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-slate-400:focus-visible{--tw-ring-color:var(--color-slate-400)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\:block{display:block}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[240px_1fr\]{grid-template-columns:240px 1fr}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-5{padding-inline:calc(var(--spacing) * 5)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media (width>=48rem){.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=80rem){.xl\:sticky{position:sticky}.xl\:top-4{top:calc(var(--spacing) * 4)}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-\[260px_minmax\(0\,1fr\)\]{grid-template-columns:260px minmax(0,1fr)}.xl\:grid-cols-\[minmax\(0\,1\.35fr\)_minmax\(360px\,0\.65fr\)\]{grid-template-columns:minmax(0,1.35fr) minmax(360px,.65fr)}.xl\:grid-cols-\[minmax\(0\,1fr\)_420px\]{grid-template-columns:minmax(0,1fr) 420px}.xl\:self-start{align-self:flex-start}}:where(.dark\:divide-zinc-900:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-zinc-900)}.dark\:border-amber-900:where(.dark,.dark *){border-color:var(--color-amber-900)}.dark\:border-emerald-900:where(.dark,.dark *){border-color:var(--color-emerald-900)}.dark\:border-rose-900:where(.dark,.dark *){border-color:var(--color-rose-900)}.dark\:border-sky-900:where(.dark,.dark *){border-color:var(--color-sky-900)}.dark\:border-zinc-100:where(.dark,.dark *){border-color:var(--color-zinc-100)}.dark\:border-zinc-700:where(.dark,.dark *){border-color:var(--color-zinc-700)}.dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--color-zinc-800)}.dark\:bg-\[\#09090b\]:where(.dark,.dark *){background-color:#09090b}.dark\:bg-amber-950:where(.dark,.dark *){background-color:var(--color-amber-950)}.dark\:bg-amber-950\/40:where(.dark,.dark *){background-color:#46190166}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-950\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-950) 40%, transparent)}}.dark\:bg-emerald-950:where(.dark,.dark *){background-color:var(--color-emerald-950)}.dark\:bg-rose-950:where(.dark,.dark *){background-color:var(--color-rose-950)}.dark\:bg-sky-950:where(.dark,.dark *){background-color:var(--color-sky-950)}.dark\:bg-zinc-50:where(.dark,.dark *){background-color:var(--color-zinc-50)}.dark\:bg-zinc-900:where(.dark,.dark *){background-color:var(--color-zinc-900)}.dark\:bg-zinc-950:where(.dark,.dark *){background-color:var(--color-zinc-950)}.dark\:bg-zinc-950\/40:where(.dark,.dark *){background-color:#09090b66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-950\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-zinc-950) 40%, transparent)}}.dark\:text-amber-100:where(.dark,.dark *){color:var(--color-amber-100)}.dark\:text-amber-200:where(.dark,.dark *){color:var(--color-amber-200)}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-emerald-200:where(.dark,.dark *){color:var(--color-emerald-200)}.dark\:text-emerald-300:where(.dark,.dark *){color:var(--color-emerald-300)}.dark\:text-rose-100:where(.dark,.dark *){color:var(--color-rose-100)}.dark\:text-rose-200:where(.dark,.dark *){color:var(--color-rose-200)}.dark\:text-rose-300:where(.dark,.dark *){color:var(--color-rose-300)}.dark\:text-sky-200:where(.dark,.dark *){color:var(--color-sky-200)}.dark\:text-zinc-50:where(.dark,.dark *){color:var(--color-zinc-50)}.dark\:text-zinc-100:where(.dark,.dark *){color:var(--color-zinc-100)}.dark\:text-zinc-200:where(.dark,.dark *){color:var(--color-zinc-200)}.dark\:text-zinc-300:where(.dark,.dark *){color:var(--color-zinc-300)}.dark\:text-zinc-400:where(.dark,.dark *){color:var(--color-zinc-400)}.dark\:text-zinc-500:where(.dark,.dark *){color:var(--color-zinc-500)}.dark\:text-zinc-950:where(.dark,.dark *){color:var(--color-zinc-950)}@media (hover:hover){.dark\:hover\:bg-zinc-200:where(.dark,.dark *):hover{background-color:var(--color-zinc-200)}.dark\:hover\:bg-zinc-900:where(.dark,.dark *):hover{background-color:var(--color-zinc-900)}}.dark\:focus\:ring-zinc-500:where(.dark,.dark *):focus,.dark\:focus-visible\:ring-zinc-500:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-zinc-500)}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:Geist Variable,Geist,Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{-webkit-font-smoothing:antialiased;text-rendering:geometricprecision;margin:0}button,input,select{font:inherit}.personal-home{--personal-accent:#2563eb;--personal-border:#e2ded6;color:#23272d;background:#f8f7f3;grid-template-columns:196px minmax(0,1fr);width:100%;min-height:100vh;display:grid;overflow-x:clip}.personal-sidebar{border-right:1px solid var(--personal-border);background:#fcfbf8;flex-direction:column;height:100vh;padding:1.5rem 1rem;display:flex;position:sticky;top:0}.personal-wordmark{color:#181d24;letter-spacing:-.01em;align-items:center;gap:.625rem;padding-inline:.5rem;font-size:.9375rem;font-weight:700;text-decoration:none;display:flex}.personal-wordmark-mark,.personal-manager-icon{color:#fff;background:#1e40af;border-radius:.625rem;flex:none;place-items:center;width:1.875rem;height:1.875rem;display:grid;box-shadow:0 1px 2px #0f172a24}.personal-nav{gap:.25rem;margin-top:2rem;display:grid}.personal-nav-item{color:#646971;text-align:left;background:0 0;border:0;border-radius:.625rem;align-items:center;gap:.625rem;width:100%;padding:.625rem .75rem;font-size:.875rem;font-weight:500;text-decoration:none;display:flex}.personal-nav-item-active{color:#1e40af;background:#e8eefc}.personal-nav-item:disabled{cursor:default;opacity:.72}.personal-health{color:#71717a;align-items:center;gap:.5rem;margin-top:auto;padding:.75rem .5rem 0;font-size:.75rem;display:flex}.personal-health-dot,.personal-state-dot{background:#94a3b8;border-radius:9999px;flex:none;width:.5rem;height:.5rem}.personal-health-dot.is-healthy{background:#22c55e;box-shadow:0 0 0 3px #22c55e1f}.personal-health-dot.is-unhealthy{background:#e11d48;box-shadow:0 0 0 3px #e11d481f}.personal-main{min-width:0;padding-bottom:6rem;position:relative}.personal-header{border-bottom:1px solid var(--personal-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fcfbf8eb;justify-content:space-between;align-items:center;gap:1.5rem;min-height:7rem;padding:1.5rem clamp(1.5rem,5vw,4.5rem);display:flex}.personal-header h1{color:#181d24;letter-spacing:-.035em;margin:0;font-size:clamp(1.625rem,2.5vw,2rem);font-weight:650}.personal-header p{color:#71717a;margin:.375rem 0 0;font-size:.875rem}.personal-primary-link,.personal-row-action{color:#fff;background:var(--personal-accent);border-radius:.625rem;flex:none;justify-content:center;align-items:center;gap:.375rem;font-size:.8125rem;font-weight:600;text-decoration:none;display:inline-flex;box-shadow:0 1px 2px #2563eb33}.personal-primary-link{min-height:2.375rem;padding-inline:.875rem}.personal-content{width:min(100%,70rem);margin-inline:auto;padding:2rem clamp(1.5rem,5vw,4.5rem)}.personal-manager-summary{background:#ffffffb8;border:1px solid #dbe0e8;border-radius:.75rem;align-items:center;gap:.875rem;padding:.875rem 1rem;display:flex;box-shadow:0 1px 2px #0f172a09}.personal-manager-summary p{color:#474f5b;margin:0;font-size:.875rem;line-height:1.5}.personal-manager-icon{color:#1e40af;width:1.75rem;height:1.75rem;box-shadow:none;background:#e2e9f9}.personal-section{margin-top:2.25rem}.personal-section-heading{justify-content:space-between;align-items:end;gap:1rem;margin-bottom:.75rem;display:flex}.personal-section-heading h2{color:#23272d;letter-spacing:-.01em;margin:0;font-size:1rem;font-weight:650}.personal-section-heading p{color:#7d7d85;margin:.25rem 0 0;font-size:.75rem}.personal-section-heading>span{color:#7d7d85;font-variant-numeric:tabular-nums;font-size:.75rem}.personal-list{border:1px solid var(--personal-border);background:#ffffffdb;border-radius:.75rem;overflow:hidden;box-shadow:0 2px 8px #1d232b09}.personal-list-row{border-bottom:1px solid #ebe8e2;align-items:center;gap:1rem;min-width:0;padding:1rem;display:grid}.personal-list-row:last-child{border-bottom:0}.personal-needs-row{grid-template-columns:auto minmax(0,1fr) auto auto}.personal-goal-row{color:inherit;grid-template-columns:minmax(0,1fr) auto auto;text-decoration:none;transition:background-color .12s}.personal-goal-row:hover{background:#f8fafc}.personal-goal-meta{align-items:center;gap:.75rem;display:inline-flex}.personal-state-dot.is-blocking{background:#d97706;box-shadow:0 0 0 3px #d977061f}.personal-row-copy{min-width:0}.personal-row-copy strong,.personal-row-copy span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.personal-row-copy strong{color:#2a2f36;font-size:.875rem;font-weight:580}.personal-row-copy span{color:#7d7d85;margin-top:.3125rem;font-size:.75rem}.personal-row-action{color:#1e40af;min-height:2rem;box-shadow:none;background:#e8eefc;padding-inline:.75rem}.personal-empty{color:#7d7d85;text-align:center;padding:1.5rem 1rem;font-size:.8125rem}.personal-source-tools{color:#94949c;justify-content:flex-end;align-items:center;gap:.25rem;margin-top:1rem;font-size:.6875rem;display:flex}.personal-source-tools button{min-height:1.75rem;color:inherit;background:0 0;border:0;border-radius:.375rem;align-items:center;gap:.25rem;padding-inline:.375rem;display:inline-flex}.personal-source-tools button:not(:disabled):hover{color:#475569;background:#f1efea}.personal-manager-input{color:#7d7d85;text-align:left;cursor:pointer;background:#fffffff0;border:1px solid #d8d6d0;border-radius:9999px;align-items:center;gap:.625rem;min-width:12rem;padding:.75rem 1rem;font-size:.8125rem;transition:border-color .12s,box-shadow .12s,color .12s;display:inline-flex;position:fixed;bottom:1.5rem;right:1.5rem;box-shadow:0 8px 24px #0f172a14}.personal-manager-input:hover{color:#475569;border-color:#bfc9da;box-shadow:0 10px 28px #0f172a1f}.personal-manager-backdrop{z-index:50;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0f172a33;justify-content:flex-end;display:flex;position:fixed;inset:0}.personal-manager-drawer{color:#23272d;background:#fcfbf8;grid-template-rows:auto auto minmax(0,1fr) auto;width:min(26.25rem,100vw);min-width:0;height:100%;display:grid;box-shadow:-12px 0 36px #0f172a29}.personal-manager-drawer-header{border-bottom:1px solid var(--personal-border);grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:.75rem;padding:1rem;display:grid}.personal-manager-drawer-header h2,.personal-manager-drawer-header p{margin:0}.personal-manager-drawer-header h2{color:#181d24;font-size:.9375rem;font-weight:650}.personal-manager-drawer-header p{color:#7d7d85;margin-top:.125rem;font-size:.6875rem}.personal-manager-source{color:#475569;background:#f1efea;border-radius:9999px;padding:.25rem .5rem;font-size:.6875rem}.personal-manager-drawer-header button,.personal-manager-composer button{color:#646971;cursor:pointer;background:0 0;border:0;border-radius:.5rem;flex:none;place-items:center;width:2rem;height:2rem;display:inline-grid}.personal-manager-drawer-header button:hover{color:#23272d;background:#f1efea}.personal-manager-quick-actions{border-bottom:1px solid #ebe8e2;gap:.5rem;padding:.75rem 1rem;display:flex;overflow-x:auto}.personal-manager-thread{min-width:0;padding:1rem;overflow-y:auto}.personal-message-answer{white-space:pre-wrap;color:#323944;line-height:1.7}.personal-message-pending{color:#64748b}.personal-message-activity{color:#646a74;border-top:1px solid #d6d3cc;margin-top:.625rem;padding-top:.5rem}.personal-message-activity summary{cursor:pointer;width:fit-content;font-size:.6875rem;font-weight:600}.personal-message-activity ol{gap:.25rem;margin:.5rem 0 0;padding-left:1.125rem;font-size:.6875rem;display:grid}.personal-message-reconnect{color:#1e40af;background:#fff;border:1px solid #cbd5e1;border-radius:.5rem;margin-top:.625rem;padding:.35rem .65rem;font-size:.6875rem;font-weight:700}.personal-message-reconnect:hover{background:#eff6ff;border-color:#93c5fd}.personal-manager-composer{border-top:1px solid var(--personal-border);padding:.875rem 1rem max(.875rem, env(safe-area-inset-bottom));background:#fcfbf8;align-items:center;gap:.5rem;display:flex}.personal-manager-composer input{color:#23272d;background:#fff;border:1px solid #d8d6d0;border-radius:.625rem;outline:none;width:100%;min-width:0;height:2.5rem;padding-inline:.75rem}.personal-manager-composer input:focus{border-color:#60a5fa;box-shadow:0 0 0 3px #3b82f61f}.personal-manager-composer button{color:#fff;background:var(--personal-accent)}.personal-manager-composer button:disabled{cursor:default;opacity:.42}@media (width<=760px){.personal-home{display:block}.personal-sidebar{border-right:0;border-bottom:1px solid var(--personal-border);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.75rem;height:auto;padding:.75rem 1rem;display:grid;position:static}.personal-nav{justify-content:flex-end;min-width:0;margin-top:0;display:flex}.personal-nav-item{width:auto;padding:.5rem}.personal-nav-item:not(.personal-nav-item-active){font-size:0}.personal-health{margin-top:0;padding:0;font-size:0}.personal-header{min-height:auto;padding:1.25rem 1rem}.personal-content{padding:1.5rem 1rem}.personal-list{box-shadow:none;background:0 0;border:0;overflow:visible}.personal-list-row{border:1px solid var(--personal-border);background:#ffffffe6;border-radius:.75rem;margin-bottom:.625rem}.personal-needs-row{grid-template-columns:auto minmax(0,1fr) auto}.personal-needs-row .personal-row-action{grid-column:2/-1;justify-self:start}.personal-manager-input{bottom:1rem;right:1rem}}@media (width<=640px){.personal-manager-backdrop{align-items:flex-end}.personal-manager-drawer{width:100%;max-width:none;height:100dvh}}@media (width<=420px){.personal-wordmark-mark{display:none}.personal-sidebar{grid-template-columns:auto minmax(0,1fr) auto;padding-inline:.75rem}.personal-nav{gap:0}.personal-nav-item{gap:.25rem;padding-inline:.375rem}.personal-header{align-items:flex-start}.personal-primary-link{padding-inline:.625rem}.personal-primary-link svg{display:none}.personal-needs-row,.personal-goal-row{grid-template-columns:minmax(0,1fr) auto}.personal-needs-row .personal-state-dot{display:none}.personal-manager-input{min-width:0;max-width:calc(100vw - 2rem)}.personal-goal-meta svg{display:none}.personal-manager-drawer-header{grid-template-columns:auto minmax(0,1fr) auto auto}}.personal-workspace{--workspace-accent:#2563eb;--workspace-border:#e5e2dc;--workspace-muted:#70747e;color:#1e2228;background:#faf9f6;grid-template-columns:4.5rem 20rem minmax(0,1fr);height:100vh;min-height:42rem;display:grid;overflow:hidden}.personal-global-rail{border-right:1px solid var(--workspace-border);background:#fcfbf8;flex-direction:column;align-items:center;min-height:0;padding:1.125rem .75rem;display:flex}.personal-rail-logo{color:#fff;background:#1e40af;border-radius:.75rem;place-items:center;width:2.5rem;height:2.5rem;display:grid;box-shadow:0 4px 12px #1e40af2e}.personal-global-rail nav{gap:.5rem;margin-top:2rem;display:grid}.personal-global-rail nav button,.personal-global-rail>button{color:#80848c;cursor:pointer;background:0 0;border:0;border-radius:.625rem;place-items:center;width:2.5rem;height:2.5rem;display:grid}.personal-global-rail nav button.is-active{color:#1e40af;background:#e8eefc}.personal-global-rail nav button:disabled{cursor:default;opacity:.42}.personal-global-rail .personal-health-dot{margin-top:auto}.personal-goal-sidebar{border-right:1px solid var(--workspace-border);background:#fcfbf8;grid-template-rows:auto auto minmax(0,1fr) auto;min-width:0;min-height:0;display:grid}.personal-goal-sidebar>header{justify-content:space-between;align-items:center;height:4.75rem;padding:0 1.25rem;display:flex}.personal-goal-sidebar>header h1{letter-spacing:-.02em;margin:0;font-size:1rem;font-weight:680}.personal-goal-sidebar>header button,.personal-goal-sidebar>footer button{color:#70747e;background:0 0;border:0;border-radius:.5rem;place-items:center;width:2rem;height:2rem;display:grid}.personal-goal-sidebar>header button:disabled{opacity:.4}.personal-manager-row,.personal-goal-list-row{width:calc(100% - 1.5rem);min-width:0;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:.75rem;align-items:center;gap:.75rem;margin:0 .75rem;padding:.75rem;display:grid}.personal-manager-row{grid-template-columns:auto minmax(0,1fr);margin-bottom:.5rem}.personal-manager-row.is-selected,.personal-goal-list-row.is-selected{background:#e9eefa}.personal-goal-icon{color:#2563eb;background:#ffffffe6;border-radius:.625rem;place-items:center;width:2.25rem;height:2.25rem;display:grid;box-shadow:0 1px 2px #0f172a0f}.personal-manager-row strong,.personal-manager-row small,.personal-goal-list-copy strong,.personal-goal-list-copy small{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.personal-manager-row strong,.personal-goal-list-copy strong{font-size:.8125rem;font-weight:620}.personal-manager-row small,.personal-goal-list-copy small{color:var(--workspace-muted);margin-top:.25rem;font-size:.6875rem}.personal-goal-scroll{min-height:0;padding-bottom:1rem;overflow-y:auto}.personal-goal-list-row{grid-template-columns:auto minmax(0,1fr) auto;margin-bottom:.25rem}.personal-goal-list-row:hover{background:#f5f3ef}.personal-goal-list-row.is-selected:hover{background:#e9eefa}.personal-goal-list-row .personal-state-dot{width:.4375rem;height:.4375rem}.personal-state-dot.is-progressing{background:#10b981}.personal-state-dot.is-repair{background:#f43f5e}.personal-goal-list-row .rounded-full{padding-inline:.45rem;font-size:.625rem}.personal-goal-sidebar>footer{border-top:1px solid var(--workspace-border);min-height:3.25rem;color:var(--workspace-muted);justify-content:space-between;align-items:center;padding:0 1.25rem;font-size:.6875rem;display:flex}.personal-chat-pane{background:#faf9f6;grid-template-rows:auto minmax(0,1fr) auto;min-width:0;min-height:0;display:grid}.personal-chat-header{z-index:20;border-bottom:1px solid var(--workspace-border);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#fcfbf8f0;justify-content:space-between;align-items:center;gap:1rem;min-width:0;min-height:4.75rem;padding:.75rem clamp(1rem,2.5vw,2rem);display:flex;position:relative}.personal-chat-title,.personal-chat-actions{align-items:center;gap:.75rem;min-width:0;display:flex}.personal-chat-title{flex:auto;overflow:hidden}.personal-chat-title>div{min-width:0}.personal-chat-actions{flex:none}.personal-chat-title h2,.personal-chat-title p{margin:0}.personal-chat-title h2{color:#181d24;letter-spacing:-.02em;text-overflow:ellipsis;white-space:nowrap;font-size:1rem;font-weight:680;overflow:hidden}.personal-chat-title p{max-width:28rem;color:var(--workspace-muted);text-overflow:ellipsis;white-space:nowrap;margin-top:.15rem;font-size:.6875rem;overflow:hidden}.personal-chat-back,.personal-mobile-goals-button,.personal-chat-actions>button{color:#5b606a;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:.625rem;flex:none;place-items:center;width:2.25rem;height:2.25rem;display:grid}.personal-mobile-goals-button,.personal-agent-menu-backdrop{display:none}.personal-chat-back:hover,.personal-chat-actions>button:hover{border-color:var(--workspace-border);background:#fff}.personal-chat-actions>button.personal-progress-trigger{border-color:var(--workspace-border);color:#3c434e;background:#fffc;gap:.4rem;width:auto;padding-inline:.75rem;font-size:.6875rem;font-weight:620;display:inline-flex}.personal-agent-picker{position:relative}.personal-agent-trigger{color:#292e36;cursor:pointer;background:#fff;border:1px solid #dadadc;border-radius:.625rem;align-items:center;gap:.45rem;min-height:2.25rem;padding:0 .75rem;font-size:.75rem;font-weight:600;display:inline-flex}.personal-agent-menu{z-index:40;border:1px solid var(--workspace-border);background:#fffffffa;border-radius:.875rem;width:min(21rem,100vw - 2rem);padding:.5rem;position:absolute;top:calc(100% + .5rem);right:0;box-shadow:0 18px 48px #0f172a29}.personal-agent-menu-title,.personal-agent-menu-footer{color:var(--workspace-muted);padding:.5rem .625rem;font-size:.6875rem}.personal-agent-menu-title{color:#23272d;font-weight:650}.personal-agent-menu-footer{border-top:1px solid var(--workspace-border);margin-top:.375rem}.personal-agent-menu>button{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:.625rem;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:.625rem;padding:.625rem;display:grid}.personal-agent-menu>button:hover,.personal-agent-menu>button.is-selected{background:#eff3fc}.personal-agent-menu>button:disabled{cursor:not-allowed;opacity:.52}.personal-agent-menu strong,.personal-agent-menu small{display:block}.personal-agent-menu strong{font-size:.75rem}.personal-agent-menu small{color:var(--workspace-muted);margin-top:.125rem;font-size:.65rem}.personal-agent-avatar{color:#1e40af;background:#e2e9f9;border-radius:.625rem;flex:none;place-items:center;width:2rem;height:2rem;font-size:.75rem;font-weight:700;display:grid}.personal-agent-online{background:#10b981;border-radius:9999px;width:.4375rem;height:.4375rem}.personal-agent-online.is-offline{background:#94a3b8}.personal-live-badge{color:#33634e;background:#f5fcf8;border:1px solid #d1eddf;border-radius:9999px;align-items:center;gap:.375rem;padding:.35rem .625rem;font-size:.65rem;display:inline-flex}.personal-live-badge>span{background:#10b981;border-radius:9999px;width:.375rem;height:.375rem}.personal-chat-scroll{width:100%;min-height:0;padding:2rem clamp(1rem,5vw,5rem) 1.5rem;overflow-y:auto}.personal-chat-scroll>*{width:min(100%,56rem);margin-inline:auto}.personal-chat-welcome{background:#f1efea;border-radius:1rem;align-items:flex-start;gap:.875rem;margin-top:clamp(4rem,14vh,9rem);padding:1rem 1.125rem;display:flex}.personal-chat-welcome h3,.personal-chat-welcome p{margin:0}.personal-chat-welcome h3{font-size:.875rem;font-weight:650}.personal-chat-welcome p{color:#474f5b;margin-top:.25rem;font-size:.8125rem;line-height:1.55}.personal-manager-quick-actions{border:0;justify-content:center;gap:.625rem;padding:1rem 0;display:flex;overflow-x:auto}.personal-manager-quick-actions button{color:#3c434e;cursor:pointer;background:#ffffffc7;border:1px solid #d7dae1;border-radius:.625rem;flex:none;padding:.625rem .875rem;font-size:.75rem}.personal-manager-quick-actions button:hover{color:#1e40af;border-color:#a3b5dc}.personal-goal-summary{border:1px solid var(--workspace-border);background:#ffffffd1;border-radius:.875rem;overflow:hidden;box-shadow:0 2px 8px #0f172a08}.personal-goal-summary>div{border-bottom:1px solid #ebe8e2;grid-template-columns:7rem minmax(0,1fr);gap:1rem;padding:.8rem 1rem;font-size:.75rem;display:grid}.personal-goal-summary>div:last-child{border-bottom:0}.personal-goal-summary span{color:var(--workspace-muted)}.personal-goal-summary strong{min-width:0;font-weight:560}.personal-goal-summary .is-attention{background:#fffbeb}.personal-goal-summary .is-attention span,.personal-goal-summary .is-attention strong{color:#92400e}.personal-goal-projection{gap:.75rem;display:grid}.personal-projection-author{align-items:center;gap:.75rem;padding:0 .125rem .25rem;display:flex}.personal-projection-author strong,.personal-projection-author small{display:block}.personal-projection-author strong{color:#23272d;font-size:.8125rem;font-weight:660}.personal-projection-author small{color:var(--workspace-muted);margin-top:.15rem;font-size:.65rem}.personal-plan-card{border:1px solid var(--workspace-border);background:#ffffffdb;border-radius:.875rem;overflow:hidden;box-shadow:0 2px 8px #0f172a06}.personal-plan-card>header{border-bottom:1px solid #ebe8e2;justify-content:space-between;align-items:center;gap:1rem;min-height:3.25rem;padding:.75rem 1rem;display:flex}.personal-plan-card>header strong,.personal-plan-card>header small{display:block}.personal-plan-card>header strong{font-size:.75rem;font-weight:660}.personal-plan-card>header small{color:var(--workspace-muted);margin-top:.2rem;font-size:.625rem}.personal-plan-card>header>span{color:#5a5e65;background:#faf9f6;border:1px solid #e0ddd7;border-radius:.5rem;flex:none;padding:.25rem .45rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.65rem}.personal-plan-row{color:#343a43;border-bottom:1px solid #f0eee9;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.75rem;min-height:2.625rem;padding:.625rem 1rem;font-size:.75rem;display:grid}.personal-plan-row svg{color:#2563eb}.personal-plan-row.is-done svg{color:#059669}.personal-plan-row.is-done>span{color:#5c626b}.personal-plan-row small{color:var(--workspace-muted);font-size:.625rem}.personal-plan-card>button{color:#545b66;cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;gap:.25rem;width:100%;min-height:2.625rem;font-size:.6875rem;display:flex}.personal-plan-card>button:hover{color:#1e40af;background:#f8f9fc}.personal-plan-card.is-empty>header{border-bottom:0}.personal-plan-card.is-empty>p{color:var(--workspace-muted);margin:-.25rem 0 0;padding:0 1rem 1rem;font-size:.75rem;line-height:1.55}.personal-run-evidence-card{border:1px solid var(--workspace-border);width:100%;min-height:3.75rem;color:inherit;text-align:left;cursor:pointer;background:#ffffffd1;border-radius:.875rem;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:.75rem;padding:.75rem 1rem;display:grid}.personal-run-evidence-card:hover{background:#fff;border-color:#c7ccd6}.personal-evidence-icon{color:#059669;background:#ecfdf5;border-radius:.625rem;place-items:center;width:2rem;height:2rem;display:grid}.personal-run-evidence-card strong,.personal-run-evidence-card small{display:block}.personal-run-evidence-card strong{font-size:.75rem;font-weight:650}.personal-run-evidence-card small{max-width:38rem;color:var(--workspace-muted);text-overflow:ellipsis;white-space:nowrap;margin-top:.2rem;font-size:.65rem;overflow:hidden}.personal-run-evidence-card em{color:var(--workspace-muted);white-space:nowrap;font-size:.625rem;font-style:normal}.personal-decision-card{background:#fffaee;border:1px solid #f5c068;border-radius:.875rem;justify-content:space-between;align-items:center;gap:1.5rem;margin-top:1rem;padding:1rem;display:flex}.personal-decision-card span{color:#b45309;text-transform:uppercase;font-size:.6875rem;font-weight:700}.personal-decision-card h3,.personal-decision-card p{margin:0}.personal-decision-card h3{margin-top:.25rem;font-size:.9375rem;font-weight:650}.personal-decision-card p{color:var(--workspace-muted);margin-top:.25rem;font-size:.75rem}.personal-decision-actions{flex:none;gap:.5rem;display:flex}.personal-decision-actions button,.personal-execution-card button,.personal-ops-link{color:#1e40af;cursor:pointer;background:#fff;border:1px solid #bbc9ea;border-radius:.625rem;justify-content:center;align-items:center;min-height:2.25rem;padding:0 .75rem;font-size:.75rem;font-weight:600;text-decoration:none;display:inline-flex}.personal-decision-actions button:last-child{border-color:var(--workspace-accent);color:#fff;background:var(--workspace-accent)}.personal-manager-thread{min-width:0;padding:1.25rem 0 0;overflow:visible}.personal-manager-message{color:#474f5b;background:#f1efea;border-radius:.875rem;width:fit-content;max-width:min(88%,43rem);margin-bottom:1rem;padding:.75rem .875rem;font-size:.8125rem;line-height:1.55}.personal-manager-message.is-user{color:#fff;background:#2563eb;margin-left:auto}.personal-message-author{color:#1e40af;margin-bottom:.25rem;font-size:.6875rem;font-weight:700;display:block}.personal-manager-message p,.personal-manager-message ul{margin:0}.personal-manager-message ul{gap:.375rem;margin-top:.5rem;padding-left:1rem;display:grid}.personal-manager-message small{color:#7d7d85;margin-top:.5rem;font-size:.625rem;display:block}.personal-manager-message.is-user small{color:#dbeafe}.personal-manager-message.is-pending{color:#64748b;background:#f8fafc}.personal-proposal-list{gap:.75rem;width:min(100%,43rem);margin:0 0 1.25rem;display:grid}.personal-proposal-card{background:#f9fbff;border:1px solid #d3dcee;border-radius:.875rem;gap:.625rem;padding:.875rem;display:grid}.personal-proposal-card>header{align-items:center;gap:.5rem;display:flex}.personal-proposal-card>header span{color:#1e40af;background:#dbeafe;border-radius:999px;padding:.125rem .5rem;font-size:.625rem;font-weight:700}.personal-proposal-card>header strong{font-size:.75rem}.personal-proposal-card>header small{color:var(--workspace-muted);margin-left:auto;font-size:.625rem}.personal-proposal-card>p,.personal-proposal-card>small{margin:0}.personal-proposal-card>p{color:#1e293b;font-size:.8125rem;font-weight:600;line-height:1.5}.personal-proposal-card>small,.personal-proposal-status{color:#64748b;font-size:.6875rem;line-height:1.5}.personal-proposal-card>code{color:#475569;background:#f1f5f9;border-radius:.375rem;width:fit-content;padding:.25rem .375rem;font-size:.625rem}.personal-proposal-card.is-approved{background:#f7fefa;border-color:#a7f3d0}.personal-proposal-card.is-stale,.personal-proposal-card.is-error{background:#fffbeb;border-color:#fdba74}.personal-proposal-actions{flex-wrap:wrap;gap:.5rem;display:flex}.personal-proposal-actions button{color:#475569;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:.625rem;min-height:2.25rem;padding:0 .75rem;font-size:.6875rem;font-weight:650}.personal-proposal-actions button:first-child{border-color:var(--workspace-accent);color:#fff;background:var(--workspace-accent)}.personal-proposal-actions button:disabled{cursor:wait;opacity:.55}.personal-execution-card{border:1px solid var(--workspace-border);background:#fffc;border-radius:.875rem;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:.75rem;margin-top:1.25rem;padding:.875rem;display:grid}.personal-execution-card strong,.personal-execution-card p{margin:0}.personal-execution-card strong{font-size:.8125rem}.personal-execution-card p{color:var(--workspace-muted);text-overflow:ellipsis;white-space:nowrap;margin-top:.25rem;font-size:.6875rem;overflow:hidden}.personal-manager-composer{background:#fffffff5;border:1px solid #d5d5d6;border-radius:1rem;grid-template-rows:1fr;grid-template-columns:auto minmax(0,1fr) auto;gap:.5rem;width:min(100% - 2rem,58rem);min-height:4rem;margin:0 auto 1rem;padding:.5rem .625rem;display:grid;position:relative;box-shadow:0 10px 30px #0f172a14}.personal-manager-composer input{color:#23272d;background:0 0;border:0;outline:none;grid-area:1/2;height:2.75rem;padding:0 .25rem}.personal-manager-composer input:focus{box-shadow:none;border:0}.personal-composer-tools{grid-area:1/1;align-self:center;align-items:center;min-width:0;display:flex}.personal-composer-tools button{color:#334155;cursor:pointer;background:#f5f3ef;border:0;border-radius:.75rem;align-items:center;gap:.35rem;width:auto;min-width:0;height:2.5rem;min-height:2.5rem;padding:0 .625rem;font-size:.6875rem;font-weight:620;display:inline-flex}.personal-composer-tools button span{text-overflow:ellipsis;white-space:nowrap;max-width:8rem;display:block;overflow:hidden}.personal-manager-composer .personal-send-button{color:#fff;background:var(--workspace-accent);cursor:pointer;border:0;border-radius:.75rem;grid-area:1/3;align-self:center;place-items:center;width:2.5rem;height:2.5rem;display:grid}.personal-manager-composer .personal-send-button:disabled{cursor:default;opacity:.34}.personal-details-backdrop{z-index:70;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0f172a2e;justify-content:flex-end;display:flex;position:fixed;inset:0}.personal-running-details{background:#fcfbf8;width:min(28rem,100vw);height:100%;padding:1rem;overflow-y:auto;box-shadow:-12px 0 36px #0f172a29}.personal-running-details>header{justify-content:space-between;align-items:center;gap:1rem;padding-bottom:1rem;display:flex}.personal-running-details h2,.personal-running-details header p{margin:0}.personal-running-details h2{font-size:1rem;font-weight:680}.personal-running-details header p{color:var(--workspace-muted);margin-top:.25rem;font-size:.6875rem}.personal-running-details header button{cursor:pointer;background:#f1efea;border:0;border-radius:.625rem;place-items:center;width:2.25rem;height:2.25rem;display:grid}.personal-diagnosis-card{border:1px solid var(--workspace-border);background:#fff;border-radius:.875rem;padding:1rem}.personal-diagnosis-card>span{color:#059669;font-size:.6875rem;font-weight:700}.personal-diagnosis-card h3{margin:.375rem 0 1rem;font-size:.875rem;line-height:1.5}.personal-diagnosis-card dl,.personal-diagnosis-card dd{margin:0}.personal-diagnosis-card dl{gap:.625rem;display:grid}.personal-diagnosis-card dl>div{grid-template-columns:3.5rem minmax(0,1fr);gap:.75rem;font-size:.75rem;display:grid}.personal-diagnosis-card dt{color:var(--workspace-muted)}.personal-running-details details{border-bottom:1px solid var(--workspace-border);padding:1rem .25rem}.personal-running-details summary{cursor:pointer;font-size:.8125rem;font-weight:620}.personal-running-details details p{color:var(--workspace-muted);margin:.75rem 0 0;font-size:.75rem;line-height:1.55}.personal-details-todo-list{gap:.375rem;margin:.75rem 0 0;padding:0;list-style:none;display:grid}.personal-details-todo-list li{color:#484f59;padding-left:1rem;font-size:.71875rem;line-height:1.45;position:relative}.personal-details-todo-list li:before{content:"";background:#2563eb;border-radius:9999px;width:.375rem;height:.375rem;position:absolute;top:.45em;left:0}.personal-details-todo-list li.is-done{color:#7e838b}.personal-details-todo-list li.is-done:before{background:#059669}.personal-ops-link{gap:.375rem;width:100%;margin-top:1rem}.dark .personal-workspace,.dark .personal-chat-pane{color:#f4f4f5;background:#131417}.dark .personal-global-rail,.dark .personal-goal-sidebar,.dark .personal-chat-header,.dark .personal-running-details{color:#f4f4f5;background:#191a1e}.dark .personal-plan-card,.dark .personal-run-evidence-card,.dark .personal-projection-author strong{color:#f4f4f5;background:#1e1f23}.dark .personal-plan-card>header,.dark .personal-plan-row{border-color:#3f3f46}.dark .personal-plan-row,.dark .personal-plan-row.is-done>span{color:#d4d4d8}.dark .personal-decision-card{background:#45290d;border-color:#92400e}@media (width<=1000px){.personal-workspace{grid-template-columns:3.75rem 16.5rem minmax(0,1fr)}.personal-live-badge{display:none}.personal-chat-scroll{padding-inline:1.25rem}}@media (width<=720px){.personal-workspace{grid-template-rows:minmax(0,1fr);grid-template-columns:1fr;height:100dvh;min-height:100dvh;overflow:hidden}.personal-global-rail{display:none}.personal-goal-sidebar{border-right:0;height:100dvh;display:none}.personal-workspace.mobile-goals-visible .personal-goal-sidebar{display:grid}.personal-workspace.mobile-goals-visible .personal-chat-pane{display:none}.personal-chat-pane{height:100dvh;min-height:0}.personal-chat-header{-webkit-backdrop-filter:none;backdrop-filter:none;gap:.5rem;min-height:4.25rem;padding-inline:.75rem}.personal-mobile-goals-button{display:grid}.personal-goal-sidebar>header button,.personal-goal-sidebar>footer button{width:2.75rem;height:2.75rem}.personal-chat-title p,.personal-chat-title>span,.personal-chat-actions>button:first-of-type,.personal-chat-actions>button.personal-progress-trigger span{display:none}.personal-chat-actions>button.personal-progress-trigger{width:2.75rem;padding:0}.personal-chat-back,.personal-mobile-goals-button,.personal-chat-actions>button{width:2.75rem;height:2.75rem}.personal-agent-trigger{min-height:2.75rem;padding-inline:.5rem}.personal-agent-menu-backdrop{z-index:35;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0f172a33;border:0;display:block;position:fixed;inset:0}.personal-agent-menu{z-index:40;border-radius:1rem;width:auto;max-height:calc(100dvh - 1.5rem);position:fixed;inset:auto .75rem .75rem;overflow-y:auto}.personal-agent-menu>button{min-height:3.5rem}.personal-chat-scroll{padding:1rem .75rem}.personal-chat-welcome{margin-top:1rem}.personal-manager-quick-actions{grid-template-columns:repeat(2,minmax(0,1fr));display:grid;overflow:visible}.personal-manager-quick-actions button{white-space:normal;width:100%}.personal-manager-quick-actions button:last-child{grid-column:1/-1}.personal-goal-summary>div{grid-template-columns:5.5rem minmax(0,1fr)}.personal-decision-card{flex-direction:column;align-items:stretch}.personal-run-evidence-card{grid-template-columns:auto minmax(0,1fr) auto}.personal-run-evidence-card em,.personal-plan-row small{display:none}.personal-decision-actions{grid-template-columns:1fr 1fr;display:grid}.personal-decision-actions button,.personal-manager-quick-actions button,.personal-execution-card button,.personal-ops-link,.personal-running-details header button{min-height:2.75rem}.personal-running-details header button{width:2.75rem;height:2.75rem}.personal-execution-card{grid-template-columns:auto minmax(0,1fr) auto}.personal-execution-card .rounded-full{display:none}.personal-execution-card button{grid-column:2/-1;justify-self:start}.personal-manager-composer{margin-bottom:.5rem;position:sticky;bottom:.5rem}.personal-composer-tools button,.personal-send-button{min-width:2.75rem;min-height:2.75rem}}.chat-shell{background:radial-gradient(circle at 48% 0,#ffffffeb,#0000 30rem),#f7f8f6}.chat-goal-map{isolation:isolate;position:relative;overflow:hidden}.chat-goal-map:before{z-index:0;content:"";opacity:.44;background-image:radial-gradient(#94a3b83b .7px,#0000 .7px);background-size:18px 18px;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#0000,#000 18% 84%,#0000);mask-image:linear-gradient(#0000,#000 18% 84%,#0000)}.chat-map-goal:after{content:"";background:#cbd5e1;width:1px;height:3rem;position:absolute;top:100%;left:50%}.chat-map-branches:before{content:"";background:#cbd5e1;height:1px;position:absolute;top:-1.5rem;left:16.666%;right:16.666%}.chat-map-branches>div{position:relative}.chat-map-branches>div:before{content:"";background:#cbd5e1;width:1px;height:1.5rem;position:absolute;bottom:100%;left:50%}.chat-map-branches:after{content:"";background:#cbd5e1;width:1px;height:2.5rem;position:absolute;top:100%;left:50%}@media (width<=767px){.chat-map-goal:after,.chat-map-branches:before,.chat-map-branches:after,.chat-map-branches>div:before{display:none}}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}} diff --git a/loopx/web/chat/index.html b/loopx/web/chat/index.html deleted file mode 100644 index 84dad0d361..0000000000 --- a/loopx/web/chat/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - LoopX 个人 Agent 工作区 - - - - -

- - diff --git a/loopx/web/chat/manifest.webmanifest b/loopx/web/chat/manifest.webmanifest deleted file mode 100644 index 0d150f1ebd..0000000000 --- a/loopx/web/chat/manifest.webmanifest +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "LoopX 看板", - "short_name": "LoopX", - "description": "LoopX 本地控制面板:目标、配额、待办与运行历史。", - "start_url": "./", - "scope": "./", - "display": "standalone", - "background_color": "#fafafa", - "theme_color": "#171717", - "icons": [ - { - "src": "pwa/icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "pwa/icon-512.png", - "sizes": "512x512", - "type": "image/png" - } - ] -} diff --git a/loopx/web/chat/pwa/icon-192.png b/loopx/web/chat/pwa/icon-192.png deleted file mode 100644 index 3eb31e84e80516bb16141a8a4ed4828ca8bd3ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57231 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 KMNUMnLSTYjp0OGL diff --git a/loopx/web/chat/pwa/icon-512.png b/loopx/web/chat/pwa/icon-512.png deleted file mode 100644 index a25c4920b14fa1510271db1beed45a7abd2a6954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338633 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 P00000NkvXXu0mjf5`Q&4 diff --git a/loopx/windows_install.py b/loopx/windows_install.py index e311904b2c..f8f7b72d0e 100644 --- a/loopx/windows_install.py +++ b/loopx/windows_install.py @@ -270,11 +270,20 @@ def install_windows( bin_dir = bin_dir.expanduser().resolve() skills_dir = skills_dir.expanduser().resolve() python = _resolve_python(python_requested) + bundle_builder = source_root / "scripts/chat_bundle.py" releases_dir = install_root / "releases" releases_dir.mkdir(parents=True, exist_ok=True) installed_at = datetime.now(timezone.utc).replace(microsecond=0).isoformat() with exclusive_file_lock(install_root / ".install-guard"): + if bundle_builder.is_file(): + command = [str(python), str(bundle_builder), "ensure"] + pointer = install_root / "current-release.json" + if pointer.is_file(): + previous = Path(json.loads(pointer.read_text(encoding="utf-8"))["release_root"]) / "loopx/web/chat" + if (previous / "index.html").is_file(): + command.extend(["--previous", str(previous)]) + subprocess.run(command, cwd=source_root, check=True) release_id = _release_id(requested_release_id, releases_dir) release_root = releases_dir / release_id temporary = Path(tempfile.mkdtemp(prefix=f".{release_id}.", dir=releases_dir)) diff --git a/pyproject.toml b/pyproject.toml index c241409912..da20a404b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ loopx-openviking-semantic-preference = "loopx.extensions.openviking_semantic_pre include = ["loopx*"] [tool.setuptools.package-data] -"loopx" = ["web/chat/*.html", "web/chat/assets/*", "web/chat/manifest.webmanifest", "web/chat/pwa/*"] +"loopx" = ["web/chat/*.html", "web/chat/*.json", "web/chat/assets/*", "web/chat/manifest.webmanifest", "web/chat/pwa/*"] "loopx.control_plane" = ["*.json", "*.ts", "presentation/*.ts"] "loopx.semantics" = ["*.json"] "loopx.control_plane.agents" = ["*.ts"] diff --git a/scripts/chat_bundle.py b/scripts/chat_bundle.py new file mode 100644 index 0000000000..e0b8e09dea --- /dev/null +++ b/scripts/chat_bundle.py @@ -0,0 +1,317 @@ +#!/usr/bin/env python3 +"""Build, verify and stage Chat assets; generated output never belongs in Git.""" + +from __future__ import annotations + +import argparse +import importlib.util +import json +import os +import re +from pathlib import Path +import shutil +import subprocess +import tempfile +import zipfile + +ROOT = Path(__file__).resolve().parents[1] +spec = importlib.util.spec_from_file_location( + "chat_bundle_contract", ROOT / "loopx/presentation/chat_bundle.py" +) +contract = importlib.util.module_from_spec(spec) +spec.loader.exec_module(contract) +OUTPUT = ROOT / "loopx/web/chat" + + +def previous_assets(previous: Path | None) -> list[str]: + if previous is None: + return [] + if (previous / contract.MANIFEST).is_file(): + return contract.validate_bundle(previous)["current_assets"] + # Legacy release wheels predate provenance metadata. Include their bounded + # asset directory for this one transition; never load history from Git. + if not (previous / "index.html").is_file(): + raise RuntimeError("previous delivery has no index.html") + assets = sorted( + p.relative_to(previous).as_posix() + for p in (previous / "assets").rglob("*") + if p.is_file() + ) + entries = re.findall( + r'(?:src|href)="/chat/(assets/[^\"]+)"', + (previous / "index.html").read_text(encoding="utf-8"), + ) + if not entries or not set(entries) <= set(assets): + raise RuntimeError("previous delivery has missing entry assets") + return assets + + +def build(previous: Path | None, *, install: bool = False) -> None: + dashboard = ROOT / "apps/presentation/dashboard" + npm = shutil.which("npm.cmd" if os.name == "nt" else "npm") + if not npm: + raise RuntimeError( + "Node.js/npm is required to build a source checkout; release wheels already contain the frontend" + ) + if install: + subprocess.run([npm, "ci", "--ignore-scripts"], cwd=dashboard, check=True) + before = contract.source_inputs(ROOT) + previous_assets(previous) # Reject invalid lineage before spending a build. + OUTPUT.parent.mkdir(parents=True, exist_ok=True) + with tempfile.TemporaryDirectory( + prefix=".chat-build-", dir=OUTPUT.parent + ) as temporary: + staged = Path(temporary) / "chat" + subprocess.run( + [npm, "run", "build:chat:vite"], + cwd=dashboard, + env={**os.environ, "LOOPX_CHAT_OUT_DIR": str(staged)}, + check=True, + ) + current = sorted( + p.relative_to(staged).as_posix() + for p in (staged / "assets").rglob("*") + if p.is_file() + ) + if before != contract.source_inputs(ROOT): + raise RuntimeError( + "source changed while building; retry without concurrent edits" + ) + revision = subprocess.run( + ["git", "rev-parse", "HEAD"], cwd=ROOT, capture_output=True, text=True + ) + source_revision = ( + revision.stdout.strip() + if revision.returncode == 0 + else os.environ.get("LOOPX_RESOLVED_SOURCE_GIT_COMMIT") + ) + finish_delivery(staged, previous, current, before, source_revision) + print( + "Chat bundle built and verified; current and previous delivery assets retained." + ) + + +def finish_delivery( + staged: Path, + previous: Path | None, + current: list[str], + inputs: dict, + revision: str | None, +) -> None: + old_assets = previous_assets(previous) + for name in old_assets: + source = previous / name + if ( + not contract.safe_relative(name) + or not name.startswith("assets/") + or source.is_symlink() + or not source.resolve().is_relative_to(previous.resolve()) + ): + raise RuntimeError("invalid previous asset") + target = staged / name + if target.exists() and contract.digest(source) != contract.digest(target): + raise RuntimeError( + "same asset name has different content across deliveries" + ) + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(source, target) + generations = [current] + if set(old_assets) - set(current): + generations.append(old_assets) + (staged / "asset-retention.json").write_text( + json.dumps( + { + "schema_version": "loopx_chat_asset_retention_v1", + "generations": generations, + }, + indent=2, + ) + + "\n", + encoding="utf-8", + ) + manifest = { + "schema_version": contract.SCHEMA, + "source_revision": revision, + "source_files": inputs, + "current_assets": current, + "files": { + p.relative_to(staged).as_posix(): contract.digest(p) + for p in sorted(staged.rglob("*")) + if p.is_file() and p.name != contract.MANIFEST + }, + } + (staged / contract.MANIFEST).write_text( + json.dumps(manifest, indent=2, sort_keys=True) + "\n", encoding="utf-8" + ) + contract.validate_bundle(staged, source_root=ROOT) + backup = staged.parent / "previous" + if OUTPUT.exists(): + OUTPUT.rename(backup) + try: + staged.rename(OUTPUT) + except OSError: + if backup.exists(): + backup.rename(OUTPUT) + raise + + +def ensure(previous: Path | None = None) -> None: + try: + manifest = contract.validate_bundle(OUTPUT, source_root=ROOT) + except RuntimeError: + build(previous, install=True) + return + if previous is None or previous.resolve() == OUTPUT.resolve(): + return + # A bundled desktop/archive install must not need Node or network merely to + # carry forward the currently installed delivery's assets. + with tempfile.TemporaryDirectory( + prefix=".chat-build-", dir=OUTPUT.parent + ) as temporary: + staged = Path(temporary) / "chat" + for name in manifest["files"]: + if name.startswith("assets/") and name not in manifest["current_assets"]: + continue + target = staged / name + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(OUTPUT / name, target) + finish_delivery( + staged, + previous, + manifest["current_assets"], + manifest["source_files"], + manifest["source_revision"], + ) + + +def release_build(tag: str, repository: str) -> None: + # Use the preceding published version, never the latest desktop prerelease + # or a future release when rebuilding an older tag. + pages = json.loads( + subprocess.check_output( + [ + "gh", + "api", + "--paginate", + "--slurp", + f"repos/{repository}/releases?per_page=100", + ], + text=True, + ) + ) + versions = [ + r + for page in pages + for r in page + if not r["draft"] + and not r["prerelease"] + and re.fullmatch(r"v\d+\.\d+\.\d+", r["tag_name"]) + ] + def number(value: str) -> tuple[int, ...]: + return tuple(map(int, value.removeprefix("v").split("."))) + + predecessors = [r for r in versions if number(r["tag_name"]) < number(tag)] + if not predecessors: + build(None, install=True) + return + previous = max(predecessors, key=lambda r: number(r["tag_name"])) + wheels = [ + a["name"] + for a in previous["assets"] + if a["name"].startswith("loopx-") and a["name"].endswith(".whl") + ] + if len(wheels) != 1: + raise RuntimeError("preceding release must contain exactly one LoopX wheel") + with tempfile.TemporaryDirectory(prefix="loopx-previous-release-") as temporary: + directory = Path(temporary) + subprocess.run( + [ + "gh", + "release", + "download", + previous["tag_name"], + "--repo", + repository, + "--pattern", + wheels[0], + "--pattern", + "SHA256SUMS", + "--dir", + str(directory), + ], + check=True, + ) + checksums = (directory / "SHA256SUMS").read_text().splitlines() + matches = [ + line.split()[0] + for line in checksums + if len(line.split()) == 2 + and Path(line.split()[1].lstrip("*")).name == wheels[0] + ] + if matches != [contract.digest(directory / wheels[0])]: + raise RuntimeError("previous release wheel checksum mismatch") + old_bundle = directory / "chat" + extract_wheel(directory / wheels[0], old_bundle) + build(old_bundle, install=True) + + +def extract_wheel(wheel: Path, destination: Path) -> None: + if destination.exists(): + raise RuntimeError("previous bundle destination must not exist") + with zipfile.ZipFile(wheel) as archive: + prefix = "loopx/web/chat/" + entries = [ + item + for item in archive.infolist() + if item.filename.startswith(prefix) and not item.is_dir() + ] + if len({item.filename for item in entries}) != len(entries): + raise RuntimeError("duplicate previous wheel entries") + if not entries or sum(item.file_size for item in entries) > 128 * 1024 * 1024: + raise RuntimeError("previous wheel has no bounded Chat bundle") + for item in entries: + name = item.filename[len(prefix) :] + if ( + not contract.safe_relative(name) + or (item.external_attr >> 16) & 0o170000 == 0o120000 + ): + raise RuntimeError("invalid previous wheel path") + target = destination / name + target.parent.mkdir(parents=True, exist_ok=True) + target.write_bytes(archive.read(item)) + previous_assets(destination) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + commands = parser.add_subparsers(dest="command", required=True) + b = commands.add_parser("build") + b.add_argument("--previous", type=Path) + b.add_argument("--install", action="store_true") + a = commands.add_parser("ensure") + a.add_argument("--previous", type=Path) + v = commands.add_parser("verify") + v.add_argument("--bundle", type=Path, default=OUTPUT) + v.add_argument("--source", action="store_true") + e = commands.add_parser("extract-wheel") + e.add_argument("wheel", type=Path) + e.add_argument("destination", type=Path) + r = commands.add_parser("release-build") + r.add_argument("--tag", required=True) + r.add_argument("--repo", required=True) + args = parser.parse_args() + if args.command == "build": + build(args.previous, install=args.install) + elif args.command == "ensure": + ensure(args.previous) + elif args.command == "verify": + contract.validate_bundle(args.bundle, source_root=ROOT if args.source else None) + print("Chat bundle verified") + elif args.command == "release-build": + release_build(args.tag, args.repo) + else: + extract_wheel(args.wheel, args.destination) + + +if __name__ == "__main__": + main() diff --git a/scripts/dashboard-dev.sh b/scripts/dashboard-dev.sh index bf55f32479..aabaf4ae25 100755 --- a/scripts/dashboard-dev.sh +++ b/scripts/dashboard-dev.sh @@ -222,6 +222,8 @@ else fi cd "${REPO_ROOT}" +"${PYTHON_BIN}" "${REPO_ROOT}/scripts/chat_bundle.py" ensure || exit 1 + "${PYTHON_BIN}" -m loopx.cli serve-status \ --global-registry \ --host 127.0.0.1 \ diff --git a/scripts/desktop_runtime_bundle.py b/scripts/desktop_runtime_bundle.py index d856fb3fb7..512676c533 100644 --- a/scripts/desktop_runtime_bundle.py +++ b/scripts/desktop_runtime_bundle.py @@ -3,6 +3,7 @@ Never collect a developer's whole working directory or private local state. """ + from __future__ import annotations import hashlib @@ -10,18 +11,96 @@ from pathlib import Path import gzip import subprocess +import sys +import tarfile +import io +import importlib.util def build(root: Path) -> None: destination = root / "apps/desktop/loopx-control-plane/runtime" destination.mkdir(parents=True, exist_ok=True) - revision = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=root, text=True).strip() + revision = subprocess.check_output( + ["git", "rev-parse", "HEAD"], cwd=root, text=True + ).strip() + subprocess.run( + [sys.executable, str(root / "scripts/chat_bundle.py"), "ensure"], + cwd=root, + check=True, + ) + subprocess.run( + [sys.executable, str(root / "scripts/chat_bundle.py"), "verify", "--source"], + cwd=root, + check=True, + ) archive = destination / "runtime-source.tar.gz" - subprocess.run([ - "git", "archive", "--format=tar.gz", f"--output={archive}", revision, - "loopx", "scripts", "skills", "docs", "man", "examples", "apps/presentation", - ".github", "README.md", "LICENSE", "pyproject.toml", - ], cwd=root, check=True) + subprocess.run( + [ + "git", + "archive", + "--format=tar.gz", + f"--output={archive}", + revision, + "loopx", + "scripts", + "skills", + "docs", + "man", + "examples", + "apps/presentation", + ".github", + "README.md", + "LICENSE", + "pyproject.toml", + "setup.py", + "MANIFEST.in", + ], + cwd=root, + check=True, + ) + # Git carries only source; append the verified frontend to the exact archive. + bundle_root = root / "loopx/web/chat" + manifest = json.loads((bundle_root / "bundle-manifest.json").read_text()) + if manifest["source_revision"] != revision: + raise RuntimeError( + "frontend build belongs to another source revision; rebuild before desktop packaging" + ) + spec = importlib.util.spec_from_file_location( + "chat_contract", root / "loopx/presentation/chat_bundle.py" + ) + contract = importlib.util.module_from_spec(spec) + spec.loader.exec_module(contract) + for name in manifest["source_files"]: + committed = subprocess.check_output( + ["git", "show", f"{revision}:{name}"], cwd=root + ) + if ( + contract.source_digest(Path(name), committed) + != manifest["source_files"][name] + ): + raise RuntimeError( + f"desktop build input differs from committed source: {name}" + ) + rebuilt = destination / "runtime-source.staged.tar.gz" + with ( + tarfile.open(archive, "r:gz") as source, + tarfile.open(rebuilt, "w:gz", format=tarfile.PAX_FORMAT) as target, + ): + for member in source.getmembers(): + if member.name.startswith("loopx/web/chat/"): + continue + target.addfile( + member, source.extractfile(member) if member.isfile() else None + ) + for path in sorted(bundle_root.rglob("*")): + if not path.is_file(): + continue + member = tarfile.TarInfo(path.relative_to(root).as_posix()) + content = path.read_bytes() + member.size = len(content) + member.mode = 0o644 + target.addfile(member, io.BytesIO(content)) + rebuilt.replace(archive) entries = qualify_archive(archive) identity = { "schema_version": "desktop_runtime_bundle_v1", @@ -29,7 +108,9 @@ def build(root: Path) -> None: "sha256": hashlib.sha256(archive.read_bytes()).hexdigest(), } (destination / "identity.json").write_text(json.dumps(identity, indent=2) + "\n") - print(f"Prepared exact desktop runtime: {revision[:12]} ({entries} installable entries)") + print( + f"Prepared exact desktop runtime: {revision[:12]} ({entries} installable entries)" + ) def qualify_archive(archive: Path) -> int: @@ -57,7 +138,10 @@ def qualify_archive(archive: Path) -> int: break typeflag = header[156:157] name = header[:100].rstrip(b"\0").decode("utf-8", "replace") - if typeflag not in (b"0", b"\0", b"5") and typeflag not in metadata_typeflags: + if ( + typeflag not in (b"0", b"\0", b"5") + and typeflag not in metadata_typeflags + ): raise SystemExit( f"runtime bundle entry is neither a file nor a directory, " f"which the App cannot install: {name!r} " @@ -65,7 +149,9 @@ def qualify_archive(archive: Path) -> int: ) if typeflag in (b"0", b"\0", b"5"): entries += 1 - size = int((header[124:136].rstrip(b"\0 ") or b"0").decode("ascii") or "0", 8) + size = int( + (header[124:136].rstrip(b"\0 ") or b"0").decode("ascii") or "0", 8 + ) bundle.read((size + 511) // 512 * 512) return entries diff --git a/scripts/install-local.sh b/scripts/install-local.sh index 34ea4712a8..c344d1c77d 100755 --- a/scripts/install-local.sh +++ b/scripts/install-local.sh @@ -670,6 +670,19 @@ if [[ -z "$shell_profile" ]]; then fi configure_python_runtime +chat_bundle_args=(ensure) +if [[ -L "$bin_dir/loopx" ]]; then + previous_chat_assets="$("${LOOPX_PYTHON:-python3}" - "$bin_dir/loopx" <<'PYTHON' +from pathlib import Path +import sys +print(Path(sys.argv[1]).resolve().parents[1] / "loopx/web/chat") +PYTHON +)" + if [[ -f "$previous_chat_assets/index.html" ]]; then + chat_bundle_args+=(--previous "$previous_chat_assets") + fi +fi +"${LOOPX_PYTHON:-python3}" "$repo_root/scripts/chat_bundle.py" "${chat_bundle_args[@]}" promote_default=0 if resolve_default_promotion; then @@ -730,13 +743,15 @@ copy_path "$repo_root/.github" "$release_tmp/.github" copy_path "$repo_root/README.md" "$release_tmp/README.md" copy_path "$repo_root/LICENSE" "$release_tmp/LICENSE" copy_path "$repo_root/pyproject.toml" "$release_tmp/pyproject.toml" +copy_path "$repo_root/setup.py" "$release_tmp/setup.py" +copy_path "$repo_root/MANIFEST.in" "$release_tmp/MANIFEST.in" printf '%s\n' "$LOOPX_PYTHON" >"$release_tmp/.loopx-python" find "$release_tmp" -name __pycache__ -type d -prune -exec rm -rf {} + find "$release_tmp" -name '*.pyc' -type f -delete if [[ -d "$release_tmp/apps" ]]; then find "$release_tmp/apps" \ \( -name node_modules -o -name .next -o -name dist -o -name build -o -name coverage \) \ - -type d -prune -exec rm -rf {} + + \( -type d -o -type l \) -prune -exec rm -rf {} + fi PYTHONPATH="$release_tmp" "${LOOPX_PYTHON:-python3}" \ "$release_tmp/scripts/render-manpage.py" \ diff --git a/scripts/verify_installed_chat.py b/scripts/verify_installed_chat.py new file mode 100644 index 0000000000..9d6fe41914 --- /dev/null +++ b/scripts/verify_installed_chat.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +"""Check installed wheel assets through the real Chat HTTP handler outside source.""" + +from __future__ import annotations + +import argparse +import os +import subprocess +import tempfile + +CHECK = r""" +import hashlib +from pathlib import Path +import threading +from urllib.request import urlopen +import loopx +from loopx.chat_server import ChatHTTPServer, ChatRequestHandler, default_chat_assets_dir +from loopx.presentation.chat_bundle import validate_bundle + +bundle = default_chat_assets_dir() +manifest = validate_bundle(bundle) +assert "site-packages" in str(Path(loopx.__file__).resolve()), loopx.__file__ +server = ChatHTTPServer(("127.0.0.1", 0), ChatRequestHandler) +server.assets_dir = bundle +server.verbose = False +worker = threading.Thread(target=server.serve_forever, daemon=True) +worker.start() +try: + for name, digest in manifest["files"].items(): + with urlopen(f"http://127.0.0.1:{server.server_port}/chat/{name}", timeout=10) as response: + assert response.status == 200 + assert hashlib.sha256(response.read()).hexdigest() == digest, name + print("Installed Chat HTTP delivery passed: entry, current assets, previous assets and PWA files") +finally: + server.shutdown() + server.server_close() + worker.join() +""" + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--python", required=True) + args = parser.parse_args() + with tempfile.TemporaryDirectory(prefix="loopx-installed-chat-") as directory: + env = { + key: value + for key, value in os.environ.items() + if key not in {"PYTHONPATH", "PYTHONHOME"} + } + subprocess.run( + [args.python, "-I", "-c", CHECK], cwd=directory, env=env, check=True + ) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000..b573b0727e --- /dev/null +++ b/setup.py @@ -0,0 +1,37 @@ +"""Require qualified assets in distributions, while editable source setup stays cheap.""" + +from pathlib import Path +import importlib.util +import shutil +from setuptools import setup +from setuptools.command.build_py import build_py +from setuptools.command.sdist import sdist + + +def verify_frontend(): + root = Path(__file__).parent + spec = importlib.util.spec_from_file_location( + "chat_bundle_contract", root / "loopx/presentation/chat_bundle.py" + ) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + module.validate_bundle(root / "loopx/web/chat", source_root=root) + + +class BuildWithFrontend(build_py): + def run(self): + if not self.editable_mode: + verify_frontend() + stale = Path(self.build_lib) / "loopx/web/chat" + if stale.exists(): + shutil.rmtree(stale) + super().run() + + +class SourceWithFrontend(sdist): + def run(self): + verify_frontend() + super().run() + + +setup(cmdclass={"build_py": BuildWithFrontend, "sdist": SourceWithFrontend}) From 01c48eac9e1788fff8b147314b0ed7ee2e95d016 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 10:48:38 +0800 Subject: [PATCH 2/5] Verify bounded frontend upgrades and document source delivery Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- apps/presentation/dashboard/README.md | 4 + docs/development/frontend-delivery.md | 96 ++++++++ .../chat-bundle-upgrade-browser-smoke.mjs | 80 +++++++ examples/dashboard-pwa-bundle-smoke.py | 7 +- tests/presentation/test_chat_bundle.py | 215 ++++++++++++++++++ tests/test_dashboard_command.py | 2 + tests/test_python_ci_workflow.py | 7 +- 7 files changed, 404 insertions(+), 7 deletions(-) create mode 100644 docs/development/frontend-delivery.md create mode 100644 examples/chat-bundle-upgrade-browser-smoke.mjs create mode 100644 tests/presentation/test_chat_bundle.py diff --git a/apps/presentation/dashboard/README.md b/apps/presentation/dashboard/README.md index 0ff0265f77..033cd73269 100644 --- a/apps/presentation/dashboard/README.md +++ b/apps/presentation/dashboard/README.md @@ -450,3 +450,7 @@ The throttled smoke protects the "quiet scheduling state" first screen. The operator-gate smoke protects planned high-complexity goals: they should appear as controller/user actions, not Codex-ready work. Those older browser smokes still use the local Playwright CLI wrapper. + +## Packaged frontend delivery + +Generated Chat assets are not committed. See [frontend delivery](../../../docs/development/frontend-delivery.md) for source rebuilds, SHA-bound CI artifacts, package validation and the one-delivery upgrade window. diff --git a/docs/development/frontend-delivery.md b/docs/development/frontend-delivery.md new file mode 100644 index 0000000000..2832878c78 --- /dev/null +++ b/docs/development/frontend-delivery.md @@ -0,0 +1,96 @@ +# Frontend build and delivery + +Chat source lives in `apps/presentation/dashboard`. `loopx/web/chat/` is generated, +ignored output, not a second editable source tree. Feature PRs commit source and +validation only; resolving a source merge followed by a build produces one +coherent HTML/JavaScript/CSS set. Do not concatenate competing HTML entrypoints or +asset-retention manifests when resolving an older PR. + +## Source development and updates + +Prepare Python with `uv sync --extra test`, then run from the repository root: + +```sh +uv run --extra test python scripts/chat_bundle.py build --install +uv run --extra test python scripts/chat_bundle.py verify --source +uv run --extra test loopx chat --no-open +``` + +Builds start with current assets only. Use `build --previous /path/to/prior/chat` +when deliberately carrying a prior local delivery; release and installation +commands select their predecessor automatically. + +With frontend dependencies already installed, `npm run build:chat` inside +`apps/presentation/dashboard` rebuilds the packaged UI. `loopx dashboard`'s source +development launcher ensures the packaged backend assets exist before starting +Vite. Run the build again after updating source. A packaged Chat launch rejects +missing, corrupt or stale assets with an actionable rebuild message, including +before reusing an existing service. Explicit development/test `--assets-dir` +continues to support caller-owned assets. + +The bundle manifest records the checkout revision, source fingerprints, current +asset set and SHA-256 of every delivered file. Source fingerprints conservatively +include shared TypeScript control-plane contracts. Unrelated changes in that tree +can require a rebuild. Text inputs normalize CRLF so a CI-built bundle remains +valid on Windows; delivered bytes are always hashed exactly. This is integrity +and freshness metadata, not a signature or a replacement for release attestations. + +## PR qualification and releases + +PR CI builds a clean bundle once and uploads `chat-bundle-`. Consumers +download that exact artifact; the presentation job exercises the packaged UI in a +browser. On pull requests the checkout SHA is GitHub's tested merge commit, which +may differ from the branch head. Generated-file Git cleanliness is no longer a +qualification gate. Browser, integrity and workflow gates remain required. + +Release Artifacts checks out the exact release tag and runs: + +```sh +python scripts/chat_bundle.py release-build --tag vX.Y.Z --repo loopx-project/loopx +python -m build --sdist --wheel +``` + +`release-build` requires authenticated `gh` read access and Node/npm. It downloads +the preceding stable version's wheel and `SHA256SUMS`, verifies the checksum, and +carries its current assets into the new bundle. Missing predecessor artifacts or +a checksum mismatch stop the release; desktop prereleases and later versions are +excluded. A repository with no predecessor can bootstrap without history. + +Both wheel and sdist include the verified bundle. A normal package build fails +if it is absent/stale; editable installation remains available before a frontend +build. Building a wheel from the sdist requires no Node or network access for the +frontend. Release CI installs both wheel forms outside the checkout and requests +every delivered file through the actual Chat HTTP handler. Desktop packaging adds +the qualified generated bundle to its exact Git source archive and rejects dirty +or mismatched frontend inputs. + +## Upgrade window and rollback + +A new delivery retains its own assets and the previous delivery's current assets. +It does not carry the previous delivery's entire retained history. The first +upgrade from an older wheel without provenance metadata retains its bounded asset +directory once. Source installers instead use the current installed snapshot as +the predecessor, so local development build history does not define upgrade +compatibility. Already-built archives can add those resources without Node or a +network connection. A failed build leaves the previous complete output intact. + +This supports an old tab requesting a previously unloaded module after one +upgrade. It does not promise backend API compatibility indefinitely, or preserve +resources across arbitrary skipped stable releases for wheel installs. After a +second upgrade, reload older tabs. Rollback reinstalls the previous complete wheel +or selects the previous source snapshot; do not mix one version's HTML with +another version's assets. Existing tabs should reload after rollback. + +Validation commands: + +```sh +uv run --extra test python -m pytest tests/presentation/test_chat_bundle.py +npm --prefix apps/presentation/dashboard run smoke:chat-upgrade +npm --prefix apps/presentation/dashboard run smoke:personal-workspace-packaged +python scripts/verify_installed_chat.py --python /path/to/installed/environment/bin/python +``` + +The upgrade browser smoke opens version A, delivers B, imports A's deferred module +from the still-open tab, opens B in a new tab, then proves C retains B and retires A. +It uses disposable assets and the production HTTP handler, without active Goal +state. The packaged workspace smoke separately exercises the actual compiled UI. diff --git a/examples/chat-bundle-upgrade-browser-smoke.mjs b/examples/chat-bundle-upgrade-browser-smoke.mjs new file mode 100644 index 0000000000..a84184573f --- /dev/null +++ b/examples/chat-bundle-upgrade-browser-smoke.mjs @@ -0,0 +1,80 @@ +#!/usr/bin/env node +// An open tab imports an as-yet-unloaded module after its server is upgraded. +import assert from "node:assert/strict"; +import { spawn } from "node:child_process"; +import { createInterface } from "node:readline"; +import { resolve } from "node:path"; +import { launchBrowser, loadPlaywright } from "./dashboard-browser-smoke-support.mjs"; + +const python = String.raw` +import importlib.util, json, sys, tempfile, threading +from pathlib import Path +from loopx.chat_server import ChatHTTPServer, ChatRequestHandler +spec = importlib.util.spec_from_file_location("builder", "scripts/chat_bundle.py") +builder = importlib.util.module_from_spec(spec) +spec.loader.exec_module(builder) +with tempfile.TemporaryDirectory(prefix="loopx-tab-upgrade-") as temporary: + builder.ROOT = Path(temporary) + builder.OUTPUT = Path(temporary) / "chat" + def deliver(name): + with tempfile.TemporaryDirectory(dir=temporary) as work: + stage = Path(work) / "chat" + (stage / "assets").mkdir(parents=True) + (stage / "assets" / (name + ".js")).write_text("export const version = '" + name + "'") + (stage / "assets" / (name + ".css")).write_text("body { color: black }") + (stage / "manifest.webmanifest").write_text("{}") + (stage / "index.html").write_text('') + current = ["assets/" + name + ".css", "assets/" + name + ".js"] + builder.finish_delivery(stage, builder.OUTPUT if builder.OUTPUT.exists() else None, current, {}, "a" * 40) + deliver("one") + server = ChatHTTPServer(("127.0.0.1", 0), ChatRequestHandler) + server.assets_dir = builder.OUTPUT + server.verbose = False + thread = threading.Thread(target=server.serve_forever, daemon=True) + thread.start() + print(json.dumps({"port": server.server_port}), flush=True) + try: + for line in sys.stdin: + deliver(line.strip()) + print(json.dumps({"delivered": line.strip()}), flush=True) + finally: + server.shutdown() + server.server_close() + thread.join() +`; +const child = spawn(process.env.LOOPX_PYTHON_BIN || "python3", ["-u", "-c", python], { + cwd: resolve(import.meta.dirname, ".."), stdio: ["pipe", "pipe", "inherit"], +}); +const lines = createInterface({ input: child.stdout })[Symbol.asyncIterator](); +async function read() { + const result = await Promise.race([ + lines.next(), new Promise((_, reject) => { const t = setTimeout(() => reject(new Error("upgrade server timeout")), 30000); t.unref(); }), + ]); + assert.equal(result.done, false, "upgrade server exited"); + return JSON.parse(result.value); +} +let browser; +try { + const { port } = await read(); + browser = await launchBrowser(loadPlaywright().chromium); + const oldTab = await browser.newPage(); + const url = `http://127.0.0.1:${port}/chat/`; + await oldTab.goto(url); + child.stdin.write("two\n"); + assert.equal((await read()).delivered, "two"); + await oldTab.getByRole("button").click(); + await oldTab.waitForFunction(() => document.querySelector("output").textContent === "one"); + const newTab = await browser.newPage(); + await newTab.goto(url); + await newTab.getByRole("button").click(); + await newTab.waitForFunction(() => document.querySelector("output").textContent === "two"); + child.stdin.write("three\n"); + assert.equal((await read()).delivered, "three"); + assert.equal((await newTab.request.get(`${url}assets/two.js`)).status(), 200); + assert.equal((await newTab.request.get(`${url}assets/one.js`)).status(), 404); + console.log("PASS: old tab lazy import after upgrade; current tab renders; history bounded to one previous delivery"); +} finally { + await browser?.close(); + child.stdin.end(); + child.kill(); +} diff --git a/examples/dashboard-pwa-bundle-smoke.py b/examples/dashboard-pwa-bundle-smoke.py index c6ab662fa3..d6d72ed371 100644 --- a/examples/dashboard-pwa-bundle-smoke.py +++ b/examples/dashboard-pwa-bundle-smoke.py @@ -75,10 +75,9 @@ def assert_bounded_chat_assets() -> None: def main() -> int: - # The full-public suite is Python-only and starts from a clean checkout, so - # the ignored Vite output is not guaranteed to exist. Always validate the - # tracked build inputs; the dedicated frontstage build job proves that Vite - # can produce the root bundle. When a local build is present, validate it too. + # The full-public suite builds Chat before running this smoke. The separate + # frontstage job builds the root site; validate that optional local output + # when present, and always require the delivered Chat bundle. assert_pwa_contract( "root dashboard source", index=ROOT_SOURCE / "index.html", diff --git a/tests/presentation/test_chat_bundle.py b/tests/presentation/test_chat_bundle.py new file mode 100644 index 0000000000..795babf38e --- /dev/null +++ b/tests/presentation/test_chat_bundle.py @@ -0,0 +1,215 @@ +"""Delivery invariants: coherent builds, bounded upgrade history and fail-closed inputs.""" + +from __future__ import annotations + +import importlib.util +import json +from pathlib import Path +import shutil +import subprocess +import zipfile + +import pytest +from loopx.presentation.chat_bundle import MANIFEST, validate_bundle + +spec = importlib.util.spec_from_file_location( + "chat_builder", Path(__file__).resolve().parents[2] / "scripts/chat_bundle.py" +) +builder = importlib.util.module_from_spec(spec) +spec.loader.exec_module(builder) + + +@pytest.fixture +def source(tmp_path, monkeypatch): + (tmp_path / "apps/presentation/dashboard").mkdir(parents=True) + (tmp_path / "apps/presentation/dashboard/package.json").write_text("{}") + monkeypatch.setattr(builder, "ROOT", tmp_path) + monkeypatch.setattr(builder, "OUTPUT", tmp_path / "loopx/web/chat") + monkeypatch.setattr(builder.shutil, "which", lambda _: "npm") + generation = {"name": "one", "fail": False} + + def run(command, **kwargs): + if command[0] == "git": + return subprocess.CompletedProcess(command, 0, stdout="a" * 40 + "\n") + if command[1] == "ci": + return subprocess.CompletedProcess(command, 0) + output = Path(kwargs["env"]["LOOPX_CHAT_OUT_DIR"]) + (output / "assets").mkdir(parents=True) + name = generation["name"] + (output / f"assets/{name}.js").write_text(f"export const generation = '{name}'") + (output / "index.html").write_text( + f'' + ) + (output / "manifest.webmanifest").write_text("{}") + if generation["fail"]: + raise subprocess.CalledProcessError(1, command) + return subprocess.CompletedProcess(command, 0) + + monkeypatch.setattr(builder.subprocess, "run", run) + return generation + + +def test_only_previous_actual_delivery_survives_second_upgrade(source, tmp_path): + builder.build(None) + first = tmp_path / "first" + shutil.copytree(builder.OUTPUT, first) + source["name"] = "two" + builder.build(first) + second = tmp_path / "second" + shutil.copytree(builder.OUTPUT, second) + source["name"] = "three" + builder.build(second) + manifest = validate_bundle(builder.OUTPUT, source_root=tmp_path) + assert manifest["current_assets"] == ["assets/three.js"] + assert {p.name for p in (builder.OUTPUT / "assets").iterdir()} == { + "two.js", + "three.js", + } + assert (builder.OUTPUT / "assets/two.js").read_bytes() == ( + second / "assets/two.js" + ).read_bytes() + + +def test_source_update_and_asset_corruption_are_rejected(source, tmp_path): + builder.build(None) + (tmp_path / "apps/presentation/dashboard/package.json").write_text( + '{"changed": true}' + ) + with pytest.raises(RuntimeError, match="source changed"): + validate_bundle(builder.OUTPUT, source_root=tmp_path) + validate_bundle(builder.OUTPUT) # Installed wheels do not need a source tree. + (builder.OUTPUT / "assets/one.js").write_text("corrupt") + with pytest.raises(RuntimeError, match="bundle file changed"): + validate_bundle(builder.OUTPUT) + + +def test_failed_build_preserves_existing_delivery(source): + builder.build(None) + original = (builder.OUTPUT / MANIFEST).read_bytes() + source.update(name="two", fail=True) + with pytest.raises(subprocess.CalledProcessError): + builder.build(None) + assert (builder.OUTPUT / MANIFEST).read_bytes() == original + validate_bundle(builder.OUTPUT) + + +def test_explicit_installed_predecessor_overrides_local_history(source, tmp_path): + builder.build(None) + installed = tmp_path / "installed" + shutil.copytree(builder.OUTPUT, installed) + source["name"] = "two" + builder.build(None) + source["name"] = "three" + builder.build(None) + builder.ensure(installed) + assert {p.name for p in (builder.OUTPUT / "assets").iterdir()} == { + "one.js", + "three.js", + } + + +@pytest.mark.parametrize( + "payload", [[], {}, {"schema_version": "loopx_chat_bundle_v1", "files": []}] +) +def test_malformed_manifest_has_actionable_error(source, payload): + builder.build(None) + (builder.OUTPUT / MANIFEST).write_text(json.dumps(payload)) + with pytest.raises(RuntimeError, match="npm run build:chat"): + validate_bundle(builder.OUTPUT) + + +def test_wheel_extraction_rejects_escape_and_duplicates(tmp_path): + for index, names in enumerate([["../../escaped.js"], ["index.html", "index.html"]]): + wheel = tmp_path / f"invalid-{index}.whl" + with zipfile.ZipFile(wheel, "w") as archive: + for name in names: + archive.writestr("loopx/web/chat/" + name, "invalid") + with pytest.raises(RuntimeError): + builder.extract_wheel(wheel, tmp_path / f"extract-{index}") + assert not (tmp_path / "escaped.js").exists() + + +def test_legacy_wheel_assets_are_retained_on_first_upgrade(source, tmp_path): + legacy = tmp_path / "legacy" + (legacy / "assets").mkdir(parents=True) + (legacy / "index.html").write_text('') + (legacy / "assets/old.js").write_text("old code") + builder.build(legacy) + assert (builder.OUTPUT / "assets/old.js").read_text() == "old code" + validate_bundle(builder.OUTPUT) + + +def test_same_asset_name_different_bytes_cannot_overwrite_current(source, tmp_path): + legacy = tmp_path / "legacy" + (legacy / "assets").mkdir(parents=True) + (legacy / "index.html").write_text('') + (legacy / "assets/one.js").write_text("different bytes") + (legacy / "assets/extra.js").write_text("force history") + with pytest.raises(RuntimeError, match="different content"): + builder.build(legacy) + assert not builder.OUTPUT.exists() + + +@pytest.mark.parametrize("checksum_valid", [True, False]) +def test_release_predecessor_is_stable_older_and_checksum_verified( + tmp_path, monkeypatch, checksum_valid +): + def release(tag, *, draft=False, prerelease=False): + return { + "tag_name": tag, + "draft": draft, + "prerelease": prerelease, + "assets": [{"name": "loopx-1.0.5-py3-none-any.whl"}], + } + + releases = [ + [ + release("v1.0.4"), + release("v1.0.5"), + release("v1.1.0"), + release("v1.2.0"), + release("v1.0.9", draft=True), + release("v1.0.8", prerelease=True), + release("desktop-main-123"), + ] + ] + monkeypatch.setattr( + builder.subprocess, "check_output", lambda *a, **k: json.dumps(releases) + ) + downloads = [] + + def download(command, **kwargs): + downloads.append(command[3]) + directory = Path(command[command.index("--dir") + 1]) + wheel = directory / "loopx-1.0.5-py3-none-any.whl" + with zipfile.ZipFile(wheel, "w") as archive: + archive.writestr( + "loopx/web/chat/index.html", + '', + ) + archive.writestr("loopx/web/chat/assets/old.js", "old code") + digest = builder.contract.digest(wheel) if checksum_valid else "0" * 64 + (directory / "SHA256SUMS").write_text(digest + " " + wheel.name + "\n") + + monkeypatch.setattr(builder.subprocess, "run", download) + builds = [] + monkeypatch.setattr( + builder, + "build", + lambda previous, **kwargs: builds.append( + (previous / "assets/old.js").read_text() + ), + ) + if checksum_valid: + builder.release_build("v1.1.0", "fixture/repository") + assert builds == ["old code"] + else: + with pytest.raises(RuntimeError, match="checksum mismatch"): + builder.release_build("v1.1.0", "fixture/repository") + assert builds == [] + assert downloads == ["v1.0.5"] + + +def test_windows_drive_paths_are_not_portable_bundle_names(): + assert not builder.contract.safe_relative("C:/escape.js") + assert not builder.contract.safe_relative("C:escape.js") diff --git a/tests/test_dashboard_command.py b/tests/test_dashboard_command.py index 7aa17bd685..033afdb498 100644 --- a/tests/test_dashboard_command.py +++ b/tests/test_dashboard_command.py @@ -54,6 +54,8 @@ def _prepare_dashboard_runtime_fixture(tmp_path: Path) -> tuple[Path, Path, Path (dashboard_dir / "node_modules" / ".bin" / "vite").touch() fake_bin.mkdir() _copy_dashboard_launcher(scripts_dir) + # This fixture isolates service error propagation; bundle integrity has its own suite. + (scripts_dir / "chat_bundle.py").write_text("# frontend already qualified in fixture\n") for executable in (fake_bin / "node", fake_bin / "npm"): executable.write_text("#!/usr/bin/env bash\nexit 0\n", encoding="utf-8") executable.chmod(0o755) diff --git a/tests/test_python_ci_workflow.py b/tests/test_python_ci_workflow.py index 9db85cda29..6fca8170c7 100644 --- a/tests/test_python_ci_workflow.py +++ b/tests/test_python_ci_workflow.py @@ -195,15 +195,16 @@ def test_merge_gate_runs_on_all_prs_and_checks_every_core_aggregate() -> None: assert "needs: [changes, kernel-static-checks, dashboard-acceptance]" in job assert "if: always() && needs.changes.outputs.core_tests == 'true'" in job else: - assert "needs: changes" in job + assert "needs: [changes, chat-bundle]" in job assert f"if: needs.changes.outputs.{output} == 'true'" in job def test_presentation_exemption_retains_real_frontend_checks_and_force_full() -> None: job = WORKFLOW.split(" presentation:\n", 1)[1].split(" merge-gate:\n", 1)[0] - assert "npm run build:chat" in job + assert "name: chat-bundle-${{ github.sha }}" in job assert "npm run smoke:personal-workspace-packaged" in job - assert "status --short --untracked-files=all -- loopx/web/chat" in job + assert "scripts/chat_bundle.py verify --source" in job + assert "status --short --untracked-files=all -- loopx/web/chat" not in job assert "continue-on-error" not in job assert "labels.*.name, 'ci:full'" in WORKFLOW assert "labeled, unlabeled" in WORKFLOW From cad7e9f58244cb13a91c37adef57c7d9b7c03e47 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 10:59:54 +0800 Subject: [PATCH 3/5] Qualify installed frontend rendering and portable source fingerprints Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .gitattributes | 3 --- .github/workflows/release-artifacts.yml | 8 ++++++++ docs/development/frontend-delivery.md | 3 ++- examples/personal-workspace-browser/fixture.mjs | 15 ++++++++++++--- loopx/presentation/chat_bundle.py | 8 ++++++-- loopx/windows_install.py | 2 +- scripts/chat_bundle.py | 3 ++- tests/presentation/test_chat_bundle.py | 11 +++++++++++ 8 files changed, 42 insertions(+), 11 deletions(-) diff --git a/.gitattributes b/.gitattributes index 2733c78af8..6cd6285821 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,2 @@ -# Vite bundles may retain whitespace-only lines inside generated template literals. -loopx/web/chat/assets/*.js whitespace=-blank-at-eol - # Preserve the immutable archive's bytes even with core.autocrlf=true. benchmark/deepswe-gptxhigh-v1/** text eol=lf diff --git a/.github/workflows/release-artifacts.yml b/.github/workflows/release-artifacts.yml index 6d7680055e..8009acc1ad 100644 --- a/.github/workflows/release-artifacts.yml +++ b/.github/workflows/release-artifacts.yml @@ -213,6 +213,14 @@ jobs: "${RUNNER_TEMP}/loopx-wheel/bin/python" -m pip install --force-reinstall --no-deps "${RUNNER_TEMP}"/sdist-wheel/*.whl python scripts/verify_installed_chat.py --python "${RUNNER_TEMP}/loopx-wheel/bin/python" + - name: Exercise the installed page in a real browser + working-directory: apps/presentation/dashboard + env: + LOOPX_PYTHON_BIN: ${{ runner.temp }}/loopx-wheel/bin/python + run: | + ./node_modules/.bin/playwright install --with-deps chromium + npm run smoke:personal-workspace-packaged + - name: Verify wheel through the DSH managed-runtime install shape run: | set -euo pipefail diff --git a/docs/development/frontend-delivery.md b/docs/development/frontend-delivery.md index 2832878c78..1acb2c68b1 100644 --- a/docs/development/frontend-delivery.md +++ b/docs/development/frontend-delivery.md @@ -60,7 +60,8 @@ Both wheel and sdist include the verified bundle. A normal package build fails if it is absent/stale; editable installation remains available before a frontend build. Building a wheel from the sdist requires no Node or network access for the frontend. Release CI installs both wheel forms outside the checkout and requests -every delivered file through the actual Chat HTTP handler. Desktop packaging adds +every delivered file through the actual Chat HTTP handler, then runs workspace +browser scenarios against the isolated installed interpreter. Desktop packaging adds the qualified generated bundle to its exact Git source archive and rejects dirty or mismatched frontend inputs. diff --git a/examples/personal-workspace-browser/fixture.mjs b/examples/personal-workspace-browser/fixture.mjs index 75a55fcaf3..67140eb7cd 100644 --- a/examples/personal-workspace-browser/fixture.mjs +++ b/examples/personal-workspace-browser/fixture.mjs @@ -271,9 +271,18 @@ function teamPlanApplyReceipt(proposal) { export function startServer() { if (packaged) { - return spawn(process.env.LOOPX_PYTHON_BIN || "python3", [ - "-m", "http.server", String(port), "--bind", "127.0.0.1", "--directory", resolve(repoRoot, "loopx/web"), - ], { + // An explicit installed interpreter must resolve its own package, not the checkout. + const isolation = process.env.LOOPX_PYTHON_BIN ? ["-I"] : []; + return spawn(process.env.LOOPX_PYTHON_BIN || "python3", [...isolation, "-c", ` +from loopx.chat_server import ChatHTTPServer, ChatRequestHandler, default_chat_assets_dir +from loopx.presentation.chat_bundle import validate_bundle +assets = default_chat_assets_dir() +validate_bundle(assets) +server = ChatHTTPServer(("127.0.0.1", ${port}), ChatRequestHandler) +server.assets_dir = assets +server.verbose = False +server.serve_forever() +`], { cwd: repoRoot, env: { ...process.env }, stdio: "ignore", diff --git a/loopx/presentation/chat_bundle.py b/loopx/presentation/chat_bundle.py index a5904d0324..37d3baf745 100644 --- a/loopx/presentation/chat_bundle.py +++ b/loopx/presentation/chat_bundle.py @@ -8,7 +8,7 @@ from pathlib import Path, PurePosixPath MANIFEST = "bundle-manifest.json" -SCHEMA = "loopx_chat_bundle_v1" +CHAT_BUNDLE_SCHEMA_VERSION = "loopx_chat_bundle_v1" SOURCE_ROOTS = ( "apps/presentation/dashboard/src", "apps/presentation/dashboard/chat", @@ -39,6 +39,7 @@ def source_digest(path: Path, content: bytes | None = None) -> str: ".html", ".css", ".svg", + ".webmanifest", ".py", }: data = data.replace(b"\r\n", b"\n") @@ -83,7 +84,10 @@ def safe_relative(value: str) -> bool: def validate_bundle(bundle: Path, *, source_root: Path | None = None) -> dict: try: manifest = json.loads((bundle / MANIFEST).read_text(encoding="utf-8")) - if not isinstance(manifest, dict) or manifest.get("schema_version") != SCHEMA: + if ( + not isinstance(manifest, dict) + or manifest.get("schema_version") != CHAT_BUNDLE_SCHEMA_VERSION + ): raise ValueError("unsupported bundle manifest") files = manifest["files"] if ( diff --git a/loopx/windows_install.py b/loopx/windows_install.py index f8f7b72d0e..285a13dc13 100644 --- a/loopx/windows_install.py +++ b/loopx/windows_install.py @@ -24,7 +24,7 @@ POINTER_SCHEMA_VERSION = "loopx_windows_release_pointer_v0" LAUNCHER_POINTER_FILENAME = "loopx-current-release.json" COPY_DIRECTORIES = ("loopx", "scripts", "skills", "docs", "man", "examples", "apps", ".github") -COPY_FILES = ("README.md", "README.zh-CN.md", "LICENSE", "pyproject.toml") +COPY_FILES = ("README.md", "README.zh-CN.md", "LICENSE", "pyproject.toml", "setup.py", "MANIFEST.in") REQUIRED_DEEP_CHECKS = { "command_package_same_root", "representative_cli_commands", diff --git a/scripts/chat_bundle.py b/scripts/chat_bundle.py index e0b8e09dea..e102104392 100644 --- a/scripts/chat_bundle.py +++ b/scripts/chat_bundle.py @@ -130,7 +130,7 @@ def finish_delivery( encoding="utf-8", ) manifest = { - "schema_version": contract.SCHEMA, + "schema_version": contract.CHAT_BUNDLE_SCHEMA_VERSION, "source_revision": revision, "source_files": inputs, "current_assets": current, @@ -207,6 +207,7 @@ def release_build(tag: str, repository: str) -> None: and not r["prerelease"] and re.fullmatch(r"v\d+\.\d+\.\d+", r["tag_name"]) ] + def number(value: str) -> tuple[int, ...]: return tuple(map(int, value.removeprefix("v").split("."))) diff --git a/tests/presentation/test_chat_bundle.py b/tests/presentation/test_chat_bundle.py index 795babf38e..ec057ecfac 100644 --- a/tests/presentation/test_chat_bundle.py +++ b/tests/presentation/test_chat_bundle.py @@ -213,3 +213,14 @@ def download(command, **kwargs): def test_windows_drive_paths_are_not_portable_bundle_names(): assert not builder.contract.safe_relative("C:/escape.js") assert not builder.contract.safe_relative("C:escape.js") + + +def test_source_fingerprints_normalize_windows_pwa_text_but_not_binary(tmp_path): + manifest = tmp_path / "manifest.webmanifest" + assert builder.contract.source_digest( + manifest, b"{}\r\n" + ) == builder.contract.source_digest(manifest, b"{}\n") + image = tmp_path / "image.png" + assert builder.contract.source_digest( + image, b"image\r\n" + ) != builder.contract.source_digest(image, b"image\n") From d61b418af02490777db45ca533f9c6e24be42812 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 11:11:49 +0800 Subject: [PATCH 4/5] Qualify compiled pages before uploading every PR frontend artifact Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .github/workflows/python-tests.yml | 26 +++++++++----------------- docs/development/frontend-delivery.md | 6 +++--- tests/test_python_ci_workflow.py | 14 +++++++++++++- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 313fc6853d..19835087b9 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -102,6 +102,12 @@ jobs: cache-dependency-path: apps/presentation/dashboard/package-lock.json - run: python scripts/chat_bundle.py build --install - run: python scripts/chat_bundle.py verify --source + - name: Qualify the actual compiled UI before saving the artifact + working-directory: apps/presentation/dashboard + run: | + ./node_modules/.bin/playwright install --with-deps chromium + npm run smoke:personal-workspace-packaged + npm run smoke:chat-upgrade - uses: actions/upload-artifact@v7 with: name: chat-bundle-${{ github.sha }} @@ -585,32 +591,18 @@ jobs: needs: [changes, chat-bundle] if: needs.changes.outputs.presentation_tests == 'true' runs-on: ubuntu-latest - timeout-minutes: 15 + timeout-minutes: 5 steps: - uses: actions/checkout@v7 - uses: actions/download-artifact@v7 with: name: chat-bundle-${{ github.sha }} path: loopx/web/chat/ - - uses: actions/setup-python@v6 with: python-version: "3.11" - cache: pip - - uses: actions/setup-node@v6 - with: - node-version: "24" - cache: npm - cache-dependency-path: apps/presentation/dashboard/package-lock.json - - run: python -m pip install --disable-pip-version-check -e ".[test]" - - name: Build and test the actual packaged Dashboard - working-directory: apps/presentation/dashboard - run: | - npm ci --ignore-scripts - python ../../../scripts/chat_bundle.py verify --source - ./node_modules/.bin/playwright install --with-deps chromium - npm run smoke:personal-workspace-packaged - npm run smoke:chat-upgrade + - name: Verify the source-bound, browser-qualified Dashboard artifact + run: python scripts/chat_bundle.py verify --source merge-gate: # Always publish one stable outcome, including documentation-only PRs. diff --git a/docs/development/frontend-delivery.md b/docs/development/frontend-delivery.md index 1acb2c68b1..5d0d40dcf0 100644 --- a/docs/development/frontend-delivery.md +++ b/docs/development/frontend-delivery.md @@ -37,9 +37,9 @@ and freshness metadata, not a signature or a replacement for release attestation ## PR qualification and releases -PR CI builds a clean bundle once and uploads `chat-bundle-`. Consumers -download that exact artifact; the presentation job exercises the packaged UI in a -browser. On pull requests the checkout SHA is GitHub's tested merge commit, which +PR CI builds a clean bundle once, exercises its actual pages in a browser, then +uploads `chat-bundle-`. Consumers download that qualified artifact; +both frontend-only and mixed/backend PRs pass through this producer. On pull requests the checkout SHA is GitHub's tested merge commit, which may differ from the branch head. Generated-file Git cleanliness is no longer a qualification gate. Browser, integrity and workflow gates remain required. diff --git a/tests/test_python_ci_workflow.py b/tests/test_python_ci_workflow.py index 6fca8170c7..d47cd1f307 100644 --- a/tests/test_python_ci_workflow.py +++ b/tests/test_python_ci_workflow.py @@ -202,7 +202,10 @@ def test_merge_gate_runs_on_all_prs_and_checks_every_core_aggregate() -> None: def test_presentation_exemption_retains_real_frontend_checks_and_force_full() -> None: job = WORKFLOW.split(" presentation:\n", 1)[1].split(" merge-gate:\n", 1)[0] assert "name: chat-bundle-${{ github.sha }}" in job - assert "npm run smoke:personal-workspace-packaged" in job + producer = WORKFLOW.split(" chat-bundle:\n", 1)[1].split(" kernel-static-checks:\n", 1)[0] + assert "npm run smoke:personal-workspace-packaged" in producer + assert "npm run smoke:chat-upgrade" in producer + assert producer.index("npm run smoke:personal-workspace-packaged") < producer.index("actions/upload-artifact") assert "scripts/chat_bundle.py verify --source" in job assert "status --short --untracked-files=all -- loopx/web/chat" not in job assert "continue-on-error" not in job @@ -300,3 +303,12 @@ def test_four_shards_execute_each_test_once_and_merge_portable_coverage( assert re.search(r"shard: \[1, 2, 3, 4\]", WORKFLOW) assert "include-hidden-files: true" in WORKFLOW assert "--cov-fail-under" not in template + + +def test_backend_and_mixed_prs_require_the_browser_qualified_artifact() -> None: + producer = WORKFLOW.split(" chat-bundle:\n", 1)[1].split(" kernel-static-checks:\n", 1)[0] + assert "needs.changes.outputs.core_tests == 'true'" in producer + for name in ("kernel-static-checks", "dashboard-acceptance", "test-shard", "stage2c-suite", "windows-powershell", "presentation"): + job = WORKFLOW.split(f" {name}:\n", 1)[1].split(" - uses: actions/setup-", 1)[0] + assert "needs: [changes, chat-bundle]" in job + assert "name: chat-bundle-${{ github.sha }}" in job From 4407f304626efacb11b9980024fbf47aa0b0b797 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 13:10:00 +0800 Subject: [PATCH 5/5] Launch the npm Chat build with a portable interpreter `npm run build:chat` hardcoded the POSIX `python3` name, so a supported Windows install that provides `python.exe` alone (or an unusable App Execution Alias stub for `python3`) failed before reaching the shared builder, and the rebuild advice pointed at the same broken command. The npm entry now runs `scripts/chat_bundle_launcher.mjs`, which selects a Python 3.11+ interpreter the way the rest of LoopX does (LOOPX_PYTHON, the installer-recorded `.loopx-python`, the repository `.venv`, then `python3`/`python` and the `py` launcher) and then executes `scripts/chat_bundle.py`, so build rules stay in one place. The Windows CI lane now installs frontend dependencies and rebuilds the bundle through `npm run build:chat` while an unusable `python3.exe` shadows any real alias, then verifies the source-bound bundle. Focused launcher tests cover the python.exe-only fallback, the discovery order, the no-fallback explicit override and the actionable missing-interpreter error. Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .github/workflows/frontstage-pages.yml | 2 + .github/workflows/python-tests.yml | 25 ++- apps/presentation/dashboard/package.json | 2 +- docs/development/frontend-delivery.md | 19 +- scripts/chat_bundle_launcher.mjs | 93 ++++++++++ .../presentation/test_chat_bundle_launcher.py | 163 ++++++++++++++++++ tests/test_python_ci_workflow.py | 17 ++ 7 files changed, 313 insertions(+), 8 deletions(-) create mode 100644 scripts/chat_bundle_launcher.mjs create mode 100644 tests/presentation/test_chat_bundle_launcher.py diff --git a/.github/workflows/frontstage-pages.yml b/.github/workflows/frontstage-pages.yml index 702d54dbf3..bf15bf77bf 100644 --- a/.github/workflows/frontstage-pages.yml +++ b/.github/workflows/frontstage-pages.yml @@ -11,6 +11,7 @@ on: - "README.zh-CN.md" - "apps/presentation/dashboard/**" - "scripts/chat_bundle.py" + - "scripts/chat_bundle_launcher.mjs" - "loopx/presentation/chat_bundle.py" - "apps/presentation/site/**" - "benchmark/deepswe/behavior-discovery/**" @@ -48,6 +49,7 @@ on: - "README.zh-CN.md" - "apps/presentation/dashboard/**" - "scripts/chat_bundle.py" + - "scripts/chat_bundle_launcher.mjs" - "loopx/presentation/chat_bundle.py" - "apps/presentation/site/**" - "benchmark/deepswe/behavior-discovery/**" diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 19835087b9..e73f564993 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -530,7 +530,7 @@ jobs: needs: [changes, chat-bundle] if: needs.changes.outputs.python_tests == 'true' runs-on: windows-latest - timeout-minutes: 20 + timeout-minutes: 30 steps: - name: Check out repository uses: actions/checkout@v7 @@ -552,6 +552,8 @@ jobs: uses: actions/setup-node@v6 with: node-version: "24" + cache: npm + cache-dependency-path: apps/presentation/dashboard/package-lock.json - name: Install test dependencies run: python -m pip install --disable-pip-version-check -e ".[test]" @@ -587,6 +589,27 @@ jobs: tests/control_plane_ts/local_authority_provider.test.ts tests/control_plane_ts/sqlite_runtime_admission.test.ts + - name: Install the frontend dependencies for a source rebuild + working-directory: apps/presentation/dashboard + run: npm ci --ignore-scripts + + - name: Rebuild the Chat bundle where only python.exe is usable + working-directory: apps/presentation/dashboard + shell: pwsh + run: | + $shadow = Join-Path $env:RUNNER_TEMP "python-exe-only" + New-Item -ItemType Directory -Force -Path $shadow | Out-Null + # Supported Windows installs may expose python.exe alone, and a + # python3.exe App Execution Alias stub is not runnable. The npm entry + # must resolve a real 3.11+ interpreter either way. + Set-Content -Path (Join-Path $shadow "python3.exe") ` + -Value "unusable python3 stand-in" -Encoding ascii + $env:PATH = "$shadow;$env:PATH" + npm run build:chat + + - name: Verify the Windows-built Chat bundle + run: python scripts/chat_bundle.py verify --source + presentation: needs: [changes, chat-bundle] if: needs.changes.outputs.presentation_tests == 'true' diff --git a/apps/presentation/dashboard/package.json b/apps/presentation/dashboard/package.json index 467fdc1e5e..705db3cee7 100644 --- a/apps/presentation/dashboard/package.json +++ b/apps/presentation/dashboard/package.json @@ -8,7 +8,7 @@ "smoke:workspace-progressive-loader": "node smoke/workspace-progressive-status-smoke.mjs", "smoke:workspace-progressive": "node ../../../examples/workspace-progressive-loading-browser-smoke.mjs", "build": "tsc --noEmit && vite build && npm run build:chat", - "build:chat": "python3 ../../../scripts/chat_bundle.py build", + "build:chat": "node ../../../scripts/chat_bundle_launcher.mjs build", "build:desktop": "tsc --noEmit && vite build", "dev": "bash ../../../scripts/dashboard-dev.sh", "dev:web": "vite --host 127.0.0.1", diff --git a/docs/development/frontend-delivery.md b/docs/development/frontend-delivery.md index 5d0d40dcf0..7b33679139 100644 --- a/docs/development/frontend-delivery.md +++ b/docs/development/frontend-delivery.md @@ -21,12 +21,19 @@ when deliberately carrying a prior local delivery; release and installation commands select their predecessor automatically. With frontend dependencies already installed, `npm run build:chat` inside -`apps/presentation/dashboard` rebuilds the packaged UI. `loopx dashboard`'s source -development launcher ensures the packaged backend assets exist before starting -Vite. Run the build again after updating source. A packaged Chat launch rejects -missing, corrupt or stale assets with an actionable rebuild message, including -before reusing an existing service. Explicit development/test `--assets-dir` -continues to support caller-owned assets. +`apps/presentation/dashboard` rebuilds the packaged UI. That npm entry runs +`scripts/chat_bundle_launcher.mjs`, which selects a Python 3.11+ interpreter the +same way the rest of LoopX does (`LOOPX_PYTHON`, then the installer-recorded +`.loopx-python`, the repository `.venv`, and `python3`/`python`, plus the `py` +launcher on Windows) and then runs the shared `scripts/chat_bundle.py` builder. +Supported Windows installations expose `python.exe` without a usable `python3` +alias, so the entry never assumes the POSIX name; the Windows CI lane rebuilds +the bundle under exactly that condition. `loopx dashboard`'s source development +launcher ensures the packaged backend assets exist before starting Vite. Run the +build again after updating source. A packaged Chat launch rejects missing, +corrupt or stale assets with an actionable rebuild message, including before +reusing an existing service. Explicit development/test `--assets-dir` continues +to support caller-owned assets. The bundle manifest records the checkout revision, source fingerprints, current asset set and SHA-256 of every delivered file. Source fingerprints conservatively diff --git a/scripts/chat_bundle_launcher.mjs b/scripts/chat_bundle_launcher.mjs new file mode 100644 index 0000000000..98b3f321ac --- /dev/null +++ b/scripts/chat_bundle_launcher.mjs @@ -0,0 +1,93 @@ +#!/usr/bin/env node +// Build entry for the generated Chat frontend. +// +// `npm run build:chat` must work wherever Node runs, not only where the POSIX +// `python3` name exists: supported Windows installations commonly provide +// `python.exe` alone, and a `python3.exe` App Execution Alias stub is not a +// runnable interpreter. Resolve one compatible interpreter here and keep every +// build rule in the shared `scripts/chat_bundle.py` builder. + +import { spawnSync } from "node:child_process"; +import { existsSync, readFileSync } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const BUILDER = path.join(ROOT, "scripts", "chat_bundle.py"); +const PROBE = "import sys; raise SystemExit(sys.version_info < (3, 11))"; +const WINDOWS = process.platform === "win32"; + +function recordedInterpreter() { + const file = path.join(ROOT, ".loopx-python"); + if (!existsSync(file)) return null; + const value = readFileSync(file, "utf8").split("\n")[0].trim(); + return value.length > 0 ? value : null; +} + +// Discovery order matches the documented LoopX launcher contract for this +// checkout: explicit override, installer-recorded interpreter, project +// environment, then the platform names Node and npm users already have. +function candidates() { + const found = []; + const explicit = (process.env.LOOPX_PYTHON ?? "").trim(); + if (explicit) { + found.push({ argv: [explicit], label: "LOOPX_PYTHON", authoritative: true }); + } + const recorded = recordedInterpreter(); + if (recorded) found.push({ argv: [recorded], label: ".loopx-python" }); + found.push({ + argv: [ + path.join(ROOT, ".venv", WINDOWS ? "Scripts/python.exe" : "bin/python"), + ], + label: "the repository .venv", + }); + for (const name of ["python3", "python"]) { + found.push({ argv: [name], label: name }); + } + if (WINDOWS) found.push({ argv: ["py", "-3"], label: "the py launcher" }); + return found; +} + +function compatible(argv) { + const probe = spawnSync(argv[0], [...argv.slice(1), "-c", PROBE], { + cwd: ROOT, + stdio: "ignore", + windowsHide: true, + }); + return probe.status === 0; +} + +function select() { + for (const candidate of candidates()) { + if (compatible(candidate.argv)) return candidate; + if (candidate.authoritative) { + console.error( + "LOOPX_PYTHON is set but does not resolve to a Python 3.11+ interpreter: " + + candidate.argv[0], + ); + process.exit(2); + } + } + console.error( + "No Python 3.11+ interpreter was found for the Chat frontend build.\n" + + "Checked LOOPX_PYTHON, .loopx-python, the repository .venv, " + + `python3/python on PATH${WINDOWS ? " and the py launcher" : ""}.\n` + + "Install Python 3.11+ (or set LOOPX_PYTHON) and rerun npm run build:chat.", + ); + process.exit(2); +} + +const python = select(); +console.error( + `[chat-bundle] building with ${python.argv.join(" ")} (${python.label})`, +); +const built = spawnSync( + python.argv[0], + [...python.argv.slice(1), BUILDER, ...process.argv.slice(2)], + { cwd: ROOT, stdio: "inherit", windowsHide: true }, +); +if (built.error) { + console.error(`Unable to run ${python.argv[0]}: ${built.error.message}`); + process.exit(2); +} +process.exit(built.status ?? 1); diff --git a/tests/presentation/test_chat_bundle_launcher.py b/tests/presentation/test_chat_bundle_launcher.py new file mode 100644 index 0000000000..6e1ed3ff56 --- /dev/null +++ b/tests/presentation/test_chat_bundle_launcher.py @@ -0,0 +1,163 @@ +"""The npm Chat build entry resolves an interpreter instead of assuming python3. + +Supported Windows installations often expose `python.exe` only, and a +`python3.exe` App Execution Alias stub is not runnable. The npm entry must still +reach the shared builder, so interpreter resolution is exercised here and on +native Windows CI. +""" + +from __future__ import annotations + +import json +import os +from pathlib import Path +import shlex +import shutil +import subprocess +import sys + +import pytest + +ROOT = Path(__file__).resolve().parents[2] +LAUNCHER = ROOT / "scripts/chat_bundle_launcher.mjs" +NODE = shutil.which("node") +POSIX_SHIMS = os.name != "nt" + +pytestmark = pytest.mark.skipif(NODE is None, reason="Node.js runs this npm entry") + + +def checkout(tmp_path: Path) -> Path: + """A disposable checkout holding the launcher and a witness builder.""" + root = tmp_path / "checkout" + (root / "scripts").mkdir(parents=True) + shutil.copyfile(LAUNCHER, root / "scripts/chat_bundle_launcher.mjs") + (root / "scripts/chat_bundle.py").write_text( + "import sys\n" + "print('builder:' + sys.executable)\n" + "print('argv:' + ' '.join(sys.argv[1:]))\n", + encoding="utf-8", + ) + return root + + +def shim(path: Path, witness: Path, *, label: str, compatible: bool) -> None: + """A POSIX stand-in interpreter that records when it runs the builder.""" + path.parent.mkdir(parents=True, exist_ok=True) + if compatible: + body = ( + 'for argument in "$@"; do\n' + ' case "$argument" in\n' + f" *chat_bundle.py) echo {shlex.quote(label)}" + f" >> {shlex.quote(str(witness))};;\n" + " esac\n" + "done\n" + f'exec {shlex.quote(sys.executable)} "$@"' + ) + else: + body = "exit 9009" + path.write_text(f"#!/bin/sh\n{body}\n", encoding="utf-8") + path.chmod(0o755) + + +def environment(path_dirs: list[Path], **extra: str) -> dict[str, str]: + env = {key: value for key, value in os.environ.items() if key != "LOOPX_PYTHON"} + env["PATH"] = os.pathsep.join(str(item) for item in path_dirs) + env.update(extra) + return env + + +def run(root: Path, env: dict[str, str], *args: str) -> subprocess.CompletedProcess: + return subprocess.run( + [NODE, str(root / "scripts/chat_bundle_launcher.mjs"), *args], + cwd=root, + env=env, + text=True, + capture_output=True, + timeout=120, + check=False, + ) + + +@pytest.mark.skipif(not POSIX_SHIMS, reason="POSIX shim interpreter") +def test_python_exe_only_path_still_reaches_the_builder(tmp_path): + root = checkout(tmp_path) + witness = tmp_path / "witness" + shims = tmp_path / "bin" + shim(shims / "python3", witness, label="python3", compatible=False) + shim(shims / "python", witness, label="python", compatible=True) + env = environment([shims]) + # The environment that used to break the npm entry: no usable python3. + legacy = subprocess.run( + ["/bin/sh", "-c", f"python3 {root / 'scripts/chat_bundle.py'} build"], + cwd=root, + env=env, + text=True, + capture_output=True, + timeout=120, + check=False, + ) + assert legacy.returncode != 0 + result = run(root, env, "build") + assert result.returncode == 0, result.stderr + assert witness.read_text().split() == ["python"] + assert "argv:build" in result.stdout + + +@pytest.mark.skipif(not POSIX_SHIMS, reason="POSIX shim interpreter") +def test_recorded_and_explicit_interpreters_precede_path_discovery(tmp_path): + root = checkout(tmp_path) + witness = tmp_path / "witness" + shims = tmp_path / "bin" + shim(shims / "python3", witness, label="path", compatible=True) + shim(root / ".venv/bin/python", witness, label="venv", compatible=True) + recorded = tmp_path / "recorded/bin/python" + shim(recorded, witness, label="recorded", compatible=True) + (root / ".loopx-python").write_text(str(recorded) + "\n", encoding="utf-8") + assert run(root, environment([shims])).returncode == 0 + explicit = tmp_path / "explicit/bin/python" + shim(explicit, witness, label="explicit", compatible=True) + assert ( + run(root, environment([shims], LOOPX_PYTHON=str(explicit))).returncode == 0 + ) + assert witness.read_text().split() == ["recorded", "explicit"] + + +@pytest.mark.skipif(not POSIX_SHIMS, reason="POSIX shim interpreter") +def test_unusable_explicit_interpreter_does_not_fall_back(tmp_path): + root = checkout(tmp_path) + witness = tmp_path / "witness" + shims = tmp_path / "bin" + shim(shims / "python3", witness, label="path", compatible=True) + result = run( + root, + environment([shims], LOOPX_PYTHON=str(tmp_path / "missing-python")), + ) + assert result.returncode == 2 + assert "LOOPX_PYTHON" in result.stderr + assert not witness.exists() + + +@pytest.mark.skipif(not POSIX_SHIMS, reason="POSIX shim interpreter") +def test_missing_interpreter_reports_the_npm_entry_to_rerun(tmp_path): + root = checkout(tmp_path) + witness = tmp_path / "witness" + shims = tmp_path / "bin" + shim(shims / "python3", witness, label="python3", compatible=False) + result = run(root, environment([shims])) + assert result.returncode == 2 + assert "Python 3.11+" in result.stderr + assert "npm run build:chat" in result.stderr + assert not witness.exists() + + +def test_npm_entry_uses_the_portable_launcher(): + scripts = json.loads( + (ROOT / "apps/presentation/dashboard/package.json").read_text(encoding="utf-8") + )["scripts"] + assert scripts["build:chat"] == "node ../../../scripts/chat_bundle_launcher.mjs build" + assert "python3" not in scripts["build:chat"] + assert scripts["build"].endswith("&& npm run build:chat") + # The launcher only selects an interpreter; build rules stay in the builder. + launcher = LAUNCHER.read_text(encoding="utf-8") + assert '"scripts", "chat_bundle.py"' in launcher + assert "build:chat:vite" not in launcher diff --git a/tests/test_python_ci_workflow.py b/tests/test_python_ci_workflow.py index d47cd1f307..c6381a089e 100644 --- a/tests/test_python_ci_workflow.py +++ b/tests/test_python_ci_workflow.py @@ -217,6 +217,23 @@ def test_presentation_exemption_retains_real_frontend_checks_and_force_full() -> assert "matrix:\n shard: [1, 2, 3, 4]" in WORKFLOW +def test_windows_lane_rebuilds_the_frontend_without_a_usable_python3() -> None: + job = WORKFLOW.split(" windows-powershell:\n", 1)[1].split(" presentation:\n", 1)[0] + assert "timeout-minutes: 30" in job + assert "cache-dependency-path: apps/presentation/dashboard/package-lock.json" in job + assert "working-directory: apps/presentation/dashboard" in job + assert "npm ci --ignore-scripts" in job + assert "npm run build:chat" in job + assert "shell: pwsh" in job + # `python3` must be unusable, so a hardcoded POSIX name fails the lane. + assert 'Join-Path $shadow "python3.exe"' in job + assert "$env:PATH = \"$shadow;$env:PATH\"" in job + assert job.index("npm ci --ignore-scripts") < job.index("npm run build:chat") + assert job.index("npm run build:chat") < job.index( + "python scripts/chat_bundle.py verify --source" + ) + + def test_four_shards_execute_each_test_once_and_merge_portable_coverage( tmp_path: Path, ) -> None: