diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..d5822d8f --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,151 @@ +name: release + +on: + push: + tags: + - "v*" + workflow_dispatch: + +permissions: + contents: read + +jobs: + python: + name: build · wheel + sdist + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "22.12.0" + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Install build dependencies + run: | + python -m pip install --upgrade pip + python -m pip install -e . build + npm --prefix frontend/web ci + npm --prefix frontend/tui ci + - name: Build release sources + run: python -m argus_skill.release_tools.build_release + - name: Validate tag and package versions + if: startsWith(github.ref, 'refs/tags/v') + run: | + python - <<'PY' + import json + import os + import tomllib + from pathlib import Path + + python_version = tomllib.loads( + Path("pyproject.toml").read_text(encoding="utf-8") + )["project"]["version"] + desktop_version = json.loads( + Path("desktop/package.json").read_text(encoding="utf-8") + )["version"] + tag = os.environ["GITHUB_REF_NAME"] + assert tag == f"v{python_version}", ( + f"tag {tag!r} does not match Python package version {python_version!r}" + ) + assert desktop_version == python_version, ( + f"Desktop version {desktop_version!r} does not match " + f"Python package version {python_version!r}" + ) + PY + - name: Build distributions + run: python -m build + - name: Clean-install wheel smoke + run: | + python -m venv /tmp/argus-wheel-smoke + /tmp/argus-wheel-smoke/bin/python -m pip install dist/*.whl + /tmp/argus-wheel-smoke/bin/argus-skill --version + /tmp/argus-wheel-smoke/bin/python - <<'PY' + from pathlib import Path + import argus_skill + root = Path(argus_skill.__file__).parent + assert (root / "_frontend/web/dist/index.html").is_file() + assert (root / "_frontend/tui/bundle/argus.mjs").is_file() + PY + - uses: actions/upload-artifact@v4 + with: + name: python-dist + path: dist/* + + windows: + name: build · Windows installers + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "22.12.0" + cache: npm + cache-dependency-path: | + frontend/web/package-lock.json + frontend/tui/package-lock.json + desktop/package-lock.json + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Install build dependencies + run: | + python -m pip install --upgrade pip + python -m pip install -e . "pyinstaller>=6.11,<7" + npm --prefix frontend/web ci + npm --prefix frontend/tui ci + npm --prefix desktop ci + - name: Build release sources + run: python -m argus_skill.release_tools.build_release + - name: Build frozen backend + shell: pwsh + run: ./desktop/scripts/build-backend.ps1 -SkipInstall + - name: Build Desktop + run: npm --prefix desktop run build + - name: Build unsigned installer and portable executable + working-directory: desktop + run: >- + npx electron-builder --win nsis portable --publish never + --config.win.signAndEditExecutable=false + - uses: actions/upload-artifact@v4 + with: + name: windows-installers + path: desktop/release/*.exe + + pypi: + name: publish · PyPI + if: startsWith(github.ref, 'refs/tags/v') + needs: [python, windows] + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + environment: + name: pypi + url: https://pypi.org/project/argus-skill/ + steps: + - uses: actions/download-artifact@v4 + with: + name: python-dist + path: dist + - uses: pypa/gh-action-pypi-publish@release/v1 + + github: + name: publish · GitHub Release + if: startsWith(github.ref, 'refs/tags/v') + needs: [python, windows] + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/download-artifact@v4 + with: + name: python-dist + path: release-assets + - uses: actions/download-artifact@v4 + with: + name: windows-installers + path: release-assets + - uses: softprops/action-gh-release@v2 + with: + files: release-assets/**/* diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a593ce0e..6305caab 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -60,10 +60,16 @@ env: tests/daemon/test_spawn_helper.py tests/daemon/test_windows_daemon_control.py tests/daemon/test_windows_terminal_process.py + tests/core/test_agent_probe.py + tests/core/test_backend_readiness.py + tests/core/test_cheap_route_models.py tests/maintenance/test_repair_pipeline.py + tests/maintenance/test_doctor_advisor.py tests/test_agent_cli_backend.py tests/test_bootstrap_doctor.py tests/test_doctor.py + tests/test_install_documentation.py + tests/tools/test_setup_readiness.py tests/webapi/test_commands_m1.py tests/webapi/test_server_m0.py tests/webapi/test_workspace_v2.py @@ -126,6 +132,28 @@ jobs: - name: Test portable surface run: python -m pytest -q ${{ env.PORTABLE_TESTS }} + - uses: astral-sh/setup-uv@v5 + if: runner.os == 'macOS' + - name: Smoke macOS uv tool install + if: runner.os == 'macOS' + run: | + export UV_TOOL_DIR="$RUNNER_TEMP/argus-tools" + export UV_TOOL_BIN_DIR="$RUNNER_TEMP/argus-bin" + uv tool install --python 3.12 . + "$UV_TOOL_BIN_DIR/argus-skill" --version + "$UV_TOOL_BIN_DIR/argus" --help + + - name: Smoke Windows direct pip install + if: runner.os == 'Windows' + shell: pwsh + run: | + python -m pip install build + python -m build --wheel + python -m pip uninstall -y argus-skill + python -m pip install --no-deps (Get-ChildItem dist\*.whl).FullName + argus-skill --version + argus --help + # The pairing banner is written to stderr, which on Windows uses the ANSI # code page (cp1252/cp936) whenever output is redirected — not UTF-8. # Printing a QR code there used to raise UnicodeEncodeError and abort diff --git a/README.md b/README.md index 6641b69e..78676da1 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Most agents are optimized for one conversation or one coding turn. Argus is buil | **Four-role runtime** | Manager, Planner, Engineer, and Reviewer have distinct authority and responsibilities. | | **Real tool use** | Agents work through files, terminals, experiments, APIs, and inspectable artifacts. | | **Domain extensibility** | Verticals can define custom stages, tools, evidence requirements, and completion standards. | -| **Multiple backends** | Run with GitHub Copilot CLI, Pi, Codex CLI, Claude Code, OpenCode, Grok Build, Qoder, or DeepSeek Harness. | +| **Multiple backends** | Run with GitHub Copilot CLI, Pi, Codex CLI, Claude Code, OpenCode, or Grok Build. | ## Runtime model @@ -49,75 +49,119 @@ Most agents are optimized for one conversation or one coding turn. Argus is buil A project can stop, resume, survive a runtime replacement, and continue from its latest verified position. -**Native backends:** `GitHub Copilot CLI` · `Pi` · `OpenAI Codex CLI` · `Claude Code` · `OpenCode` · `Grok Build` · `Qoder` · `DeepSeek Harness` +**Native backends:** `GitHub Copilot CLI` · `Pi` · `OpenAI Codex CLI` · `Claude Code` · `OpenCode` · `Grok Build` **Harbor evaluation:** Harbor Framework can invoke the complete bounded Argus Manager/Planner/Engineer/Reviewer runtime as a custom agent. See **[Harbor integration](docs/harbor.md)**. +**Coding-agent plugin:** use the packaged MCP bridge and host-specific Skills +without changing the core runtime. See **[Plugin quick start](docs/plugin.md)**. + ## Quick Install -### Requirements +Choose the section for your operating system. Do not mix commands between +platforms. -- Python 3.11+ -- Node.js 22+ -- One supported Agent CLI installed and authenticated through its official login flow +All platforms need: -### 🚀 Agent-assisted installation (recommended) +- one supported Agent CLI already installed; +- that CLI authenticated through its official login flow; +- Node.js 22+ for the terminal cockpit. -> [!TIP] -> **Skip the manual installation steps.** Send the complete prompt below to -> Codex CLI, Claude Code, GitHub Copilot CLI, Pi, OpenCode, or Grok Build. The agent will -> inspect the environment, install Argus, connect the current backend, and -> verify it with `argus --doctor`. +The public preview is installed directly from the current GitHub archive until +the first PyPI release is published. -```text -Read https://github.com/lbx154/Argus/blob/main/docs/agent-install.md and follow -it to install and configure Argus on my machine. Prefer the Agent CLI currently -running this conversation as the Argus backend. Perform the environment checks, -installation, configuration, and argus --doctor verification. Before account -login, sudo, global configuration changes, or any other action requiring human -authorization, explain why and wait for my approval. Never ask me to paste a -password, access token, or API key into the conversation. +### Windows 10/11 — direct pip install, no virtual environment + +Install Python 3.11+ from [python.org](https://www.python.org/downloads/windows/) +and select **Add Python to PATH** in the installer. Then open a new PowerShell: + +```powershell +py -m pip install --upgrade pip +py -m pip install --upgrade "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" +$Scripts = py -c "import sysconfig; print(sysconfig.get_path('scripts'))" +$env:Path = "$Scripts;$env:Path" +argus --setup +argus doctor --deep --advisor auto +argus ``` -The agent will follow the **[installation execution contract](docs/agent-install.md)**. +`argus --setup` does not report success after only finding the CLI. It performs +backend/auth checks and one real tool-restricted Agent turn. If `argus` is not +found in a later PowerShell window, confirm that the Python installer's Scripts +directory is on PATH; the `$Scripts` lines above make it available immediately +in the current window. -### Install +Until the first versioned PyPI release, refresh the moving GitHub preview with: -```bash -git clone https://github.com/lbx154/Argus.git -cd Argus +```powershell +py -m pip install --upgrade --force-reinstall "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" ``` -Linux and macOS: +Windows currently supports installation, Manager chat, pairing, Web/TUI, and +terminal-scoped daemon control. Detached subagents remain a POSIX/WSL2 feature; +native Windows fails explicitly instead of claiming a background task started. +The Windows Desktop installer is documented separately in +**[Windows Desktop](docs/windows-desktop.md)**. + +### macOS — managed command install, no manual virtual environment + +Install [uv](https://docs.astral.sh/uv/getting-started/installation/), then: ```bash -python3 -m venv .venv -. .venv/bin/activate -python -m pip install --upgrade pip -python -m pip install -e . +uv tool install --python 3.12 \ + "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" +argus --setup +argus doctor --deep --advisor auto +argus ``` -Windows PowerShell: +Upgrade later with: -```powershell -python -m venv .venv -.\.venv\Scripts\python.exe -m pip install --upgrade pip -.\.venv\Scripts\python.exe -m pip install -e . +```bash +uv tool install --force --python 3.12 \ + "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" ``` -The Windows commands call the virtual environment directly, so activation is -not required. Before using the shorter `argus` commands below, either run -`.\.venv\Scripts\Activate.ps1` or invoke `.\.venv\Scripts\argus.exe` directly. +### Linux — isolated source venv -### Connect a backend +Linux servers keep an explicit venv so Python, CUDA tooling, and long-running +process ownership remain reproducible: ```bash -argus --setup +git clone https://github.com/lbx154/Argus.git +cd Argus +python3 -m venv .venv +.venv/bin/python -m pip install --upgrade pip +.venv/bin/python -m pip install -e . +.venv/bin/argus --setup +.venv/bin/argus doctor --deep --advisor auto +.venv/bin/argus ``` -Use `copilot`, `pi`, `codex`, `claude`, `opencode`, `grok`, `qoder`, or `dsh` for `--backend`. +### Agent-assisted installation + +Send this prompt to an already installed Code Agent: + +```text +Read https://github.com/lbx154/Argus/blob/main/docs/agent-install.md and install +Argus using the section for this operating system. Prefer the Agent CLI running +this conversation as the Argus backend. Do not create a venv on Windows or +macOS; keep the documented venv on Linux. Run setup through its real Agent-turn +smoke test, then run `argus doctor --deep --advisor auto`. Before account login, +sudo, or global configuration changes, explain why and wait for approval. Never +ask me to paste a password, token, or API key into the conversation. +``` + +The agent follows the **[installation execution contract](docs/agent-install.md)**. + +### Backend notes + +Use `copilot`, `pi`, `codex`, `claude`, `opencode`, `grok`, `qoder`, or `dsh` +for `--backend`. Setup adopts a model from the selected CLI's own catalog when +one is available; otherwise it keeps that CLI's native default. It does not +inject an OpenAI model id into Claude Code, Pi, OpenCode, Grok, Qoder, or dsh. If you have an OpenAI-compatible endpoint, setup installs Pi when needed and configures it directly: @@ -138,6 +182,7 @@ argus --setup --non-interactive --backend grok `XAI_API_KEY` is also supported for headless environments. Argus uses Grok's native headless JSON stream, resumes sessions by ID, and keeps role prompts out of process arguments. +In PowerShell, use a backtick instead of `\` for line continuation. #### Choosing a provider on the multi-provider CLIs @@ -163,6 +208,10 @@ restarts once set there. configured provider is not one you hold a key for, or when a model id you selected is not on offer. +Use `argus --config-help` to inspect the effective model and its source for each +role. Catalog listing is backend-specific, for example `pi --list-models`, +`opencode auth list`, or `qodercli --list-models`. + Full details, including the breaking change for Pi deployments that relied on the old implicit `github-copilot` prefix: **[backend providers](docs/backend-providers.md)**. @@ -177,10 +226,6 @@ argus --doctor # verify the installation argus --status # inspect the current runtime ``` -### Codex / Claude Code plugin - -One-command installation and usage: [docs/plugin.md](docs/plugin.md). - ## Interfaces ### Windows Desktop @@ -219,8 +264,7 @@ and Simplified Chinese. Use the language button in the session sidebar to switch; the selection is saved in the browser. ```bash -argus --web --no-open # start without opening a browser -argus --web --port 8800 # use another port +argus --web --web-port 8800 # use another port ``` #### Remote server over SSH @@ -228,7 +272,7 @@ argus --web --port 8800 # use another port On the server: ```bash -argus --web --no-open +argus --web ``` On your computer: @@ -246,7 +290,7 @@ A non-loopback bind is always protected by a bearer token. If `ARGUS_SKILL_WEB_TOKEN` is set it is used; otherwise one is minted for that run: ```bash -argus --web --host 0.0.0.0 --port 8799 --no-open +argus --web --web-host 0.0.0.0 --web-port 8799 ``` This prints the address other devices can reach, the token, and a QR code. @@ -279,7 +323,7 @@ export ARGUS_SKILL_TELEGRAM_BOT_TOKEN=... ARGUS_SKILL_TELEGRAM_CHAT_ID=... Both bots serve the same commands (`/add`, `/status`, `/nudge`, `/backlog`, …). The web UI is installable to the home screen and pairs by scanning the QR code -printed by `argus --web --host 0.0.0.0`. +printed by `argus --web --web-host 0.0.0.0`. See **[docs/mobile.md](docs/mobile.md)** for the full setup. @@ -287,6 +331,18 @@ See **[docs/mobile.md](docs/mobile.md)** for the full setup. Argus is designed to be changed, not merely configured. +### Autonomy level + +The default `pragmatic` mode handles recoverable engineering choices—timeouts, failed tests, benchmark sizing, and technical routes—without interrupting you. It asks only for credentials, more spending, irreversible/outward-facing actions, or changes to an operator-owned acceptance boundary. + +```bash +export ARGUS_SKILL_AUTONOMY_MODE=cautious # ask on every explicit question +export ARGUS_SKILL_AUTONOMY_MODE=pragmatic # default: recover technical issues +export ARGUS_SKILL_AUTONOMY_MODE=autonomous # maximize reversible execution +``` + +The Web configuration view and `/config` expose the same setting. + ### Adapt the runtime If you are an agent enthusiast, deploy Argus locally and make the complete loop fit the way you work. Tune role prompts, workflow boundaries, review policy, tools, and operating conventions; connect your own infrastructure; preserve the behavior you care about with tests. @@ -302,31 +358,50 @@ GitHub Copilot, Pi, Codex, Claude Code, OpenCode, Grok Build, OpenClaw, or Herme - **Native Argus backends:** GitHub Copilot CLI, Pi, Codex CLI, Claude Code, OpenCode, Grok Build - **External agent operators:** OpenClaw, Hermes, or any agent that can use a shell or HTTP API +For durable missions, install or adapt the portable +[`argus-runtime-orchestration` Agent Skill](integrations/agent-skills/argus-runtime-orchestration/SKILL.md). +It defines the two-party operator model, the active `Needs you` intervention loop, +host-specific adapters, evidence boundaries, and closeout checks. + Useful entry points: ```bash -argus --doctor +argus doctor argus --status -argus --web --no-open +argus --web ``` The most capable setup is often an Argus instance deliberately adapted to your own ambitious field and way of working. ## Update +Windows: + +```powershell +pip install --upgrade "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" +``` + +macOS: + +```bash +uv tool upgrade argus-skill +``` + +Linux source checkout: + ```bash argus update ``` -The command refuses dirty or detached checkouts, fast-forwards the configured +The Linux source command refuses dirty or detached checkouts, fast-forwards the configured upstream, and refreshes the editable installation when the revision changes. Run `argus` afterward; it detects stale local WebAPI and daemon processes and replaces them at a controlled task boundary. ## WeChat community -Scan the QR code below to join the Argus community. This code is valid through August 20, 2026; if it has expired, open an Issue and ask the maintainers for the latest code. +Scan the QR code below to join the Argus community. The expiry date is printed in the image; if it has expired, open an Issue and ask the maintainers for the latest code.

- Argus WeChat community QR code valid through August 20, 2026 + Argus WeChat community QR code

diff --git a/README.zh-CN.md b/README.zh-CN.md index fb9271b4..7aeb5e6b 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -36,7 +36,7 @@ | **四角色运行时** | Manager、Planner、Engineer 和 Reviewer 分别拥有明确的权威与职责。 | | **真实工具调用** | Agent 直接使用文件、终端、实验、API 和可检查的产物。 | | **领域扩展** | Vertical 可以定义专属阶段、工具、证据要求与完成标准。 | -| **多种 Backend** | 支持 GitHub Copilot CLI、Pi、Codex CLI、Claude Code、OpenCode、Grok Build、Qoder 与 DeepSeek Harness。 | +| **多种 Backend** | 支持 GitHub Copilot CLI、Pi、Codex CLI、Claude Code、OpenCode 与 Grok Build。 | ## 运行模型 @@ -55,75 +55,104 @@ Manager/Planner/Engineer/Reviewer 运行时作为自定义 Agent 直接调用。配置和边界见 **[Harbor 接入说明](docs/harbor.md)**。 +**Code Agent 插件:** 可通过打包的 MCP bridge 和宿主 Skills 使用 Argus,不修改 +核心 runtime。参见 **[插件快速入门](docs/plugin.md)**。 + ## 快速安装 -### 环境要求 +请只使用当前操作系统对应的一组命令,不要混用。 -- Python 3.11+ -- Node.js 22+ -- 至少一个已按官方方式安装并完成登录鉴权的 Agent CLI +所有平台都需要: -### 🚀 Agent 一键接入(推荐) +- 已按官方方式安装的 Agent CLI; +- 该 CLI 已完成官方登录鉴权; +- Node.js 22+(终端 cockpit 需要)。 -> [!TIP] -> **无需手动逐条安装。** 将下面整段提示词发送给 Codex CLI、Claude Code、 -> GitHub Copilot CLI、Pi、OpenCode 或 Grok Build。Agent 会检查环境、安装 Argus、连接当前 -> backend,并运行 `argus --doctor` 验收。 +正式 PyPI 首发前,公共 Preview 直接从 GitHub archive 安装。 -```text -请阅读 https://github.com/lbx154/Argus/blob/main/docs/agent-install.md, -按照文档在我的机器上安装并配置 Argus。优先复用当前 Agent CLI 作为 Argus -backend。请实际执行环境检查、安装、配置和 argus --doctor 验证;遇到需要登录 -账号、sudo、修改全局配置或其他人工授权的步骤时,先向我说明原因并等待确认。 -不要要求我在对话中粘贴密码、访问令牌或 API Key。 +### Windows 10/11:直接 pip 安装,不创建虚拟环境 + +从 [python.org](https://www.python.org/downloads/windows/) 安装 Python 3.11+ +并勾选 **Add Python to PATH**。重新打开 PowerShell 后执行: + +```powershell +py -m pip install --upgrade pip +py -m pip install --upgrade "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" +$Scripts = py -c "import sysconfig; print(sysconfig.get_path('scripts'))" +$env:Path = "$Scripts;$env:Path" +argus --setup +argus doctor --deep --advisor auto +argus ``` -Agent 将遵循 **[安装执行规范](docs/agent-install.md)**。 +`argus --setup` 不会只检查到 CLI 就宣称完成:它会检查 backend/鉴权,并实际执行 +一次禁止工具调用的 Agent turn。上面的 `$Scripts` 命令会让当前 PowerShell 立即找到 +`argus`;如果新窗口仍找不到,再确认 Python 安装器的 Scripts 目录已加入 PATH。 -### 安装 +正式 PyPI 版本发布前,用下面的命令刷新持续更新的 GitHub Preview: -```bash -git clone https://github.com/lbx154/Argus.git -cd Argus +```powershell +py -m pip install --upgrade --force-reinstall "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" ``` -Linux 和 macOS: +Windows 当前支持安装、Manager 对话、配对、Web/TUI 和终端作用域 daemon 控制。 +detached subagent 仍属于 POSIX/WSL2 能力;native Windows 会明确失败,不会伪报任务 +已启动。图形安装见 **[Windows Desktop](docs/windows-desktop.md)**。 + +### macOS:uv tool 管理安装,不手工创建虚拟环境 + +安装 [uv](https://docs.astral.sh/uv/getting-started/installation/) 后执行: ```bash -python3 -m venv .venv -. .venv/bin/activate -python -m pip install --upgrade pip -python -m pip install -e . +uv tool install --python 3.12 \ + "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" +argus --setup +argus doctor --deep --advisor auto +argus ``` -Windows PowerShell: +以后更新: -```powershell -python -m venv .venv -.\.venv\Scripts\python.exe -m pip install --upgrade pip -.\.venv\Scripts\python.exe -m pip install -e . +```bash +uv tool install --force --python 3.12 \ + "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" ``` -Windows 命令直接调用虚拟环境中的 Python,因此无需激活。执行下文较短的 `argus` -命令前,可运行 `.\.venv\Scripts\Activate.ps1`,或直接调用 -`.\.venv\Scripts\argus.exe`。 +### Linux:保留隔离源码 venv -源码安装后可用一条命令更新: +Linux 服务器继续显式使用 venv,保证 Python、CUDA 工具链和长任务进程环境可复现: ```bash -argus update +git clone https://github.com/lbx154/Argus.git +cd Argus +python3 -m venv .venv +.venv/bin/python -m pip install --upgrade pip +.venv/bin/python -m pip install -e . +.venv/bin/argus --setup +.venv/bin/argus doctor --deep --advisor auto +.venv/bin/argus ``` -该命令只会更新干净且已配置 upstream 的分支,使用 fast-forward 拉取,并在版本 -变化时刷新 editable 安装。更新后再次运行 `argus`,即可安全接管旧 WebAPI 和 daemon。 +### Agent 一键接入 -### 连接后端 +把下面整段发送给已安装的 Code Agent: -```bash -argus --setup +```text +请阅读 https://github.com/lbx154/Argus/blob/main/docs/agent-install.md, +使用当前操作系统对应的方式安装 Argus。优先复用当前 Agent CLI 作为 backend。 +Windows 和 macOS 不创建手工 venv;Linux 保留文档中的 venv。必须让 setup 完成真实 +Agent turn 验收,再运行 argus doctor --deep --advisor auto。需要登录、sudo 或修改 +全局配置时先说明原因并等待确认。不要要求我在对话中粘贴密码、token 或 API Key。 ``` -`--backend` 可使用 `copilot`、`pi`、`codex`、`claude`、`opencode`、`grok`、`qoder` 或 `dsh`。 +Agent 将遵循 **[安装执行规范](docs/agent-install.md)**。 + +### Backend 说明 + +`--backend` 可使用 `copilot`、`pi`、`codex`、`claude`、`opencode`、`grok`、 +`qoder` 或 `dsh`。setup 会优先采用所选 CLI 自己目录中的模型;无法确定时保留 +该 CLI 的原生默认值,不会把 OpenAI 模型 id 注入 Claude Code、Pi、OpenCode、 +Grok、Qoder 或 dsh。 如果已有 OpenAI-compatible URL,setup 会在需要时自动安装 Pi 并完成配置: ```bash @@ -142,6 +171,11 @@ argus --setup --non-interactive --backend grok 无界面环境也可以使用 `XAI_API_KEY`。Argus 通过 Grok 原生 headless JSON 流运行、按 Session ID 续接,并避免把角色 prompt 放进进程参数。 +PowerShell 多行续行符为反引号,不是 `\`。 + +用 `argus --config-help` 可以查看每个角色最终使用的模型及配置来源。模型目录查询 +命令因 backend 而异,例如 `pi --list-models`、`opencode auth list` 和 +`qodercli --list-models`。 #### 为多 provider 的 CLI 指定 provider @@ -178,10 +212,6 @@ argus --doctor # 检查安装与后端 argus --status # 查看当前运行状态 ``` -### Codex / Claude Code 插件 - -一键安装与使用:[docs/plugin.md](docs/plugin.md)。 - ## 交互界面 ### Windows Desktop @@ -213,8 +243,7 @@ argus --web 首选地址:[http://127.0.0.1:8799](http://127.0.0.1:8799);被占用时会自动顺延。 ```bash -argus --web --no-open # 只启动,不打开浏览器 -argus --web --port 8800 # 使用其他端口 +argus --web --web-port 8800 # 使用其他端口 ``` #### 通过 SSH 使用远程服务器 @@ -222,7 +251,7 @@ argus --web --port 8800 # 使用其他端口 在服务器上: ```bash -argus --web --no-open +argus --web ``` 在自己的电脑上: @@ -239,7 +268,7 @@ ssh -L 8799:127.0.0.1:8799 user@server 非本机监听始终受 Bearer Token 保护:设置了 `ARGUS_SKILL_WEB_TOKEN` 就用它,没设置则为本次运行自动生成一个。 ```bash -argus --web --host 0.0.0.0 --port 8799 --no-open +argus --web --web-host 0.0.0.0 --web-port 8799 ``` 命令会打印其他设备可达的地址、Token,以及一个二维码。想让 Token 在重启后保持不变,自己设置即可: @@ -267,7 +296,7 @@ export ARGUS_SKILL_ENABLE_TELEGRAM=1 export ARGUS_SKILL_TELEGRAM_BOT_TOKEN=... ARGUS_SKILL_TELEGRAM_CHAT_ID=... ``` -两个机器人提供完全相同的命令(`/add`、`/status`、`/nudge`、`/backlog` 等)。网页版可以添加到手机主屏幕,扫描 `argus --web --host 0.0.0.0` 打印的二维码即可完成配对。 +两个机器人提供完全相同的命令(`/add`、`/status`、`/nudge`、`/backlog` 等)。网页版可以添加到手机主屏幕,扫描 `argus --web --web-host 0.0.0.0` 打印的二维码即可完成配对。 完整配置见 **[docs/mobile.md](docs/mobile.md)**。 @@ -275,6 +304,23 @@ export ARGUS_SKILL_TELEGRAM_BOT_TOKEN=... ARGUS_SKILL_TELEGRAM_CHAT_ID=... Argus 的设计目标不是“只能配置”,而是“可以被你改变”。 +### 自主程度 + +默认 `pragmatic` 模式会自行处理超时、失败测试、benchmark 规模和技术路线等可恢复问题;只有凭证、预算增加、不可逆操作、对外发布或改变你定义的验收边界时才会询问。 + +```bash +# 谨慎:每个明确问题都询问 +export ARGUS_SKILL_AUTONOMY_MODE=cautious + +# 务实(默认):技术问题自动恢复,权威边界询问 +export ARGUS_SKILL_AUTONOMY_MODE=pragmatic + +# 主动:最大化可逆技术执行,仍保留凭证/金钱/不可逆边界 +export ARGUS_SKILL_AUTONOMY_MODE=autonomous +``` + +也可以从 Web 配置页或 `/config` 修改该选项。 + ### 改造整个运行时 如果你是 Agent 的狂热爱好者,我们推荐你在本地部署 Argus,让完整闭环真正适合自己的工作方式。你可以调整角色 Prompt、工作流边界、审查策略、工具与运行约定,对接已有基础设施,并用测试固定自己重视的行为。 @@ -290,31 +336,48 @@ Vertical 可以为你的领域提供专属阶段、Skill、数据集、工具、 - **Argus 原生 Backend:** GitHub Copilot CLI、Pi、Codex CLI、Claude Code、OpenCode、Grok Build - **外层 Agent:** OpenClaw、Hermes,或任何能够使用 Shell / HTTP API 的 Agent +如需运行持久任务,可安装或适配可移植的 +[`argus-runtime-orchestration` Agent Skill](integrations/agent-skills/argus-runtime-orchestration/SKILL.md)。 +该 Skill 明确定义了双方操作模型、主动检查 `Needs you` 的干预闭环、 +各宿主适配器、证据边界与收尾检查。 + 常用入口: ```bash -argus --doctor +argus doctor argus --status -argus --web --no-open +argus --web ``` 最强大的 Argus 往往是一套被你认真改造成更适合自己伟大领域与工作方式的 Argus。 ## 更新 +Windows: + +```powershell +pip install --upgrade "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" +``` + +macOS: + ```bash -cd Argus -git pull --ff-only -.venv/bin/python -m pip install -e . -.venv/bin/argus +uv tool upgrade argus-skill +``` + +Linux 源码 checkout: + +```bash +argus update ``` -Argus 会识别过期的本地 WebAPI 与 daemon,并在受控任务边界完成替换。 +Linux 源码更新会拒绝 dirty/detached checkout,只做 fast-forward 并刷新 editable +安装。更新后 Argus 会识别过期的本地 WebAPI 与 daemon,并在受控任务边界完成替换。 ## 微信群 -扫码加入 Argus 交流群。该二维码有效期至 2026 年 8 月 20 日;如果已经过期,请在 Issue 中联系维护者更新。 +扫码加入 Argus 交流群。二维码有效期以图片中的提示为准;如果已经过期,请在 Issue 中联系维护者更新。

- Argus 微信交流群二维码,有效期至 2026 年 8 月 20 日 + Argus 微信交流群二维码

diff --git a/argus_skill/adapters/agent_cli_backend/_core.py b/argus_skill/adapters/agent_cli_backend/_core.py index e5349ade..7f9e4c89 100644 --- a/argus_skill/adapters/agent_cli_backend/_core.py +++ b/argus_skill/adapters/agent_cli_backend/_core.py @@ -382,6 +382,10 @@ def _translate_options(self, options: RunnerOptions): ) if "sandbox_mode" in option_fields: kwargs["sandbox_mode"] = getattr(options, "sandbox_mode", None) + if "force_safe_mode" in option_fields: + kwargs["force_safe_mode"] = getattr(options, "force_safe_mode", False) + if "disable_tools" in option_fields: + kwargs["disable_tools"] = getattr(options, "disable_tools", False) if "isolate_workdir" in getattr(cli_cls, "__dataclass_fields__", {}): kwargs["isolate_workdir"] = getattr(options, "isolate_workdir", False) # Forward the live assistant-block callback the same guarded way — only diff --git a/argus_skill/agent_cli/_prompt_delivery.py b/argus_skill/agent_cli/_prompt_delivery.py index 5eabf39f..ed6fdfb8 100644 --- a/argus_skill/agent_cli/_prompt_delivery.py +++ b/argus_skill/agent_cli/_prompt_delivery.py @@ -10,6 +10,7 @@ from ..core.sandbox import sandboxed_child_env from ._sandbox_commands import ( _OPENCODE_FULL_ACCESS_AGENT, + _OPENCODE_NO_TOOLS_AGENT, _OPENCODE_READ_ONLY_AGENT, ) from .copilot_home import apply_copilot_home @@ -92,6 +93,14 @@ def _opencode_read_only_env() -> dict[str, str]: ) +def _opencode_no_tools_env() -> dict[str, str]: + return _opencode_agent_env( + agent_name=_OPENCODE_NO_TOOLS_AGENT, + description="Argus tool-free diagnostic agent.", + permission={"*": "deny"}, + ) + + def _opencode_full_access_env() -> dict[str, str]: """Inject a noninteractive OpenCode agent with explicit tool permission.""" return _opencode_agent_env( @@ -204,9 +213,7 @@ def _prepare_prompt_delivery( return prepared, payload, None executable = str(prepared[0] if prepared else "").casefold() if executable.endswith((".cmd", ".bat")): - raise RuntimeError( - "Claude requires a native executable for safe prompt delivery" - ) + return prepared, prompt, None max_bytes = 24_000 if os.name == "nt" else 100_000 if len(prompt.encode("utf-8")) > max_bytes: raise RuntimeError( @@ -241,6 +248,8 @@ def _child_env(self, options) -> dict[str, str] | None: dict(os.environ), options, self.agent_bin ) return None + if self.backend == BACKEND_OPENCODE and options.disable_tools: + return _opencode_no_tools_env() if ( self.backend == BACKEND_OPENCODE and options.sandbox_mode == "read-only" diff --git a/argus_skill/agent_cli/_sandbox_commands.py b/argus_skill/agent_cli/_sandbox_commands.py index f5515390..beb9600a 100644 --- a/argus_skill/agent_cli/_sandbox_commands.py +++ b/argus_skill/agent_cli/_sandbox_commands.py @@ -34,6 +34,7 @@ # via ``--agent``). _OPENCODE_READ_ONLY_AGENT = "argus-read-only" _OPENCODE_FULL_ACCESS_AGENT = "argus-full-access" +_OPENCODE_NO_TOOLS_AGENT = "argus-no-tools" def _pi_session_dir() -> str: @@ -266,7 +267,7 @@ def _apply_sandbox_policy(self, options): """Apply the operator's single global access policy.""" import dataclasses - safe_mode = ( + safe_mode = options.force_safe_mode or ( os.environ.get("ARGUS_SKILL_SAFE_MODE", "0").strip().lower() in {"1", "true", "yes", "on"} ) @@ -409,7 +410,9 @@ def _build_claude_command( ["--reasoning-effort" if is_qoder else "--effort", options.reasoning_effort] ) - if options.sandbox_mode == "read-only": + if options.disable_tools: + command.extend(["--tools", ""]) + elif options.sandbox_mode == "read-only": command.extend(["--tools", "Read,Glob,Grep"]) elif options.dangerous_yolo: command.extend([ @@ -477,7 +480,9 @@ def _build_copilot_command( "--no-custom-instructions", "--disable-builtin-mcps", ]) - if options.sandbox_mode == "read-only": + if options.disable_tools: + command.extend(["--available-tools=", "--deny-tool=*"]) + elif options.sandbox_mode == "read-only": command.extend([ "--available-tools", "view,rg,glob", "--allow-tool", "view,rg,glob", @@ -534,7 +539,9 @@ def _build_opencode_command( command.extend(["--variant", options.reasoning_effort]) if options.working_dir: command.extend(["--dir", options.working_dir]) - if options.sandbox_mode == "read-only": + if options.disable_tools: + command.extend(["--agent", _OPENCODE_NO_TOOLS_AGENT]) + elif options.sandbox_mode == "read-only": command.extend(["--agent", _OPENCODE_READ_ONLY_AGENT]) elif options.dangerous_yolo or options.full_auto: command.extend(["--agent", _OPENCODE_FULL_ACCESS_AGENT]) @@ -590,7 +597,9 @@ def _build_pi_command( command.extend(["--model", _pi_model(options.model)]) if options.reasoning_effort: command.extend(["--thinking", options.reasoning_effort]) - if options.sandbox_mode == "read-only": + if options.disable_tools: + command.append("--no-tools") + elif options.sandbox_mode == "read-only": command.extend(["--tools", "read,grep,find,ls"]) merged_extra_args = [*self.default_extra_args] if options.extra_args: @@ -633,7 +642,9 @@ def _build_grok_command( command.extend(["--model", options.model]) if options.reasoning_effort: command.extend(["--reasoning-effort", options.reasoning_effort]) - if options.sandbox_mode == "read-only": + if options.disable_tools: + command.extend(["--tools", ""]) + elif options.sandbox_mode == "read-only": command.extend(["--tools", "read_file,grep,list_dir"]) elif options.dangerous_yolo or options.full_auto: command.append("--yolo") diff --git a/argus_skill/agent_cli/agent_cli_runner.py b/argus_skill/agent_cli/agent_cli_runner.py index d310da72..9a11fe46 100644 --- a/argus_skill/agent_cli/agent_cli_runner.py +++ b/argus_skill/agent_cli/agent_cli_runner.py @@ -63,6 +63,10 @@ class RunnerOptions: # ``--dangerously-bypass-approvals-and-sandbox``. None = legacy behaviour # (dangerous_yolo / full_auto flags), so existing callers are unaffected. sandbox_mode: str | None = None + # Force the requested sandbox policy for this invocation without mutating + # the process-wide ARGUS_SKILL_SAFE_MODE setting. + force_safe_mode: bool = False + disable_tools: bool = False isolate_workdir: bool = False skip_git_repo_check: bool = False # Enable codex's native live web_search tool (``-c web_search="live"``). diff --git a/argus_skill/apps/_runtime_supervisor.py b/argus_skill/apps/_runtime_supervisor.py index a158c6f3..a5cb999c 100644 --- a/argus_skill/apps/_runtime_supervisor.py +++ b/argus_skill/apps/_runtime_supervisor.py @@ -272,15 +272,21 @@ def _invoke_supervisor( open_ended: bool = True, allow_chat_fast_path: bool = False, ) -> tuple[dict[str, Any], str | None]: + from ._runtime_construction import _resolve_role_runner_backend_name + ns = argparse.Namespace() ns.backend = backend + engineer_backend = _resolve_role_runner_backend_name("engineer", backend) + reviewer_backend = _resolve_role_runner_backend_name("reviewer", backend) ns.engineer_model = resolve_role_model( "engineer", role_env="ARGUS_SKILL_ENGINEER_MODEL", + backend=engineer_backend, ) ns.reviewer_model = resolve_role_model( "reviewer", role_env="ARGUS_SKILL_REVIEWER_MODEL", + backend=reviewer_backend, ) ns.engineer_reasoning_effort = resolve_role_reasoning_effort( "ARGUS_SKILL_ENGINEER_REASONING_EFFORT", diff --git a/argus_skill/apps/_self_reply.py b/argus_skill/apps/_self_reply.py index 01f49b0c..d981e1c9 100644 --- a/argus_skill/apps/_self_reply.py +++ b/argus_skill/apps/_self_reply.py @@ -735,8 +735,11 @@ def _emit_block(block: str) -> None: except Exception: # noqa: BLE001 - UI sinks never own the turn pass + effective_backend = getattr(self._args, "backend", None) reply_model = ( - resolve_manager_classify_model() if lean else resolve_manager_reply_model() + resolve_manager_classify_model(backend=effective_backend) + if lean + else resolve_manager_reply_model(backend=effective_backend) ) reply_effort = ( "low" @@ -954,7 +957,9 @@ def _review() -> None: self._backend, prompt=prompt, options=RunnerOptions( - model=resolve_manager_classify_model(), + model=resolve_manager_classify_model( + backend=getattr(self._args, "backend", None), + ), reasoning_effort="low", dangerous_yolo=True, skip_git_repo_check=True, diff --git a/argus_skill/apps/cli/_core.py b/argus_skill/apps/cli/_core.py index 8339a4a6..12a96f9f 100644 --- a/argus_skill/apps/cli/_core.py +++ b/argus_skill/apps/cli/_core.py @@ -576,8 +576,11 @@ def _build_worker_config(args: argparse.Namespace): from ...daemon.life_worker import LifeWorkerConfig bundle = _resolve_project_bundle(args) from ...core.knobs import resolve_role_backend + from .._runtime_construction import _resolve_role_runner_backend_name backend = getattr(args, "backend", None) or resolve_role_backend("") + engineer_backend = _resolve_role_runner_backend_name("engineer", backend) + reviewer_backend = _resolve_role_runner_backend_name("reviewer", backend) from ...core.knobs import ( resolve_budget_caps, resolve_role_model, @@ -599,10 +602,12 @@ def _build_worker_config(args: argparse.Namespace): engineer_model=resolve_role_model( "engineer", role_env="ARGUS_SKILL_ENGINEER_MODEL", + backend=engineer_backend, ), reviewer_model=resolve_role_model( "reviewer", role_env="ARGUS_SKILL_REVIEWER_MODEL", + backend=reviewer_backend, ), engineer_reasoning_effort=resolve_role_reasoning_effort( "ARGUS_SKILL_ENGINEER_REASONING_EFFORT" @@ -783,10 +788,32 @@ def _cmd_doctor(args: argparse.Namespace) -> int: payload["verification"] = bool(getattr(args, "verify", False)) if repair_payload is not None: payload["repair"] = repair_payload + from ...maintenance.advisor import run_doctor_advisor + + advisor = run_doctor_advisor( + report, + requested=str(getattr(args, "advisor", "auto") or "auto"), + ) + payload["advisor"] = advisor if bool(getattr(args, "json", False)): sys.stdout.write(json.dumps(payload, ensure_ascii=False, indent=2) + "\n") else: sys.stdout.write(render_full_report(report) + "\n") + if advisor["status"] == "completed": + sys.stdout.write( + f"\nCode Agent analysis ({advisor['backend']}):\n" + f"{advisor['analysis'].strip()}\n" + ) + elif advisor["status"] == "failed": + sys.stdout.write( + f"\nCode Agent analysis failed ({advisor['backend']}): " + f"{advisor['error']}\n" + ) + elif advisor["status"] == "unavailable": + sys.stdout.write( + "\nCode Agent analysis unavailable: no supported Agent CLI was " + "found on PATH. Deterministic findings above are still valid.\n" + ) if repair_payload is not None: sys.stdout.write( f"safe repair plan {repair_payload['plan_id']}: " diff --git a/argus_skill/apps/cli/_parser.py b/argus_skill/apps/cli/_parser.py index d10d45fd..49c61dc9 100644 --- a/argus_skill/apps/cli/_parser.py +++ b/argus_skill/apps/cli/_parser.py @@ -496,6 +496,12 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="apply registered SAFE repairs, then rerun Doctor", ) + doctor_parser.add_argument( + "--advisor", + choices=("auto", "none", "copilot", "codex", "claude", "opencode", "pi", "grok"), + default="auto", + help="ask an installed Code Agent to interpret sanitized findings (default: auto)", + ) repair_parser = subparsers.add_parser( "repair", help="Plan or apply registered Argus recovery actions", diff --git a/argus_skill/core/agent_probe.py b/argus_skill/core/agent_probe.py new file mode 100644 index 00000000..8a86991c --- /dev/null +++ b/argus_skill/core/agent_probe.py @@ -0,0 +1,118 @@ +"""Read-only Agent CLI probe shared by setup and Doctor.""" +from __future__ import annotations + +import subprocess +import tempfile +from dataclasses import dataclass + + +@dataclass(frozen=True) +class AgentProbeResult: + backend: str + executable: str + ok: bool + output: str = "" + error: str = "" + + +def run_read_only_agent_prompt( + *, + backend: str, + executable: str, + prompt: str, + model: str = "", + run_label: str, + disable_tools: bool = False, +) -> AgentProbeResult: + """Run one real, tool-restricted Agent CLI turn.""" + from ..adapters.agent_cli_backend import AgentCliBackend + from ..agent_cli.runner_backend import normalize_runner_backend + from .models import RunnerOptions + from .run_gateway import run_exec + + if disable_tools and normalize_runner_backend(backend) == "codex": + return AgentProbeResult( + backend=backend, + executable=executable, + ok=False, + error=( + "Codex CLI does not expose a tool-free prompt mode; " + "choose another Doctor advisor" + ), + ) + try: + with tempfile.TemporaryDirectory(prefix="argus-agent-probe-") as workdir: + runner = AgentCliBackend( + backend=backend, + runner_bin=executable, + default_watchdog_soft_idle_seconds=15, + default_watchdog_stalled_idle_seconds=45, + default_watchdog_hard_idle_seconds=90, + ) + result = run_exec( + runner, + prompt=prompt, + resume_thread_id=None, + options=RunnerOptions( + model=model or None, + working_dir=workdir, + sandbox_mode="read-only", + force_safe_mode=True, + disable_tools=disable_tools, + skip_git_repo_check=True, + ), + run_label=run_label, + ) + except (OSError, RuntimeError, ValueError, subprocess.SubprocessError) as exc: + return AgentProbeResult( + backend=backend, + executable=executable, + ok=False, + error=f"{type(exc).__name__}: {exc}", + ) + + output = str(getattr(result, "last_agent_message", "") or "").strip() + if not output: + messages = list(getattr(result, "agent_messages", None) or ()) + output = next( + (str(message).strip() for message in reversed(messages) if str(message).strip()), + "", + ) + exit_code = int(getattr(result, "exit_code", 1) or 0) + fatal_error = str(getattr(result, "fatal_error", "") or "").strip() + turn_completed = getattr(result, "turn_completed", None) + completion_ok = ( + bool(turn_completed) + if turn_completed is not None + else exit_code == 0 and not fatal_error + ) + ok = ( + exit_code == 0 + and completion_ok + and bool(output) + and not bool(getattr(result, "tool_activity_observed", False)) + ) + error = "" + if not ok: + if bool(getattr(result, "tool_activity_observed", False)): + error = "Agent used a tool during the tool-free verification turn" + else: + error = fatal_error + if not error: + stderr = list(getattr(result, "stderr_lines", None) or ()) + error = str(stderr[-1]).strip() if stderr else "" + if not error: + error = ( + f"Agent CLI exited {getattr(result, 'exit_code', 'unknown')} " + "without a completed assistant reply" + ) + return AgentProbeResult( + backend=backend, + executable=executable, + ok=ok, + output=output, + error=error, + ) + + +__all__ = ["AgentProbeResult", "run_read_only_agent_prompt"] diff --git a/argus_skill/core/backend_readiness.py b/argus_skill/core/backend_readiness.py index 8b3aebe3..a832fb47 100644 --- a/argus_skill/core/backend_readiness.py +++ b/argus_skill/core/backend_readiness.py @@ -68,6 +68,26 @@ } +def backend_install_command( + backend: str, + *, + platform_name: str | None = None, +) -> str: + """Return one platform-appropriate official installation hint.""" + platform_name = os.name if platform_name is None else platform_name + if platform_name != "nt": + return _INSTALL_COMMANDS[backend] + windows = { + "copilot": "npm.cmd install -g @github/copilot", + "codex": "npm.cmd install -g @openai/codex@latest", + "claude": "npm.cmd install -g @anthropic-ai/claude-code", + "pi": "npm.cmd install -g --ignore-scripts @earendil-works/pi-coding-agent", + "opencode": "choose a Windows installer at https://opencode.ai/docs/#windows", + "grok": "use the official Windows instructions at https://x.ai/cli", + } + return windows[backend] + + @dataclass(frozen=True) class BackendProfile: backend: str @@ -730,7 +750,7 @@ def check_backend_readiness( "backend executable", f"`{profile.backend}` was not found on PATH", ( - f"{_INSTALL_COMMANDS[profile.backend]}, or set " + f"{backend_install_command(profile.backend)}, or set " "ARGUS_SKILL_RUNNER_BIN" ), ) @@ -755,7 +775,7 @@ def check_backend_readiness( ReadinessProblem( "backend version", f"version check failed: {type(exc).__name__}: {exc}", - f"reinstall with `{_INSTALL_COMMANDS[profile.backend]}`", + f"reinstall with `{backend_install_command(profile.backend)}`", ) ) return report @@ -769,7 +789,7 @@ def check_backend_readiness( f"`{profile.backend} --version` was not usable " f"(exit={version_result.returncode}, output={rendered_version[:160]!r})" ), - f"reinstall with `{_INSTALL_COMMANDS[profile.backend]}`", + f"reinstall with `{backend_install_command(profile.backend)}`", ) ) return report diff --git a/argus_skill/core/knobs.py b/argus_skill/core/knobs.py index 8d117b3d..1d3924ad 100644 --- a/argus_skill/core/knobs.py +++ b/argus_skill/core/knobs.py @@ -83,7 +83,7 @@ class BudgetCaps: # --- team Curator (resident pool + leaderboard strategy) --- Knob("ARGUS_SKILL_CURATOR_BACKEND", "(=LIFE_BACKEND)", "per-role backend override for the team Curator", "backend"), Knob("ARGUS_SKILL_CURATOR_RUNNER_BIN", "(=RUNNER_BIN)", "per-role CLI binary for the team Curator", "backend"), - Knob("ARGUS_SKILL_CURATOR_MODEL", "gpt-5.5", "model for Curator strategy distillation", "models"), + Knob("ARGUS_SKILL_CURATOR_MODEL", "auto", "model for Curator strategy distillation; auto uses the selected backend's default", "models"), Knob("ARGUS_SKILL_CURATOR_REASONING_EFFORT", "high", "Curator distillation reasoning effort", "reasoning"), Knob("ARGUS_SKILL_CURATOR_DISTILL_INTERVAL_S", "1260", "minimum seconds between Curator strategy updates", "team"), # --- resident teammate pool, time-box, and deterministic leaderboard --- @@ -93,12 +93,12 @@ class BudgetCaps: Knob("ARGUS_TEAMMATE_RESULT_FILE", "(unset)", "path the mission writes {metric,mechanism} to → the leaderboard shard", "team"), Knob("ARGUS_LEADERBOARD_LOWER_IS_BETTER", "off (higher-is-better)", "global leaderboard direction; a task's lower_is_better overrides it per target", "team"), # --- models --- - Knob("ARGUS_SKILL_MODEL", "gpt-5.5", "shared default model for roles without a role-specific model", "models", cockpit=True), - Knob("ARGUS_SKILL_MANAGER_MODEL", "gpt-5.5", "model for the Manager", "models", cockpit=True), - Knob("ARGUS_SKILL_ENGINEER_MODEL", "gpt-5.5", "model for the L1 engineer", "models", cockpit=True), - Knob("ARGUS_SKILL_REVIEWER_MODEL", "gpt-5.5", "model for the L2 reviewer", "models", cockpit=True), - Knob("ARGUS_SKILL_SUPERVISOR_MODEL", "gpt-5.5", "model for supervised subagent health decisions", "models", cockpit=True), - Knob("ARGUS_SKILL_PLAN_MODEL", "gpt-5.5", "model for the L4 planner", "models", cockpit=True), + Knob("ARGUS_SKILL_MODEL", "auto", "shared model override; auto uses the selected backend's default", "models", cockpit=True), + Knob("ARGUS_SKILL_MANAGER_MODEL", "auto", "model for the Manager; auto uses the selected backend's default", "models", cockpit=True), + Knob("ARGUS_SKILL_ENGINEER_MODEL", "auto", "model for the L1 engineer; auto uses the selected backend's default", "models", cockpit=True), + Knob("ARGUS_SKILL_REVIEWER_MODEL", "auto", "model for the L2 reviewer; auto uses the selected backend's default", "models", cockpit=True), + Knob("ARGUS_SKILL_SUPERVISOR_MODEL", "auto", "model for supervised subagent health decisions; auto uses the selected backend's default", "models", cockpit=True), + Knob("ARGUS_SKILL_PLAN_MODEL", "auto", "model for the L4 planner; auto uses the selected backend's default", "models", cockpit=True), Knob("ARGUS_SKILL_PLAN_PREVIEW_MODEL", "auto", "interactive /plan model: gpt-5.4-mini on codex/copilot, planner model otherwise; set an id to override", "models"), Knob("ARGUS_SKILL_REWRITE_MODEL", "auto", "interactive prompt rewrite model: gpt-5.5 on codex/copilot, Manager model otherwise; set an id to override", "models"), Knob("ARGUS_SKILL_MANAGER_REPLY_MODEL", "inherit", "operator-facing Manager SELF model; inherit uses the configured Manager/shared route model", "models", cockpit=True), @@ -539,6 +539,7 @@ def resolve_role_model( route: str, *, role_env: str = "", + backend: str | None = None, env: Mapping[str, str] | None = None, ) -> str: """Resolve a role model using Argus's runtime model precedence. @@ -555,20 +556,35 @@ def resolve_role_model( if role_env: explicit = str(env_map.get(role_env, "") or "").strip() if explicit: - return explicit + return "" if explicit.lower() in _AUTO_MODEL_SENTINELS else explicit shared = str(env_map.get("ARGUS_SKILL_MODEL", "") or "").strip() if shared: - return shared + return "" if shared.lower() in _AUTO_MODEL_SENTINELS else shared from .knob_store import read_persisted_knobs persisted = read_persisted_knobs() if role_env: persisted_role = persisted.get(role_env, "").strip() if persisted_role: - return persisted_role + return ( + "" + if persisted_role.lower() in _AUTO_MODEL_SENTINELS + else persisted_role + ) persisted_shared = persisted.get("ARGUS_SKILL_MODEL", "").strip() if persisted_shared: - return persisted_shared + return ( + "" + if persisted_shared.lower() in _AUTO_MODEL_SENTINELS + else persisted_shared + ) + from ..agent_cli.runner_backend import normalize_runner_backend + + backend_name = normalize_runner_backend( + backend or resolve_role_backend(route, env=env_map) + ) + if backend_name not in _OPENAI_CATALOG_BACKENDS: + return "" from ..tools.capability_vault import resolve_route_model return resolve_route_model(route, env_map) @@ -608,7 +624,11 @@ def resolve_role_backend(role: str, *, env: Mapping[str, str] | None = None) -> return "codex" -def resolve_manager_reply_model(*, env: Mapping[str, str] | None = None) -> str: +def resolve_manager_reply_model( + *, + backend: str | None = None, + env: Mapping[str, str] | None = None, +) -> str: """Resolve the high-quality operator-facing Manager SELF model.""" env_map = env if env is not None else os.environ configured = resolve_knob( @@ -621,6 +641,7 @@ def resolve_manager_reply_model(*, env: Mapping[str, str] | None = None) -> str: return resolve_role_model( "manager", role_env="ARGUS_SKILL_MANAGER_MODEL", + backend=backend, env=env_map, ) @@ -643,6 +664,7 @@ def resolve_cheap_route_model( catalog_default: str, role: str, role_env: str, + backend: str | None = None, env: Mapping[str, str] | None = None, ) -> str: """Resolve one cheap control-plane route's model. @@ -669,19 +691,31 @@ def resolve_cheap_route_model( return configured from ..agent_cli.runner_backend import normalize_runner_backend - backend = normalize_runner_backend(resolve_role_backend(role, env=env_map)) - if backend in _OPENAI_CATALOG_BACKENDS: + backend_name = normalize_runner_backend( + backend or resolve_role_backend(role, env=env_map) + ) + if backend_name in _OPENAI_CATALOG_BACKENDS: return catalog_default - return resolve_role_model(role, role_env=role_env, env=env_map) + return resolve_role_model( + role, + role_env=role_env, + backend=backend_name, + env=env_map, + ) -def resolve_manager_classify_model(*, env: Mapping[str, str] | None = None) -> str: +def resolve_manager_classify_model( + *, + backend: str | None = None, + env: Mapping[str, str] | None = None, +) -> str: """Resolve the cheap stateless front-door classification model.""" return resolve_cheap_route_model( knob="ARGUS_SKILL_FRONTDOOR_MODEL", catalog_default="gpt-5.4-mini", role="manager", role_env="ARGUS_SKILL_MANAGER_MODEL", + backend=backend, env=env, ) diff --git a/argus_skill/core/models.py b/argus_skill/core/models.py index 43246272..468dc6a1 100644 --- a/argus_skill/core/models.py +++ b/argus_skill/core/models.py @@ -65,6 +65,12 @@ class RunnerOptions: # inspect project state without granting write access; None preserves each # backend's existing default behavior. sandbox_mode: str | None = None + # Preserve the requested sandbox mode for this call even when the process + # default keeps legacy full-access behavior for normal runtime roles. + force_safe_mode: bool = False + # Remove all model-visible tools for prompts that contain untrusted + # diagnostic text. Unsupported backends must fail closed before spawning. + disable_tools: bool = False # Strong process-level confinement used by daemon self-maintenance. Unlike # backend-native sandbox flags, this applies to every CLI backend and fails # closed when the host cannot provide isolation. diff --git a/argus_skill/daemon/config.py b/argus_skill/daemon/config.py index 1ad38351..93a671cd 100644 --- a/argus_skill/daemon/config.py +++ b/argus_skill/daemon/config.py @@ -92,6 +92,13 @@ def config_from_payload(data: dict[str, Any]) -> LifeWorkerConfig: log_path = str(data.get("log_path") or "") global_root = str(data.get("global_root") or "") project_workdir = str(data.get("project_workdir") or "") + backend = str(data.get("backend") or "codex") + + def _model(name: str, route: str, role_env: str) -> str: + if name in data: + return str(data.get(name) or "") + return resolve_role_model(route, role_env=role_env, backend=backend) + def _number(name: str, default: float) -> float: value = data.get(name) return default if value is None else float(value) @@ -102,14 +109,16 @@ def _number(name: str, default: float) -> float: project_workdir=Path(project_workdir).expanduser() if project_workdir else None, project_fingerprint=str(data.get("project_fingerprint") or ""), project_label=str(data.get("project_label") or ""), - backend=str(data.get("backend") or "codex"), - engineer_model=str( - data.get("engineer_model") - or resolve_role_model("engineer", role_env="ARGUS_SKILL_ENGINEER_MODEL") + backend=backend, + engineer_model=_model( + "engineer_model", + "engineer", + "ARGUS_SKILL_ENGINEER_MODEL", ), - reviewer_model=str( - data.get("reviewer_model") - or resolve_role_model("reviewer", role_env="ARGUS_SKILL_REVIEWER_MODEL") + reviewer_model=_model( + "reviewer_model", + "reviewer", + "ARGUS_SKILL_REVIEWER_MODEL", ), engineer_reasoning_effort=str( data.get("engineer_reasoning_effort") or "xhigh" diff --git a/argus_skill/daemon/life_worker.py b/argus_skill/daemon/life_worker.py index b00a3b82..a831465b 100644 --- a/argus_skill/daemon/life_worker.py +++ b/argus_skill/daemon/life_worker.py @@ -347,7 +347,9 @@ def _curator_distill_fn(self, runner: Any) -> Any: from ..core.knobs import resolve_role_model model = resolve_role_model( - "curator", role_env="ARGUS_SKILL_CURATOR_MODEL" + "curator", + role_env="ARGUS_SKILL_CURATOR_MODEL", + backend=getattr(backend, "backend", self.config.backend), ) effort = os.environ.get( "ARGUS_SKILL_CURATOR_REASONING_EFFORT", "high" @@ -382,7 +384,11 @@ def _team_completion_summary_fn(self, runner: Any) -> Any: return None from ..core.knobs import resolve_role_model - model = resolve_role_model("manager", role_env="ARGUS_SKILL_MODEL") + model = resolve_role_model( + "manager", + role_env="ARGUS_SKILL_MODEL", + backend=getattr(backend, "backend", self.config.backend), + ) workdir = str(self.config.project_workdir) if self.config.project_workdir else None def _summarize(prompt: str) -> str: diff --git a/argus_skill/maintenance/advisor.py b/argus_skill/maintenance/advisor.py new file mode 100644 index 00000000..9827e752 --- /dev/null +++ b/argus_skill/maintenance/advisor.py @@ -0,0 +1,137 @@ +"""Code-Agent interpretation of sanitized Doctor findings.""" +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any + +from .models import DoctorReport + +_SUPPORTED_ADVISORS = ( + "copilot", + "codex", + "claude", + "opencode", + "pi", + "grok", +) + + +def _resolve_advisor(requested: str) -> tuple[str, str] | None: + from ..agent_cli.runner_backend import ( + normalize_runner_backend, + resolve_runner_bin, + ) + from ..core.knobs import resolve_role_backend, resolve_runner_bin_setting + + normalized = str(requested or "auto").strip().lower() + if normalized == "none": + return None + if normalized != "auto" and normalized not in _SUPPORTED_ADVISORS: + raise ValueError(f"unsupported Doctor advisor: {requested}") + configured = normalize_runner_backend(resolve_role_backend("manager")) + candidates = ( + (normalized,) + if normalized != "auto" + else tuple( + item + for item in ( + configured, + *[candidate for candidate in _SUPPORTED_ADVISORS if candidate != configured], + ) + if item != "codex" + ) + ) + configured_bin = resolve_runner_bin_setting("manager") + for backend in candidates: + executable = resolve_runner_bin( + backend, + configured_bin if backend == configured else None, + ) + if executable: + return backend, executable + return None + + +def _advisor_prompt(report: DoctorReport) -> str: + from ..core.paths import global_root + from ..core.secret_guard import known_secret_values, redact_secrets_text + + findings = [ + { + "code": item.code, + "scope": item.scope, + "severity": item.severity, + "ok": item.ok, + "status": item.status, + "detail": item.detail, + "recommendation": item.recommendation, + } + for item in report.findings + ] + payload = json.dumps(findings, ensure_ascii=False, indent=2) + private_roots = ( + (str(global_root()), ""), + (str(Path.home()), "~"), + ) + for root, replacement in sorted(private_roots, key=lambda item: len(item[0]), reverse=True): + if root and root != "/": + payload = payload.replace(root, replacement) + payload = redact_secrets_text(payload, known_values=known_secret_values()) + return ( + "You are the read-only Argus Doctor advisor. Analyze only the sanitized " + "deterministic findings below. Do not use tools, modify files, inspect " + "credentials, or invent missing facts. Give: (1) root cause in plain " + "language, (2) the smallest exact commands/checks to run next for this OS, " + "(3) what success looks like. Distinguish blocking errors from optional " + "components. Keep the answer concise.\n\n" + f"FINDINGS:\n{payload}" + ) + + +def run_doctor_advisor( + report: DoctorReport, + *, + requested: str = "auto", +) -> dict[str, Any]: + """Ask an installed Code Agent to interpret deterministic Doctor evidence.""" + selection = _resolve_advisor(requested) + if selection is None: + status = "disabled" if str(requested).strip().lower() == "none" else "unavailable" + return { + "status": status, + "backend": "", + "executable": "", + "analysis": "", + "error": ( + "" + if status == "disabled" + else "no supported Agent CLI was found on PATH" + ), + } + backend, executable = selection + from ..core.agent_probe import run_read_only_agent_prompt + from ..core.knobs import resolve_role_model + + probe = run_read_only_agent_prompt( + backend=backend, + executable=executable, + model=resolve_role_model( + "manager", + role_env="ARGUS_SKILL_MANAGER_MODEL", + backend=backend, + ), + run_label="doctor-advisor", + prompt=_advisor_prompt(report), + disable_tools=True, + ) + return { + "status": "completed" if probe.ok else "failed", + "backend": backend, + "executable": executable, + "analysis": probe.output if probe.ok else "", + "error": probe.error if not probe.ok else "", + } + + +__all__ = ["run_doctor_advisor"] diff --git a/argus_skill/maintenance/doctor.py b/argus_skill/maintenance/doctor.py index 036bd899..78439541 100644 --- a/argus_skill/maintenance/doctor.py +++ b/argus_skill/maintenance/doctor.py @@ -200,6 +200,15 @@ def _runtime_findings(context: DoctorContext) -> list[DoctorFinding]: recommendation="use Python 3.11+ and reinstall Argus into the intended environment", evidence={"executable": str(python_path), "version": platform.python_version()}, )] + if context.install_mode == "frozen" or getattr(sys, "frozen", False): + findings.append(_finding( + "ARGUS-NODE-001", + "cli", + True, + "bundled_runtime", + "Node.js is bundled or not required by the frozen Desktop runtime", + )) + return findings node_ok, node_bin, node_detail = _command_version("node") match = re.search(r"v?(\d+)(?:\.(\d+))?", node_detail) node_version = ( @@ -244,7 +253,7 @@ def _desktop_finding(context: DoctorContext) -> DoctorFinding: "ARGUS-DESKTOP-001", "desktop", ready, "electron_ready" if ready else "electron_binary_missing", "Electron development runtime is installed" if ready else "Electron package exists without an installed runtime binary", - severity="error", actions=("install_electron_binary",), + severity="warning", actions=("install_electron_binary",), recommendation="run the registered Electron install action from desktop/", evidence={"desktop": str(desktop)}, ) diff --git a/argus_skill/manager/_front_door_ops.py b/argus_skill/manager/_front_door_ops.py index a03bb5cd..ffeb9b36 100644 --- a/argus_skill/manager/_front_door_ops.py +++ b/argus_skill/manager/_front_door_ops.py @@ -64,7 +64,9 @@ def run_exec(prompt: str) -> Any: # noqa: ANN401 _backend, prompt=prompt, options=RunnerOptions( - model=resolve_manager_classify_model(), + model=resolve_manager_classify_model( + backend=getattr(_backend, "backend", None), + ), reasoning_effort=_effort, skip_git_repo_check=True, ), diff --git a/argus_skill/manager/front_door.py b/argus_skill/manager/front_door.py index b287926a..26993149 100644 --- a/argus_skill/manager/front_door.py +++ b/argus_skill/manager/front_door.py @@ -169,15 +169,28 @@ def _ensure_manager_runner(chat_state: dict[str, Any], mem: Any) -> Any: if cached is not None: chat_state.pop("manager_runner", None) chat_state.pop("manager_runner_workdir", None) + from ..apps._runtime_construction import _resolve_role_runner_backend_name + + runner_backend = backend or "codex" + engineer_backend = _resolve_role_runner_backend_name( + "engineer", + runner_backend, + ) + reviewer_backend = _resolve_role_runner_backend_name( + "reviewer", + runner_backend, + ) ns = argparse.Namespace( - backend=backend or "codex", + backend=runner_backend, engineer_model=resolve_role_model( "engineer", role_env="ARGUS_SKILL_ENGINEER_MODEL", + backend=engineer_backend, ), reviewer_model=resolve_role_model( "reviewer", role_env="ARGUS_SKILL_REVIEWER_MODEL", + backend=reviewer_backend, ), engineer_reasoning_effort=os.environ.get( "ARGUS_SKILL_ENGINEER_REASONING_EFFORT", "xhigh" diff --git a/argus_skill/manager/skill_tidy.py b/argus_skill/manager/skill_tidy.py index 72917ba8..92d4615a 100644 --- a/argus_skill/manager/skill_tidy.py +++ b/argus_skill/manager/skill_tidy.py @@ -224,7 +224,9 @@ def propagate_after_mission( mission_result=mission_result, ), options=RunnerOptions( - model=resolve_manager_classify_model(), + model=resolve_manager_classify_model( + backend=getattr(backend, "backend", None), + ), reasoning_effort="low", dangerous_yolo=True, skip_git_repo_check=True, diff --git a/argus_skill/release_manifest.json b/argus_skill/release_manifest.json index fd744b8c..70a8b63a 100644 --- a/argus_skill/release_manifest.json +++ b/argus_skill/release_manifest.json @@ -1,6 +1,6 @@ { "package_version": "0.1.1", - "release_id": "0.1.1+16cbbf8491922893", + "release_id": "0.1.1+09c63c9dbf5b63f3", "schema_version": 1, - "source_digest": "16cbbf8491922893bf1552882ad288342d84b865d0f7644544e4a4223e2d6413" + "source_digest": "09c63c9dbf5b63f34a4c465b7875a2e662cdcd92a5279915db11e73e587b4eaa" } diff --git a/argus_skill/tools/setup.py b/argus_skill/tools/setup.py index f7235e30..9529aba1 100644 --- a/argus_skill/tools/setup.py +++ b/argus_skill/tools/setup.py @@ -20,6 +20,7 @@ SETUP_EXIT_NOT_READY, SETUP_EXIT_PERSISTENCE, SETUP_EXIT_USAGE, + backend_install_command, check_backend_readiness, default_model_for_backend, format_backend_readiness, @@ -94,18 +95,26 @@ def _prompt(label: str, default: str = "", secret: bool = False) -> str: "qoder", "dsh", ) -_BACKEND_INSTALL_COMMANDS = { - "copilot": "npm install -g @github/copilot", - "codex": "npm install -g @openai/codex@latest", - "claude": "npm install -g @anthropic-ai/claude-code", - "opencode": "curl -fsSL https://opencode.ai/install | bash", - "pi": "npm install -g --ignore-scripts @earendil-works/pi-coding-agent", - "grok": "curl -fsSL https://x.ai/cli/install.sh | bash", - "qoder": "npm install -g @qoder-ai/qodercli", - "dsh": "npm install -g @deepseek-ai/dsh", +_BACKEND_LOGIN_COMMANDS = { + "copilot": "copilot login", + "codex": "codex login", + "claude": "run `claude` and complete `/login`", + "opencode": "opencode auth login", + "pi": "run `pi` and complete `/login`", + "grok": "grok login", + "qoder": "qodercli login", + "dsh": "configure DEEPSEEK_API_KEY for dsh", } +def _backend_install_hint( + backend: str, + *, + platform_name: str | None = None, +) -> str: + return backend_install_command(backend, platform_name=platform_name) + + def _install_pi_cli() -> bool: npm = shutil.which("npm") if npm is None: @@ -151,12 +160,28 @@ def _configured_runner_backend() -> str: return "" -def _configure_runner_backend(requested: str | None = None) -> str | None: - """Select the agent CLI used by every role without mutating global config.""" +def _resolve_setup_runner_bin( + backend: str, + *, + explicit_selection: bool = False, +) -> str | None: from ..agent_cli.runner_backend import resolve_runner_bin + from ..core.knobs import resolve_runner_bin_setting + + configured_backend = _configured_runner_backend() + configured_bin = resolve_runner_bin_setting() + explicit_bin = str(os.environ.get("ARGUS_SKILL_RUNNER_BIN") or "").strip() + if explicit_selection and explicit_bin: + return resolve_runner_bin(backend, explicit_bin) + if backend == configured_backend and configured_bin: + return resolve_runner_bin(backend, configured_bin) + return resolve_runner_bin(backend) + +def _configure_runner_backend(requested: str | None = None) -> str | None: + """Select the agent CLI used by every role without mutating global config.""" available = [ - name for name in _SUPPORTED_AGENT_BACKENDS if resolve_runner_bin(name) + name for name in _SUPPORTED_AGENT_BACKENDS if _resolve_setup_runner_bin(name) ] configured = _configured_runner_backend() if configured and configured in available: @@ -183,12 +208,12 @@ def _configure_runner_backend(requested: str | None = None) -> str | None: print() return None - executable = resolve_runner_bin(selected) + executable = _resolve_setup_runner_bin(selected, explicit_selection=True) if executable is None and selected == "pi" and _install_pi_cli(): - executable = resolve_runner_bin(selected) + executable = _resolve_setup_runner_bin(selected, explicit_selection=True) if executable is None: print(_yellow(f" `{selected}` CLI is not installed.")) - print(_dim(f" Install it with: {_BACKEND_INSTALL_COMMANDS[selected]}")) + print(_dim(f" Install it with: {_backend_install_hint(selected)}")) if selected == "copilot": print(_dim(" Then authenticate with: copilot login")) elif selected == "opencode": @@ -249,6 +274,68 @@ def _configure_auth_mode(backend: str, requested: str | None = None) -> str | No return normalized +def _verify_setup_smoke( + backend: str, + *, + model: str = "", +) -> bool: + """Prove that Argus can complete one real turn on the selected backend.""" + from ..core.agent_probe import run_read_only_agent_prompt + + executable = _resolve_setup_runner_bin(backend, explicit_selection=True) + if executable is None: + print(_yellow(" Setup failed at the end-to-end smoke test.")) + print(f" Backend: {backend}") + print(" Reason: the selected Agent CLI disappeared from PATH") + return False + + print(_bold(" Step 2: End-to-end smoke test")) + print(_dim(" Argus requires one read-only reply with no tool activity.")) + probe = run_read_only_agent_prompt( + backend=backend, + executable=executable, + model=model, + run_label="setup-smoke", + prompt=( + "This is an Argus setup smoke test. Do not use tools. " + "Reply with exactly: ARGUS_SETUP_OK" + ), + ) + if probe.ok and probe.output.strip().rstrip(".") == "ARGUS_SETUP_OK": + print(f" {_green('✓')} Real Agent turn completed") + print() + return True + + print(_yellow(" Setup failed at Step 2: real Agent turn")) + print(f" Backend: {backend}") + print(f" Executable: {executable}") + if probe.error: + print(f" Error: {probe.error}") + elif probe.output: + print(f" Unexpected reply: {probe.output[:240]}") + print(" Next:") + print(f" 1. Authenticate with: {_BACKEND_LOGIN_COMMANDS[backend]}") + print(" 2. Run: argus doctor --deep --advisor auto") + print(" 3. Re-run: argus --setup") + print() + return False + + +def _setup_smoke_model( + backend: str, + pi_config: tuple[str, Path] | None, +) -> str: + if pi_config is not None: + return pi_config[0] + from ..core.knobs import resolve_role_model + + return resolve_role_model( + "manager", + role_env="ARGUS_SKILL_MANAGER_MODEL", + backend=backend, + ) + + def _pi_models_path() -> Path: return Path.home() / ".pi" / "agent" / "models.json" @@ -367,6 +454,7 @@ def _run_noninteractive_setup( report = check_backend_readiness( selected, mode, + runner_bin=_resolve_setup_runner_bin(selected, explicit_selection=True), probe_auth=mode == AUTH_MODE_SUBSCRIPTION, probe_vault=mode == AUTH_MODE_MODEL_API, allow_prerelease=allow_prerelease, @@ -376,6 +464,9 @@ def _run_noninteractive_setup( stream.write(rendered + "\n") if not report.ok: return SETUP_EXIT_NOT_READY + smoke_model = _setup_smoke_model(selected, pi_config) + if not _verify_setup_smoke(selected, model=smoke_model): + return SETUP_EXIT_NOT_READY if not persist_validated_profile(report, model=adopted_model): sys.stderr.write("argus: readiness passed but profile persistence failed\n") return SETUP_EXIT_PERSISTENCE @@ -1271,7 +1362,6 @@ def run_setup( api_model=api_model, ) _banner() - _banner() selected_backend = _configure_runner_backend(backend or ("pi" if api_url else None)) if selected_backend is None: return SETUP_EXIT_USAGE @@ -1316,6 +1406,10 @@ def run_setup( report = check_backend_readiness( selected_backend, selected_auth_mode, + runner_bin=_resolve_setup_runner_bin( + selected_backend, + explicit_selection=True, + ), probe_auth=selected_auth_mode == AUTH_MODE_SUBSCRIPTION, probe_vault=selected_auth_mode == AUTH_MODE_MODEL_API, allow_prerelease=allow_prerelease, @@ -1325,6 +1419,10 @@ def run_setup( if not report.ok: print(_yellow(" Setup is not ready; the backend profile was not persisted.")) return SETUP_EXIT_NOT_READY + smoke_model = _setup_smoke_model(selected_backend, pi_config) + if not _verify_setup_smoke(selected_backend, model=smoke_model): + print(_yellow(" Backend checks passed, but Argus could not complete a real turn.")) + return SETUP_EXIT_NOT_READY if not persist_validated_profile(report, model=adopted_model): print(_yellow(" Readiness passed but backend profile persistence failed.")) return SETUP_EXIT_PERSISTENCE diff --git a/argus_skill/webapi/manager_state.py b/argus_skill/webapi/manager_state.py index f5f518fb..ab9aeaf8 100644 --- a/argus_skill/webapi/manager_state.py +++ b/argus_skill/webapi/manager_state.py @@ -149,13 +149,25 @@ def _prewarm_manager_context( ) cwd = str(state.get("manager_runner_workdir") or Path.cwd()) + classifier_backend_name = getattr( + classifier_backend, + "backend", + state.get("backend"), + ) + reply_backend_name = getattr( + default_backend, + "backend", + state.get("backend"), + ) classify_effort = resolve_knob( "ARGUS_SKILL_FRONTDOOR_CLASSIFY_EFFORT", "low", ).value.strip() or "low" prewarm_classifier( run_label="manager-frontdoor-classify", - model=resolve_manager_classify_model(), + model=resolve_manager_classify_model( + backend=classifier_backend_name, + ), reasoning_effort=classify_effort, lean=True, cwd=cwd, @@ -163,7 +175,7 @@ def _prewarm_manager_context( ) prewarm_reply( run_label="simple-1", - model=resolve_manager_reply_model(), + model=resolve_manager_reply_model(backend=reply_backend_name), reasoning_effort=resolve_role_reasoning_effort( "ARGUS_SKILL_SELF_REASONING_EFFORT", default="high", diff --git a/docs/agent-install.md b/docs/agent-install.md index 2f424b1f..7eca560c 100644 --- a/docs/agent-install.md +++ b/docs/agent-install.md @@ -1,54 +1,23 @@ # Argus installation instructions for coding agents -You are responsible for completing the installation, not merely describing -commands. Keep changes scoped to Argus and follow these rules: +Complete the installation; do not merely print commands. -- Argus does not require a separate Argus account. The selected backend must - be installed and authenticated through its official login flow. -- Inspect before changing the machine. -- Prefer the Agent CLI that is already running and authenticated. -- Ask before using `sudo`, installing system packages, changing shell startup - files, or changing global Git or backend configuration. -- Never request secrets in chat, print secrets, or write credentials into the - Argus repository. Use the backend's official interactive login flow. -- Do not overwrite an existing Argus checkout or discard local modifications. -- Stop and explain the exact blocker if a required action cannot be completed. - -### 1. Inspect the environment +## Safety contract -Determine the operating system and check: - -```bash -git --version -python3 --version -node --version -``` - -Requirements: - -- Python 3.11 or newer -- Node.js 22 or newer -- Git -- One supported Agent CLI - -Check which supported backends are available: - -```bash -command -v copilot || true -command -v codex || true -command -v claude || true -command -v pi || true -command -v opencode || true -command -v grok || true -command -v qodercli || true -command -v dsh || true -``` +- Argus has no separate Argus account. Use one supported Agent CLI and its + official login flow. +- Inspect before changing the machine. +- Ask before `sudo`, system package installation, shell startup edits, or global + configuration changes. +- Never request passwords, tokens, or API keys in chat. Never place credentials + in the Argus checkout or shell history. +- Prefer the Agent CLI already running this conversation. +- Do not replace a dirty checkout or silently switch providers after a failure. +- Use only the section for the detected operating system. -Select the CLI hosting the current conversation when possible. Otherwise, -prefer an already installed and authenticated backend. Supported Argus backend -values are: +Supported backend values: -| Agent CLI | Argus backend | +| Agent CLI | Backend | |---|---| | GitHub Copilot CLI | `copilot` | | OpenAI Codex CLI | `codex` | @@ -59,163 +28,175 @@ values are: | Qoder CLI | `qoder` | | DeepSeek Harness | `dsh` | -If prerequisites are missing, explain the proposed installation command and -obtain approval before using a system package manager, `sudo`, or making a -global installation. Follow the prerequisite project's official installation -instructions rather than inventing an unofficial download source. +Setup adopts a model from the selected CLI's own catalog when available and +otherwise uses its native default. Never assign an OpenAI model id to Claude +Code, Pi, OpenCode, Grok, Qoder, or dsh merely because it is Argus's historical +default. -### 2. Confirm backend authentication +## Windows 10/11 -Use a read-only status or version check first. If the selected CLI is not -authenticated, start its official interactive login flow and let the user -complete browser/device authorization directly. Do not ask the user to send -credentials through chat. +### Inspect -If the current Agent CLI is clearly working through its normal authenticated -session, do not force an unnecessary re-login. +Use PowerShell: -### 3. Install Argus +```powershell +[Environment]::OSVersion.VersionString +py --version +node --version +Get-Command copilot,codex,claude,pi,opencode,grok,qodercli,dsh -ErrorAction SilentlyContinue +``` -Choose a persistent installation directory with the user. If they have no -preference, use `$HOME/Argus`. +Require Python 3.11+ from python.org with **Add Python to PATH** selected, +Node.js 22+, and one authenticated Agent CLI. -For a new installation: +### Install — no virtual environment -```bash -git clone https://github.com/lbx154/Argus.git "$HOME/Argus" -cd "$HOME/Argus" -python3 -m venv .venv -. .venv/bin/activate -python -m pip install --upgrade pip -python -m pip install -e . +```powershell +py -m pip install --upgrade pip +py -m pip install --upgrade "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" +$Scripts = py -c "import sysconfig; print(sysconfig.get_path('scripts'))" +$env:Path = "$Scripts;$env:Path" ``` -If `$HOME/Argus` already exists: +Do not ask the user to create or activate a venv on Windows. A packaged Desktop +installer may be used instead when a release provides one. -1. Verify that it is the Argus repository. -2. Inspect `git status`. -3. Never remove or overwrite local changes. -4. If it is clean, update it with `git pull --ff-only`. -5. Re-run `.venv/bin/python -m pip install -e .`. +For an existing moving-preview install, add `--force-reinstall` to the direct +pip command so the unchanged preview package version cannot leave stale code. -On Windows, use the platform-appropriate virtual-environment executable and -activation command. Do not assume a POSIX shell. +### Configure and verify -### 4. Configure the selected backend +```powershell +argus --setup --non-interactive --backend +argus doctor --deep --advisor auto +argus --status +``` + +`argus --setup` must finish its real Agent-turn smoke test. A package install or +version command alone is not success. The `$Scripts` lines make the entry points +available in the current PowerShell. If a later window cannot find `argus`, fix +the Python Scripts PATH; do not create a venv as a workaround. + +Windows supports Manager chat, pairing, Web/TUI, and terminal-scoped daemon +control. Detached subagents remain POSIX/WSL2-only and must fail explicitly on +native Windows. -From the Argus checkout, run: +## macOS + +### Inspect ```bash -.venv/bin/argus --setup --non-interactive \ - --backend +sw_vers +uname -m +uv --version +node --version +for cli in copilot codex claude pi opencode grok qodercli dsh; do command -v "$cli" || true; done ``` -Windows PowerShell: +Require Node.js 22+, one authenticated Agent CLI, and uv. Install uv only with +the user's approval and its official installer. -```powershell -.\.venv\Scripts\argus.exe --setup --non-interactive ` - --backend +### Install — uv-managed command, no manual venv + +```bash +uv tool install --python 3.12 \ + "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" ``` -For an OpenAI-compatible endpoint, no backend flag is needed. Setup installs Pi -when it is missing: +Upgrade with: ```bash -ARGUS_SETUP_API_KEY=... .venv/bin/argus --setup --non-interactive \ - --api-url https://api.example.com/v1 --api-model model-id +uv tool install --force --python 3.12 \ + "argus-skill @ https://github.com/lbx154/Argus/archive/refs/heads/main.zip" ``` -```powershell -$env:ARGUS_SETUP_API_KEY = "..." -.\.venv\Scripts\argus.exe --setup --non-interactive ` - --api-url https://api.example.com/v1 --api-model model-id -``` +### Configure and verify -Use the backend selected in steps 1-2. Do not silently switch to another -provider after a failed readiness check. Diagnose the reported failure first, -then either fix it or ask the user to choose another installed backend. +```bash +argus --setup --non-interactive \ + --backend +argus doctor --deep --advisor auto +argus --status +``` -### 5. Confirm the model selector +Setup is complete only after the real Agent-turn smoke succeeds. -Argus sends a model id to the backend CLI, and its shared default belongs to -the OpenAI catalog. Setup adopts a backend-appropriate model where Argus knows -one. For a single-catalog backend whose catalog conflicts with that default, -leaving the model unset makes every call fail, and the Manager reports it only -as `[not dispatched] Manager could not classify this message`. +## Linux -`argus --setup` reports a `model selector` failure when it can prove the id is -wrong, so a clean setup already covers most cases. Confirm what each role will -actually send: +### Inspect ```bash -.venv/bin/argus --config-help +uname -a +python3 --version +node --version +git --version +for cli in copilot codex claude pi opencode grok qodercli dsh; do command -v "$cli" || true; done ``` -The `[models]` section prints every model knob with its resolved value and -where that value came from (`env`, `persisted`, or `default`). A value marked -`(default)` was chosen by nobody — check that it belongs to the selected -backend's catalog. +Require Python 3.11+, Node.js 22+, Git, and one authenticated Agent CLI. -If it does not, list the ids the account really holds. The listing command is -backend-specific: - -```bash -pi --list-models -opencode auth list -qodercli --list-models -``` +### Install — persistent source venv -Set the chosen id in the environment Argus launches from: +Choose a persistent directory. Default to `$HOME/Argus` only when it does not +already contain unrelated data: ```bash -export ARGUS_SKILL_MODEL= +git clone https://github.com/lbx154/Argus.git "$HOME/Argus" +cd "$HOME/Argus" +python3 -m venv .venv +.venv/bin/python -m pip install --upgrade pip +.venv/bin/python -m pip install -e . ``` -`ARGUS_SKILL_MODEL` is the shared default; per-role knobs -(`ARGUS_SKILL_MANAGER_MODEL`, `ARGUS_SKILL_ENGINEER_MODEL`, -`ARGUS_SKILL_REVIEWER_MODEL`, `ARGUS_SKILL_PLAN_MODEL`) override it. Ask before -writing the export into a shell startup file. Inside the running cockpit the -operator can also say "switch the model to ", which persists the -choice for future sessions. - -### 6. Verify the installation +If the checkout already exists, inspect `git status`; update only a clean branch +with `git pull --ff-only`, then refresh the editable install. -Run: +### Configure and verify ```bash -.venv/bin/argus --doctor +cd "$HOME/Argus" +.venv/bin/argus --setup --non-interactive \ + --backend +.venv/bin/argus doctor --deep --advisor auto .venv/bin/argus --status ``` -The task is complete only when `argus --doctor` reports that the installation -and selected backend are ready. Do not claim success based only on a successful -package installation. - -If the user wants `argus` available outside the checkout, offer a safe PATH or -launcher option appropriate for their operating system. Do not edit shell -startup files without approval. +Linux keeps the explicit venv because server Python/CUDA dependencies and +long-running process ownership must remain reproducible. -### 7. Report the result +## Confirm the backend model selector -Tell the user: +Setup validates the model it will send before reporting success. Also run +`argus --config-help` and inspect each role's effective value and source. +Backend catalog commands include `pi --list-models`, `opencode auth list`, and +`qodercli --list-models`. If the selected id is not in that account's catalog, +set `ARGUS_SKILL_MODEL` or a role-specific model knob before rerunning setup. +Do not silently switch providers after a failed readiness check. -- the Argus installation directory; -- the selected backend; -- the model id each role will use; -- whether `argus --doctor` passed; -- the exact command to start Argus; -- any remaining manual action. +## OpenAI-compatible endpoint -Typical launch commands: +Setup can configure Pi directly: ```bash -cd "$HOME/Argus" -.venv/bin/argus +ARGUS_SETUP_API_KEY=... argus --setup --non-interactive \ + --api-url https://api.example.com/v1 \ + --api-model model-id ``` -Web UI: +On Windows use a PowerShell environment variable and backtick continuation. +Never paste the key into chat or commit it. -```bash -cd "$HOME/Argus" -.venv/bin/argus --web -``` +## Completion report + +Report: + +- operating system and installation method; +- exact executable used for Argus; +- selected Agent CLI/backend; +- whether setup's real Agent turn passed; +- whether `argus doctor --deep --advisor auto` passed; +- exact launch command; +- remaining manual login or PATH action. + +If setup or Doctor fails, report the failing stage, executable, concise error, +and exact next command. Do not claim installation success. diff --git a/docs/windows-desktop.md b/docs/windows-desktop.md index 6d07c61d..6b9e1878 100644 --- a/docs/windows-desktop.md +++ b/docs/windows-desktop.md @@ -26,6 +26,21 @@ or Vertical behavior. Those remain owned by the main Argus runtime. It also does not expand the Windows portability claims of the underlying runtime; see the main README for the currently supported Windows surface. +## End-user installation + +Download `Argus--setup.exe` from the matching GitHub Release and run it. +The installer contains the frozen Argus backend; end users do not install +Python, Node.js, or a virtual environment for the Desktop application. + +The first-run screen selects an installed Agent CLI and starts the bundled +backend. Installation is usable only after the backend reaches the ready screen. +If startup fails, use **Export sanitized diagnostics** from the error screen; +the report includes the failed stage and backend log without credentials. + +`Argus--portable.exe` is the no-install alternative. The source +development instructions later in this document are for contributors building +the package, not for end users. + ## Architecture ```text @@ -86,7 +101,11 @@ The first-run UI supports Codex CLI, Claude Code, GitHub Copilot CLI, Pi, OpenCode, and Grok Build. Auto-detection is only a convenience; the operator can select the executable explicitly. -## Development setup +## Contributor-only development setup + +This section builds the frozen backend and installer and therefore uses an +isolated build environment. End users do not run these commands and do not +create a venv. From the repository root in PowerShell: diff --git a/frontend/core/src/release.generated.ts b/frontend/core/src/release.generated.ts index 98299db9..d3dcce77 100644 --- a/frontend/core/src/release.generated.ts +++ b/frontend/core/src/release.generated.ts @@ -1,3 +1,3 @@ // Generated by argus_skill.release_tools.generate_manifest. Do not edit. -export const RELEASE_ID = "0.1.1+16cbbf8491922893"; -export const RELEASE_SOURCE_DIGEST = "16cbbf8491922893bf1552882ad288342d84b865d0f7644544e4a4223e2d6413"; +export const RELEASE_ID = "0.1.1+09c63c9dbf5b63f3"; +export const RELEASE_SOURCE_DIGEST = "09c63c9dbf5b63f34a4c465b7875a2e662cdcd92a5279915db11e73e587b4eaa"; diff --git a/frontend/tui/bundle/argus.mjs b/frontend/tui/bundle/argus.mjs index f0cc83b4..ecc6a27d 100644 --- a/frontend/tui/bundle/argus.mjs +++ b/frontend/tui/bundle/argus.mjs @@ -121,7 +121,7 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),t){this.rawModeEnabledCount===0&&(r.ref(),r.setRawMode(!0),r.addListener("readable",this.handleReadable)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("readable",this.handleReadable),r.unref())};handleReadable=()=>{let t;for(;(t=this.props.stdin.read())!==null;)this.handleInput(t),this.internal_eventEmitter.emit("input",t)};handleInput=t=>{t===""&&this.props.exitOnCtrlC&&this.handleExit(),t===HR&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(t===UR&&this.focusNext(),t===GR&&this.focusPrevious())};handleExit=t=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(t)};enableFocus=()=>{this.setState({isFocusEnabled:!0})};disableFocus=()=>{this.setState({isFocusEnabled:!1})};focus=t=>{this.setState(r=>r.focusables.some(s=>s?.id===t)?{activeFocusId:t}:r)};focusNext=()=>{this.setState(t=>{let r=t.focusables.find(s=>s.isActive)?.id;return{activeFocusId:this.findNextFocusable(t)??r}})};focusPrevious=()=>{this.setState(t=>{let r=t.focusables.findLast(s=>s.isActive)?.id;return{activeFocusId:this.findPreviousFocusable(t)??r}})};addFocusable=(t,{autoFocus:r})=>{this.setState(i=>{let s=i.activeFocusId;return!s&&r&&(s=t),{activeFocusId:s,focusables:[...i.focusables,{id:t,isActive:!0}]}})};removeFocusable=t=>{this.setState(r=>({activeFocusId:r.activeFocusId===t?void 0:r.activeFocusId,focusables:r.focusables.filter(i=>i.id!==t)}))};activateFocusable=t=>{this.setState(r=>({focusables:r.focusables.map(i=>i.id!==t?i:{id:t,isActive:!0})}))};deactivateFocusable=t=>{this.setState(r=>({activeFocusId:r.activeFocusId===t?void 0:r.activeFocusId,focusables:r.focusables.map(i=>i.id!==t?i:{id:t,isActive:!1})}))};findNextFocusable=t=>{let r=t.focusables.findIndex(i=>i.id===t.activeFocusId);for(let i=r+1;i{let r=t.focusables.findIndex(i=>i.id===t.activeFocusId);for(let i=r-1;i>=0;i--){let s=t.focusables[i];if(s?.isActive)return s.id}}};var iy=()=>{},Cf=class{options;log;throttledLog;isUnmounted;lastOutput;container;rootNode;fullStaticOutput;exitPromise;restoreConsole;unsubscribeResize;constructor(t){CE(this),this.options=t,this.rootNode=sd("ink-root"),this.rootNode.onComputeLayout=this.calculateLayout,this.rootNode.onRender=t.debug?this.onRender:Gg(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=OD.create(t.stdout),this.throttledLog=t.debug?this.log:Gg(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=ja.createContainer(this.rootNode,0,null,!1,null,"id",()=>{},null),this.unsubscribeExit=(0,Ay.default)(this.unmount,{alwaysLast:!1}),WR.env.DEV==="true"&&ja.injectIntoDevTools({bundleType:0,version:"16.13.1",rendererPackageName:"ink"}),t.patchConsole&&this.patchConsole(),Ta||(t.stdout.on("resize",this.resized),this.unsubscribeResize=()=>{t.stdout.off("resize",this.resized)})}resized=()=>{this.calculateLayout(),this.onRender()};resolveExitPromise=()=>{};rejectExitPromise=()=>{};unsubscribeExit=()=>{};calculateLayout=()=>{let t=this.options.stdout.columns||80;this.rootNode.yogaNode.setWidth(t),this.rootNode.yogaNode.calculateLayout(void 0,void 0,ot.DIRECTION_LTR)};onRender=()=>{if(this.isUnmounted)return;let{output:t,outputHeight:r,staticOutput:i}=SD(this.rootNode),s=i&&i!==` `;if(this.options.debug){s&&(this.fullStaticOutput+=i),this.options.stdout.write(this.fullStaticOutput+t);return}if(Ta){s&&this.options.stdout.write(i),this.lastOutput=t;return}if(s&&(this.fullStaticOutput+=i),r>=this.options.stdout.rows){this.options.stdout.write(ko.clearTerminal+this.fullStaticOutput+t),this.lastOutput=t;return}s&&(this.log.clear(),this.options.stdout.write(i),this.log(t)),!s&&t!==this.lastOutput&&this.throttledLog(t),this.lastOutput=t};render(t){let r=sy.default.createElement(hf,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},t);ja.updateContainer(r,this.container,null,iy)}writeToStdout(t){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(t+this.fullStaticOutput+this.lastOutput);return}if(Ta){this.options.stdout.write(t);return}this.log.clear(),this.options.stdout.write(t),this.log(this.lastOutput)}}writeToStderr(t){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(t),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(Ta){this.options.stderr.write(t);return}this.log.clear(),this.options.stderr.write(t),this.log(this.lastOutput)}}unmount(t){this.isUnmounted||(this.calculateLayout(),this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),Ta?this.options.stdout.write(this.lastOutput+` `):this.options.debug||this.log.done(),this.isUnmounted=!0,ja.updateContainer(null,this.container,null,iy),Su.delete(this.options.stdout),t instanceof Error?this.rejectExitPromise(t):this.resolveExitPromise())}async waitUntilExit(){return this.exitPromise||=new Promise((t,r)=>{this.resolveExitPromise=t,this.rejectExitPromise=r}),this.exitPromise}clear(){!Ta&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=Yh((t,r)=>{t==="stdout"&&this.writeToStdout(r),t==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};var JR=(e,t)=>{let r={stdout:Gd.stdout,stdin:Gd.stdin,stderr:Gd.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0,...jR(t)},i=YR(r.stdout,()=>new Cf(r));return i.render(e),{rerender:i.render,unmount(){i.unmount()},waitUntilExit:i.waitUntilExit,cleanup:()=>Su.delete(r.stdout),clear:i.clear}},Hm=JR,jR=(e={})=>e instanceof KR?{stdout:e,stdin:Gd.stdin}:e,YR=(e,t)=>{let r=Su.get(e);return r||(r=t(),Su.set(e,r)),r};var iA=Le(jt(),1);function Bf(e){let{items:t,children:r,style:i}=e,[s,a]=(0,iA.useState)(0),u=(0,iA.useMemo)(()=>t.slice(s),[t,s]);(0,iA.useLayoutEffect)(()=>{a(t.length)},[t.length]);let E=u.map((h,y)=>r(h,s+y)),I=(0,iA.useMemo)(()=>({position:"absolute",flexDirection:"column",...i}),[i]);return iA.default.createElement("ink-box",{internal_static:!0,style:I},E)}var VR=Le(jt(),1);var qR=Le(jt(),1);var zR=Le(jt(),1);var Wm=Le(jt(),1);import{Buffer as $R}from"node:buffer";var XR=/^(?:\x1b)([a-zA-Z0-9])$/,ZR=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,ay={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"},ly=[...Object.values(ay),"backspace"],eb=e=>["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(e),tb=e=>["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(e),rb=(e="")=>{let t;$R.isBuffer(e)?e[0]>127&&e[1]===void 0?(e[0]-=128,e="\x1B"+String(e)):e=String(e):e!==void 0&&typeof e!="string"?e=String(e):e||(e="");let r={name:"",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:e,raw:e};if(r.sequence=r.sequence||e||r.name,e==="\r")r.raw=void 0,r.name="return";else if(e===` -`)r.name="enter";else if(e===" ")r.name="tab";else if(e==="\b"||e==="\x1B\b")r.name="backspace",r.meta=e.charAt(0)==="\x1B";else if(e==="\x7F"||e==="\x1B\x7F")r.name="delete",r.meta=e.charAt(0)==="\x1B";else if(e==="\x1B"||e==="\x1B\x1B")r.name="escape",r.meta=e.length===2;else if(e===" "||e==="\x1B ")r.name="space",r.meta=e.length===2;else if(e.length===1&&e<="")r.name=String.fromCharCode(e.charCodeAt(0)+97-1),r.ctrl=!0;else if(e.length===1&&e>="0"&&e<="9")r.name="number";else if(e.length===1&&e>="a"&&e<="z")r.name=e;else if(e.length===1&&e>="A"&&e<="Z")r.name=e.toLowerCase(),r.shift=!0;else if(t=XR.exec(e))r.meta=!0,r.shift=/^[A-Z]$/.test(t[1]);else if(t=ZR.exec(e)){let i=[...e];i[0]==="\x1B"&&i[1]==="\x1B"&&(r.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(""),a=(t[3]||t[5]||1)-1;r.ctrl=!!(a&4),r.meta=!!(a&10),r.shift=!!(a&1),r.code=s,r.name=ay[s],r.shift=eb(s)||r.shift,r.ctrl=tb(s)||r.ctrl}return r},uy=rb;var cy=Le(jt(),1);var nb=()=>(0,cy.useContext)(Od),Hd=nb;var ob=(e,t={})=>{let{stdin:r,setRawMode:i,internal_exitOnCtrlC:s,internal_eventEmitter:a}=Hd();(0,Wm.useEffect)(()=>{if(t.isActive!==!1)return i(!0),()=>{i(!1)}},[t.isActive,i]),(0,Wm.useEffect)(()=>{if(t.isActive===!1)return;let u=E=>{let I=uy(E),h={upArrow:I.name==="up",downArrow:I.name==="down",leftArrow:I.name==="left",rightArrow:I.name==="right",pageDown:I.name==="pagedown",pageUp:I.name==="pageup",return:I.name==="return",escape:I.name==="escape",ctrl:I.ctrl,shift:I.shift,tab:I.name==="tab",backspace:I.name==="backspace",delete:I.name==="delete",meta:I.meta||I.name==="escape"||I.option},y=I.ctrl?I.name:I.sequence;ly.includes(I.name)&&(y=""),y.startsWith("\x1B")&&(y=y.slice(1)),y.length===1&&typeof y[0]=="string"&&/[A-Z]/.test(y[0])&&(h.shift=!0),(!(y==="c"&&h.ctrl)||!s)&&ja.batchedUpdates(()=>{e(y,h)})};return a?.on("input",u),()=>{a?.removeListener("input",u)}},[t.isActive,r,s,e])},rs=ob;var fy=Le(jt(),1);var ib=()=>(0,fy.useContext)(Td),sA=ib;var gy=Le(jt(),1);var sb=()=>(0,gy.useContext)(Ld),AA=sb;var Ab=Le(jt(),1);var Km=Le(jt(),1);var ab=Le(jt(),1);hm();import{randomUUID as Jd}from"node:crypto";import{homedir as Ib}from"node:os";import{posix as hb,win32 as qm}from"node:path";var Jm=class extends Error{status;method;path;constructor(t,r,i,s){super(t),this.name="ApiError",this.status=r,this.method=i,this.path=s}};function lb(e){let t=e.replace(/\s+/g," ").trim();if(!t)return"";try{let r=JSON.parse(e);for(let i of["detail","error","message"]){let s=r[i];if(typeof s=="string"&&s.trim())return s.trim();if(Array.isArray(s)){let a=s.map(u=>u&&typeof u=="object"?String(u.msg??""):"").filter(Boolean);if(a.length)return a.join("; ")}}}catch{}return t.startsWith("typeof D=="string"):[],u=jm(i?.major),E=jm(i?.minor);if(!r||!i||!s)return{compatible:!1,reason:"malformed /api/meta response"};if(typeof s.source_root!="string"||jm(s.pid)===null||typeof s.package_version!="string"||typeof s.release_id!="string")return{compatible:!1,reason:"malformed /api/meta runtime identity"};if(r.service!==cb)return{compatible:!1,reason:`unexpected service ${String(r.service||"unknown")}`};let I=e;if(i.name!==_u.name||u!==_u.major)return{compatible:!1,reason:`protocol ${String(i.name||"unknown")}/${String(u)} is incompatible with client ${_u.name}/${_u.major}`,meta:I};if(E===null||E<_u.minServerMinor)return{compatible:!1,reason:`server protocol minor ${String(E)} is older than required ${_u.minServerMinor}`,meta:I};if(r.snapshot_schema_version!==Kd)return{compatible:!1,reason:`snapshot schema ${String(r.snapshot_schema_version)} is incompatible with required ${Kd}`,meta:I};let h=fb.filter(D=>!a.includes(D));if(h.length>0)return{compatible:!1,reason:`missing capabilities: ${h.join(", ")}`,meta:I};if(s.source_root_matches_config===!1)return{compatible:!1,reason:`backend loaded source ${String(s.source_root)} but ARGUS_SKILL_SOURCE_ROOT points to ${String(s.configured_source_root)}`,meta:I};if(s.release_id!==t.releaseId)return{compatible:!1,reason:`backend release ${String(s.release_id)} does not match client release ${t.releaseId}`,meta:I};if(t.sourceDigest){if(typeof s.runtime_source_digest!="string"||!s.runtime_source_digest)return{compatible:!1,reason:"backend process does not report the source digest required by this local checkout",meta:I};if(s.runtime_source_digest!==t.sourceDigest)return{compatible:!1,reason:`backend process source ${String(s.runtime_source_digest).slice(0,16)} does not match local source ${t.sourceDigest.slice(0,16)}`,meta:I}}return{compatible:!0,reason:"",warning:s.release_matches_source===!1?"backend source differs from its prebuilt release artifacts; pull a complete published revision and reinstall":void 0,meta:I}}function py(e,t){let r=Ym(e);if(!r.compatible||!r.meta)throw new Error(`incompatible Argus API: ${r.reason}`);return r.warning&&t?.(r.warning),r.meta}function Ey(e){let t=Df(e),r=Df(t?.daemon);if(!t||t.schema_version!==Kd)throw new Error(`incompatible snapshot schema: expected ${Kd}, got ${String(t?.schema_version??"missing")}`);if(!r)throw new Error("invalid snapshot: daemon section is missing");let s=["global_daily_cap_usd","read_status","read_error","protocol_compatible","protocol_error"].filter(E=>!Object.hasOwn(r,E));if(s.length>0)throw new Error(`invalid snapshot: daemon fields missing: ${s.join(", ")}`);let u=["spend_usd","spend_status","usage_summary","request_usage","cost_control","daemon_commands","observability","mission_view","partial","diagnostics"].filter(E=>!Object.hasOwn(t,E));if(u.length>0)throw new Error(`invalid snapshot: fields missing: ${u.join(", ")}`);if(!Array.isArray(t.diagnostics))throw new Error("invalid snapshot: diagnostics must be an array");return e}function Vm(e){let t=typeof e=="string"||e instanceof URL?String(e):e.url;try{let r=new URL(t);return r.username="",r.password="",r.searchParams.has("token")&&r.searchParams.set("token","[redacted]"),r.toString()}catch{return t}}function Ya(e,t){return typeof e=="object"&&e!==null?e[t]:void 0}function gb(e){let t=Ya(e,"cause"),r=new Set;for(;Ya(t,"cause")&&!r.has(t);)r.add(t),t=Ya(t,"cause");return t??e}function db(e,t,r="GET"){let i=gb(e),s=String(Ya(i,"code")??"").trim(),a=String(Ya(i,"address")??"").trim(),u=String(Ya(i,"port")??"").trim(),E=a&&u?`${a}:${u}`:a,I=i instanceof Error?i.message.trim():String(i??"").trim(),h=e instanceof Error?e.message.trim():String(e??"").trim(),y;return s==="ECONNREFUSED"?y=`connection refused${E?` by ${E}`:""}`:s==="ECONNRESET"?y="connection reset by the local service":s==="ETIMEDOUT"?y="connection timed out":s==="ENOTFOUND"?y="host name could not be resolved":I&&I!==h?y=I:y=h||"network request failed",`${r.toUpperCase()} ${Vm(t)} failed: ${y}${s?` (${s})`:""}`}function my(e){return e%1e3===0?`${e/1e3}s`:`${e}ms`}async function pb(e,t,r,i,s){let a=Number.isFinite(r)&&r>0?Math.max(1,Math.trunc(r)):1,u=new AbortController,E=t.signal,I=!1,h=!1,y=()=>u.abort(E?.reason);E?.aborted?y():E?.addEventListener("abort",y,{once:!0});let D=(async()=>{let G=await fetch(e,{...t,signal:u.signal});return h=!0,await s(G)})(),R,O=new Promise((G,ne)=>{R=setTimeout(()=>{I=!0;let oe=new Error(`request timed out after ${my(a)}`);u.abort(oe),ne(oe)},a)});try{return await Promise.race([D,O])}catch(G){throw I?new Error(`${i.toUpperCase()} ${Vm(e)} timed out after ${my(a)}; the local Argus service did not respond`,{cause:G}):E?.aborted?E.reason instanceof Error?E.reason:new Error(`${i.toUpperCase()} ${Vm(e)} was aborted`,{cause:G}):h&&Ya(G,"cause")===void 0?G:new Error(db(G,e,i),{cause:G})}finally{R&&clearTimeout(R),E?.removeEventListener("abort",y)}}function zA(e,t,r,i,s=t.method??"GET"){return pb(e,t,r,s,i)}function Cb(e,t=Ib()){let r=E=>E.includes("\\")||/^[A-Za-z]:[\\/]/.test(E),i=r(e)?qm:hb,s=i.resolve(e),a=E=>i===qm?E.toLowerCase():E,u=r(t)===(i===qm)?a(i.resolve(t)):"";if(!(a(s)===u||a(s)===a(i.parse(s).root)))return s}function Bb(e,t=""){let r=t.trim();return e===4401?{code:e,reason:r||"event stream authentication was rejected",retryable:!1}:e===4404?{code:e,reason:r||"the selected project no longer exists",retryable:!1}:{code:e,reason:r,retryable:!0}}function zm(e){let t=e.item?.title||"new mission";return e.daemon?.admission_required?`\u2192 queued: choose one running session to park before starting ${t}`:e.daemon&&e.daemon.rc!==0?`\u2192 queued but not running: ${e.daemon.error||"background executor failed to start"}`:`\u2192 dispatched to the team: ${t}`}function Iy(e){let t=[],r;for(;(r=e.indexOf(` +`)r.name="enter";else if(e===" ")r.name="tab";else if(e==="\b"||e==="\x1B\b")r.name="backspace",r.meta=e.charAt(0)==="\x1B";else if(e==="\x7F"||e==="\x1B\x7F")r.name="delete",r.meta=e.charAt(0)==="\x1B";else if(e==="\x1B"||e==="\x1B\x1B")r.name="escape",r.meta=e.length===2;else if(e===" "||e==="\x1B ")r.name="space",r.meta=e.length===2;else if(e.length===1&&e<="")r.name=String.fromCharCode(e.charCodeAt(0)+97-1),r.ctrl=!0;else if(e.length===1&&e>="0"&&e<="9")r.name="number";else if(e.length===1&&e>="a"&&e<="z")r.name=e;else if(e.length===1&&e>="A"&&e<="Z")r.name=e.toLowerCase(),r.shift=!0;else if(t=XR.exec(e))r.meta=!0,r.shift=/^[A-Z]$/.test(t[1]);else if(t=ZR.exec(e)){let i=[...e];i[0]==="\x1B"&&i[1]==="\x1B"&&(r.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(""),a=(t[3]||t[5]||1)-1;r.ctrl=!!(a&4),r.meta=!!(a&10),r.shift=!!(a&1),r.code=s,r.name=ay[s],r.shift=eb(s)||r.shift,r.ctrl=tb(s)||r.ctrl}return r},uy=rb;var cy=Le(jt(),1);var nb=()=>(0,cy.useContext)(Od),Hd=nb;var ob=(e,t={})=>{let{stdin:r,setRawMode:i,internal_exitOnCtrlC:s,internal_eventEmitter:a}=Hd();(0,Wm.useEffect)(()=>{if(t.isActive!==!1)return i(!0),()=>{i(!1)}},[t.isActive,i]),(0,Wm.useEffect)(()=>{if(t.isActive===!1)return;let u=E=>{let I=uy(E),h={upArrow:I.name==="up",downArrow:I.name==="down",leftArrow:I.name==="left",rightArrow:I.name==="right",pageDown:I.name==="pagedown",pageUp:I.name==="pageup",return:I.name==="return",escape:I.name==="escape",ctrl:I.ctrl,shift:I.shift,tab:I.name==="tab",backspace:I.name==="backspace",delete:I.name==="delete",meta:I.meta||I.name==="escape"||I.option},y=I.ctrl?I.name:I.sequence;ly.includes(I.name)&&(y=""),y.startsWith("\x1B")&&(y=y.slice(1)),y.length===1&&typeof y[0]=="string"&&/[A-Z]/.test(y[0])&&(h.shift=!0),(!(y==="c"&&h.ctrl)||!s)&&ja.batchedUpdates(()=>{e(y,h)})};return a?.on("input",u),()=>{a?.removeListener("input",u)}},[t.isActive,r,s,e])},rs=ob;var fy=Le(jt(),1);var ib=()=>(0,fy.useContext)(Td),sA=ib;var gy=Le(jt(),1);var sb=()=>(0,gy.useContext)(Ld),AA=sb;var Ab=Le(jt(),1);var Km=Le(jt(),1);var ab=Le(jt(),1);hm();import{randomUUID as Jd}from"node:crypto";import{homedir as Ib}from"node:os";import{posix as hb,win32 as qm}from"node:path";var Jm=class extends Error{status;method;path;constructor(t,r,i,s){super(t),this.name="ApiError",this.status=r,this.method=i,this.path=s}};function lb(e){let t=e.replace(/\s+/g," ").trim();if(!t)return"";try{let r=JSON.parse(e);for(let i of["detail","error","message"]){let s=r[i];if(typeof s=="string"&&s.trim())return s.trim();if(Array.isArray(s)){let a=s.map(u=>u&&typeof u=="object"?String(u.msg??""):"").filter(Boolean);if(a.length)return a.join("; ")}}}catch{}return t.startsWith("typeof D=="string"):[],u=jm(i?.major),E=jm(i?.minor);if(!r||!i||!s)return{compatible:!1,reason:"malformed /api/meta response"};if(typeof s.source_root!="string"||jm(s.pid)===null||typeof s.package_version!="string"||typeof s.release_id!="string")return{compatible:!1,reason:"malformed /api/meta runtime identity"};if(r.service!==cb)return{compatible:!1,reason:`unexpected service ${String(r.service||"unknown")}`};let I=e;if(i.name!==_u.name||u!==_u.major)return{compatible:!1,reason:`protocol ${String(i.name||"unknown")}/${String(u)} is incompatible with client ${_u.name}/${_u.major}`,meta:I};if(E===null||E<_u.minServerMinor)return{compatible:!1,reason:`server protocol minor ${String(E)} is older than required ${_u.minServerMinor}`,meta:I};if(r.snapshot_schema_version!==Kd)return{compatible:!1,reason:`snapshot schema ${String(r.snapshot_schema_version)} is incompatible with required ${Kd}`,meta:I};let h=fb.filter(D=>!a.includes(D));if(h.length>0)return{compatible:!1,reason:`missing capabilities: ${h.join(", ")}`,meta:I};if(s.source_root_matches_config===!1)return{compatible:!1,reason:`backend loaded source ${String(s.source_root)} but ARGUS_SKILL_SOURCE_ROOT points to ${String(s.configured_source_root)}`,meta:I};if(s.release_id!==t.releaseId)return{compatible:!1,reason:`backend release ${String(s.release_id)} does not match client release ${t.releaseId}`,meta:I};if(t.sourceDigest){if(typeof s.runtime_source_digest!="string"||!s.runtime_source_digest)return{compatible:!1,reason:"backend process does not report the source digest required by this local checkout",meta:I};if(s.runtime_source_digest!==t.sourceDigest)return{compatible:!1,reason:`backend process source ${String(s.runtime_source_digest).slice(0,16)} does not match local source ${t.sourceDigest.slice(0,16)}`,meta:I}}return{compatible:!0,reason:"",warning:s.release_matches_source===!1?"backend source differs from its prebuilt release artifacts; pull a complete published revision and reinstall":void 0,meta:I}}function py(e,t){let r=Ym(e);if(!r.compatible||!r.meta)throw new Error(`incompatible Argus API: ${r.reason}`);return r.warning&&t?.(r.warning),r.meta}function Ey(e){let t=Df(e),r=Df(t?.daemon);if(!t||t.schema_version!==Kd)throw new Error(`incompatible snapshot schema: expected ${Kd}, got ${String(t?.schema_version??"missing")}`);if(!r)throw new Error("invalid snapshot: daemon section is missing");let s=["global_daily_cap_usd","read_status","read_error","protocol_compatible","protocol_error"].filter(E=>!Object.hasOwn(r,E));if(s.length>0)throw new Error(`invalid snapshot: daemon fields missing: ${s.join(", ")}`);let u=["spend_usd","spend_status","usage_summary","request_usage","cost_control","daemon_commands","observability","mission_view","partial","diagnostics"].filter(E=>!Object.hasOwn(t,E));if(u.length>0)throw new Error(`invalid snapshot: fields missing: ${u.join(", ")}`);if(!Array.isArray(t.diagnostics))throw new Error("invalid snapshot: diagnostics must be an array");return e}function Vm(e){let t=typeof e=="string"||e instanceof URL?String(e):e.url;try{let r=new URL(t);return r.username="",r.password="",r.searchParams.has("token")&&r.searchParams.set("token","[redacted]"),r.toString()}catch{return t}}function Ya(e,t){return typeof e=="object"&&e!==null?e[t]:void 0}function gb(e){let t=Ya(e,"cause"),r=new Set;for(;Ya(t,"cause")&&!r.has(t);)r.add(t),t=Ya(t,"cause");return t??e}function db(e,t,r="GET"){let i=gb(e),s=String(Ya(i,"code")??"").trim(),a=String(Ya(i,"address")??"").trim(),u=String(Ya(i,"port")??"").trim(),E=a&&u?`${a}:${u}`:a,I=i instanceof Error?i.message.trim():String(i??"").trim(),h=e instanceof Error?e.message.trim():String(e??"").trim(),y;return s==="ECONNREFUSED"?y=`connection refused${E?` by ${E}`:""}`:s==="ECONNRESET"?y="connection reset by the local service":s==="ETIMEDOUT"?y="connection timed out":s==="ENOTFOUND"?y="host name could not be resolved":I&&I!==h?y=I:y=h||"network request failed",`${r.toUpperCase()} ${Vm(t)} failed: ${y}${s?` (${s})`:""}`}function my(e){return e%1e3===0?`${e/1e3}s`:`${e}ms`}async function pb(e,t,r,i,s){let a=Number.isFinite(r)&&r>0?Math.max(1,Math.trunc(r)):1,u=new AbortController,E=t.signal,I=!1,h=!1,y=()=>u.abort(E?.reason);E?.aborted?y():E?.addEventListener("abort",y,{once:!0});let D=(async()=>{let G=await fetch(e,{...t,signal:u.signal});return h=!0,await s(G)})(),R,O=new Promise((G,ne)=>{R=setTimeout(()=>{I=!0;let oe=new Error(`request timed out after ${my(a)}`);u.abort(oe),ne(oe)},a)});try{return await Promise.race([D,O])}catch(G){throw I?new Error(`${i.toUpperCase()} ${Vm(e)} timed out after ${my(a)}; the local Argus service did not respond`,{cause:G}):E?.aborted?E.reason instanceof Error?E.reason:new Error(`${i.toUpperCase()} ${Vm(e)} was aborted`,{cause:G}):h&&Ya(G,"cause")===void 0?G:new Error(db(G,e,i),{cause:G})}finally{R&&clearTimeout(R),E?.removeEventListener("abort",y)}}function zA(e,t,r,i,s=t.method??"GET"){return pb(e,t,r,s,i)}function Cb(e,t=Ib()){let r=E=>E.includes("\\")||/^[A-Za-z]:[\\/]/.test(E),i=r(e)?qm:hb,s=i.resolve(e),a=E=>i===qm?E.toLowerCase():E,u=r(t)===(i===qm)?a(i.resolve(t)):"";if(!(a(s)===u||a(s)===a(i.parse(s).root)))return s}function Bb(e,t=""){let r=t.trim();return e===4401?{code:e,reason:r||"event stream authentication was rejected",retryable:!1}:e===4404?{code:e,reason:r||"the selected project no longer exists",retryable:!1}:{code:e,reason:r,retryable:!0}}function zm(e){let t=e.item?.title||"new mission";return e.daemon?.admission_required?`\u2192 queued: choose one running session to park before starting ${t}`:e.daemon&&e.daemon.rc!==0?`\u2192 queued but not running: ${e.daemon.error||"background executor failed to start"}`:`\u2192 dispatched to the team: ${t}`}function Iy(e){let t=[],r;for(;(r=e.indexOf(` `))>=0;){let i=e.slice(0,r);e=e.slice(r+2);for(let s of i.split(` `)){let a=s.trim();if(a.startsWith("data:"))try{t.push(JSON.parse(a.slice(5).trim()))}catch{}}}return{frames:t,rest:e}}var ns=class{httpBase;wsBase;project;token;onCompatibilityWarning;metaTimeoutMs;readTimeoutMs;metaPromise;constructor(t){this.httpBase=`http://${t.host}:${t.port}`,this.wsBase=`ws://${t.host}:${t.port}`,this.project=t.project,this.token=t.token,this.onCompatibilityWarning=t.onCompatibilityWarning,this.metaTimeoutMs=t.metaTimeoutMs??8e3,this.readTimeoutMs=t.readTimeoutMs??12e3}authHeaders(){return this.token?{Authorization:`Bearer ${this.token}`}:{}}p(t){return`${this.httpBase}/api/projects/${encodeURIComponent(this.project)}${t}`}meta(){if(!this.metaPromise){let t="/api/meta",r=zA(`${this.httpBase}${t}`,{headers:this.authHeaders()},this.metaTimeoutMs,async i=>{if(i.status===404)throw new Error("incompatible Argus API: service does not expose /api/meta");return await co(i,"GET",t),py(await i.json(),this.onCompatibilityWarning)});this.metaPromise=r,r.catch(()=>{this.metaPromise===r&&(this.metaPromise=void 0)})}return this.metaPromise}async listProjects(){return await this.meta(),zA(`${this.httpBase}/api/projects`,{headers:this.authHeaders()},this.readTimeoutMs,async t=>(await co(t,"GET","/api/projects"),(await t.json()).projects))}async createDaemon(t="",r="",i=process.cwd(),s,a=Jd()){let u="/api/daemons",E=Cb(i),I={objective:t,name:r,launch_cwd:i,command_id:a,expected_revision:s};E&&(I.workdir=E);let h=JSON.stringify(I),y=()=>fetch(`${this.httpBase}${u}`,{method:"POST",headers:{"Content-Type":"application/json",Connection:"close",...this.authHeaders()},body:h}),D=await y();return D.status===400&&/Invalid HTTP request received/i.test(await D.clone().text())&&(D=await y()),await co(D,"POST",u),await D.json()}async replaceDaemon(t,r=!1,i,s=Jd()){return await this.post("/daemon/replace",{victim_sid:t,resume_continuous:r,command_id:s,expected_revision:i})}async scheduleDaemonUpgrade(t,r,i=Jd()){let s=`/api/projects/${encodeURIComponent(t)}/daemon/upgrade-schedule`,a=await fetch(`${this.httpBase}${s}`,{method:"POST",headers:{"Content-Type":"application/json",...this.authHeaders()},body:JSON.stringify({command_id:i,expected_revision:r})});return await co(a,"POST",s),await a.json()}stopDaemon(t=Jd()){let r="/daemon/stop";return zA(this.p(r),{method:"POST",headers:{"Content-Type":"application/json",...this.authHeaders()},body:JSON.stringify({force:!1,drain:!1,command_id:t})},this.readTimeoutMs,async i=>{await co(i,"POST",r);let s=await i.json(),a=Number(s.rc??0);if(!Number.isFinite(a)||![0,1].includes(a)){let u=String(s.error??s.message??`rc=${String(s.rc??"unknown")}`);throw new Error(`executor did not stop cleanly: ${u}`)}return s})}async setProjectLaunchCwd(t,r){let i=`/api/projects/${encodeURIComponent(t)}/launch-cwd`,s=await fetch(`${this.httpBase}${i}`,{method:"POST",headers:{"Content-Type":"application/json",...this.authHeaders()},body:JSON.stringify({launch_cwd:r})});await co(s,"POST",i)}async setProjectWorkdir(t,r){let i=`/api/projects/${encodeURIComponent(t)}/workdir`,s=await fetch(`${this.httpBase}${i}`,{method:"POST",headers:{"Content-Type":"application/json",...this.authHeaders()},body:JSON.stringify({workdir:r})});await co(s,"POST",i)}async renameProject(t){let r=this.p(""),i=await fetch(r,{method:"PATCH",headers:{"Content-Type":"application/json",...this.authHeaders()},body:JSON.stringify({name:t})});return await co(i,"PATCH",r),await i.json()}async snapshot(t=1,r,i=!1){return await this.meta(),zA(this.p(`/snapshot?compact=true&events_limit=${t}`+(i?"&prewarm=true":"")),{headers:this.authHeaders(),signal:r},this.readTimeoutMs,async s=>(await co(s,"GET","/snapshot"),Ey(await s.json())))}async postTask(t){let r=await fetch(this.p("/tasks"),{method:"POST",headers:{"Content-Type":"application/json",...this.authHeaders()},body:JSON.stringify({text:t})});return await co(r,"POST","/tasks"),(await r.json()).item}async postNudge(t){let r=await fetch(this.p("/nudge"),{method:"POST",headers:{"Content-Type":"application/json",...this.authHeaders()},body:JSON.stringify({text:t})});await co(r,"POST","/nudge")}async message(t,r){let i=await fetch(this.p("/message"),{method:"POST",headers:{"Content-Type":"application/json",...this.authHeaders()},body:JSON.stringify({text:t}),signal:r});return await co(i,"POST","/message"),await i.json()}async messageStream(t,r,i){let s=await fetch(this.p("/message/stream"),{method:"POST",headers:{"Content-Type":"application/json",...this.authHeaders()},body:JSON.stringify({text:t}),signal:i});if(await co(s,"POST","/message/stream"),!s.body)throw new Error("Manager stream returned no response body");let a=h=>{if(!i?.aborted)if(h.type==="phase"){let y=Number(h.quiet_s??0);r.onPhase?.(String(h.label??""),String(h.role??"manager"),{heartbeat:h.heartbeat===!0,quietS:Number.isFinite(y)?y:0,kind:String(h.kind??""),detail:String(h.detail??"")})}else h.type==="delta"?r.onDelta?.(String(h.text??""),String(h.message_id??""),String(h.fragment_mode??"auto")):h.type==="done"?r.onDone?.(h.result??{}):h.type==="error"&&r.onError?.(new Error(String(h.error??"stream error")))},u=s.body.getReader(),E=new TextDecoder,I="";for(;;){let{done:h,value:y}=await u.read();if(h)break;I+=E.decode(y,{stream:!0});let D=Iy(I);I=D.rest,D.frames.forEach(a)}i?.aborted||Iy(I+` diff --git a/frontend/web/dist/assets/ResearchWorkbenchPanel-D0lDrnfL.js b/frontend/web/dist/assets/ResearchWorkbenchPanel-BnMJwuZz.js similarity index 99% rename from frontend/web/dist/assets/ResearchWorkbenchPanel-D0lDrnfL.js rename to frontend/web/dist/assets/ResearchWorkbenchPanel-BnMJwuZz.js index 479299f6..8b126ca0 100644 --- a/frontend/web/dist/assets/ResearchWorkbenchPanel-D0lDrnfL.js +++ b/frontend/web/dist/assets/ResearchWorkbenchPanel-BnMJwuZz.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pdf-7sVwyM5i.js","assets/index-BoGCagzS.js","assets/rolldown-runtime-hePW80VL.js","assets/icons-BgG77X6K.js","assets/query-DOc9YWJi.js","assets/markdown-BdostSiP.js","assets/index-BsbGxZOe.css"])))=>i.map(i=>d[i]); -import{r as e}from"./rolldown-runtime-hePW80VL.js";import{D as t,E as n}from"./icons-BgG77X6K.js";import{i as r,n as i,t as a}from"./query-DOc9YWJi.js";import{n as o,t as s}from"./markdown-BdostSiP.js";import{a as c,i as l,n as u,o as d,r as f,t as p}from"./index-BoGCagzS.js";var m=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),h=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),g={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`},_=e(t()),v=(0,_.forwardRef)(({color:e=`currentColor`,size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>(0,_.createElement)(`svg`,{ref:c,...g,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:h(`lucide`,i),...s},[...o.map(([e,t])=>(0,_.createElement)(e,t)),...Array.isArray(a)?a:[a]])),y=(e,t)=>{let n=(0,_.forwardRef)(({className:n,...r},i)=>(0,_.createElement)(v,{ref:i,iconNode:t,className:h(`lucide-${m(e)}`,n),...r}));return n.displayName=`${e}`,n},b=y(`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`}]]),x=y(`ArrowRight`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),S=y(`ArrowUp`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),C=y(`AudioLines`,[[`path`,{d:`M2 10v3`,key:`1fnikh`}],[`path`,{d:`M6 6v11`,key:`11sgs0`}],[`path`,{d:`M10 3v18`,key:`yhl04a`}],[`path`,{d:`M14 8v7`,key:`3a1oy3`}],[`path`,{d:`M18 5v13`,key:`123xd1`}],[`path`,{d:`M22 10v3`,key:`154ddg`}]]),w=y(`BookOpen`,[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z`,key:`ruj8y`}]]),T=y(`Calendar`,[[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`,key:`1hopcy`}],[`path`,{d:`M3 10h18`,key:`8toen8`}]]),E=y(`Check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),D=y(`ChevronDown`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),ee=y(`ChevronRight`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),O=y(`CircleCheck`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),k=y(`Circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),A=y(`Clock3`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`polyline`,{points:`12 6 12 12 16.5 12`,key:`1aq6pp`}]]),j=y(`CodeXml`,[[`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`}]]),M=y(`Earth`,[[`path`,{d:`M21.54 15H17a2 2 0 0 0-2 2v4.54`,key:`1djwo0`}],[`path`,{d:`M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17`,key:`1tzkfa`}],[`path`,{d:`M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05`,key:`14pb5j`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),N=y(`ExternalLink`,[[`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`}]]),te=y(`FileCheck2`,[[`path`,{d:`M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4`,key:`1pf5j1`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`m3 15 2 2 4-4`,key:`1lhrkk`}]]),P=y(`FileCode2`,[[`path`,{d:`M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4`,key:`1pf5j1`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`m5 12-3 3 3 3`,key:`oke12k`}],[`path`,{d:`m9 18 3-3-3-3`,key:`112psh`}]]),ne=y(`FileImage`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`circle`,{cx:`10`,cy:`12`,r:`2`,key:`737tya`}],[`path`,{d:`m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22`,key:`wt3hpn`}]]),re=y(`FileJson`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`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`}]]),F=y(`FileSearch2`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`circle`,{cx:`11.5`,cy:`14.5`,r:`2.5`,key:`1bq0ko`}],[`path`,{d:`M13.3 16.3 15 18`,key:`2quom7`}]]),ie=y(`FileSearch`,[[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`M4.268 21a2 2 0 0 0 1.727 1H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3`,key:`ms7g94`}],[`path`,{d:`m9 18-1.5-1.5`,key:`1j6qii`}],[`circle`,{cx:`5`,cy:`14`,r:`3`,key:`ufru5t`}]]),I=y(`FileText`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),L=y(`FileUp`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`M12 12v6`,key:`3ahymv`}],[`path`,{d:`m15 15-3-3-3 3`,key:`15xj92`}]]),ae=y(`File`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}]]),oe=y(`Files`,[[`path`,{d:`M20 7h-3a2 2 0 0 1-2-2V2`,key:`x099mo`}],[`path`,{d:`M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z`,key:`18t6ie`}],[`path`,{d:`M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8`,key:`1nja0z`}]]),se=y(`FlaskConical`,[[`path`,{d:`M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2`,key:`18mbvz`}],[`path`,{d:`M6.453 15h11.094`,key:`3shlmq`}],[`path`,{d:`M8.5 2h7`,key:`csnxdl`}]]),ce=y(`FolderKanban`,[[`path`,{d:`M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z`,key:`1fr9dc`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M12 10v2`,key:`hh53o1`}],[`path`,{d:`M16 10v6`,key:`1d6xys`}]]),le=y(`FolderOpen`,[[`path`,{d:`m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2`,key:`usdka0`}]]),ue=y(`FolderSearch`,[[`path`,{d:`M10.7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v4.1`,key:`1bw5m7`}],[`path`,{d:`m21 21-1.9-1.9`,key:`1g2n9r`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}]]),de=y(`Folder`,[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),fe=y(`Gauge`,[[`path`,{d:`m12 14 4-4`,key:`9kzdfg`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`,key:`19p75a`}]]),pe=y(`GitBranch`,[[`line`,{x1:`6`,x2:`6`,y1:`3`,y2:`15`,key:`17qcm7`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}],[`path`,{d:`M18 9a9 9 0 0 1-9 9`,key:`n2h4wq`}]]),me=y(`Github`,[[`path`,{d:`M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4`,key:`tonef`}],[`path`,{d:`M9 18c-4.51 2-5-2-7-2`,key:`9comsn`}]]),he=y(`History`,[[`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`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]]),ge=y(`Image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),_e=y(`Inbox`,[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]),ve=y(`Lightbulb`,[[`path`,{d:`M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5`,key:`1gvzjb`}],[`path`,{d:`M9 18h6`,key:`x1upvd`}],[`path`,{d:`M10 22h4`,key:`ceow96`}]]),ye=y(`Link2`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]),be=y(`ListChecks`,[[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}],[`path`,{d:`M13 6h8`,key:`15sg57`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 18h8`,key:`oe0vm4`}]]),xe=y(`ListFilter`,[[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M7 12h10`,key:`b7w52i`}],[`path`,{d:`M10 18h4`,key:`1ulq68`}]]),Se=y(`LoaderCircle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),Ce=y(`LockKeyhole`,[[`circle`,{cx:`12`,cy:`16`,r:`1`,key:`1au0dj`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`,key:`6s8ecr`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`,key:`1pqi11`}]]),we=y(`Megaphone`,[[`path`,{d:`m3 11 18-5v12L3 14v-3z`,key:`n962bs`}],[`path`,{d:`M11.6 16.8a3 3 0 1 1-5.8-1.6`,key:`1yl0tm`}]]),Te=y(`MessageSquareText`,[[`path`,{d:`M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z`,key:`1lielz`}],[`path`,{d:`M13 8H7`,key:`14i4kc`}],[`path`,{d:`M17 12H7`,key:`16if0g`}]]),Ee=y(`MessagesSquare`,[[`path`,{d:`M14 9a2 2 0 0 1-2 2H6l-4 4V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2z`,key:`p1xzt8`}],[`path`,{d:`M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1`,key:`1cx29u`}]]),De=y(`PackageCheck`,[[`path`,{d:`m16 16 2 2 4-4`,key:`gfu2re`}],[`path`,{d:`M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14`,key:`e7tb2h`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`12`,key:`a4e8g8`}]]),Oe=y(`Paperclip`,[[`path`,{d:`M13.234 20.252 21 12.3`,key:`1cbrk9`}],[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 0 2.828 2 2 0 0 0 2.828 0l8.414-8.586a4 4 0 0 0 0-5.656 4 4 0 0 0-5.656 0l-8.415 8.585a6 6 0 1 0 8.486 8.486`,key:`1pkts6`}]]),ke=y(`Pause`,[[`rect`,{x:`14`,y:`4`,width:`4`,height:`16`,rx:`1`,key:`zuxfzm`}],[`rect`,{x:`6`,y:`4`,width:`4`,height:`16`,rx:`1`,key:`1okwgv`}]]),Ae=y(`Play`,[[`polygon`,{points:`6 3 20 12 6 21 6 3`,key:`1oa8hb`}]]),je=y(`Plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Me=y(`Presentation`,[[`path`,{d:`M2 3h20`,key:`91anmk`}],[`path`,{d:`M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3`,key:`2k9sn8`}],[`path`,{d:`m7 21 5-5 5 5`,key:`bip4we`}]]),Ne=y(`Radio`,[[`path`,{d:`M4.9 19.1C1 15.2 1 8.8 4.9 4.9`,key:`1vaf9d`}],[`path`,{d:`M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5`,key:`u1ii0m`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}],[`path`,{d:`M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5`,key:`1j5fej`}],[`path`,{d:`M19.1 4.9C23 8.8 23 15.1 19.1 19`,key:`10b0cb`}]]),Pe=y(`RefreshCw`,[[`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`}]]),Fe=y(`RotateCcw`,[[`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`}]]),Ie=y(`Save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),Le=y(`Scale`,[[`path`,{d:`m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z`,key:`7g6ntu`}],[`path`,{d:`m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z`,key:`ijws7r`}],[`path`,{d:`M7 21h10`,key:`1b0cd5`}],[`path`,{d:`M12 3v18`,key:`108xh3`}],[`path`,{d:`M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2`,key:`3gwbw2`}]]),Re=y(`Search`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`path`,{d:`m21 21-4.3-4.3`,key:`1qie3q`}]]),ze=y(`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`}]]),Be=y(`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`}]]),R=y(`ShieldCheck`,[[`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`}]]),z=y(`Sparkles`,[[`path`,{d:`M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z`,key:`4pj2yx`}],[`path`,{d:`M20 3v4`,key:`1olli1`}],[`path`,{d:`M22 5h-4`,key:`1gvqau`}],[`path`,{d:`M4 17v2`,key:`vumght`}],[`path`,{d:`M5 18H3`,key:`zchphs`}]]),Ve=y(`SquareTerminal`,[[`path`,{d:`m7 11 2-2-2-2`,key:`1lz0vl`}],[`path`,{d:`M11 13h4`,key:`1p7l4v`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}]]),He=y(`Square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),Ue=y(`Table2`,[[`path`,{d:`M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18`,key:`gugj83`}]]),We=y(`Target`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Ge=y(`TimerReset`,[[`path`,{d:`M10 2h4`,key:`n1abiw`}],[`path`,{d:`M12 14v-4`,key:`1evpnu`}],[`path`,{d:`M4 13a8 8 0 0 1 8-7 8 8 0 1 1-5.3 14L4 17.6`,key:`1ts96g`}],[`path`,{d:`M9 17H4v5`,key:`8t5av`}]]),Ke=y(`Trash2`,[[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6`,key:`4alrt4`}],[`path`,{d:`M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2`,key:`v07s0e`}],[`line`,{x1:`10`,x2:`10`,y1:`11`,y2:`17`,key:`1uufr5`}],[`line`,{x1:`14`,x2:`14`,y1:`11`,y2:`17`,key:`xtxkd`}]]),qe=y(`TriangleAlert`,[[`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`}]]),Je=y(`Upload`,[[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`polyline`,{points:`17 8 12 3 7 8`,key:`t8dd8p`}],[`line`,{x1:`12`,x2:`12`,y1:`3`,y2:`15`,key:`widbto`}]]),Ye=y(`UserRound`,[[`circle`,{cx:`12`,cy:`8`,r:`5`,key:`1hypcn`}],[`path`,{d:`M20 21a8 8 0 0 0-16 0`,key:`rfgkzh`}]]),Xe=y(`WandSparkles`,[[`path`,{d:`m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72`,key:`ul74o6`}],[`path`,{d:`m14 7 3 3`,key:`1r5n42`}],[`path`,{d:`M5 6v4`,key:`ilb8ba`}],[`path`,{d:`M19 14v4`,key:`blhpug`}],[`path`,{d:`M10 2v2`,key:`7u0qdc`}],[`path`,{d:`M7 8H3`,key:`zfb6yr`}],[`path`,{d:`M21 16h-4`,key:`1cnmox`}],[`path`,{d:`M11 3H9`,key:`1obp7u`}]]),Ze=y(`Watch`,[[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`polyline`,{points:`12 10 12 12 13 13`,key:`19dquz`}],[`path`,{d:`m16.13 7.66-.81-4.05a2 2 0 0 0-2-1.61h-2.68a2 2 0 0 0-2 1.61l-.78 4.05`,key:`18k57s`}],[`path`,{d:`m7.88 16.36.8 4a2 2 0 0 0 2 1.61h2.72a2 2 0 0 0 2-1.61l.81-4.05`,key:`16ny36`}]]),Qe=y(`Workflow`,[[`rect`,{width:`8`,height:`8`,x:`3`,y:`3`,rx:`2`,key:`by2w9f`}],[`path`,{d:`M7 11v4a2 2 0 0 0 2 2h4`,key:`xkn7yn`}],[`rect`,{width:`8`,height:`8`,x:`13`,y:`13`,rx:`2`,key:`1cgmvn`}]]),$e=y(`Wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z`,key:`cbrjhi`}]]),et=y(`X`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),tt=12e3;function nt(e=!1){let t={...f()};return e&&(t[`Content-Type`]=`application/json`),t}async function B(e,t={}){await c();let n={...t,headers:{...nt(!!t.body),...t.headers??{}},cache:`no-store`},r=String(t.method??`GET`).toUpperCase(),i=async n=>{if(!n.ok){let r=await n.text().catch(()=>``),i=r;try{i=JSON.parse(r).detail??r}catch{}throw Error(i||`${t.method??`GET`} ${e} failed (${n.status})`)}return await n.json()};return r===`GET`?d(e,n,tt,i):i(await fetch(e,n))}var V=(e,t=``)=>`/api/projects/${encodeURIComponent(e)}${t}`,rt=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random()}`;function it(e){let t=e.replaceAll(`\r +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pdf-CBJhoU3W.js","assets/index-9g59E8KZ.js","assets/rolldown-runtime-hePW80VL.js","assets/icons-BgG77X6K.js","assets/query-DOc9YWJi.js","assets/markdown-BdostSiP.js","assets/index-BsbGxZOe.css"])))=>i.map(i=>d[i]); +import{r as e}from"./rolldown-runtime-hePW80VL.js";import{D as t,E as n}from"./icons-BgG77X6K.js";import{i as r,n as i,t as a}from"./query-DOc9YWJi.js";import{n as o,t as s}from"./markdown-BdostSiP.js";import{a as c,i as l,n as u,o as d,r as f,t as p}from"./index-9g59E8KZ.js";var m=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),h=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),g={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`},_=e(t()),v=(0,_.forwardRef)(({color:e=`currentColor`,size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>(0,_.createElement)(`svg`,{ref:c,...g,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:h(`lucide`,i),...s},[...o.map(([e,t])=>(0,_.createElement)(e,t)),...Array.isArray(a)?a:[a]])),y=(e,t)=>{let n=(0,_.forwardRef)(({className:n,...r},i)=>(0,_.createElement)(v,{ref:i,iconNode:t,className:h(`lucide-${m(e)}`,n),...r}));return n.displayName=`${e}`,n},b=y(`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`}]]),x=y(`ArrowRight`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),S=y(`ArrowUp`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),C=y(`AudioLines`,[[`path`,{d:`M2 10v3`,key:`1fnikh`}],[`path`,{d:`M6 6v11`,key:`11sgs0`}],[`path`,{d:`M10 3v18`,key:`yhl04a`}],[`path`,{d:`M14 8v7`,key:`3a1oy3`}],[`path`,{d:`M18 5v13`,key:`123xd1`}],[`path`,{d:`M22 10v3`,key:`154ddg`}]]),w=y(`BookOpen`,[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z`,key:`ruj8y`}]]),T=y(`Calendar`,[[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`,key:`1hopcy`}],[`path`,{d:`M3 10h18`,key:`8toen8`}]]),E=y(`Check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),D=y(`ChevronDown`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),ee=y(`ChevronRight`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),O=y(`CircleCheck`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),k=y(`Circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),A=y(`Clock3`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`polyline`,{points:`12 6 12 12 16.5 12`,key:`1aq6pp`}]]),j=y(`CodeXml`,[[`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`}]]),M=y(`Earth`,[[`path`,{d:`M21.54 15H17a2 2 0 0 0-2 2v4.54`,key:`1djwo0`}],[`path`,{d:`M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17`,key:`1tzkfa`}],[`path`,{d:`M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05`,key:`14pb5j`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),N=y(`ExternalLink`,[[`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`}]]),te=y(`FileCheck2`,[[`path`,{d:`M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4`,key:`1pf5j1`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`m3 15 2 2 4-4`,key:`1lhrkk`}]]),P=y(`FileCode2`,[[`path`,{d:`M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4`,key:`1pf5j1`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`m5 12-3 3 3 3`,key:`oke12k`}],[`path`,{d:`m9 18 3-3-3-3`,key:`112psh`}]]),ne=y(`FileImage`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`circle`,{cx:`10`,cy:`12`,r:`2`,key:`737tya`}],[`path`,{d:`m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22`,key:`wt3hpn`}]]),re=y(`FileJson`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`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`}]]),F=y(`FileSearch2`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`circle`,{cx:`11.5`,cy:`14.5`,r:`2.5`,key:`1bq0ko`}],[`path`,{d:`M13.3 16.3 15 18`,key:`2quom7`}]]),ie=y(`FileSearch`,[[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`M4.268 21a2 2 0 0 0 1.727 1H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3`,key:`ms7g94`}],[`path`,{d:`m9 18-1.5-1.5`,key:`1j6qii`}],[`circle`,{cx:`5`,cy:`14`,r:`3`,key:`ufru5t`}]]),I=y(`FileText`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),L=y(`FileUp`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`M12 12v6`,key:`3ahymv`}],[`path`,{d:`m15 15-3-3-3 3`,key:`15xj92`}]]),ae=y(`File`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}]]),oe=y(`Files`,[[`path`,{d:`M20 7h-3a2 2 0 0 1-2-2V2`,key:`x099mo`}],[`path`,{d:`M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z`,key:`18t6ie`}],[`path`,{d:`M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8`,key:`1nja0z`}]]),se=y(`FlaskConical`,[[`path`,{d:`M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2`,key:`18mbvz`}],[`path`,{d:`M6.453 15h11.094`,key:`3shlmq`}],[`path`,{d:`M8.5 2h7`,key:`csnxdl`}]]),ce=y(`FolderKanban`,[[`path`,{d:`M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z`,key:`1fr9dc`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M12 10v2`,key:`hh53o1`}],[`path`,{d:`M16 10v6`,key:`1d6xys`}]]),le=y(`FolderOpen`,[[`path`,{d:`m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2`,key:`usdka0`}]]),ue=y(`FolderSearch`,[[`path`,{d:`M10.7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v4.1`,key:`1bw5m7`}],[`path`,{d:`m21 21-1.9-1.9`,key:`1g2n9r`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}]]),de=y(`Folder`,[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),fe=y(`Gauge`,[[`path`,{d:`m12 14 4-4`,key:`9kzdfg`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`,key:`19p75a`}]]),pe=y(`GitBranch`,[[`line`,{x1:`6`,x2:`6`,y1:`3`,y2:`15`,key:`17qcm7`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}],[`path`,{d:`M18 9a9 9 0 0 1-9 9`,key:`n2h4wq`}]]),me=y(`Github`,[[`path`,{d:`M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4`,key:`tonef`}],[`path`,{d:`M9 18c-4.51 2-5-2-7-2`,key:`9comsn`}]]),he=y(`History`,[[`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`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]]),ge=y(`Image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),_e=y(`Inbox`,[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]),ve=y(`Lightbulb`,[[`path`,{d:`M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5`,key:`1gvzjb`}],[`path`,{d:`M9 18h6`,key:`x1upvd`}],[`path`,{d:`M10 22h4`,key:`ceow96`}]]),ye=y(`Link2`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]),be=y(`ListChecks`,[[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}],[`path`,{d:`M13 6h8`,key:`15sg57`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 18h8`,key:`oe0vm4`}]]),xe=y(`ListFilter`,[[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M7 12h10`,key:`b7w52i`}],[`path`,{d:`M10 18h4`,key:`1ulq68`}]]),Se=y(`LoaderCircle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),Ce=y(`LockKeyhole`,[[`circle`,{cx:`12`,cy:`16`,r:`1`,key:`1au0dj`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`,key:`6s8ecr`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`,key:`1pqi11`}]]),we=y(`Megaphone`,[[`path`,{d:`m3 11 18-5v12L3 14v-3z`,key:`n962bs`}],[`path`,{d:`M11.6 16.8a3 3 0 1 1-5.8-1.6`,key:`1yl0tm`}]]),Te=y(`MessageSquareText`,[[`path`,{d:`M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z`,key:`1lielz`}],[`path`,{d:`M13 8H7`,key:`14i4kc`}],[`path`,{d:`M17 12H7`,key:`16if0g`}]]),Ee=y(`MessagesSquare`,[[`path`,{d:`M14 9a2 2 0 0 1-2 2H6l-4 4V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2z`,key:`p1xzt8`}],[`path`,{d:`M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1`,key:`1cx29u`}]]),De=y(`PackageCheck`,[[`path`,{d:`m16 16 2 2 4-4`,key:`gfu2re`}],[`path`,{d:`M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14`,key:`e7tb2h`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`12`,key:`a4e8g8`}]]),Oe=y(`Paperclip`,[[`path`,{d:`M13.234 20.252 21 12.3`,key:`1cbrk9`}],[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 0 2.828 2 2 0 0 0 2.828 0l8.414-8.586a4 4 0 0 0 0-5.656 4 4 0 0 0-5.656 0l-8.415 8.585a6 6 0 1 0 8.486 8.486`,key:`1pkts6`}]]),ke=y(`Pause`,[[`rect`,{x:`14`,y:`4`,width:`4`,height:`16`,rx:`1`,key:`zuxfzm`}],[`rect`,{x:`6`,y:`4`,width:`4`,height:`16`,rx:`1`,key:`1okwgv`}]]),Ae=y(`Play`,[[`polygon`,{points:`6 3 20 12 6 21 6 3`,key:`1oa8hb`}]]),je=y(`Plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Me=y(`Presentation`,[[`path`,{d:`M2 3h20`,key:`91anmk`}],[`path`,{d:`M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3`,key:`2k9sn8`}],[`path`,{d:`m7 21 5-5 5 5`,key:`bip4we`}]]),Ne=y(`Radio`,[[`path`,{d:`M4.9 19.1C1 15.2 1 8.8 4.9 4.9`,key:`1vaf9d`}],[`path`,{d:`M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5`,key:`u1ii0m`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}],[`path`,{d:`M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5`,key:`1j5fej`}],[`path`,{d:`M19.1 4.9C23 8.8 23 15.1 19.1 19`,key:`10b0cb`}]]),Pe=y(`RefreshCw`,[[`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`}]]),Fe=y(`RotateCcw`,[[`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`}]]),Ie=y(`Save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),Le=y(`Scale`,[[`path`,{d:`m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z`,key:`7g6ntu`}],[`path`,{d:`m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z`,key:`ijws7r`}],[`path`,{d:`M7 21h10`,key:`1b0cd5`}],[`path`,{d:`M12 3v18`,key:`108xh3`}],[`path`,{d:`M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2`,key:`3gwbw2`}]]),Re=y(`Search`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`path`,{d:`m21 21-4.3-4.3`,key:`1qie3q`}]]),ze=y(`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`}]]),Be=y(`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`}]]),R=y(`ShieldCheck`,[[`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`}]]),z=y(`Sparkles`,[[`path`,{d:`M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z`,key:`4pj2yx`}],[`path`,{d:`M20 3v4`,key:`1olli1`}],[`path`,{d:`M22 5h-4`,key:`1gvqau`}],[`path`,{d:`M4 17v2`,key:`vumght`}],[`path`,{d:`M5 18H3`,key:`zchphs`}]]),Ve=y(`SquareTerminal`,[[`path`,{d:`m7 11 2-2-2-2`,key:`1lz0vl`}],[`path`,{d:`M11 13h4`,key:`1p7l4v`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}]]),He=y(`Square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),Ue=y(`Table2`,[[`path`,{d:`M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18`,key:`gugj83`}]]),We=y(`Target`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Ge=y(`TimerReset`,[[`path`,{d:`M10 2h4`,key:`n1abiw`}],[`path`,{d:`M12 14v-4`,key:`1evpnu`}],[`path`,{d:`M4 13a8 8 0 0 1 8-7 8 8 0 1 1-5.3 14L4 17.6`,key:`1ts96g`}],[`path`,{d:`M9 17H4v5`,key:`8t5av`}]]),Ke=y(`Trash2`,[[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6`,key:`4alrt4`}],[`path`,{d:`M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2`,key:`v07s0e`}],[`line`,{x1:`10`,x2:`10`,y1:`11`,y2:`17`,key:`1uufr5`}],[`line`,{x1:`14`,x2:`14`,y1:`11`,y2:`17`,key:`xtxkd`}]]),qe=y(`TriangleAlert`,[[`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`}]]),Je=y(`Upload`,[[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`polyline`,{points:`17 8 12 3 7 8`,key:`t8dd8p`}],[`line`,{x1:`12`,x2:`12`,y1:`3`,y2:`15`,key:`widbto`}]]),Ye=y(`UserRound`,[[`circle`,{cx:`12`,cy:`8`,r:`5`,key:`1hypcn`}],[`path`,{d:`M20 21a8 8 0 0 0-16 0`,key:`rfgkzh`}]]),Xe=y(`WandSparkles`,[[`path`,{d:`m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72`,key:`ul74o6`}],[`path`,{d:`m14 7 3 3`,key:`1r5n42`}],[`path`,{d:`M5 6v4`,key:`ilb8ba`}],[`path`,{d:`M19 14v4`,key:`blhpug`}],[`path`,{d:`M10 2v2`,key:`7u0qdc`}],[`path`,{d:`M7 8H3`,key:`zfb6yr`}],[`path`,{d:`M21 16h-4`,key:`1cnmox`}],[`path`,{d:`M11 3H9`,key:`1obp7u`}]]),Ze=y(`Watch`,[[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`polyline`,{points:`12 10 12 12 13 13`,key:`19dquz`}],[`path`,{d:`m16.13 7.66-.81-4.05a2 2 0 0 0-2-1.61h-2.68a2 2 0 0 0-2 1.61l-.78 4.05`,key:`18k57s`}],[`path`,{d:`m7.88 16.36.8 4a2 2 0 0 0 2 1.61h2.72a2 2 0 0 0 2-1.61l.81-4.05`,key:`16ny36`}]]),Qe=y(`Workflow`,[[`rect`,{width:`8`,height:`8`,x:`3`,y:`3`,rx:`2`,key:`by2w9f`}],[`path`,{d:`M7 11v4a2 2 0 0 0 2 2h4`,key:`xkn7yn`}],[`rect`,{width:`8`,height:`8`,x:`13`,y:`13`,rx:`2`,key:`1cgmvn`}]]),$e=y(`Wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z`,key:`cbrjhi`}]]),et=y(`X`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),tt=12e3;function nt(e=!1){let t={...f()};return e&&(t[`Content-Type`]=`application/json`),t}async function B(e,t={}){await c();let n={...t,headers:{...nt(!!t.body),...t.headers??{}},cache:`no-store`},r=String(t.method??`GET`).toUpperCase(),i=async n=>{if(!n.ok){let r=await n.text().catch(()=>``),i=r;try{i=JSON.parse(r).detail??r}catch{}throw Error(i||`${t.method??`GET`} ${e} failed (${n.status})`)}return await n.json()};return r===`GET`?d(e,n,tt,i):i(await fetch(e,n))}var V=(e,t=``)=>`/api/projects/${encodeURIComponent(e)}${t}`,rt=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random()}`;function it(e){let t=e.replaceAll(`\r `,` `).split(` @@ -11,7 +11,7 @@ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{D as t,E as n}from"./i `):`Not configured`}),(0,J.jsx)(`i`,{className:x.remotes.length?`ok`:`missing`,children:x.remotes.length?(0,J.jsx)(E,{size:12}):(0,J.jsx)(et,{size:12})})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsxs)(`dt`,{children:[(0,J.jsx)(pe,{size:13}),`Upstream`]}),(0,J.jsxs)(`dd`,{children:[x.upstream||`Not configured`,x.upstream?` · ahead ${x.ahead}, behind ${x.behind}`:``]}),(0,J.jsx)(`i`,{className:x.upstream?`ok`:`missing`,children:x.upstream?(0,J.jsx)(E,{size:12}):(0,J.jsx)(et,{size:12})})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsxs)(`dt`,{children:[(0,J.jsx)(Ye,{size:13}),`Commit identity`]}),(0,J.jsx)(`dd`,{children:x.identity.name&&x.identity.email?`${x.identity.name} <${x.identity.email}>`:`Not configured`}),(0,J.jsx)(`i`,{className:x.identity.valid?`ok`:`missing`,children:x.identity.valid?(0,J.jsx)(E,{size:12}):(0,J.jsx)(et,{size:12})})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsxs)(`dt`,{children:[(0,J.jsx)(me,{size:13}),`GitHub CLI`]}),(0,J.jsx)(`dd`,{children:x.github.authenticated?`${x.github.login} · ${x.github.protocol}`:`Not authenticated`}),(0,J.jsx)(`i`,{className:x.github.authenticated?`ok`:`missing`,children:x.github.authenticated?(0,J.jsx)(E,{size:12}):(0,J.jsx)(et,{size:12})})]})]}),(0,J.jsx)(`p`,{children:x.publish_ready?`Repository is ready for an explicitly approved push.`:`Configure the missing items before publishing. No credentials are shown in this UI.`})]}):(0,J.jsx)(X,{icon:pe,title:`Not a Git repository`})})]}),(0,J.jsxs)(`section`,{className:`vscode-terminal`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsx)(`strong`,{children:`ARGUS ACTIVITY`}),(0,J.jsxs)(`span`,{children:[(0,J.jsx)(Ve,{size:13}),`read-only`]})]}),(0,J.jsx)(`div`,{children:v.length?v.map((e,t)=>(0,J.jsxs)(`article`,{children:[(0,J.jsx)(`time`,{children:W(e.ts)}),(0,J.jsx)(`b`,{className:`terminal-role terminal-role--${ut(e)}`,children:ut(e)}),(0,J.jsx)(`span`,{children:`›`}),(0,J.jsx)(`code`,{children:q(e,800)||K(e)})]},`${e.ts}-${t}`)):(0,J.jsx)(`p`,{children:`$ waiting for Argus activity`})})]}),(0,J.jsxs)(`footer`,{className:`vscode-statusbar`,children:[(0,J.jsxs)(`span`,{children:[(0,J.jsx)(pe,{size:12}),x?.branch||`no branch`]}),(0,J.jsx)(`span`,{children:m.isError?`Workspace error`:m.isFetching?`Workspace syncing`:m.data?.truncated?`Tree truncated`:`Workspace synced`}),(0,J.jsx)(`span`,{children:x?.github.authenticated?`GitHub: ${x.github.login}`:`GitHub: offline`}),(0,J.jsx)(`span`,{children:`UTF-8`}),(0,J.jsx)(`span`,{children:o.split(`.`).at(-1)?.toUpperCase()||`Plain Text`})]})]})]})}var Gt=2e5,Kt=5,qt=e=>`argus-v2-inbox:${e}`,Jt=e=>{try{let t=JSON.parse(localStorage.getItem(qt(e))??`[]`);return Array.isArray(t)?t:[]}catch{return[]}},Yt=(e,t)=>({id:crypto.randomUUID(),title:e,source:t,raw:``,prompt:``,changes:[],questions:[],createdAt:Date.now(),updatedAt:Date.now()});function Xt(e,t){let n=[...e.matchAll(/^#{1,3}\s+(.+)\n([\s\S]*?)(?=^#{1,3}\s+|$)/gm)],r=e=>/目标|objective|question/i.test(e)?We:/约束|constraint|boundary|non-goal/i.test(e)?be:/文献|evidence|source|paper/i.test(e)?ye:ve,i=n.map(e=>({title:e[1].trim(),body:e[2].trim(),icon:r(e[1])})).filter(e=>e.body);if(i.length)return i.slice(0,8);let a=e.split(/\n\s*\n/).map(e=>e.trim()).filter(Boolean),o=[];a[0]&&o.push({title:`研究目标与背景`,body:a[0],icon:We});let s=e.split(` `).filter(e=>/不得|不要|必须|约束|only|must|do not|without/i.test(e)).join(` `);return s&&o.push({title:`约束与边界`,body:s,icon:be}),t.length&&o.push({title:`仍需确认`,body:t.map(e=>`- ${e}`).join(` -`),icon:ve}),o}function Zt(e){let{text:t}=Q(),[n,r]=(0,_.useState)(()=>Jt(e.sid)),[i,a]=(0,_.useState)(()=>Jt(e.sid)[0]?.id??``),[o,s]=(0,_.useState)(!1),[c,l]=(0,_.useState)([]),[u,d]=(0,_.useState)(0),[f,p]=(0,_.useState)(``),[m,h]=(0,_.useState)(``),[g,v]=(0,_.useState)(`current`),[y,b]=(0,_.useState)(``),[x,S]=(0,_.useState)(``),w=_t(e.sid,e.refresh);(0,_.useEffect)(()=>{let t=Jt(e.sid);r(t),a(t[0]?.id??``),l([]),d(0)},[e.sid]),(0,_.useEffect)(()=>{try{localStorage.setItem(qt(e.sid),JSON.stringify(n)),h(``)}catch{h(`本机草稿存储空间不足;请缩短文本或删除旧草稿。`)}},[n,e.sid]);let T=n.find(e=>e.id===i)??null,D=(0,_.useMemo)(()=>Xt(T?.prompt??``,T?.questions??[]),[T?.prompt,T?.questions]),O=e=>T&&r(t=>t.map(t=>t.id===T.id?{...t,...e,updatedAt:Date.now()}:t)),k=()=>{let e=Yt(t(`新的科研输入`,`New research input`),t(`导师 / 组会 / 灵感`,`Advisor / meeting / idea`));r(t=>[e,...t]),a(e.id)},A=()=>{if(!T||!confirm(t(`删除“${T.title}”?`,`Delete “${T.title}”?`)))return;let e=n.filter(e=>e.id!==T.id);r(e),a(e[0]?.id??``)},j=T?`这是科研收信箱的预处理步骤,只分析输入并回复,不创建后台任务、不修改项目。请读取下面的零散内容和附件,提取知识点并生成第一版可直接交给 Argus 的研究 Prompt。必须保留事实来源和不确定性,不得虚构论文、实验或结论;使用以下 Markdown 结构:\n## 研究目标\n## 已知背景与知识点\n## 约束与非目标\n## 文献与证据线索\n## 建议任务与验收方式\n## 待确认问题\n\n标题:${T.title}\n来源:${T.source}\n\n原始内容:\n${T.raw}`:``,M=async e=>{let t=/\.(txt|md|markdown|json|csv|ya?ml|log|tex)$/i,n=/\.(pdf|png|jpe?g|webp|wav|mp3|m4a|ogg)$/i,r=e.filter(e=>!t.test(e.name)&&!n.test(e.name));if(r.length){p(`不支持的附件:${r.map(e=>e.name).join(`、`)}`);return}let i=e.find(e=>e.size>10485760);if(i){p(`${i.name} 超过单文件 10 MB 限制`);return}if(c.length+u+e.length>Kt){p(`每次分析最多导入 ${Kt} 个文件`);return}let a=e.filter(e=>t.test(e.name)),o=a.find(e=>e.size>1048576);if(o){p(`${o.name} 超过本机文本导入 1 MB 限制;请改为摘要或拆分文件`);return}let s=e.filter(e=>n.test(e.name)),f=[...c,...s];if(f.reduce((e,t)=>e+t.size,0)>26214400){p(`附件总大小超过 25 MB`);return}let m=await Promise.all(a.map(async e=>`\n\n--- 文件:${e.name} ---\n${await e.text()}`)),h=`${T?.raw??``}${m.join(``)}`.trim();if(h.length>Gt){p(`原始输入超过 ${Gt.toLocaleString()} 字符限制,请拆分或摘要`);return}m.length&&(O({raw:h}),d(e=>e+a.length)),l(f),p(``)},N=async()=>{if(!(!T||!T.raw.trim()&&!c.length)){s(!0),p(``);try{if(c.length){let e=await w.run(j,c),t=String(e?.reply||w.output||``).trim();if(!t)throw Error(`Argus 没有返回可用的知识提取结果`);O({prompt:t,changes:[`分析了 ${c.length} 个附件和原始输入`],questions:[]}),l([])}else{let t=await H.rewritePrompt(e.sid,j);if(t.error)throw Error(t.error);O({prompt:t.rewritten,changes:t.changes,questions:t.questions})}}catch(e){p(e instanceof Error?e.message:String(e))}finally{s(!1)}}},te=async()=>{if(T?.prompt.trim()){if(g===`new`){if(!y.trim()||!confirm(t(`确认用当前 Prompt 创建一个新的 Argus 项目?`,`Create a new Argus project with this prompt?`)))return;try{let e=await H.createDaemon(T.prompt,y,x);O({sentAt:Date.now()}),window.location.hash=`project/${e.sid}/overview`}catch(e){p(e instanceof Error?e.message:String(e))}return}confirm(t(`确认把这份第一版 Prompt 发送给当前 Argus 项目?`,`Send this first prompt to the current Argus project?`))&&await w.run(T.prompt)&&O({sentAt:Date.now()})}},P=T?.sentAt?4:T?.prompt?3:T?.raw||c.length?2:1;return(0,J.jsxs)(`div`,{className:`ros-page inbox-v2`,children:[(0,J.jsxs)(`header`,{className:`ros-page-header`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`eyebrow`,children:`RESEARCH INBOX`}),(0,J.jsx)(`h1`,{children:t(`从零散输入开始研究`,`Start research from rough input`)}),(0,J.jsx)(`p`,{children:t(`把消息、会议记录、文件或灵感交给 AI,提取知识点并形成第一版 Argus Prompt。`,`Give AI messages, meeting notes, files, or ideas to extract knowledge and create a first Argus prompt.`)})]}),(0,J.jsxs)(Y,{tone:`neutral`,children:[(0,J.jsx)(Ie,{size:12}),t(`本机自动保存`,`Saved locally`)]})]}),(0,J.jsx)(`div`,{className:`intake-steps`,children:[[t(`收集原始内容`,`Collect input`),Te],[t(`AI 提取知识`,`Extract knowledge`),Xe],[t(`形成 Argus Prompt`,`Build Argus prompt`),I],[t(`创建 / 发送项目`,`Create / send project`),ze]].map(([e,t],n)=>(0,J.jsxs)(`div`,{className:P>n?`is-done`:P===n+1?`is-active`:``,children:[(0,J.jsx)(`span`,{children:P>n+1?(0,J.jsx)(E,{size:14}):(0,J.jsx)(t,{size:15})}),(0,J.jsx)(`strong`,{children:String(e)}),n<3?(0,J.jsx)(ee,{size:14}):null]},String(e)))}),(0,J.jsxs)(`div`,{className:`inbox-v2__layout`,children:[(0,J.jsxs)(`aside`,{className:`ros-card inbox-sources`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`INBOX`}),(0,J.jsx)(`h2`,{children:t(`科研输入`,`Research input`)})]}),(0,J.jsx)(`button`,{className:`icon-button`,type:`button`,onClick:k,"aria-label":t(`新增输入`,`Add input`),children:(0,J.jsx)(je,{size:15})})]}),(0,J.jsx)(`div`,{children:n.length?n.map(e=>(0,J.jsxs)(`button`,{type:`button`,className:T?.id===e.id?`is-active`:``,onClick:()=>a(e.id),children:[(0,J.jsx)(`span`,{className:`inbox-item-icon`,children:e.sentAt?(0,J.jsx)(E,{size:14}):e.prompt?(0,J.jsx)(z,{size:14}):(0,J.jsx)(_e,{size:14})}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.title}),(0,J.jsxs)(`small`,{children:[e.source,` · `,ct(e.updatedAt/1e3)]})]})]},e.id)):(0,J.jsx)(X,{icon:_e,title:t(`暂无输入`,`No input yet`),description:t(`新增一条导师消息、组会笔记或研究灵感。`,`Add an advisor message, meeting note, or research idea.`)})})]}),(0,J.jsxs)(`main`,{className:`ros-card inbox-input`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`RAW MATERIAL`}),(0,J.jsx)(`h2`,{children:t(`原始内容与附件`,`Raw content and attachments`)})]}),T?(0,J.jsx)(`button`,{className:`icon-button`,type:`button`,onClick:A,"aria-label":t(`删除`,`Delete`),children:(0,J.jsx)(Ke,{size:14})}):null]}),T?(0,J.jsxs)(`div`,{className:`inbox-input__form`,children:[(0,J.jsxs)(`div`,{className:`form-grid`,children:[(0,J.jsxs)(`label`,{children:[(0,J.jsx)(`span`,{children:t(`标题`,`Title`)}),(0,J.jsx)(`input`,{value:T.title,onChange:e=>O({title:e.target.value})})]}),(0,J.jsxs)(`label`,{children:[(0,J.jsx)(`span`,{children:t(`来源`,`Source`)}),(0,J.jsx)(`input`,{value:T.source,onChange:e=>O({source:e.target.value})})]})]}),(0,J.jsxs)(`label`,{className:`field field--grow`,children:[(0,J.jsx)(`span`,{children:t(`零散消息、笔记或转写文本`,`Rough messages, notes, or transcripts`)}),(0,J.jsx)(`textarea`,{maxLength:Gt,value:T.raw,onChange:e=>O({raw:e.target.value}),placeholder:t(`不需要先整理,直接粘贴原始内容。AI 会区分目标、事实、约束、文献线索、待办和疑问…`,`Paste raw content directly. AI will separate goals, facts, constraints, evidence leads, tasks, and questions…`)})]}),c.length?(0,J.jsx)(`div`,{className:`inbox-attachment-list`,children:c.map((e,t)=>(0,J.jsxs)(`span`,{children:[e.type.startsWith(`audio/`)?(0,J.jsx)(C,{size:14}):e.type.startsWith(`image/`)?(0,J.jsx)(ge,{size:14}):(0,J.jsx)(I,{size:14}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.name}),(0,J.jsxs)(`small`,{children:[(e.size/1024/1024).toFixed(1),` MB · 仅在本次分析上传`]})]}),(0,J.jsx)(`button`,{type:`button`,onClick:()=>l(e=>e.filter((e,n)=>n!==t)),children:(0,J.jsx)(et,{size:13})})]},`${e.name}-${t}`))}):null,(0,J.jsxs)(`div`,{className:`inbox-upload-types`,children:[(0,J.jsxs)(`span`,{children:[(0,J.jsx)(I,{size:14}),`PDF / `,t(`文本`,`text`)]}),(0,J.jsxs)(`span`,{children:[(0,J.jsx)(ge,{size:14}),t(`图片`,`images`)]}),(0,J.jsxs)(`span`,{children:[(0,J.jsx)(C,{size:14}),t(`语音`,`audio`)]}),(0,J.jsx)(`p`,{children:t(`语音会交给 Argus 和已配置工具处理,不把“上传成功”冒充“已完成转写”。`,`Audio is handed to Argus and configured tools; an upload is never presented as a completed transcript.`)})]}),(0,J.jsxs)(`div`,{className:`inbox-input__actions`,children:[(0,J.jsxs)(`label`,{className:`button button--secondary file-button`,children:[(0,J.jsx)(Je,{size:14}),t(`添加文件`,`Add files`),(0,J.jsx)(`input`,{type:`file`,multiple:!0,accept:`.txt,.md,.markdown,.json,.csv,.yaml,.yml,.log,.tex,.pdf,.png,.jpg,.jpeg,.webp,.wav,.mp3,.m4a,.ogg`,onChange:e=>void M(Array.from(e.target.files??[]))})]}),(0,J.jsxs)(`button`,{className:`button button--primary`,type:`button`,disabled:!T.raw.trim()&&!c.length||o||w.busy,onClick:()=>void N(),children:[o||w.busy?(0,J.jsx)(z,{size:14}):(0,J.jsx)(Xe,{size:14}),o||w.busy?w.phase||t(`AI 正在分析`,`AI is analyzing`):t(`分析内容并生成 Prompt`,`Analyze and generate prompt`)]})]}),f?(0,J.jsx)(`div`,{className:`inline-error`,children:f}):null,m?(0,J.jsx)(`div`,{className:`inline-error`,children:m}):null]}):(0,J.jsx)(X,{icon:_e,title:t(`选择或新增一条科研输入`,`Select or add research input`)})]}),(0,J.jsxs)(`aside`,{className:`inbox-output`,children:[(0,J.jsxs)(`section`,{className:`ros-card knowledge-panel`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`KNOWLEDGE EXTRACTION`}),(0,J.jsx)(`h2`,{children:t(`AI 提取的知识点`,`AI-extracted knowledge`)})]}),D.length?(0,J.jsxs)(Y,{tone:`success`,children:[D.length,` `,t(`组`,`groups`)]}):null]}),D.length?(0,J.jsx)(`div`,{className:`knowledge-grid`,children:D.map(e=>{let t=e.icon;return(0,J.jsxs)(`article`,{children:[(0,J.jsx)(`span`,{children:(0,J.jsx)(t,{size:15})}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.title}),(0,J.jsx)(Z,{children:e.body})]})]},e.title)})}):(0,J.jsx)(X,{icon:ve,title:t(`等待 AI 提取`,`Waiting for AI extraction`),description:t(`结果会明确区分目标、知识点、约束、证据线索和待确认问题。`,`The result separates goals, knowledge, constraints, evidence leads, and open questions.`)})]}),(0,J.jsxs)(`section`,{className:`ros-card first-prompt`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`FIRST ARGUS PROMPT`}),(0,J.jsx)(`h2`,{children:t(`第一版 Argus Prompt`,`First Argus prompt`)})]}),T?.prompt?(0,J.jsx)(Y,{tone:`info`,children:t(`可编辑`,`Editable`)}):null]}),T?.prompt?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`textarea`,{value:T.prompt,onChange:e=>O({prompt:e.target.value})}),(0,J.jsxs)(`div`,{className:`dispatch-mode`,children:[(0,J.jsx)(`button`,{type:`button`,className:g===`current`?`is-active`:``,onClick:()=>v(`current`),children:t(`发送当前项目`,`Send to current project`)}),(0,J.jsx)(`button`,{type:`button`,className:g===`new`?`is-active`:``,onClick:()=>v(`new`),children:t(`创建新项目`,`Create new project`)})]}),g===`new`?(0,J.jsxs)(`div`,{className:`new-project-fields`,children:[(0,J.jsx)(`input`,{value:y,onChange:e=>b(e.target.value),placeholder:t(`新项目名称`,`New project name`)}),(0,J.jsx)(`input`,{value:x,onChange:e=>S(e.target.value),placeholder:t(`工作目录(可选,留空自动创建)`,`Workdir (optional; blank creates one)`)})]}):null,(0,J.jsxs)(`button`,{className:`button button--primary button--full`,type:`button`,disabled:w.busy,onClick:()=>void te(),children:[(0,J.jsx)(ze,{size:14}),w.busy?w.phase||t(`正在发送`,`Sending`):g===`new`?t(`用此 Prompt 创建 Argus 项目`,`Create Argus project with this prompt`):t(`确认并发送给当前 Argus`,`Confirm and send to current Argus`)]}),w.output?(0,J.jsx)(`div`,{className:`manager-mini-result`,children:(0,J.jsx)(Z,{children:w.output})}):null]}):(0,J.jsx)(X,{icon:I,title:t(`尚未生成 Prompt`,`No prompt generated`),description:t(`AI 提取后会在这里生成第一版 Prompt,你可以先修改再发送。`,`The first prompt appears here after extraction and can be edited before sending.`)})]})]})]})]})}function Qt({paper:e,selected:t,onClick:n}){let{text:r}=Q();return(0,J.jsxs)(`button`,{type:`button`,className:`paper-card ${t?`is-selected`:``}`,onClick:n,children:[(0,J.jsxs)(`div`,{className:`paper-card__meta`,children:[(0,J.jsx)(Y,{tone:e.evidenceStatus===`verified_artifact`?`success`:e.evidenceStatus===`metadata`?`info`:`warn`,children:e.evidenceStatus===`verified_artifact`?r(`原文文件已验证`,`Source verified`):e.evidenceStatus===`metadata`?r(`仅元数据`,`Metadata only`):r(`待核验`,`Needs verification`)}),(0,J.jsxs)(`span`,{className:`paper-card__year`,children:[e.year||`—`,e.venue?` · ${e.venue}`:``]})]}),(0,J.jsx)(`h3`,{children:e.title}),e.authors.length?(0,J.jsxs)(`p`,{className:`paper-card__authors`,children:[e.authors.slice(0,4).join(`, `),e.authors.length>4?` et al.`:``]}):null,(0,J.jsx)(`p`,{className:`paper-card__summary`,children:e.relevance||e.abstract||r(`该记录尚未写入项目相关性摘要。`,`No project-relevance summary has been recorded.`)}),(0,J.jsxs)(`div`,{className:`paper-card__footer`,children:[(0,J.jsx)(`code`,{children:e.sourcePath}),(0,J.jsx)(`span`,{children:r(`查看详情`,`View details`)})]})]})}function $t(e){let{text:t}=Q(),n=Vt(e.sid,`literature`),r=n.active?.path||``,a=i({queryKey:[`workspace-literature`,e.sid,n.workspaceId],queryFn:({signal:t})=>$.literature(e.sid,n.workspaceId,t),enabled:!!n.workspaceId,refetchInterval:15e3}),[o,s]=(0,_.useState)(`all`),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)(``),[f,p]=(0,_.useState)(``),m=_t(e.sid,async()=>{await e.refresh(),await a.refetch()}),h=a.data?.papers??[],g=Math.max(0,...h.map(e=>e.year??0)),v=(0,_.useMemo)(()=>h.filter(e=>{if(o===`recent`&&(e.year??0)e.id===u)??v[0]??null,b=(0,_.useMemo)(()=>e.events.filter(e=>/paper|arxiv|doi|literature|search|citation|http/i.test(`${e.type} ${e.kind} ${q(e,2e3)}`)).slice(-30).reverse(),[e.events]),x=async()=>{f.trim()&&await m.run(`请为当前项目执行新的文献调研:${f}\n\n要求读取原始论文或官方仓库,把结构化记录追加到项目的 literature grounding/audit 文件中,包括标题、作者、年份、URL、与当前项目关系、最近工作威胁和仍待全文核验项。完成后文献中心应能从工作目录直接读取这些记录。`)};return(0,J.jsxs)(`div`,{className:`ros-page literature-v2`,children:[(0,J.jsxs)(`header`,{className:`ros-page-header`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`eyebrow`,children:`LITERATURE CENTER`}),(0,J.jsx)(`h1`,{children:t(`文献中心`,`Literature center`)}),(0,J.jsx)(`p`,{children:t(`直接读取 Argus 工作目录中的论文清单、文献审计和实时检索轨迹,不再依赖手工注册 artifacts。`,`Read paper inventories, literature audits, and live retrieval traces directly from the Argus workdir.`)})]}),(0,J.jsxs)(`div`,{className:`header-badges`,children:[(0,J.jsxs)(Y,{tone:`success`,children:[(0,J.jsx)(w,{size:12}),h.length,` `,t(`篇论文`,`papers`)]}),(0,J.jsxs)(Y,{tone:`neutral`,children:[a.data?.sourceFiles.length??0,` `,t(`个证据文件`,`evidence files`)]})]})]}),(0,J.jsxs)(`section`,{className:`literature-stats`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{className:`stat-icon stat-icon--blue`,children:(0,J.jsx)(w,{size:18})}),(0,J.jsxs)(`p`,{children:[t(`论文记录`,`Paper records`),(0,J.jsx)(`strong`,{children:h.length})]})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{className:`stat-icon stat-icon--green`,children:(0,J.jsx)(ie,{size:18})}),(0,J.jsxs)(`p`,{children:[t(`原文文件已验证`,`Verified sources`),(0,J.jsx)(`strong`,{children:h.filter(e=>e.evidenceStatus===`verified_artifact`).length})]})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{className:`stat-icon stat-icon--amber`,children:(0,J.jsx)(T,{size:18})}),(0,J.jsxs)(`p`,{children:[t(`最近工作`,`Recent work`),(0,J.jsx)(`strong`,{children:h.filter(e=>(e.year??0)>=g-1).length})]})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{className:`stat-icon stat-icon--violet`,children:(0,J.jsx)(ue,{size:18})}),(0,J.jsxs)(`p`,{children:[t(`扫描项目文件`,`Scanned files`),(0,J.jsx)(`strong`,{children:a.data?.scannedFiles??0})]})]})]}),(0,J.jsxs)(`div`,{className:`literature-v2__layout`,children:[(0,J.jsxs)(`aside`,{className:`literature-v2__sidebar ros-card`,children:[(0,J.jsx)(`header`,{children:(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`LIBRARY`}),(0,J.jsx)(`h2`,{children:t(`项目文献库`,`Project library`)})]})}),(0,J.jsxs)(`label`,{className:`search-field search-field--block`,children:[(0,J.jsx)(Re,{size:14}),(0,J.jsx)(`input`,{value:c,onChange:e=>l(e.target.value),placeholder:t(`搜索标题、作者、主题`,`Search title, author, or topic`)})]}),(0,J.jsx)(`nav`,{className:`library-tabs`,children:[[`all`,t(`全部论文`,`All papers`),h.length],[`recent`,t(`最近工作`,`Recent work`),h.filter(e=>(e.year??0)>=g-1).length],[`read`,t(`已验证原文`,`Verified sources`),h.filter(e=>e.evidenceStatus===`verified_artifact`).length],[`sources`,t(`证据文件`,`Evidence files`),a.data?.sourceFiles.length??0]].map(([e,t,n])=>(0,J.jsxs)(`button`,{type:`button`,className:o===e?`is-active`:``,onClick:()=>s(e),children:[(0,J.jsx)(`span`,{children:t}),(0,J.jsx)(`small`,{children:n})]},e))}),(0,J.jsxs)(`div`,{className:`literature-source-note`,children:[(0,J.jsx)(re,{size:15}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:t(`实时来源`,`Live source`)}),(0,J.jsx)(`p`,{title:r,children:r})]})]})]}),(0,J.jsxs)(`main`,{className:`literature-v2__main`,children:[(0,J.jsxs)(`div`,{className:`literature-list-header`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h2`,{children:o===`recent`?t(`最近工作`,`Recent work`):o===`read`?t(`已验证原文文件`,`Verified source files`):o===`sources`?t(`文献证据文件`,`Literature evidence files`):t(`全部论文`,`All papers`)}),(0,J.jsx)(`p`,{children:o===`recent`?t(`按项目中最新年份 ${g||`—`} 自动筛选`,`Filtered by the latest project year: ${g||`—`}`):t(`Argus 写入工作目录后约 5 秒内自动更新`,`Updates shortly after Argus writes to the workdir`)})]}),a.isError?(0,J.jsx)(Y,{tone:`danger`,children:t(`同步失败`,`Sync failed`)}):a.isFetching?(0,J.jsx)(Y,{tone:`live`,dot:!0,children:t(`同步中`,`Syncing`)}):(0,J.jsx)(Y,{tone:`success`,children:t(`已同步`,`Synced`)})]}),a.isError?(0,J.jsx)(`div`,{className:`inline-error`,children:a.error.message}):null,o===`sources`?(0,J.jsx)(`div`,{className:`source-file-grid`,children:a.data?.sourceFiles.map(e=>(0,J.jsxs)(`article`,{children:[(0,J.jsx)(re,{size:17}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.name}),(0,J.jsx)(`code`,{children:e.path})]}),(0,J.jsx)(`time`,{children:ct(e.mtime)})]},e.path))}):v.length?(0,J.jsx)(`div`,{className:`paper-grid`,children:v.map(e=>(0,J.jsx)(Qt,{paper:e,selected:y?.id===e.id,onClick:()=>d(e.id)},e.id))}):(0,J.jsx)(X,{icon:w,title:t(`此筛选下暂无论文`,`No papers match this filter`),description:t(`Argus 完成检索并写入 LITERATURE_GROUNDING.json 后会自动出现。`,`Papers appear after Argus writes LITERATURE_GROUNDING.json.`)})]}),(0,J.jsxs)(`aside`,{className:`literature-v2__detail`,children:[(0,J.jsx)(`section`,{className:`ros-card paper-detail`,children:y?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(`div`,{className:`paper-detail__top`,children:[(0,J.jsx)(Y,{tone:y.evidenceStatus===`verified_artifact`?`success`:y.evidenceStatus===`metadata`?`info`:`warn`,children:y.evidenceStatus===`verified_artifact`?`verified artifact`:y.evidenceStatus}),(0,J.jsxs)(`span`,{children:[y.year||`—`,y.venue?` · ${y.venue}`:``]})]}),(0,J.jsx)(`h2`,{children:y.title}),y.authors.length?(0,J.jsx)(`p`,{className:`paper-detail__authors`,children:y.authors.join(`, `)}):null,(0,J.jsxs)(`div`,{className:`paper-detail__body`,children:[(0,J.jsx)(`h3`,{children:t(`与当前项目的关系`,`Relationship to this project`)}),(0,J.jsx)(Z,{children:y.relevance||y.abstract||t(`尚未写入摘要。`,`No summary recorded.`)}),y.abstract&&y.relevance?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`h3`,{children:t(`摘要`,`Abstract`)}),(0,J.jsx)(`p`,{children:y.abstract})]}):null]}),(0,J.jsxs)(`div`,{className:`paper-detail__source`,children:[(0,J.jsx)(`span`,{children:t(`证据文件`,`Evidence file`)}),(0,J.jsx)(`code`,{children:y.sourcePath})]}),y.url?(0,J.jsxs)(`a`,{className:`button button--secondary button--full`,href:y.url,target:`_blank`,rel:`noreferrer`,children:[t(`打开原始来源`,`Open source`),` `,(0,J.jsx)(N,{size:14})]}):null]}):(0,J.jsx)(X,{icon:w,title:t(`选择一篇论文`,`Select a paper`)})}),(0,J.jsxs)(`section`,{className:`ros-card retrieval-panel`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`ARGUS RETRIEVAL`}),(0,J.jsx)(`h2`,{children:t(`最近检索`,`Recent retrieval`)})]}),(0,J.jsx)(Y,{tone:e.connected?`live`:`warn`,dot:!0,children:e.connected?`Live`:`Polling`})]}),(0,J.jsxs)(`div`,{children:[(a.data?.searchFiles??[]).slice(0,8).map(e=>(0,J.jsxs)(`article`,{children:[(0,J.jsx)(ie,{size:13}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.name}),(0,J.jsx)(`code`,{children:e.path})]}),(0,J.jsx)(`time`,{children:W(e.mtime)})]},e.path)),!a.data?.searchFiles.length&&b.slice(0,8).map((e,t)=>(0,J.jsxs)(`article`,{children:[(0,J.jsx)(ie,{size:13}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:K(e)}),(0,J.jsx)(`code`,{children:q(e,100)})]}),(0,J.jsx)(`time`,{children:W(e.ts)})]},`${e.ts}-${t}`))]})]}),(0,J.jsxs)(`section`,{className:`ros-card literature-ask`,children:[(0,J.jsx)(`header`,{children:(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`NEW SEARCH`}),(0,J.jsx)(`h2`,{children:t(`让 Argus 调研新工作`,`Ask Argus to research new work`)})]})}),(0,J.jsx)(`textarea`,{rows:3,value:f,onChange:e=>p(e.target.value),placeholder:t(`例如:检索 2025–2026 年与当前方法最接近的直接竞争工作…`,`Example: find the closest competing work from 2025–2026…`)}),(0,J.jsxs)(`button`,{className:`button button--primary button--full`,type:`button`,disabled:!f.trim()||m.busy,onClick:()=>void x(),children:[(0,J.jsx)(z,{size:14}),m.busy?m.phase||t(`检索中`,`Researching`):t(`发起文献调研`,`Start literature research`)]}),m.output?(0,J.jsx)(`div`,{className:`manager-mini-result`,children:(0,J.jsx)(Z,{children:m.output})}):null]})]})]})]})}var en=`/assets/pdf.worker.min-CHFwMXne.mjs`;function tn(e){return[`.png`,`.jpg`,`.jpeg`,`.webp`,`.svg`].includes(e.extension)}function nn(e){return[`.csv`,`.tsv`].includes(e.extension)}function rn(e){return[`.tex`,`.md`].includes(e.extension)}function an({src:e,name:t}){let{text:n}=Q(),r=(0,_.useRef)(null),[i,a]=(0,_.useState)(null),[o,s]=(0,_.useState)(1),[c,l]=(0,_.useState)(1.25),[u,d]=(0,_.useState)(``),[f,m]=(0,_.useState)(!1);return(0,_.useEffect)(()=>{let t=!0,n=null;a(null),s(1),d(``),m(!1);let r=localStorage.getItem(`argus_web_token`);return Promise.all([fetch(e,{headers:r?{Authorization:`Bearer ${r}`}:{}}).then(e=>{if(!e.ok)throw Error(`PDF request failed (${e.status})`);return e.arrayBuffer()}),p(()=>import(`./pdf-7sVwyM5i.js`),__vite__mapDeps([0,1,2,3,4,5,6]))]).then(([e,r])=>{if(t)return r.GlobalWorkerOptions.workerSrc=en,n=r.getDocument({data:e}),n.promise}).then(e=>{t&&e&&a(e)}).catch(e=>{t&&d(e instanceof Error?e.message:String(e))}),()=>{t=!1,n?.destroy()}},[e]),(0,_.useEffect)(()=>{if(!i||!r.current)return;m(!1);let e=!1,t=null;return i.getPage(o).then(n=>{if(e||!r.current)return;let i=n.getViewport({scale:c}),a=r.current,o=a.getContext(`2d`);if(!o)return;let s=Math.min(window.devicePixelRatio||1,2);return a.width=Math.floor(i.width*s),a.height=Math.floor(i.height*s),a.style.width=`${i.width}px`,a.style.height=`${i.height}px`,t=n.render({canvas:a,canvasContext:o,viewport:i,transform:s===1?void 0:[s,0,0,s,0,0]}),t.promise.then(()=>{e||m(!0)})}).catch(t=>{e||d(t instanceof Error?t.message:String(t))}),()=>{e=!0,t?.cancel()}},[i,o,c]),(0,J.jsxs)(`div`,{className:`pdf-canvas-viewer`,children:[(0,J.jsxs)(`div`,{className:`pdf-canvas-toolbar`,children:[(0,J.jsx)(`strong`,{children:t}),(0,J.jsxs)(`span`,{children:[n(`第`,`Page`),` `,o,` / `,i?.numPages??`…`]}),(0,J.jsx)(`button`,{type:`button`,disabled:o<=1,onClick:()=>s(e=>e-1),children:n(`上一页`,`Previous`)}),(0,J.jsx)(`button`,{type:`button`,disabled:!i||o>=i.numPages,onClick:()=>s(e=>e+1),children:n(`下一页`,`Next`)}),(0,J.jsx)(`button`,{type:`button`,onClick:()=>l(e=>Math.max(.75,e-.15)),children:`−`}),(0,J.jsx)(`button`,{type:`button`,onClick:()=>l(e=>Math.min(2,e+.15)),children:`+`})]}),u?(0,J.jsx)(`div`,{className:`inline-error`,children:u}):null,(0,J.jsx)(`div`,{className:`pdf-canvas-scroll`,children:(0,J.jsx)(`canvas`,{ref:r,"data-rendered":f?`true`:`false`})})]})}function on({sid:e,workspaceId:t,entry:n}){let{text:r}=Q(),a=i({queryKey:[`paper-source-file`,e,t,n?.path,n?.mtime],queryFn:({signal:r})=>$.file(e,t,n.path,r),enabled:!!(n&&t),refetchInterval:8e3});return n?a.isError?(0,J.jsx)(X,{icon:I,title:r(`源文件暂时无法读取`,`Source file unavailable`),description:a.error.message}):n.extension===`.md`&&a.data?(0,J.jsx)(`div`,{className:`paper-markdown-preview`,children:(0,J.jsx)(Z,{children:a.data.content})}):(0,J.jsxs)(`div`,{className:`latex-source`,children:[(0,J.jsx)(`div`,{className:`latex-line-numbers`,children:(a.data?.content??``).split(` +`),icon:ve}),o}function Zt(e){let{text:t}=Q(),[n,r]=(0,_.useState)(()=>Jt(e.sid)),[i,a]=(0,_.useState)(()=>Jt(e.sid)[0]?.id??``),[o,s]=(0,_.useState)(!1),[c,l]=(0,_.useState)([]),[u,d]=(0,_.useState)(0),[f,p]=(0,_.useState)(``),[m,h]=(0,_.useState)(``),[g,v]=(0,_.useState)(`current`),[y,b]=(0,_.useState)(``),[x,S]=(0,_.useState)(``),w=_t(e.sid,e.refresh);(0,_.useEffect)(()=>{let t=Jt(e.sid);r(t),a(t[0]?.id??``),l([]),d(0)},[e.sid]),(0,_.useEffect)(()=>{try{localStorage.setItem(qt(e.sid),JSON.stringify(n)),h(``)}catch{h(`本机草稿存储空间不足;请缩短文本或删除旧草稿。`)}},[n,e.sid]);let T=n.find(e=>e.id===i)??null,D=(0,_.useMemo)(()=>Xt(T?.prompt??``,T?.questions??[]),[T?.prompt,T?.questions]),O=e=>T&&r(t=>t.map(t=>t.id===T.id?{...t,...e,updatedAt:Date.now()}:t)),k=()=>{let e=Yt(t(`新的科研输入`,`New research input`),t(`导师 / 组会 / 灵感`,`Advisor / meeting / idea`));r(t=>[e,...t]),a(e.id)},A=()=>{if(!T||!confirm(t(`删除“${T.title}”?`,`Delete “${T.title}”?`)))return;let e=n.filter(e=>e.id!==T.id);r(e),a(e[0]?.id??``)},j=T?`这是科研收信箱的预处理步骤,只分析输入并回复,不创建后台任务、不修改项目。请读取下面的零散内容和附件,提取知识点并生成第一版可直接交给 Argus 的研究 Prompt。必须保留事实来源和不确定性,不得虚构论文、实验或结论;使用以下 Markdown 结构:\n## 研究目标\n## 已知背景与知识点\n## 约束与非目标\n## 文献与证据线索\n## 建议任务与验收方式\n## 待确认问题\n\n标题:${T.title}\n来源:${T.source}\n\n原始内容:\n${T.raw}`:``,M=async e=>{let t=/\.(txt|md|markdown|json|csv|ya?ml|log|tex)$/i,n=/\.(pdf|png|jpe?g|webp|wav|mp3|m4a|ogg)$/i,r=e.filter(e=>!t.test(e.name)&&!n.test(e.name));if(r.length){p(`不支持的附件:${r.map(e=>e.name).join(`、`)}`);return}let i=e.find(e=>e.size>10485760);if(i){p(`${i.name} 超过单文件 10 MB 限制`);return}if(c.length+u+e.length>Kt){p(`每次分析最多导入 ${Kt} 个文件`);return}let a=e.filter(e=>t.test(e.name)),o=a.find(e=>e.size>1048576);if(o){p(`${o.name} 超过本机文本导入 1 MB 限制;请改为摘要或拆分文件`);return}let s=e.filter(e=>n.test(e.name)),f=[...c,...s];if(f.reduce((e,t)=>e+t.size,0)>26214400){p(`附件总大小超过 25 MB`);return}let m=await Promise.all(a.map(async e=>`\n\n--- 文件:${e.name} ---\n${await e.text()}`)),h=`${T?.raw??``}${m.join(``)}`.trim();if(h.length>Gt){p(`原始输入超过 ${Gt.toLocaleString()} 字符限制,请拆分或摘要`);return}m.length&&(O({raw:h}),d(e=>e+a.length)),l(f),p(``)},N=async()=>{if(!(!T||!T.raw.trim()&&!c.length)){s(!0),p(``);try{if(c.length){let e=await w.run(j,c),t=String(e?.reply||w.output||``).trim();if(!t)throw Error(`Argus 没有返回可用的知识提取结果`);O({prompt:t,changes:[`分析了 ${c.length} 个附件和原始输入`],questions:[]}),l([])}else{let t=await H.rewritePrompt(e.sid,j);if(t.error)throw Error(t.error);O({prompt:t.rewritten,changes:t.changes,questions:t.questions})}}catch(e){p(e instanceof Error?e.message:String(e))}finally{s(!1)}}},te=async()=>{if(T?.prompt.trim()){if(g===`new`){if(!y.trim()||!confirm(t(`确认用当前 Prompt 创建一个新的 Argus 项目?`,`Create a new Argus project with this prompt?`)))return;try{let e=await H.createDaemon(T.prompt,y,x);O({sentAt:Date.now()}),window.location.hash=`project/${e.sid}/overview`}catch(e){p(e instanceof Error?e.message:String(e))}return}confirm(t(`确认把这份第一版 Prompt 发送给当前 Argus 项目?`,`Send this first prompt to the current Argus project?`))&&await w.run(T.prompt)&&O({sentAt:Date.now()})}},P=T?.sentAt?4:T?.prompt?3:T?.raw||c.length?2:1;return(0,J.jsxs)(`div`,{className:`ros-page inbox-v2`,children:[(0,J.jsxs)(`header`,{className:`ros-page-header`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`eyebrow`,children:`RESEARCH INBOX`}),(0,J.jsx)(`h1`,{children:t(`从零散输入开始研究`,`Start research from rough input`)}),(0,J.jsx)(`p`,{children:t(`把消息、会议记录、文件或灵感交给 AI,提取知识点并形成第一版 Argus Prompt。`,`Give AI messages, meeting notes, files, or ideas to extract knowledge and create a first Argus prompt.`)})]}),(0,J.jsxs)(Y,{tone:`neutral`,children:[(0,J.jsx)(Ie,{size:12}),t(`本机自动保存`,`Saved locally`)]})]}),(0,J.jsx)(`div`,{className:`intake-steps`,children:[[t(`收集原始内容`,`Collect input`),Te],[t(`AI 提取知识`,`Extract knowledge`),Xe],[t(`形成 Argus Prompt`,`Build Argus prompt`),I],[t(`创建 / 发送项目`,`Create / send project`),ze]].map(([e,t],n)=>(0,J.jsxs)(`div`,{className:P>n?`is-done`:P===n+1?`is-active`:``,children:[(0,J.jsx)(`span`,{children:P>n+1?(0,J.jsx)(E,{size:14}):(0,J.jsx)(t,{size:15})}),(0,J.jsx)(`strong`,{children:String(e)}),n<3?(0,J.jsx)(ee,{size:14}):null]},String(e)))}),(0,J.jsxs)(`div`,{className:`inbox-v2__layout`,children:[(0,J.jsxs)(`aside`,{className:`ros-card inbox-sources`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`INBOX`}),(0,J.jsx)(`h2`,{children:t(`科研输入`,`Research input`)})]}),(0,J.jsx)(`button`,{className:`icon-button`,type:`button`,onClick:k,"aria-label":t(`新增输入`,`Add input`),children:(0,J.jsx)(je,{size:15})})]}),(0,J.jsx)(`div`,{children:n.length?n.map(e=>(0,J.jsxs)(`button`,{type:`button`,className:T?.id===e.id?`is-active`:``,onClick:()=>a(e.id),children:[(0,J.jsx)(`span`,{className:`inbox-item-icon`,children:e.sentAt?(0,J.jsx)(E,{size:14}):e.prompt?(0,J.jsx)(z,{size:14}):(0,J.jsx)(_e,{size:14})}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.title}),(0,J.jsxs)(`small`,{children:[e.source,` · `,ct(e.updatedAt/1e3)]})]})]},e.id)):(0,J.jsx)(X,{icon:_e,title:t(`暂无输入`,`No input yet`),description:t(`新增一条导师消息、组会笔记或研究灵感。`,`Add an advisor message, meeting note, or research idea.`)})})]}),(0,J.jsxs)(`main`,{className:`ros-card inbox-input`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`RAW MATERIAL`}),(0,J.jsx)(`h2`,{children:t(`原始内容与附件`,`Raw content and attachments`)})]}),T?(0,J.jsx)(`button`,{className:`icon-button`,type:`button`,onClick:A,"aria-label":t(`删除`,`Delete`),children:(0,J.jsx)(Ke,{size:14})}):null]}),T?(0,J.jsxs)(`div`,{className:`inbox-input__form`,children:[(0,J.jsxs)(`div`,{className:`form-grid`,children:[(0,J.jsxs)(`label`,{children:[(0,J.jsx)(`span`,{children:t(`标题`,`Title`)}),(0,J.jsx)(`input`,{value:T.title,onChange:e=>O({title:e.target.value})})]}),(0,J.jsxs)(`label`,{children:[(0,J.jsx)(`span`,{children:t(`来源`,`Source`)}),(0,J.jsx)(`input`,{value:T.source,onChange:e=>O({source:e.target.value})})]})]}),(0,J.jsxs)(`label`,{className:`field field--grow`,children:[(0,J.jsx)(`span`,{children:t(`零散消息、笔记或转写文本`,`Rough messages, notes, or transcripts`)}),(0,J.jsx)(`textarea`,{maxLength:Gt,value:T.raw,onChange:e=>O({raw:e.target.value}),placeholder:t(`不需要先整理,直接粘贴原始内容。AI 会区分目标、事实、约束、文献线索、待办和疑问…`,`Paste raw content directly. AI will separate goals, facts, constraints, evidence leads, tasks, and questions…`)})]}),c.length?(0,J.jsx)(`div`,{className:`inbox-attachment-list`,children:c.map((e,t)=>(0,J.jsxs)(`span`,{children:[e.type.startsWith(`audio/`)?(0,J.jsx)(C,{size:14}):e.type.startsWith(`image/`)?(0,J.jsx)(ge,{size:14}):(0,J.jsx)(I,{size:14}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.name}),(0,J.jsxs)(`small`,{children:[(e.size/1024/1024).toFixed(1),` MB · 仅在本次分析上传`]})]}),(0,J.jsx)(`button`,{type:`button`,onClick:()=>l(e=>e.filter((e,n)=>n!==t)),children:(0,J.jsx)(et,{size:13})})]},`${e.name}-${t}`))}):null,(0,J.jsxs)(`div`,{className:`inbox-upload-types`,children:[(0,J.jsxs)(`span`,{children:[(0,J.jsx)(I,{size:14}),`PDF / `,t(`文本`,`text`)]}),(0,J.jsxs)(`span`,{children:[(0,J.jsx)(ge,{size:14}),t(`图片`,`images`)]}),(0,J.jsxs)(`span`,{children:[(0,J.jsx)(C,{size:14}),t(`语音`,`audio`)]}),(0,J.jsx)(`p`,{children:t(`语音会交给 Argus 和已配置工具处理,不把“上传成功”冒充“已完成转写”。`,`Audio is handed to Argus and configured tools; an upload is never presented as a completed transcript.`)})]}),(0,J.jsxs)(`div`,{className:`inbox-input__actions`,children:[(0,J.jsxs)(`label`,{className:`button button--secondary file-button`,children:[(0,J.jsx)(Je,{size:14}),t(`添加文件`,`Add files`),(0,J.jsx)(`input`,{type:`file`,multiple:!0,accept:`.txt,.md,.markdown,.json,.csv,.yaml,.yml,.log,.tex,.pdf,.png,.jpg,.jpeg,.webp,.wav,.mp3,.m4a,.ogg`,onChange:e=>void M(Array.from(e.target.files??[]))})]}),(0,J.jsxs)(`button`,{className:`button button--primary`,type:`button`,disabled:!T.raw.trim()&&!c.length||o||w.busy,onClick:()=>void N(),children:[o||w.busy?(0,J.jsx)(z,{size:14}):(0,J.jsx)(Xe,{size:14}),o||w.busy?w.phase||t(`AI 正在分析`,`AI is analyzing`):t(`分析内容并生成 Prompt`,`Analyze and generate prompt`)]})]}),f?(0,J.jsx)(`div`,{className:`inline-error`,children:f}):null,m?(0,J.jsx)(`div`,{className:`inline-error`,children:m}):null]}):(0,J.jsx)(X,{icon:_e,title:t(`选择或新增一条科研输入`,`Select or add research input`)})]}),(0,J.jsxs)(`aside`,{className:`inbox-output`,children:[(0,J.jsxs)(`section`,{className:`ros-card knowledge-panel`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`KNOWLEDGE EXTRACTION`}),(0,J.jsx)(`h2`,{children:t(`AI 提取的知识点`,`AI-extracted knowledge`)})]}),D.length?(0,J.jsxs)(Y,{tone:`success`,children:[D.length,` `,t(`组`,`groups`)]}):null]}),D.length?(0,J.jsx)(`div`,{className:`knowledge-grid`,children:D.map(e=>{let t=e.icon;return(0,J.jsxs)(`article`,{children:[(0,J.jsx)(`span`,{children:(0,J.jsx)(t,{size:15})}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.title}),(0,J.jsx)(Z,{children:e.body})]})]},e.title)})}):(0,J.jsx)(X,{icon:ve,title:t(`等待 AI 提取`,`Waiting for AI extraction`),description:t(`结果会明确区分目标、知识点、约束、证据线索和待确认问题。`,`The result separates goals, knowledge, constraints, evidence leads, and open questions.`)})]}),(0,J.jsxs)(`section`,{className:`ros-card first-prompt`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`FIRST ARGUS PROMPT`}),(0,J.jsx)(`h2`,{children:t(`第一版 Argus Prompt`,`First Argus prompt`)})]}),T?.prompt?(0,J.jsx)(Y,{tone:`info`,children:t(`可编辑`,`Editable`)}):null]}),T?.prompt?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`textarea`,{value:T.prompt,onChange:e=>O({prompt:e.target.value})}),(0,J.jsxs)(`div`,{className:`dispatch-mode`,children:[(0,J.jsx)(`button`,{type:`button`,className:g===`current`?`is-active`:``,onClick:()=>v(`current`),children:t(`发送当前项目`,`Send to current project`)}),(0,J.jsx)(`button`,{type:`button`,className:g===`new`?`is-active`:``,onClick:()=>v(`new`),children:t(`创建新项目`,`Create new project`)})]}),g===`new`?(0,J.jsxs)(`div`,{className:`new-project-fields`,children:[(0,J.jsx)(`input`,{value:y,onChange:e=>b(e.target.value),placeholder:t(`新项目名称`,`New project name`)}),(0,J.jsx)(`input`,{value:x,onChange:e=>S(e.target.value),placeholder:t(`工作目录(可选,留空自动创建)`,`Workdir (optional; blank creates one)`)})]}):null,(0,J.jsxs)(`button`,{className:`button button--primary button--full`,type:`button`,disabled:w.busy,onClick:()=>void te(),children:[(0,J.jsx)(ze,{size:14}),w.busy?w.phase||t(`正在发送`,`Sending`):g===`new`?t(`用此 Prompt 创建 Argus 项目`,`Create Argus project with this prompt`):t(`确认并发送给当前 Argus`,`Confirm and send to current Argus`)]}),w.output?(0,J.jsx)(`div`,{className:`manager-mini-result`,children:(0,J.jsx)(Z,{children:w.output})}):null]}):(0,J.jsx)(X,{icon:I,title:t(`尚未生成 Prompt`,`No prompt generated`),description:t(`AI 提取后会在这里生成第一版 Prompt,你可以先修改再发送。`,`The first prompt appears here after extraction and can be edited before sending.`)})]})]})]})]})}function Qt({paper:e,selected:t,onClick:n}){let{text:r}=Q();return(0,J.jsxs)(`button`,{type:`button`,className:`paper-card ${t?`is-selected`:``}`,onClick:n,children:[(0,J.jsxs)(`div`,{className:`paper-card__meta`,children:[(0,J.jsx)(Y,{tone:e.evidenceStatus===`verified_artifact`?`success`:e.evidenceStatus===`metadata`?`info`:`warn`,children:e.evidenceStatus===`verified_artifact`?r(`原文文件已验证`,`Source verified`):e.evidenceStatus===`metadata`?r(`仅元数据`,`Metadata only`):r(`待核验`,`Needs verification`)}),(0,J.jsxs)(`span`,{className:`paper-card__year`,children:[e.year||`—`,e.venue?` · ${e.venue}`:``]})]}),(0,J.jsx)(`h3`,{children:e.title}),e.authors.length?(0,J.jsxs)(`p`,{className:`paper-card__authors`,children:[e.authors.slice(0,4).join(`, `),e.authors.length>4?` et al.`:``]}):null,(0,J.jsx)(`p`,{className:`paper-card__summary`,children:e.relevance||e.abstract||r(`该记录尚未写入项目相关性摘要。`,`No project-relevance summary has been recorded.`)}),(0,J.jsxs)(`div`,{className:`paper-card__footer`,children:[(0,J.jsx)(`code`,{children:e.sourcePath}),(0,J.jsx)(`span`,{children:r(`查看详情`,`View details`)})]})]})}function $t(e){let{text:t}=Q(),n=Vt(e.sid,`literature`),r=n.active?.path||``,a=i({queryKey:[`workspace-literature`,e.sid,n.workspaceId],queryFn:({signal:t})=>$.literature(e.sid,n.workspaceId,t),enabled:!!n.workspaceId,refetchInterval:15e3}),[o,s]=(0,_.useState)(`all`),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)(``),[f,p]=(0,_.useState)(``),m=_t(e.sid,async()=>{await e.refresh(),await a.refetch()}),h=a.data?.papers??[],g=Math.max(0,...h.map(e=>e.year??0)),v=(0,_.useMemo)(()=>h.filter(e=>{if(o===`recent`&&(e.year??0)e.id===u)??v[0]??null,b=(0,_.useMemo)(()=>e.events.filter(e=>/paper|arxiv|doi|literature|search|citation|http/i.test(`${e.type} ${e.kind} ${q(e,2e3)}`)).slice(-30).reverse(),[e.events]),x=async()=>{f.trim()&&await m.run(`请为当前项目执行新的文献调研:${f}\n\n要求读取原始论文或官方仓库,把结构化记录追加到项目的 literature grounding/audit 文件中,包括标题、作者、年份、URL、与当前项目关系、最近工作威胁和仍待全文核验项。完成后文献中心应能从工作目录直接读取这些记录。`)};return(0,J.jsxs)(`div`,{className:`ros-page literature-v2`,children:[(0,J.jsxs)(`header`,{className:`ros-page-header`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`eyebrow`,children:`LITERATURE CENTER`}),(0,J.jsx)(`h1`,{children:t(`文献中心`,`Literature center`)}),(0,J.jsx)(`p`,{children:t(`直接读取 Argus 工作目录中的论文清单、文献审计和实时检索轨迹,不再依赖手工注册 artifacts。`,`Read paper inventories, literature audits, and live retrieval traces directly from the Argus workdir.`)})]}),(0,J.jsxs)(`div`,{className:`header-badges`,children:[(0,J.jsxs)(Y,{tone:`success`,children:[(0,J.jsx)(w,{size:12}),h.length,` `,t(`篇论文`,`papers`)]}),(0,J.jsxs)(Y,{tone:`neutral`,children:[a.data?.sourceFiles.length??0,` `,t(`个证据文件`,`evidence files`)]})]})]}),(0,J.jsxs)(`section`,{className:`literature-stats`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{className:`stat-icon stat-icon--blue`,children:(0,J.jsx)(w,{size:18})}),(0,J.jsxs)(`p`,{children:[t(`论文记录`,`Paper records`),(0,J.jsx)(`strong`,{children:h.length})]})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{className:`stat-icon stat-icon--green`,children:(0,J.jsx)(ie,{size:18})}),(0,J.jsxs)(`p`,{children:[t(`原文文件已验证`,`Verified sources`),(0,J.jsx)(`strong`,{children:h.filter(e=>e.evidenceStatus===`verified_artifact`).length})]})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{className:`stat-icon stat-icon--amber`,children:(0,J.jsx)(T,{size:18})}),(0,J.jsxs)(`p`,{children:[t(`最近工作`,`Recent work`),(0,J.jsx)(`strong`,{children:h.filter(e=>(e.year??0)>=g-1).length})]})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{className:`stat-icon stat-icon--violet`,children:(0,J.jsx)(ue,{size:18})}),(0,J.jsxs)(`p`,{children:[t(`扫描项目文件`,`Scanned files`),(0,J.jsx)(`strong`,{children:a.data?.scannedFiles??0})]})]})]}),(0,J.jsxs)(`div`,{className:`literature-v2__layout`,children:[(0,J.jsxs)(`aside`,{className:`literature-v2__sidebar ros-card`,children:[(0,J.jsx)(`header`,{children:(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`LIBRARY`}),(0,J.jsx)(`h2`,{children:t(`项目文献库`,`Project library`)})]})}),(0,J.jsxs)(`label`,{className:`search-field search-field--block`,children:[(0,J.jsx)(Re,{size:14}),(0,J.jsx)(`input`,{value:c,onChange:e=>l(e.target.value),placeholder:t(`搜索标题、作者、主题`,`Search title, author, or topic`)})]}),(0,J.jsx)(`nav`,{className:`library-tabs`,children:[[`all`,t(`全部论文`,`All papers`),h.length],[`recent`,t(`最近工作`,`Recent work`),h.filter(e=>(e.year??0)>=g-1).length],[`read`,t(`已验证原文`,`Verified sources`),h.filter(e=>e.evidenceStatus===`verified_artifact`).length],[`sources`,t(`证据文件`,`Evidence files`),a.data?.sourceFiles.length??0]].map(([e,t,n])=>(0,J.jsxs)(`button`,{type:`button`,className:o===e?`is-active`:``,onClick:()=>s(e),children:[(0,J.jsx)(`span`,{children:t}),(0,J.jsx)(`small`,{children:n})]},e))}),(0,J.jsxs)(`div`,{className:`literature-source-note`,children:[(0,J.jsx)(re,{size:15}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:t(`实时来源`,`Live source`)}),(0,J.jsx)(`p`,{title:r,children:r})]})]})]}),(0,J.jsxs)(`main`,{className:`literature-v2__main`,children:[(0,J.jsxs)(`div`,{className:`literature-list-header`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h2`,{children:o===`recent`?t(`最近工作`,`Recent work`):o===`read`?t(`已验证原文文件`,`Verified source files`):o===`sources`?t(`文献证据文件`,`Literature evidence files`):t(`全部论文`,`All papers`)}),(0,J.jsx)(`p`,{children:o===`recent`?t(`按项目中最新年份 ${g||`—`} 自动筛选`,`Filtered by the latest project year: ${g||`—`}`):t(`Argus 写入工作目录后约 5 秒内自动更新`,`Updates shortly after Argus writes to the workdir`)})]}),a.isError?(0,J.jsx)(Y,{tone:`danger`,children:t(`同步失败`,`Sync failed`)}):a.isFetching?(0,J.jsx)(Y,{tone:`live`,dot:!0,children:t(`同步中`,`Syncing`)}):(0,J.jsx)(Y,{tone:`success`,children:t(`已同步`,`Synced`)})]}),a.isError?(0,J.jsx)(`div`,{className:`inline-error`,children:a.error.message}):null,o===`sources`?(0,J.jsx)(`div`,{className:`source-file-grid`,children:a.data?.sourceFiles.map(e=>(0,J.jsxs)(`article`,{children:[(0,J.jsx)(re,{size:17}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.name}),(0,J.jsx)(`code`,{children:e.path})]}),(0,J.jsx)(`time`,{children:ct(e.mtime)})]},e.path))}):v.length?(0,J.jsx)(`div`,{className:`paper-grid`,children:v.map(e=>(0,J.jsx)(Qt,{paper:e,selected:y?.id===e.id,onClick:()=>d(e.id)},e.id))}):(0,J.jsx)(X,{icon:w,title:t(`此筛选下暂无论文`,`No papers match this filter`),description:t(`Argus 完成检索并写入 LITERATURE_GROUNDING.json 后会自动出现。`,`Papers appear after Argus writes LITERATURE_GROUNDING.json.`)})]}),(0,J.jsxs)(`aside`,{className:`literature-v2__detail`,children:[(0,J.jsx)(`section`,{className:`ros-card paper-detail`,children:y?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(`div`,{className:`paper-detail__top`,children:[(0,J.jsx)(Y,{tone:y.evidenceStatus===`verified_artifact`?`success`:y.evidenceStatus===`metadata`?`info`:`warn`,children:y.evidenceStatus===`verified_artifact`?`verified artifact`:y.evidenceStatus}),(0,J.jsxs)(`span`,{children:[y.year||`—`,y.venue?` · ${y.venue}`:``]})]}),(0,J.jsx)(`h2`,{children:y.title}),y.authors.length?(0,J.jsx)(`p`,{className:`paper-detail__authors`,children:y.authors.join(`, `)}):null,(0,J.jsxs)(`div`,{className:`paper-detail__body`,children:[(0,J.jsx)(`h3`,{children:t(`与当前项目的关系`,`Relationship to this project`)}),(0,J.jsx)(Z,{children:y.relevance||y.abstract||t(`尚未写入摘要。`,`No summary recorded.`)}),y.abstract&&y.relevance?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`h3`,{children:t(`摘要`,`Abstract`)}),(0,J.jsx)(`p`,{children:y.abstract})]}):null]}),(0,J.jsxs)(`div`,{className:`paper-detail__source`,children:[(0,J.jsx)(`span`,{children:t(`证据文件`,`Evidence file`)}),(0,J.jsx)(`code`,{children:y.sourcePath})]}),y.url?(0,J.jsxs)(`a`,{className:`button button--secondary button--full`,href:y.url,target:`_blank`,rel:`noreferrer`,children:[t(`打开原始来源`,`Open source`),` `,(0,J.jsx)(N,{size:14})]}):null]}):(0,J.jsx)(X,{icon:w,title:t(`选择一篇论文`,`Select a paper`)})}),(0,J.jsxs)(`section`,{className:`ros-card retrieval-panel`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`ARGUS RETRIEVAL`}),(0,J.jsx)(`h2`,{children:t(`最近检索`,`Recent retrieval`)})]}),(0,J.jsx)(Y,{tone:e.connected?`live`:`warn`,dot:!0,children:e.connected?`Live`:`Polling`})]}),(0,J.jsxs)(`div`,{children:[(a.data?.searchFiles??[]).slice(0,8).map(e=>(0,J.jsxs)(`article`,{children:[(0,J.jsx)(ie,{size:13}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.name}),(0,J.jsx)(`code`,{children:e.path})]}),(0,J.jsx)(`time`,{children:W(e.mtime)})]},e.path)),!a.data?.searchFiles.length&&b.slice(0,8).map((e,t)=>(0,J.jsxs)(`article`,{children:[(0,J.jsx)(ie,{size:13}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:K(e)}),(0,J.jsx)(`code`,{children:q(e,100)})]}),(0,J.jsx)(`time`,{children:W(e.ts)})]},`${e.ts}-${t}`))]})]}),(0,J.jsxs)(`section`,{className:`ros-card literature-ask`,children:[(0,J.jsx)(`header`,{children:(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`NEW SEARCH`}),(0,J.jsx)(`h2`,{children:t(`让 Argus 调研新工作`,`Ask Argus to research new work`)})]})}),(0,J.jsx)(`textarea`,{rows:3,value:f,onChange:e=>p(e.target.value),placeholder:t(`例如:检索 2025–2026 年与当前方法最接近的直接竞争工作…`,`Example: find the closest competing work from 2025–2026…`)}),(0,J.jsxs)(`button`,{className:`button button--primary button--full`,type:`button`,disabled:!f.trim()||m.busy,onClick:()=>void x(),children:[(0,J.jsx)(z,{size:14}),m.busy?m.phase||t(`检索中`,`Researching`):t(`发起文献调研`,`Start literature research`)]}),m.output?(0,J.jsx)(`div`,{className:`manager-mini-result`,children:(0,J.jsx)(Z,{children:m.output})}):null]})]})]})]})}var en=`/assets/pdf.worker.min-CHFwMXne.mjs`;function tn(e){return[`.png`,`.jpg`,`.jpeg`,`.webp`,`.svg`].includes(e.extension)}function nn(e){return[`.csv`,`.tsv`].includes(e.extension)}function rn(e){return[`.tex`,`.md`].includes(e.extension)}function an({src:e,name:t}){let{text:n}=Q(),r=(0,_.useRef)(null),[i,a]=(0,_.useState)(null),[o,s]=(0,_.useState)(1),[c,l]=(0,_.useState)(1.25),[u,d]=(0,_.useState)(``),[f,m]=(0,_.useState)(!1);return(0,_.useEffect)(()=>{let t=!0,n=null;a(null),s(1),d(``),m(!1);let r=localStorage.getItem(`argus_web_token`);return Promise.all([fetch(e,{headers:r?{Authorization:`Bearer ${r}`}:{}}).then(e=>{if(!e.ok)throw Error(`PDF request failed (${e.status})`);return e.arrayBuffer()}),p(()=>import(`./pdf-CBJhoU3W.js`),__vite__mapDeps([0,1,2,3,4,5,6]))]).then(([e,r])=>{if(t)return r.GlobalWorkerOptions.workerSrc=en,n=r.getDocument({data:e}),n.promise}).then(e=>{t&&e&&a(e)}).catch(e=>{t&&d(e instanceof Error?e.message:String(e))}),()=>{t=!1,n?.destroy()}},[e]),(0,_.useEffect)(()=>{if(!i||!r.current)return;m(!1);let e=!1,t=null;return i.getPage(o).then(n=>{if(e||!r.current)return;let i=n.getViewport({scale:c}),a=r.current,o=a.getContext(`2d`);if(!o)return;let s=Math.min(window.devicePixelRatio||1,2);return a.width=Math.floor(i.width*s),a.height=Math.floor(i.height*s),a.style.width=`${i.width}px`,a.style.height=`${i.height}px`,t=n.render({canvas:a,canvasContext:o,viewport:i,transform:s===1?void 0:[s,0,0,s,0,0]}),t.promise.then(()=>{e||m(!0)})}).catch(t=>{e||d(t instanceof Error?t.message:String(t))}),()=>{e=!0,t?.cancel()}},[i,o,c]),(0,J.jsxs)(`div`,{className:`pdf-canvas-viewer`,children:[(0,J.jsxs)(`div`,{className:`pdf-canvas-toolbar`,children:[(0,J.jsx)(`strong`,{children:t}),(0,J.jsxs)(`span`,{children:[n(`第`,`Page`),` `,o,` / `,i?.numPages??`…`]}),(0,J.jsx)(`button`,{type:`button`,disabled:o<=1,onClick:()=>s(e=>e-1),children:n(`上一页`,`Previous`)}),(0,J.jsx)(`button`,{type:`button`,disabled:!i||o>=i.numPages,onClick:()=>s(e=>e+1),children:n(`下一页`,`Next`)}),(0,J.jsx)(`button`,{type:`button`,onClick:()=>l(e=>Math.max(.75,e-.15)),children:`−`}),(0,J.jsx)(`button`,{type:`button`,onClick:()=>l(e=>Math.min(2,e+.15)),children:`+`})]}),u?(0,J.jsx)(`div`,{className:`inline-error`,children:u}):null,(0,J.jsx)(`div`,{className:`pdf-canvas-scroll`,children:(0,J.jsx)(`canvas`,{ref:r,"data-rendered":f?`true`:`false`})})]})}function on({sid:e,workspaceId:t,entry:n}){let{text:r}=Q(),a=i({queryKey:[`paper-source-file`,e,t,n?.path,n?.mtime],queryFn:({signal:r})=>$.file(e,t,n.path,r),enabled:!!(n&&t),refetchInterval:8e3});return n?a.isError?(0,J.jsx)(X,{icon:I,title:r(`源文件暂时无法读取`,`Source file unavailable`),description:a.error.message}):n.extension===`.md`&&a.data?(0,J.jsx)(`div`,{className:`paper-markdown-preview`,children:(0,J.jsx)(Z,{children:a.data.content})}):(0,J.jsxs)(`div`,{className:`latex-source`,children:[(0,J.jsx)(`div`,{className:`latex-line-numbers`,children:(a.data?.content??``).split(` `).map((e,t)=>(0,J.jsx)(`span`,{children:t+1},t))}),(0,J.jsx)(`pre`,{children:a.data?.content||`Loading…`})]}):(0,J.jsx)(X,{icon:I,title:r(`等待 Argus 写入论文源文件`,`Waiting for Argus to write a paper source`),description:r(`paper/ 或 technical_report/ 中出现 .tex / .md 后会自动加入。`,`.tex and .md files under paper/ or technical_report/ appear automatically.`)})}function sn({sid:e,workspaceId:t,entry:n}){let r=Bt(e,t,n.path);return(0,J.jsxs)(`figure`,{children:[r.url?(0,J.jsx)(`img`,{src:r.url,alt:n.name}):(0,J.jsx)(`div`,{className:`figure-loading`,children:r.error||`Loading…`}),(0,J.jsx)(`figcaption`,{children:n.name})]})}function cn(e){let{text:t}=Q(),n=Vt(e.sid,`paper`),r=n.workspaceId,a=n.active?.path||``,o=i({queryKey:[`paper-workspace-tree`,e.sid,r],queryFn:({signal:t})=>$.tree(e.sid,r,t),enabled:!!r,refetchInterval:1e4}),s=(0,_.useMemo)(()=>Rt(o.data?.entries??[]),[o.data?.entries]),c=s.filter(rn),l=s.filter(e=>e.extension===`.bib`),u=s.filter(e=>e.extension===`.pdf`),d=s.filter(e=>tn(e)||nn(e)),[f,p]=(0,_.useState)(``),m=[...c,...l].find(e=>e.path===f)??c[0]??l[0]??null,[h,g]=(0,_.useState)(`pdf`),[v,y]=(0,_.useState)(``),b=u.find(e=>/(?:^|\/)(?:argus-technical-report|main|paper|manuscript)\.pdf$/i.test(e.path))??u[0],x=u.find(e=>e.path===v)??b??null;return(0,J.jsxs)(`div`,{className:`ros-page paper-v3`,children:[(0,J.jsxs)(`header`,{className:`ros-page-header`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`eyebrow`,children:`PAPER WORKSPACE`}),(0,J.jsx)(`h1`,{children:t(`LaTeX 论文工作区`,`LaTeX paper workspace`)}),(0,J.jsx)(`p`,{children:t(`论文源文件、编译 PDF、图表和 BibTeX 与真实项目目录保持同步。`,`Keep paper sources, compiled PDFs, figures, and BibTeX synchronized with the real project directory.`)})]}),(0,J.jsxs)(`div`,{className:`header-badges`,children:[(0,J.jsxs)(Y,{tone:o.isError?`danger`:o.isFetching?`live`:`success`,dot:!0,children:[(0,J.jsx)(Ze,{size:12}),o.isError?t(`同步失败`,`Sync failed`):o.isFetching?t(`同步中`,`Syncing`):t(`自动同步`,`Auto sync`)]}),(0,J.jsxs)(Y,{tone:u.length?`success`:`neutral`,children:[u.length,` PDF`]}),(0,J.jsxs)(Y,{tone:`neutral`,children:[d.length,` `,t(`图表`,`figures`)]})]})]}),(0,J.jsxs)(`div`,{className:`paper-root-bar ros-card`,children:[(0,J.jsx)(le,{size:16}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`APPROVED PAPER WORKSPACE`}),(0,J.jsx)(`select`,{"aria-label":t(`选择论文工作区`,`Select paper workspace`),value:r,onChange:e=>{n.setWorkspaceId(e.target.value),p(``),y(``)},children:n.profiles.data?.profiles.map(e=>(0,J.jsx)(`option`,{value:e.id,children:e.label},e.id))}),(0,J.jsx)(`code`,{children:a})]}),o.isError?(0,J.jsx)(Y,{tone:`danger`,children:`Error`}):o.isFetching?(0,J.jsx)(Y,{tone:`live`,dot:!0,children:`Scanning`}):(0,J.jsx)(Y,{tone:`success`,children:`Synced`}),(0,J.jsx)(`button`,{className:`icon-button`,type:`button`,onClick:()=>void o.refetch(),"aria-label":t(`刷新论文工作区`,`Refresh paper workspace`),children:(0,J.jsx)(Pe,{size:14})})]}),(0,J.jsxs)(`div`,{className:`paper-v3__shell`,children:[(0,J.jsxs)(`aside`,{className:`paper-v3__sources ros-card`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`LATEX PROJECT`}),(0,J.jsx)(`h2`,{children:t(`论文文件`,`Paper files`)})]}),(0,J.jsx)(Y,{tone:`neutral`,children:c.length+l.length})]}),(0,J.jsxs)(`div`,{className:`paper-source-group`,children:[(0,J.jsxs)(`h3`,{children:[(0,J.jsx)(I,{size:13}),`MANUSCRIPT`]}),c.length?c.map(e=>(0,J.jsxs)(`button`,{type:`button`,className:m?.path===e.path?`is-active`:``,onClick:()=>p(e.path),children:[(0,J.jsx)(I,{size:14}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.name}),(0,J.jsx)(`code`,{children:e.path})]}),(0,J.jsx)(`small`,{children:lt(e.size)})]},e.path)):(0,J.jsx)(`p`,{children:`等待 .tex / .md`})]}),(0,J.jsxs)(`div`,{className:`paper-source-group`,children:[(0,J.jsxs)(`h3`,{children:[(0,J.jsx)(w,{size:13}),`BIBTEX`]}),l.length?l.map(e=>(0,J.jsxs)(`button`,{type:`button`,onClick:()=>p(e.path),children:[(0,J.jsx)(w,{size:14}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.name}),(0,J.jsx)(`code`,{children:e.path})]})]},e.path)):(0,J.jsx)(`p`,{children:t(`等待 references.bib`,`Waiting for references.bib`)})]}),(0,J.jsxs)(`footer`,{children:[(0,J.jsx)(`span`,{children:t(`监听`,`Watching`)}),(0,J.jsx)(`code`,{children:a})]})]}),(0,J.jsxs)(`main`,{className:`paper-v3__source ros-card`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:m?.name||t(`源文件编辑器`,`Source editor`)}),(0,J.jsx)(`code`,{children:m?.path||a})]}),m?(0,J.jsxs)(`span`,{children:[t(`更新于`,`Updated`),` `,ct(m.mtime)]}):null]}),(0,J.jsx)(`div`,{children:(0,J.jsx)(on,{sid:e.sid,workspaceId:r,entry:m})}),(0,J.jsxs)(`footer`,{children:[(0,J.jsx)(`span`,{children:m?.extension.replace(`.`,``).toUpperCase()||`WAITING`}),(0,J.jsx)(`span`,{children:m?lt(m.size):t(`Argus 写入后自动出现`,`Appears after Argus writes it`)})]})]}),(0,J.jsxs)(`aside`,{className:`paper-v3__outputs ros-card`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`BUILD OUTPUT`}),(0,J.jsx)(`h2`,{children:t(`可视化产出`,`Visual outputs`)})]}),o.isError?(0,J.jsx)(Y,{tone:`danger`,children:`Error`}):o.isFetching?(0,J.jsx)(Y,{tone:`live`,dot:!0,children:`Scanning`}):(0,J.jsx)(Y,{tone:`success`,children:`Synced`})]}),(0,J.jsxs)(`nav`,{children:[(0,J.jsxs)(`button`,{type:`button`,className:h===`pdf`?`is-active`:``,onClick:()=>g(`pdf`),children:[(0,J.jsx)(I,{size:14}),`PDF `,(0,J.jsx)(`small`,{children:u.length})]}),(0,J.jsxs)(`button`,{type:`button`,className:h===`figures`?`is-active`:``,onClick:()=>g(`figures`),children:[(0,J.jsx)(ne,{size:14}),t(`图表`,`Figures`),` `,(0,J.jsx)(`small`,{children:d.length})]}),(0,J.jsxs)(`button`,{type:`button`,className:h===`references`?`is-active`:``,onClick:()=>g(`references`),children:[(0,J.jsx)(w,{size:14}),t(`引用`,`References`),` `,(0,J.jsx)(`small`,{children:l.length})]})]}),(0,J.jsxs)(`div`,{className:`paper-output-surface`,children:[h===`pdf`?x?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`div`,{className:`pdf-switcher`,children:u.map(e=>(0,J.jsx)(`button`,{type:`button`,className:x.path===e.path?`is-active`:``,onClick:()=>y(e.path),children:e.name},e.path))}),(0,J.jsx)(an,{src:$.rawUrl(e.sid,r,x.path),name:x.name})]}):(0,J.jsx)(X,{icon:I,title:t(`尚无编译 PDF`,`No compiled PDF`),description:t(`Argus 或 LaTeX 流程生成 PDF 后会直接在这里可视化。`,`PDFs generated by Argus or the LaTeX pipeline appear here.`)}):null,h===`figures`?d.length?(0,J.jsx)(`div`,{className:`paper-figure-grid`,children:d.map(t=>tn(t)?(0,J.jsx)(sn,{sid:e.sid,workspaceId:r,entry:t},t.path):(0,J.jsxs)(`article`,{children:[(0,J.jsx)(Ue,{size:22}),(0,J.jsx)(`strong`,{children:t.name}),(0,J.jsx)(`code`,{children:t.path})]},t.path))}):(0,J.jsx)(X,{icon:ne,title:t(`尚无图表产出`,`No figure outputs`)}):null,h===`references`?l.length?(0,J.jsx)(`div`,{className:`paper-reference-list`,children:l.map(e=>(0,J.jsxs)(`button`,{type:`button`,onClick:()=>{p(e.path)},children:[(0,J.jsx)(w,{size:15}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.name}),(0,J.jsx)(`code`,{children:e.path})]})]},e.path))}):(0,J.jsx)(X,{icon:w,title:t(`尚无 BibTeX`,`No BibTeX`)}):null]}),(0,J.jsxs)(`footer`,{children:[(0,J.jsx)(`span`,{children:u.length?`PDF build detected`:`Waiting for LaTeX build`}),(0,J.jsxs)(`span`,{children:[s.length,` tracked assets`]})]})]})]})]})}var ln=[{id:`experiments`,zh:`实验进程`,en:`Experiments`,zhDesc:`实时查看 Argus 运行位置、DAG、角色交接和停止原因。`,enDesc:`Track Argus execution, DAG progress, role handoffs, and stop reasons.`,icon:se,color:`blue`},{id:`copilot`,zh:`Research Copilot`,en:`Research Copilot`,zhDesc:`保留原版 Argus 对话、Prompt 优化和工具轨迹。`,enDesc:`Chat with Argus, refine prompts, and inspect tool activity.`,icon:Ee,color:`violet`},{id:`literature`,zh:`文献中心`,en:`Literature`,zhDesc:`汇总已读论文、最近工作、检索记录和文献证据。`,enDesc:`Review papers, related work, retrieval history, and evidence.`,icon:w,color:`indigo`},{id:`inbox`,zh:`科研收信箱`,en:`Research Inbox`,zhDesc:`从零散输入抽取知识点并形成第一版 Argus Prompt。`,enDesc:`Turn rough notes into structured knowledge and an Argus prompt.`,icon:_e,color:`rose`},{id:`ide`,zh:`AI IDE`,en:`AI IDE`,zhDesc:`连接真实服务器目录,查看代码、Git 和 Argus 活动。`,enDesc:`Browse server files, Git state, and Argus activity.`,icon:j,color:`emerald`},{id:`paper`,zh:`论文工作区`,en:`Paper Workspace`,zhDesc:`自动发现 Argus 新写入的文稿、BibTeX、图表和 PDF。`,enDesc:`Discover manuscripts, BibTeX, figures, and PDFs from the workspace.`,icon:I,color:`amber`},{id:`reviewer`,zh:`模拟审稿`,en:`Reviewer`,zhDesc:`区分每轮过程审稿与项目完成后的最终投稿前审稿。`,enDesc:`Separate round-level review from final pre-submission review.`,icon:R,color:`slate`},{id:`release`,zh:`成果发布`,en:`Release`,zhDesc:`规划 GitHub 仓库、学术海报和项目宣传页。`,enDesc:`Plan a GitHub repository, academic poster, and project page.`,icon:we,color:`rose`}];function un(e){let{text:t}=Q(),n=e.snapshot.mission_view,r=n?.active_role||e.status?.active_role||`idle`;return(0,J.jsxs)(`div`,{className:`overview-page`,children:[(0,J.jsxs)(`section`,{className:`overview-hero`,children:[(0,J.jsxs)(`div`,{className:`overview-hero__copy`,children:[(0,J.jsxs)(`div`,{className:`overview-hero__badges`,children:[(0,J.jsx)(Y,{tone:e.snapshot.daemon.alive?`live`:`neutral`,dot:!0,children:e.snapshot.daemon.alive?t(`Argus 正在运行`,`Argus running`):t(`Argus 已停止`,`Argus stopped`)}),(0,J.jsx)(Y,{tone:G(n?.stage.id),children:n?.stage.label||t(`未分阶段`,`Unstaged`)})]}),(0,J.jsx)(`h1`,{children:e.snapshot.session.display_name||e.project.label}),(0,J.jsx)(`p`,{children:n?.mission.objective||e.status?.continuous?.objective||e.project.objective||t(`尚未设置研究目标。`,`No research objective has been set.`)}),(0,J.jsx)(`code`,{children:e.snapshot.session.workdir||e.snapshot.session.launch_cwd})]}),(0,J.jsxs)(`div`,{className:`overview-hero__stats`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:t(`当前角色`,`Active role`)}),(0,J.jsx)(`strong`,{children:r}),(0,J.jsx)(`small`,{children:e.snapshot.roles.find(e=>e.active)?.label||`waiting`})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:t(`研究阶段`,`Research stage`)}),(0,J.jsx)(`strong`,{children:n?.stage.label||`—`}),(0,J.jsx)(`small`,{children:n?.mission.status||`idle`})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:t(`累计运行`,`Elapsed`)}),(0,J.jsx)(`strong`,{children:st(n?.mission.campaign_elapsed_seconds||e.snapshot.daemon.uptime_seconds)}),(0,J.jsx)(`small`,{children:n?.round.current?`Round ${n.round.current}/${n.round.max||`—`}`:t(`暂无轮次`,`No round`)})]})]})]}),(0,J.jsx)(`div`,{className:`overview-section-heading`,children:(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h2`,{children:t(`项目工作区`,`Project workspace`)}),(0,J.jsx)(`p`,{children:t(`所有模块共享同一个 Argus 项目、工作目录和实时事件流。`,`All modules share the same Argus project, workdir, and live event stream.`)})]})}),(0,J.jsx)(`section`,{className:`module-grid`,children:ln.map(n=>{let r=n.icon;return(0,J.jsxs)(`button`,{className:`module-card`,type:`button`,onClick:()=>e.navigate(n.id),children:[(0,J.jsx)(`span`,{className:`module-card__icon module-card__icon--${n.color}`,children:(0,J.jsx)(r,{size:20})}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h3`,{children:t(n.zh,n.en)}),(0,J.jsx)(`p`,{children:t(n.zhDesc,n.enDesc)})]}),(0,J.jsx)(x,{size:16})]},n.id)})}),(0,J.jsxs)(`section`,{className:`overview-lower`,children:[(0,J.jsx)(ft,{eyebrow:`CURRENT MISSION`,title:t(`当前任务`,`Current mission`),children:(0,J.jsxs)(`div`,{className:`overview-mission`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(Ge,{size:18}),(0,J.jsx)(`span`,{children:n?.mission.status||`idle`})]}),(0,J.jsx)(`h3`,{children:n?.mission.title||e.project.current_task||t(`等待新任务`,`Waiting for a new task`)}),(0,J.jsx)(`p`,{children:n?.mission.summary||n?.frontier.summary||n?.review.reason||t(`Argus 的下一步和 Reviewer 边界会在这里同步。`,`Argus next steps and reviewer boundaries appear here.`)}),(0,J.jsxs)(`button`,{className:`button button--secondary`,type:`button`,onClick:()=>e.navigate(`experiments`),children:[t(`查看完整实验进程`,`View experiment progress`),` `,(0,J.jsx)(x,{size:14})]})]})}),(0,J.jsx)(ft,{eyebrow:`RECENT ACTIVITY`,title:t(`最近活动`,`Recent activity`),bodyClassName:`panel__body--flush`,children:(0,J.jsx)(mt,{events:e.events,limit:7,dense:!0})})]})]})}var dn=[`ICLR`,`NeurIPS`,`ICML`,`TMLR`,`ACL`,`EMNLP`,`NAACL`,`CVPR`,`ICCV`,`ECCV`,`AAAI`,`KDD`,`Nature Machine Intelligence`,`JMLR`,`IEEE TPAMI`,`__custom__`],fn=[`Novelty`,`Technical soundness`,`Experimental rigor`,`Baseline fairness`,`Statistical validity`,`Reproducibility`,`Writing clarity`,`Ethics / limitations`,`Artifact availability`],pn=`请特别检查 train/dev/test 泄漏、baseline 是否公平,以及 novelty claim 是否被现有直接工作覆盖。`,mn=`Pay special attention to train/dev/test leakage, baseline fairness, and whether direct prior work covers the novelty claim.`;function hn({mode:e,reviewerActive:t,hasReport:n}){let{text:r}=Q(),i=e===`process`?[[r(`Engineer 执行`,`Engineer execution`),r(`代码、实验与证据`,`Code, experiments, and evidence`),j],[r(`Reviewer 检查`,`Reviewer check`),r(`独立核验当前轮次`,`Independent round verification`),R],[r(`形成 Verdict`,`Produce verdict`),`done / continue / blocked`,Le],[r(`回流下一轮`,`Return to next round`),r(`修复任务进入 backlog`,`Repair tasks enter the backlog`),Fe]]:[[r(`选择最终稿`,`Select final draft`),r(`LaTeX / PDF 与证据包`,`LaTeX / PDF and evidence package`),I],[r(`独立最终审稿`,`Independent final review`),r(`按目标 venue 全面检查`,`Full target-venue review`),R],[r(`生成审稿报告`,`Generate review report`),r(`评分、问题与置信度`,`Scores, issues, and confidence`),F],[r(`修改清单`,`Revision checklist`),r(`投稿前人工确认`,`Human confirmation before submission`),be]];return(0,J.jsx)(`div`,{className:`review-flow`,children:i.map(([e,r,a],o)=>(0,J.jsxs)(`div`,{className:t&&o===1||n&&o>=2?`is-active`:o===0?`is-done`:``,children:[(0,J.jsx)(`span`,{children:o+1}),(0,J.jsx)(a,{size:17}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e}),(0,J.jsx)(`small`,{children:r})]}),o(o?.role_work??[]).filter(e=>e.role===`reviewer`).filter(e=>/review|verdict|decision|completion|handoff/i.test(`${e.kind} ${e.title}`)).sort((e,t)=>t.ts-e.ts),[o?.role_work]),c=(0,_.useMemo)(()=>e.events.filter(e=>/review/.test(String(e.type??``))||/review/.test(String(e.agent_layer??e.actor??``))),[e.events]),[l,u]=(0,_.useState)(``),d=s.find(e=>e.id===l)??s[0]??null,f=Vt(e.sid,`review`),p=i({queryKey:[`review-workspace-tree`,e.sid,f.workspaceId],queryFn:({signal:t})=>$.tree(e.sid,f.workspaceId,t),enabled:!!f.workspaceId,refetchInterval:12e3}),m=(p.data?.entries??[]).filter(e=>e.type===`file`&&!/final[_-]?review[_-]?request/i.test(e.path)&&/final[_-]?review|final[_-]?.*verdict|submission[_-]?review/i.test(e.path)).filter(e=>[`.md`,`.txt`,`.json`].includes(e.extension)).sort((e,t)=>t.mtime-e.mtime),h=(p.data?.entries??[]).filter(e=>e.type===`file`&&[`.tex`,`.md`,`.pdf`].includes(e.extension)&&/(?:^|\/)(paper|manuscript|technical_report)(?:\/|$)/i.test(e.path)).sort((e,t)=>t.mtime-e.mtime),[g,v]=(0,_.useState)(``),[y,b]=(0,_.useState)(``),x=m.find(e=>e.path===y)??m[0]??null,S=i({queryKey:[`final-review-file`,e.sid,f.workspaceId,x?.path,x?.mtime],queryFn:({signal:t})=>$.file(e.sid,f.workspaceId,x.path,t),enabled:!!(x&&f.workspaceId),refetchInterval:12e3}),[C,w]=(0,_.useState)(`ICLR`),[T,E]=(0,_.useState)(``),[D,ee]=(0,_.useState)(`conference`),[k,A]=(0,_.useState)(`strict`),[j,M]=(0,_.useState)([`Novelty`,`Technical soundness`,`Experimental rigor`,`Baseline fairness`,`Reproducibility`]),[N,te]=(0,_.useState)(()=>t===`zh-CN`?pn:mn),[P,ne]=(0,_.useState)(!1),[re,ie]=(0,_.useState)(``),[I,L]=(0,_.useState)(``),ae=o?.review,oe=o?.roles.find(e=>e.role===`reviewer`)||e.snapshot.roles.find(e=>e.role===`reviewer`);(0,_.useEffect)(()=>{te(e=>e===pn||e===mn?t===`zh-CN`?pn:mn:e)},[t]);let se=async()=>{let t=C===`__custom__`?T.trim():C;if(!(!t||!N.trim()||!confirm(n(`确认在项目完成后按 ${t} 标准发起独立最终审稿?`,`Start an independent final review using ${t} standards?`)))){ne(!0),ie(``),L(``);try{let r=await H.createFinalReview(e.sid,{venue:t,venue_type:D,strictness:k,manuscript_path:g,emphasis:j,scope:N});L(n(`最终审稿已进入 Argus 队列 · ${r.manifest_path}`,`Final review queued in Argus · ${r.manifest_path}`)),await Promise.all([e.refresh(),p.refetch()])}catch(e){ie(e instanceof Error?e.message:String(e))}finally{ne(!1)}}};return(0,J.jsxs)(`div`,{className:`ros-page reviewer-v2`,children:[(0,J.jsxs)(`header`,{className:`ros-page-header`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`eyebrow`,children:`REVIEWER ARENA`}),(0,J.jsx)(`h1`,{children:n(`模拟审稿`,`Reviewer arena`)}),(0,J.jsx)(`p`,{children:n(`过程审稿用于每轮 Engineer ⇄ Reviewer 纠偏;最终审稿用于论文完成后的投稿前独立检查。`,`Process review corrects each Engineer ⇄ Reviewer round; final review is an independent pre-submission check.`)})]}),(0,J.jsx)(Y,{tone:oe?.status?G(oe.status):`neutral`,dot:oe?.status===`active`,children:oe?.status||`waiting`})]}),(0,J.jsxs)(`div`,{className:`review-mode-tabs`,children:[(0,J.jsxs)(`button`,{type:`button`,className:r===`process`?`is-active`:``,onClick:()=>a(`process`),children:[(0,J.jsx)(he,{size:16}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:n(`过程审稿`,`Process review`)}),(0,J.jsx)(`small`,{children:n(`Argus 每轮执行中的 Reviewer 反馈`,`Reviewer feedback during each Argus round`)})]}),(0,J.jsx)(Y,{tone:`neutral`,children:s.length})]}),(0,J.jsxs)(`button`,{type:`button`,className:r===`final`?`is-active`:``,onClick:()=>a(`final`),children:[(0,J.jsx)(Le,{size:16}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:n(`最终审稿`,`Final review`)}),(0,J.jsx)(`small`,{children:n(`项目完成后的独立投稿前审稿`,`Independent pre-submission review`)})]}),(0,J.jsx)(Y,{tone:`neutral`,children:m.length})]})]}),r===`process`?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(hn,{mode:`process`,reviewerActive:oe?.status===`active`,hasReport:!!ae?.status}),(0,J.jsxs)(`div`,{className:`process-review-layout`,children:[(0,J.jsxs)(`aside`,{className:`ros-card review-rounds`,children:[(0,J.jsx)(`header`,{children:(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`ENGINEER ⇄ REVIEWER`}),(0,J.jsx)(`h2`,{children:n(`过程审稿轮次`,`Process review rounds`)})]})}),(0,J.jsx)(`div`,{children:s.length?s.map(e=>(0,J.jsxs)(`button`,{type:`button`,className:d?.id===e.id?`is-active`:``,onClick:()=>u(e.id),children:[(0,J.jsx)(`span`,{className:`review-state review-state--${G(e.status)}`,children:(0,J.jsx)(R,{size:14})}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.title}),(0,J.jsxs)(`small`,{children:[ct(e.ts),` · `,e.status||e.kind]})]})]},e.id)):(0,J.jsx)(X,{icon:R,title:n(`暂无过程审稿`,`No process reviews yet`)})})]}),(0,J.jsxs)(`main`,{className:`ros-card process-report`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`ROUND VERDICT`}),(0,J.jsx)(`h2`,{children:d?.title||n(`选择一轮 Reviewer 反馈`,`Select reviewer feedback`)})]}),d?(0,J.jsx)(Y,{tone:G(d.status),children:d.status}):null]}),d?(0,J.jsxs)(`article`,{children:[(0,J.jsxs)(`div`,{className:`process-report__meta`,children:[(0,J.jsxs)(`span`,{children:[`Round `,d.round_index??`—`]}),(0,J.jsx)(`time`,{children:ct(d.ts)})]}),(0,J.jsx)(Z,{children:d.detail||n(`该轮没有留下可展示报告。`,`This round has no displayable report.`)})]}):(0,J.jsx)(X,{icon:F,title:n(`选择左侧过程审稿`,`Select a process review`)})]}),(0,J.jsxs)(`aside`,{className:`ros-card review-live`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`LIVE REVIEW EVENTS`}),(0,J.jsx)(`h2`,{children:n(`Reviewer 实时轨迹`,`Live reviewer activity`)})]}),(0,J.jsx)(Y,{tone:e.connected?`live`:`warn`,dot:!0,children:e.connected?`Live`:`Polling`})]}),(0,J.jsx)(mt,{events:c,limit:24,dense:!0})]}),(0,J.jsxs)(`section`,{className:`process-verdict-card`,children:[(0,J.jsx)(`span`,{className:`process-verdict-card__icon process-verdict-card__icon--${G(ae?.status)}`,children:G(ae?.status)===`success`?(0,J.jsx)(O,{size:21}):(0,J.jsx)(qe,{size:21})}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:n(`当前过程 Verdict`,`Current process verdict`)}),(0,J.jsx)(`strong`,{children:ae?.status||`Awaiting review`}),(0,J.jsx)(`p`,{children:ae?.reason||n(`Reviewer 完成下一轮后会写入判断和行动要求。`,`The Reviewer will record a decision and required actions after the next round.`)})]})]})]})]}):(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(hn,{mode:`final`,reviewerActive:P,hasReport:!!(x||I)}),(0,J.jsxs)(`div`,{className:`final-review-layout`,children:[(0,J.jsxs)(`aside`,{className:`ros-card final-review-files`,children:[(0,J.jsx)(`header`,{children:(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`FINAL REPORTS`}),(0,J.jsx)(`h2`,{children:n(`最终审稿报告`,`Final review reports`)})]})}),(0,J.jsx)(`div`,{children:m.length?m.map(e=>(0,J.jsxs)(`button`,{type:`button`,className:x?.path===e.path?`is-active`:``,onClick:()=>b(e.path),children:[(0,J.jsx)(F,{size:14}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{children:e.name}),(0,J.jsx)(`small`,{children:ct(e.mtime)})]})]},e.path)):(0,J.jsx)(X,{icon:F,title:n(`还没有最终审稿报告`,`No final review report yet`),description:n(`完成论文后可从右侧发起。`,`Start one from the form after the paper is complete.`)})})]}),(0,J.jsxs)(`main`,{className:`ros-card final-review-report`,children:[(0,J.jsxs)(`header`,{children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`INDEPENDENT REVIEW`}),(0,J.jsx)(`h2`,{children:x?.name||n(`投稿前最终审稿`,`Pre-submission final review`)})]}),x?(0,J.jsx)(Y,{tone:`success`,children:`Saved report`}):null]}),S.data?(0,J.jsx)(`article`,{children:(0,J.jsx)(Z,{children:S.data.content})}):I?(0,J.jsxs)(`article`,{className:`final-review-receipt`,children:[(0,J.jsx)(Y,{tone:`success`,children:`Queued`}),(0,J.jsx)(`p`,{children:I}),(0,J.jsx)(`small`,{children:n(`Argus 将生成结构化最终审稿报告;可在过程事件和任务路线查看执行状态。`,`Argus will generate a structured final review report; execution remains visible in events and the task route.`)})]}):(0,J.jsx)(X,{icon:Le,title:n(`项目完成后再发起最终审稿`,`Start final review after project completion`),description:n(`最终 Reviewer 会读取完整稿件、实验、文献与过程审稿记录。`,`The final Reviewer reads the full manuscript, experiments, literature, and process-review history.`)})]}),(0,J.jsxs)(`aside`,{className:`ros-card final-review-form`,children:[(0,J.jsx)(`header`,{children:(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`span`,{children:`NEW FINAL REVIEW`}),(0,J.jsx)(`h2`,{children:n(`发起独立最终审稿`,`Start independent final review`)})]})}),(0,J.jsxs)(`div`,{children:[(0,J.jsxs)(`label`,{className:`field`,children:[(0,J.jsx)(`span`,{children:n(`选择最终稿`,`Select final manuscript`)}),(0,J.jsxs)(`select`,{value:g,onChange:e=>v(e.target.value),children:[(0,J.jsx)(`option`,{value:``,children:n(`自动选择最新稿件`,`Automatically select latest`)}),h.map(e=>(0,J.jsx)(`option`,{value:e.path,children:e.path},e.path))]})]}),(0,J.jsxs)(`div`,{className:`review-form-row`,children:[(0,J.jsxs)(`label`,{className:`field`,children:[(0,J.jsx)(`span`,{children:n(`Venue 类型`,`Venue type`)}),(0,J.jsxs)(`select`,{value:D,onChange:e=>ee(e.target.value),children:[(0,J.jsx)(`option`,{value:`conference`,children:`Conference`}),(0,J.jsx)(`option`,{value:`journal`,children:`Journal`}),(0,J.jsx)(`option`,{value:`workshop`,children:`Workshop`})]})]}),(0,J.jsxs)(`label`,{className:`field`,children:[(0,J.jsx)(`span`,{children:n(`审稿严格度`,`Review strictness`)}),(0,J.jsxs)(`select`,{value:k,onChange:e=>A(e.target.value),children:[(0,J.jsx)(`option`,{value:`preflight`,children:n(`快速预检`,`Quick preflight`)}),(0,J.jsx)(`option`,{value:`standard`,children:n(`标准审稿`,`Standard review`)}),(0,J.jsx)(`option`,{value:`strict`,children:n(`严格模拟审稿`,`Strict simulated review`)}),(0,J.jsx)(`option`,{value:`red-team`,children:`Red Team / Desk Reject`})]})]})]}),(0,J.jsxs)(`label`,{className:`field`,children:[(0,J.jsx)(`span`,{children:n(`目标会议 / 期刊`,`Target venue`)}),(0,J.jsx)(`select`,{value:C,onChange:e=>w(e.target.value),children:dn.map(e=>(0,J.jsx)(`option`,{value:e,children:e===`__custom__`?n(`其他 / 自定义…`,`Other / custom…`):e},e))})]}),C===`__custom__`?(0,J.jsxs)(`label`,{className:`field`,children:[(0,J.jsx)(`span`,{children:n(`自定义 Venue 名称`,`Custom venue name`)}),(0,J.jsx)(`input`,{value:T,onChange:e=>E(e.target.value),placeholder:n(`例如:Nature Machine Intelligence / CHI Workshop`,`Example: Nature Machine Intelligence / CHI Workshop`)})]}):null,(0,J.jsxs)(`fieldset`,{className:`review-emphasis`,children:[(0,J.jsx)(`legend`,{children:n(`重点审查维度`,`Review emphasis`)}),fn.map(e=>(0,J.jsxs)(`label`,{children:[(0,J.jsx)(`input`,{type:`checkbox`,checked:j.includes(e),onChange:()=>M(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}),(0,J.jsx)(`span`,{children:e})]},e))]}),(0,J.jsxs)(`label`,{className:`field`,children:[(0,J.jsx)(`span`,{children:n(`特别强调`,`Special emphasis`)}),(0,J.jsx)(`textarea`,{rows:5,value:N,onChange:e=>te(e.target.value),placeholder:n(`写明你最希望 Reviewer 严格检查的问题…`,`Describe what the Reviewer should scrutinize most…`)})]}),(0,J.jsxs)(`div`,{className:`final-review-warning`,children:[(0,J.jsx)(qe,{size:15}),(0,J.jsx)(`p`,{children:n(`这是完成阶段的独立 Reviewer,不替代正式同行评审,也不会自动投稿。`,`This independent completion-stage Reviewer does not replace peer review and never submits automatically.`)})]}),(0,J.jsxs)(`button`,{className:`button button--primary button--full`,type:`button`,disabled:P||!N.trim()||C===`__custom__`&&!T.trim(),onClick:()=>void se(),children:[P?(0,J.jsx)(z,{size:14}):(0,J.jsx)(ze,{size:14}),P?n(`正在创建审稿任务`,`Creating review task`):n(`开始最终审稿`,`Start final review`)]}),re?(0,J.jsx)(`div`,{className:`inline-error`,children:re}):null]})]})]})]})]})}var _n=[{icon:me,title:`GitHub Repository`,zhDetail:`README、LICENSE、CITATION.cff、环境文件、Secret Scan 与人工确认后的仓库创建。`,enDetail:`Prepare README, LICENSE, CITATION.cff, environment files, secret scanning, and an approved repository.`,zhItems:[`选择账户与可见性`,`生成发布清单`,`预览 Git diff`,`人工批准后 push`],enItems:[`Choose account and visibility`,`Generate release manifest`,`Preview Git diff`,`Push after approval`]},{icon:Me,title:`Academic Poster`,zhDetail:`从最终稿、图表和结果中生成可审阅的学术海报。`,enDetail:`Generate a reviewable academic poster from the final paper, figures, and results.`,zhItems:[`A0/A1 与横竖版`,`机构 Logo 与主题`,`图表布局`,`PDF / PNG / SVG`],enItems:[`A0/A1 portrait or landscape`,`Institution logo and theme`,`Figure layout`,`PDF / PNG / SVG`]},{icon:M,title:`Project Page`,zhDetail:`生成论文项目宣传页和可部署的静态站点。`,enDetail:`Generate a paper project page and deployable static site.`,zhItems:[`方法与结果展示`,`交互式图表`,`Paper / Code / Model`,`预览后部署`],enItems:[`Methods and results`,`Interactive charts`,`Paper / Code / Model`,`Deploy after preview`]}];function vn(e){let{text:t}=Q();return(0,J.jsxs)(`div`,{className:`ros-page release-page`,children:[(0,J.jsxs)(`header`,{className:`ros-page-header`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`eyebrow`,children:`RESULTS RELEASE`}),(0,J.jsx)(`h1`,{children:t(`成果发布`,`Results release`)}),(0,J.jsx)(`p`,{children:t(`未来用于把研究工作整理成 GitHub 仓库、学术海报和项目宣传页。当前只展示规划,不执行发布。`,`Plan a GitHub repository, academic poster, and project page. This view does not publish anything yet.`)})]}),(0,J.jsx)(Y,{tone:`warn`,children:t(`敬请期待`,`Planned`)})]}),(0,J.jsxs)(`section`,{className:`release-hero`,children:[(0,J.jsx)(`span`,{children:(0,J.jsx)(z,{size:28})}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`eyebrow`,children:`PLANNED WORKSPACE`}),(0,J.jsx)(`h2`,{children:t(`从研究产物到可审核的公开成果`,`From research artifacts to reviewable public outputs`)}),(0,J.jsx)(`p`,{children:t(`后续将调用受审计的 AI Agent 基于真实工作区生成发布补丁和视觉资产,但任何外部创建、push 或部署都需要人工批准。`,`Audited agents will generate release patches and visual assets from the real workspace, while every external create, push, or deploy requires approval.`)})]})]}),(0,J.jsx)(`div`,{className:`release-module-grid`,children:_n.map(e=>{let n=e.icon,r=t(e.zhItems.join(` `),e.enItems.join(` `)).split(` diff --git a/frontend/web/dist/assets/index-BoGCagzS.js b/frontend/web/dist/assets/index-9g59E8KZ.js similarity index 99% rename from frontend/web/dist/assets/index-BoGCagzS.js rename to frontend/web/dist/assets/index-9g59E8KZ.js index 5781e2ea..63813605 100644 --- a/frontend/web/dist/assets/index-BoGCagzS.js +++ b/frontend/web/dist/assets/index-9g59E8KZ.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/motion-sqs9Ax-g.js","assets/rolldown-runtime-hePW80VL.js","assets/ResearchWorkbenchPanel-D0lDrnfL.js","assets/icons-BgG77X6K.js","assets/query-DOc9YWJi.js","assets/markdown-BdostSiP.js","assets/ResearchWorkbenchPanel-Bxi8TjKE.css"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/motion-sqs9Ax-g.js","assets/rolldown-runtime-hePW80VL.js","assets/ResearchWorkbenchPanel-BnMJwuZz.js","assets/icons-BgG77X6K.js","assets/query-DOc9YWJi.js","assets/markdown-BdostSiP.js","assets/ResearchWorkbenchPanel-Bxi8TjKE.css"])))=>i.map(i=>d[i]); import{r as e,t}from"./rolldown-runtime-hePW80VL.js";import{C as n,D as r,E as i,S as a,T as o,_ as s,a as c,b as l,c as u,d,f,g as p,h as m,i as h,l as g,m as _,n as v,o as y,p as b,r as x,s as S,t as C,u as w,v as T,w as ee,x as te,y as E}from"./icons-BgG77X6K.js";import{_ as ne,a as re,c as ie,d as ae,f as D,g as O,h as oe,i as se,l as ce,m as k,n as le,o as A,p as ue,r as de,s as fe,t as j,u as pe,v as me,y as he}from"./query-DOc9YWJi.js";import{n as ge,t as _e}from"./markdown-BdostSiP.js";(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 ve=t((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(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=typeof setTimeout==`function`?setTimeout:null,_=typeof clearTimeout==`function`?clearTimeout:null,v=typeof setImmediate<`u`?setImmediate:null;typeof navigator<`u`&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function y(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 b(e){if(h=!1,y(e),!m){if(n(c)!==null)m=!0,ae(x);else{var t=n(l);t!==null&&D(b,t.startTime-e)}}}function x(t,i){m=!1,h&&(h=!1,_(w),w=-1),p=!0;var a=f;try{for(y(i),d=n(c);d!==null&&(!(d.expirationTime>i)||t&&!te());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=i);i=e.unstable_now(),typeof s==`function`?d.callback=s:d===n(c)&&r(c),y(i)}else r(c);d=n(c)}if(d!==null)var u=!0;else{var g=n(l);g!==null&&D(b,g.startTime-i),u=!1}return u}finally{d=null,f=a,p=!1}}var S=!1,C=null,w=-1,T=5,ee=-1;function te(){return!(e.unstable_now()-eee||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(_(w),w=-1):h=!0,D(b,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,ae(x))),r},e.unstable_shouldYield=te,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),ye=t(((e,t)=>{t.exports=ve()})),be=t((e=>{var t=r(),n=ye();function i(e){for(var t=`https://reactjs.org/docs/error-decoder.html?invariant=`+e,n=1;n`u`||window.document===void 0||window.document.createElement===void 0),u=Object.prototype.hasOwnProperty,d=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},p={};function m(e){return u.call(p,e)?!0:u.call(f,e)?!1:d.test(e)?p[e]=!0:(f[e]=!0,!1)}function h(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case`function`:case`symbol`:return!0;case`boolean`:return r?!1:n===null?(e=e.toLowerCase().slice(0,5),e!==`data-`&&e!==`aria-`):!n.acceptsBooleans;default:return!1}}function g(e,t,n,r){if(t==null||h(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function _(e,t,n,r,i,a,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=o}var v={};`children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style`.split(` `).forEach(function(e){v[e]=new _(e,0,!1,e,null,!1,!1)}),[[`acceptCharset`,`accept-charset`],[`className`,`class`],[`htmlFor`,`for`],[`httpEquiv`,`http-equiv`]].forEach(function(e){var t=e[0];v[t]=new _(t,1,!1,e[1],null,!1,!1)}),[`contentEditable`,`draggable`,`spellCheck`,`value`].forEach(function(e){v[e]=new _(e,2,!1,e.toLowerCase(),null,!1,!1)}),[`autoReverse`,`externalResourcesRequired`,`focusable`,`preserveAlpha`].forEach(function(e){v[e]=new _(e,2,!1,e,null,!1,!1)}),`allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope`.split(` `).forEach(function(e){v[e]=new _(e,3,!1,e.toLowerCase(),null,!1,!1)}),[`checked`,`multiple`,`muted`,`selected`].forEach(function(e){v[e]=new _(e,3,!0,e,null,!1,!1)}),[`capture`,`download`].forEach(function(e){v[e]=new _(e,4,!1,e,null,!1,!1)}),[`cols`,`rows`,`size`,`span`].forEach(function(e){v[e]=new _(e,6,!1,e,null,!1,!1)}),[`rowSpan`,`start`].forEach(function(e){v[e]=new _(e,5,!1,e.toLowerCase(),null,!1,!1)});var y=/[\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}`accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height`.split(` `).forEach(function(e){var t=e.replace(y,b);v[t]=new _(t,1,!1,e,null,!1,!1)}),`xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type`.split(` `).forEach(function(e){var t=e.replace(y,b);v[t]=new _(t,1,!1,e,`http://www.w3.org/1999/xlink`,!1,!1)}),[`xml:base`,`xml:lang`,`xml:space`].forEach(function(e){var t=e.replace(y,b);v[t]=new _(t,1,!1,e,`http://www.w3.org/XML/1998/namespace`,!1,!1)}),[`tabIndex`,`crossOrigin`].forEach(function(e){v[e]=new _(e,1,!1,e.toLowerCase(),null,!1,!1)}),v.xlinkHref=new _(`xlinkHref`,1,!1,`xlink:href`,`http://www.w3.org/1999/xlink`,!0,!1),[`src`,`href`,`action`,`formAction`].forEach(function(e){v[e]=new _(e,1,!1,e.toLowerCase(),null,!0,!0)});function x(e,t,n,r){var i=v.hasOwnProperty(t)?v[t]:null;(i===null?r||!(2`)&&(c=c.replace(``,e.displayName)),c}while(1<=o&&0<=s);break}}}finally{ue=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:``)?A(e):``}function fe(e){switch(e.tag){case 5:return A(e.type);case 16:return A(`Lazy`);case 13:return A(`Suspense`);case 19:return A(`SuspenseList`);case 0:case 2:case 15:return e=de(e.type,!1),e;case 11:return e=de(e.type.render,!1),e;case 1:return e=de(e.type,!0),e;default:return``}}function j(e){if(e==null)return null;if(typeof e==`function`)return e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case T:return`Fragment`;case w:return`Portal`;case te:return`Profiler`;case ee:return`StrictMode`;case ie:return`Suspense`;case ae:return`SuspenseList`}if(typeof e==`object`)switch(e.$$typeof){case ne:return(e.displayName||`Context`)+`.Consumer`;case E:return(e._context.displayName||`Context`)+`.Provider`;case re:var t=e.render;return e=e.displayName,e||=(e=t.displayName||t.name||``,e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case D:return t=e.displayName||null,t===null?j(e.type)||`Memo`:t;case O:t=e._payload,e=e._init;try{return j(e(t))}catch{}}return null}function pe(e){var t=e.type;switch(e.tag){case 24:return`Cache`;case 9:return(t.displayName||`Context`)+`.Consumer`;case 10:return(t._context.displayName||`Context`)+`.Provider`;case 18:return`DehydratedFragment`;case 11:return e=t.render,e=e.displayName||e.name||``,t.displayName||(e===``?`ForwardRef`:`ForwardRef(`+e+`)`);case 7:return`Fragment`;case 5:return t;case 4:return`Portal`;case 3:return`Root`;case 6:return`Text`;case 16:return j(t);case 8:return t===ee?`StrictMode`:`Mode`;case 22:return`Offscreen`;case 12:return`Profiler`;case 21:return`Scope`;case 13:return`Suspense`;case 19:return`SuspenseList`;case 25:return`TracingMarker`;case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t==`function`)return t.displayName||t.name||null;if(typeof t==`string`)return t}return null}function me(e){switch(typeof e){case`boolean`:case`number`:case`string`:case`undefined`:return e;case`object`:return e;default:return``}}function he(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()===`input`&&(t===`checkbox`||t===`radio`)}function ge(e){var t=he(e)?`checked`:`value`,n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=``+e[t];if(!e.hasOwnProperty(t)&&n!==void 0&&typeof n.get==`function`&&typeof n.set==`function`){var i=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(e){r=``+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=``+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function _e(e){e._valueTracker||=ge(e)}function ve(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r=``;return e&&(r=he(e)?e.checked?`true`:`false`:e.value),e=r,e!==n&&(t.setValue(e),!0)}function be(e){if(e||=typeof document<`u`?document:void 0,e===void 0)return null;try{return e.activeElement||e.body}catch{return e.body}}function xe(e,t){var n=t.checked;return k({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Se(e,t){var n=t.defaultValue==null?``:t.defaultValue,r=t.checked==null?t.defaultChecked:t.checked;n=me(t.value==null?n:t.value),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type===`checkbox`||t.type===`radio`?t.checked!=null:t.value!=null}}function Ce(e,t){t=t.checked,t!=null&&x(e,`checked`,t,!1)}function we(e,t){Ce(e,t);var n=me(t.value),r=t.type;if(n!=null)r===`number`?(n===0&&e.value===``||e.value!=n)&&(e.value=``+n):e.value!==``+n&&(e.value=``+n);else if(r===`submit`||r===`reset`){e.removeAttribute(`value`);return}t.hasOwnProperty(`value`)?Ee(e,t.type,n):t.hasOwnProperty(`defaultValue`)&&Ee(e,t.type,me(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Te(e,t,n){if(t.hasOwnProperty(`value`)||t.hasOwnProperty(`defaultValue`)){var r=t.type;if(!(r!==`submit`&&r!==`reset`||t.value!==void 0&&t.value!==null))return;t=``+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==``&&(e.name=``),e.defaultChecked=!!e._wrapperState.initialChecked,n!==``&&(e.name=n)}function Ee(e,t,n){(t!==`number`||be(e.ownerDocument)!==e)&&(n==null?e.defaultValue=``+e._wrapperState.initialValue:e.defaultValue!==``+n&&(e.defaultValue=``+n))}var M=Array.isArray;function De(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i`+t.valueOf().toString()+``,t=Pe.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Ie(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Le={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Re=[`Webkit`,`ms`,`Moz`,`O`];Object.keys(Le).forEach(function(e){Re.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Le[t]=Le[e]})});function ze(e,t,n){return t==null||typeof t==`boolean`||t===``?``:n||typeof t!=`number`||t===0||Le.hasOwnProperty(e)&&Le[e]?(``+t).trim():t+`px`}function Be(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=n.indexOf(`--`)===0,i=ze(n,t[n],r);n===`float`&&(n=`cssFloat`),r?e.setProperty(n,i):e[n]=i}}var Ve=k({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function He(e,t){if(t){if(Ve[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(i(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(i(60));if(typeof t.dangerouslySetInnerHTML!=`object`||!(`__html`in t.dangerouslySetInnerHTML))throw Error(i(61))}if(t.style!=null&&typeof t.style!=`object`)throw Error(i(62))}}function Ue(e,t){if(e.indexOf(`-`)===-1)return typeof t.is==`string`;switch(e){case`annotation-xml`:case`color-profile`:case`font-face`:case`font-face-src`:case`font-face-uri`:case`font-face-format`:case`font-face-name`:case`missing-glyph`:return!1;default:return!0}}var We=null;function Ge(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Ke=null,qe=null,Je=null;function N(e){if(e=Pi(e)){if(typeof Ke!=`function`)throw Error(i(280));var t=e.stateNode;t&&(t=Ii(t),Ke(e.stateNode,e.type,t))}}function Ye(e){qe?Je?Je.push(e):Je=[e]:qe=e}function Xe(){if(qe){var e=qe,t=Je;if(Je=qe=null,N(e),t)for(e=0;e>>=0,e===0?32:31-(Tt(e)/Et|0)|0}var Ot=64,kt=4194304;function At(e){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: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 e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function jt(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,i=e.suspendedLanes,a=e.pingedLanes,o=n&268435455;if(o!==0){var s=o&~i;s===0?(a&=o,a!==0&&(r=At(a))):r=At(s)}else o=n&~i,o===0?a!==0&&(r=At(a)):r=At(o);if(r===0)return 0;if(t!==0&&t!==r&&(t&i)===0&&(i=r&-r,a=t&-t,i>=a||i===16&&a&4194240))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Lt(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-wt(t),e[t]=n}function Rt(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=W),$n=` `,er=!1;function tr(e,t){switch(e){case`keyup`:return Xn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function nr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var rr=!1;function ir(e,t){switch(e){case`compositionend`:return nr(t);case`keypress`:return t.which===32?(er=!0,$n):null;case`textInput`:return e=t.data,e===$n&&er?null:e;default:return null}}function ar(e,t){if(rr)return e===`compositionend`||!Zn&&tr(e,t)?(e=xn(),bn=yn=vn=null,rr=!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=Dr(n)}}function kr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?kr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Ar(){for(var e=window,t=be();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=be(e.document)}return t}function jr(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`)}function Mr(e){var t=Ar(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&kr(n.ownerDocument.documentElement,n)){if(r!==null&&jr(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),`selectionStart`in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,a=Math.min(r.start,i);r=r.end===void 0?a:Math.min(r.end,i),!e.extend&&a>r&&(i=r,r=a,a=i),i=Or(n,a);var o=Or(n,r);i&&o&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus==`function`&&n.focus(),n=0;n=document.documentMode,Nr=null,Pr=null,Fr=null,Ir=!1;function Lr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ir||Nr==null||Nr!==be(r)||(r=Nr,`selectionStart`in r&&jr(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}),Fr&&Er(Fr,r)||(Fr=r,r=si(Pr,`onSelect`),0Ri||(e.current=Li[Ri],Li[Ri]=null,Ri--)}function X(e,t){Ri++,Li[Ri]=e.current,e.current=t}var Bi={},Vi=zi(Bi),Hi=zi(!1),Ui=Bi;function Wi(e,t){var n=e.type.contextTypes;if(!n)return Bi;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i={},a;for(a in n)i[a]=t[a];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Gi(e){return e=e.childContextTypes,e!=null}function Ki(){Y(Hi),Y(Vi)}function qi(e,t,n){if(Vi.current!==Bi)throw Error(i(168));X(Vi,t),X(Hi,n)}function Ji(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!=`function`)return n;for(var a in r=r.getChildContext(),r)if(!(a in t))throw Error(i(108,pe(e)||`Unknown`,a));return k({},n,r)}function Yi(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Bi,Ui=Vi.current,X(Vi,e),X(Hi,Hi.current),!0}function Xi(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=Ji(e,t,Ui),r.__reactInternalMemoizedMergedChildContext=e,Y(Hi),Y(Vi),X(Vi,e)):Y(Hi),X(Hi,n)}var Zi=null,Qi=!1,$i=!1;function ea(e){Zi===null?Zi=[e]:Zi.push(e)}function ta(e){Qi=!0,ea(e)}function na(){if(!$i&&Zi!==null){$i=!0;var e=0,t=H;try{var n=Zi;for(H=1;e>=o,i-=o,ua=1<<32-wt(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),Z&&fa(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),Z&&fa(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 Z&&fa(a,g),u}for(h=r(a,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)}),Z&&fa(a,g),u}function _(e,r,i,o){if(typeof i==`object`&&i&&i.type===T&&i.key===null&&(i=i.props.children),typeof i==`object`&&i){switch(i.$$typeof){case C:a:{for(var c=i.key,l=r;l!==null;){if(l.key===c){if(c=i.type,c===T){if(l.tag===7){n(e,l.sibling),r=a(l,i.props.children),r.return=e,e=r;break a}}else if(l.elementType===c||typeof c==`object`&&c&&c.$$typeof===O&&ja(c)===l.type){n(e,l.sibling),r=a(l,i.props),r.ref=ka(e,l,i),r.return=e,e=r;break a}n(e,l);break}t(e,l),l=l.sibling}i.type===T?(r=Zl(i.props.children,e.mode,o,i.key),r.return=e,e=r):(o=Xl(i.type,i.key,i.props,null,e.mode,o),o.ref=ka(e,r,i),o.return=e,e=o)}return s(e);case w:a:{for(l=i.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===i.containerInfo&&r.stateNode.implementation===i.implementation){n(e,r.sibling),r=a(r,i.children||[]),r.return=e,e=r;break a}n(e,r);break}t(e,r),r=r.sibling}r=eu(i,e.mode,o),r.return=e,e=r}return s(e);case O:return l=i._init,_(e,r,l(i._payload),o)}if(M(i))return h(e,r,i,o);if(ce(i))return g(e,r,i,o);Aa(e,i)}return typeof i==`string`&&i!==``||typeof i==`number`?(i=``+i,r!==null&&r.tag===6?(n(e,r.sibling),r=a(r,i),r.return=e,e=r):(n(e,r),r=$l(i,e.mode,o),r.return=e,e=r),s(e)):n(e,r)}return _}var Na=Ma(!0),Pa=Ma(!1),Fa=zi(null),Ia=null,La=null,Ra=null;function za(){Ra=La=Ia=null}function Ba(e){var t=Fa.current;Y(Fa),e._currentValue=t}function Va(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)===t?r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t):(e.childLanes|=t,r!==null&&(r.childLanes|=t)),e===n)break;e=e.return}}function Ha(e,t){Ia=e,Ra=La=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(Ms=!0),e.firstContext=null)}function Ua(e){var t=e._currentValue;if(Ra!==e){if(e={context:e,memoizedValue:t,next:null},La===null){if(Ia===null)throw Error(i(308));La=e,Ia.dependencies={lanes:0,firstContext:e}}else La=La.next=e}return t}var Wa=null;function Ga(e){Wa===null?Wa=[e]:Wa.push(e)}function Ka(e,t,n,r){var i=t.interleaved;return i===null?(n.next=n,Ga(t)):(n.next=i.next,i.next=n),t.interleaved=n,qa(e,r)}function qa(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Ja=!1;function Ya(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Xa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Za(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Qa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,$&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,qa(e,n)}return i=r.interleaved,i===null?(t.next=t,Ga(r)):(t.next=i.next,i.next=t),r.interleaved=t,qa(e,n)}function $a(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194240)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,zt(e,n)}}function eo(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={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,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,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function to(e,t,n,r){var i=e.updateQueue;Ja=!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,p=s.eventTime;if((r&f)===f){u!==null&&(u=u.next={eventTime:p,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});a:{var m=e,h=s;switch(f=t,p=n,h.tag){case 1:if(m=h.payload,typeof m==`function`){d=m.call(p,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=h.payload,f=typeof m==`function`?m.call(p,d,f):m,f==null)break a;d=k({},d,f);break a;case 2:Ja=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,f=i.effects,f===null?i.effects=[s]:f.push(s))}else p={eventTime: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;f=s,s=f.next,f.next=null,i.lastBaseUpdate=f,i.shared.pending=null}}while(1);if(u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,t=i.shared.interleaved,t!==null){i=t;do o|=i.lane,i=i.next;while(i!==t)}else a===null&&(i.shared.lanes=0);Jc|=o,e.lanes=o,e.memoizedState=d}}function no(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=vo.transition;vo.transition={};try{e(!1),t()}finally{H=n,vo.transition=r}}function as(){return Mo().memoizedState}function os(e,t,n){var r=pl(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},cs(e))ls(t,n);else if(n=Ka(e,t,n,r),n!==null){var i=fl();ml(n,e,r,i),us(n,t,r)}}function ss(e,t,n){var r=pl(e),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(cs(e))ls(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,Tr(s,o)){var c=t.interleaved;c===null?(i.next=i,Ga(t)):(i.next=c.next,c.next=i),t.interleaved=i;return}}catch{}n=Ka(e,t,i,r),n!==null&&(i=fl(),ml(n,e,r,i),us(n,t,r))}}function cs(e){var t=e.alternate;return e===bo||t!==null&&t===bo}function ls(e,t){wo=Co=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function us(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,zt(e,n)}}var ds={readContext:Ua,useCallback:Do,useContext:Do,useEffect:Do,useImperativeHandle:Do,useInsertionEffect:Do,useLayoutEffect:Do,useMemo:Do,useReducer:Do,useRef:Do,useState:Do,useDebugValue:Do,useDeferredValue:Do,useTransition:Do,useMutableSource:Do,useSyncExternalStore:Do,useId:Do,unstable_isNewReconciler:!1},fs={readContext:Ua,useCallback:function(e,t){return jo().memoizedState=[e,t===void 0?null:t],e},useContext:Ua,useEffect:Jo,useImperativeHandle:function(e,t,n){return n=n==null?null:n.concat([e]),Ko(4194308,4,Qo.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ko(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ko(4,2,e,t)},useMemo:function(e,t){var n=jo();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=jo();return t=n===void 0?t:n(t),r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=os.bind(null,bo,e),[r.memoizedState,e]},useRef:function(e){var t=jo();return e={current:e},t.memoizedState=e},useState:Uo,useDebugValue:es,useDeferredValue:function(e){return jo().memoizedState=e},useTransition:function(){var e=Uo(!1),t=e[0];return e=is.bind(null,e[1]),jo().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=bo,a=jo();if(Z){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Vc===null)throw Error(i(349));yo&30||Ro(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,Jo(Bo.bind(null,r,o,e),[e]),r.flags|=2048,Wo(9,zo.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=jo(),t=Vc.identifierPrefix;if(Z){var n=da,r=ua;n=(r&~(1<<32-wt(r)-1)).toString(32)+n,t=`:`+t+`R`+n,n=To++,0<\/script>`,e=e.removeChild(e.firstChild)):typeof r.is==`string`?e=c.createElement(n,{is:r.is}):(e=c.createElement(n),n===`select`&&(c=e,r.multiple?c.multiple=!0:r.size&&(c.size=r.size))):e=c.createElementNS(e,n),e[Di]=t,e[Oi]=r,nc(e,t,!1,!1),t.stateNode=e;a:{switch(c=Ue(n,r),n){case`dialog`:J(`cancel`,e),J(`close`,e),a=r;break;case`iframe`:case`object`:case`embed`:J(`load`,e),a=r;break;case`video`:case`audio`:for(a=0;ael&&(t.flags|=128,r=!0,ac(s,!1),t.lanes=4194304)}}else{if(!r){if(e=mo(c),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),ac(s,!0),s.tail===null&&s.tailMode===`hidden`&&!c.alternate&&!Z)return oc(t),null}else 2*B()-s.renderingStartTime>el&&n!==1073741824&&(t.flags|=128,r=!0,ac(s,!1),t.lanes=4194304)}s.isBackwards?(c.sibling=t.child,t.child=c):(n=s.last,n===null?t.child=c:n.sibling=c,s.last=c)}return s.tail===null?(oc(t),null):(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=B(),t.sibling=null,n=po.current,X(po,r?n&1|2:n&1),t);case 22:case 23:return wl(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Wc&1073741824&&(oc(t),t.subtreeFlags&6&&(t.flags|=8192)):oc(t),null;case 24:return null;case 25:return null}throw Error(i(156,t.tag))}function cc(e,t){switch(ha(t),t.tag){case 1:return Gi(t.type)&&Ki(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return lo(),Y(Hi),Y(Vi),go(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return fo(t),null;case 13:if(Y(po),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Ea()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Y(po),null;case 4:return lo(),null;case 10:return Ba(t.type._context),null;case 22:case 23:return wl(),null;case 24:return null;default:return null}}var lc=!1,uc=!1,dc=typeof WeakSet==`function`?WeakSet:Set,Q=null;function fc(e,t){var n=e.ref;if(n!==null){if(typeof n==`function`)try{n(null)}catch(n){Rl(e,t,n)}else n.current=null}}function pc(e,t,n){try{n()}catch(n){Rl(e,t,n)}}var mc=!1;function hc(e,t){if(hi=fn,e=Ar(),jr(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(gi={focusedElem:e,selectionRange:n},fn=!1,Q=t;Q!==null;)if(t=Q,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,Q=e;else for(;Q!==null;){t=Q;try{var h=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(h!==null){var g=h.memoizedProps,_=h.memoizedState,v=t.stateNode;v.__reactInternalSnapshotBeforeUpdate=v.getSnapshotBeforeUpdate(t.elementType===t.type?g:hs(t.type,g),_)}break;case 3:var y=t.stateNode.containerInfo;y.nodeType===1?y.textContent=``:y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(i(163))}}catch(e){Rl(t,t.return,e)}if(e=t.sibling,e!==null){e.return=t.return,Q=e;break}Q=t.return}return h=mc,mc=!1,h}function gc(e,t,n){var r=t.updateQueue;if(r=r===null?null:r.lastEffect,r!==null){var i=r=r.next;do{if((i.tag&e)===e){var a=i.destroy;i.destroy=void 0,a!==void 0&&pc(t,n,a)}i=i.next}while(i!==r)}}function _c(e,t){if(t=t.updateQueue,t=t===null?null:t.lastEffect,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function vc(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t==`function`?t(e):t.current=e}}function yc(e){var t=e.alternate;t!==null&&(e.alternate=null,yc(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Di],delete t[Oi],delete t[Ai],delete t[ji],delete t[Mi])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function bc(e){return e.tag===5||e.tag===3||e.tag===4}function xc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||bc(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.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 Sc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=mi));else if(r!==4&&(e=e.child,e!==null))for(Sc(e,t,n),e=e.sibling;e!==null;)Sc(e,t,n),e=e.sibling}function Cc(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&&(e=e.child,e!==null))for(Cc(e,t,n),e=e.sibling;e!==null;)Cc(e,t,n),e=e.sibling}var wc=null,Tc=!1;function Ec(e,t,n){for(n=n.child;n!==null;)Dc(e,t,n),n=n.sibling}function Dc(e,t,n){if(St&&typeof St.onCommitFiberUnmount==`function`)try{St.onCommitFiberUnmount(xt,n)}catch{}switch(n.tag){case 5:uc||fc(n,t);case 6:var r=wc,i=Tc;wc=null,Ec(e,t,n),wc=r,Tc=i,wc!==null&&(Tc?(e=wc,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):wc.removeChild(n.stateNode));break;case 18:wc!==null&&(Tc?(e=wc,n=n.stateNode,e.nodeType===8?Ci(e.parentNode,n):e.nodeType===1&&Ci(e,n),un(e)):Ci(wc,n.stateNode));break;case 4:r=wc,i=Tc,wc=n.stateNode.containerInfo,Tc=!0,Ec(e,t,n),wc=r,Tc=i;break;case 0:case 11:case 14:case 15:if(!uc&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var a=i,o=a.destroy;a=a.tag,o!==void 0&&(a&2||a&4)&&pc(n,t,o),i=i.next}while(i!==r)}Ec(e,t,n);break;case 1:if(!uc&&(fc(n,t),r=n.stateNode,typeof r.componentWillUnmount==`function`))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(e){Rl(n,t,e)}Ec(e,t,n);break;case 21:Ec(e,t,n);break;case 22:n.mode&1?(uc=(r=uc)||n.memoizedState!==null,Ec(e,t,n),uc=r):Ec(e,t,n);break;default:Ec(e,t,n)}}function Oc(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new dc),t.forEach(function(t){var r=Hl.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))})}}function kc(e,t){var n=t.deletions;if(n!==null)for(var r=0;ra&&(a=s),r&=~o}if(r=a,r=B()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Lc(r/1960))-r,10e?16:e,ol===null)var r=!1;else{if(e=ol,ol=null,sl=0,$&6)throw Error(i(331));var a=$;for($|=4,Q=e.current;Q!==null;){var o=Q,s=o.child;if(Q.flags&16){var c=o.deletions;if(c!==null){for(var l=0;lB()-$c?Tl(e,0):Xc|=n),hl(e,t)}function Bl(e,t){t===0&&(e.mode&1?(t=kt,kt<<=1,!(kt&130023424)&&(kt=4194304)):t=1);var n=fl();e=qa(e,t),e!==null&&(Lt(e,t,n),hl(e,n))}function Vl(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Bl(e,n)}function Hl(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(i(314))}r!==null&&r.delete(t),Bl(e,n)}var Ul=function(e,t,n){if(e!==null){if(e.memoizedProps!==t.pendingProps||Hi.current)Ms=!0;else{if((e.lanes&n)===0&&!(t.flags&128))return Ms=!1,tc(e,t,n);Ms=!!(e.flags&131072)}}else Ms=!1,Z&&t.flags&1048576&&pa(t,oa,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;$s(e,t),e=t.pendingProps;var a=Wi(t,Vi.current);Ha(t,n),a=ko(null,t,r,e,a,n);var o=Ao();return t.flags|=1,typeof a==`object`&&a&&typeof a.render==`function`&&a.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Gi(r)?(o=!0,Yi(t)):o=!1,t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,Ya(t),a.updater=_s,t.stateNode=a,a._reactInternals=t,xs(t,r,e,n),t=Vs(null,t,r,!0,o,n)):(t.tag=0,Z&&o&&ma(t),Ns(null,t,a,n),t=t.child),t;case 16:r=t.elementType;a:{switch($s(e,t),e=t.pendingProps,a=r._init,r=a(r._payload),t.type=r,a=t.tag=Jl(r),e=hs(r,e),a){case 0:t=zs(null,t,r,e,n);break a;case 1:t=Bs(null,t,r,e,n);break a;case 11:t=Ps(null,t,r,e,n);break a;case 14:t=Fs(null,t,r,hs(r.type,e),n);break a}throw Error(i(306,r,``))}return t;case 0:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:hs(r,a),zs(e,t,r,a,n);case 1:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:hs(r,a),Bs(e,t,r,a,n);case 3:a:{if(Hs(t),e===null)throw Error(i(387));r=t.pendingProps,o=t.memoizedState,a=o.element,Xa(e,t),to(t,r,null,n);var s=t.memoizedState;if(r=s.element,o.isDehydrated){if(o={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){a=Ss(Error(i(423)),t),t=Us(e,t,r,n,a);break a}if(r!==a){a=Ss(Error(i(424)),t),t=Us(e,t,r,n,a);break a}for(_a=wi(t.stateNode.containerInfo.firstChild),ga=t,Z=!0,va=null,n=Pa(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling}else{if(Ea(),r===a){t=ec(e,t,n);break a}Ns(e,t,r,n)}t=t.child}return t;case 5:return uo(t),e===null&&Sa(t),r=t.type,a=t.pendingProps,o=e===null?null:e.memoizedProps,s=a.children,_i(r,a)?s=null:o!==null&&_i(r,o)&&(t.flags|=32),Rs(e,t),Ns(e,t,s,n),t.child;case 6:return e===null&&Sa(t),null;case 13:return Ks(e,t,n);case 4:return co(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Na(t,null,r,n):Ns(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:hs(r,a),Ps(e,t,r,a,n);case 7:return Ns(e,t,t.pendingProps,n),t.child;case 8:return Ns(e,t,t.pendingProps.children,n),t.child;case 12:return Ns(e,t,t.pendingProps.children,n),t.child;case 10:a:{if(r=t.type._context,a=t.pendingProps,o=t.memoizedProps,s=a.value,X(Fa,r._currentValue),r._currentValue=s,o!==null){if(Tr(o.value,s)){if(o.children===a.children&&!Hi.current){t=ec(e,t,n);break a}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var c=o.dependencies;if(c!==null){s=o.child;for(var l=c.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Za(-1,n&-n),l.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?l.next=l:(l.next=d.next,d.next=l),u.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),Va(o.return,n,t),c.lanes|=n;break}l=l.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(i(341));s.lanes|=n,c=s.alternate,c!==null&&(c.lanes|=n),Va(s,n,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}}Ns(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,Ha(t,n),a=Ua(a),r=r(a),t.flags|=1,Ns(e,t,r,n),t.child;case 14:return r=t.type,a=hs(r,t.pendingProps),a=hs(r.type,a),Fs(e,t,r,a,n);case 15:return Is(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:hs(r,a),$s(e,t),t.tag=1,Gi(r)?(e=!0,Yi(t)):e=!1,Ha(t,n),ys(t,r,a),xs(t,r,a,n),Vs(null,t,r,!0,e,n);case 19:return Qs(e,t,n);case 22:return Ls(e,t,n)}throw Error(i(156,t.tag))};function Wl(e,t){return ft(e,t)}function Gl(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Kl(e,t,n,r){return new Gl(e,t,n,r)}function ql(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Jl(e){if(typeof e==`function`)return+!!ql(e);if(e!=null){if(e=e.$$typeof,e===re)return 11;if(e===D)return 14}return 2}function Yl(e,t){var n=e.alternate;return n===null?(n=Kl(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Xl(e,t,n,r,a,o){var s=2;if(r=e,typeof e==`function`)ql(e)&&(s=1);else if(typeof e==`string`)s=5;else a:switch(e){case T:return Zl(n.children,a,o,t);case ee:s=8,a|=8;break;case te:return e=Kl(12,n,t,a|2),e.elementType=te,e.lanes=o,e;case ie:return e=Kl(13,n,t,a),e.elementType=ie,e.lanes=o,e;case ae:return e=Kl(19,n,t,a),e.elementType=ae,e.lanes=o,e;case oe:return Ql(n,a,o,t);default:if(typeof e==`object`&&e)switch(e.$$typeof){case E:s=10;break a;case ne:s=9;break a;case re:s=11;break a;case D:s=14;break a;case O:s=16,r=null;break a}throw Error(i(130,e==null?e:typeof e,``))}return t=Kl(s,n,t,a),t.elementType=e,t.type=r,t.lanes=o,t}function Zl(e,t,n,r){return e=Kl(7,e,r,t),e.lanes=n,e}function Ql(e,t,n,r){return e=Kl(22,e,r,t),e.elementType=oe,e.lanes=n,e.stateNode={isHidden:!1},e}function $l(e,t,n){return e=Kl(6,e,null,t),e.lanes=n,e}function eu(e,t,n){return t=Kl(4,e.children===null?[]:e.children,e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function tu(e,t,n,r,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=It(0),this.expirationTimes=It(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=It(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function nu(e,t,n,r,i,a,o,s,c){return e=new tu(e,t,n,s,c),t===1?(t=1,!0===a&&(t|=8)):t=0,a=Kl(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ya(a),e}function ru(e,t,n){var r=3{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=be()})),Se=t((e=>{var t=xe();e.createRoot=t.createRoot,e.hydrateRoot=t.hydrateRoot})),Ce=class extends he{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 re({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=we(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=we(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=we(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=we(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){ie.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=>D(t,e))}findAll(e={}){return this.getAll().filter(t=>D(e,t))}notify(e){ie.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return ie.batch(()=>Promise.all(e.map(e=>e.continue().catch(k))))}};function we(e){return e.options.scope?.id}var Te=class extends he{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??ae(r,t),a=this.get(i);return a||(a=new A({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(){ie.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=>ue(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>ue(e,t)):t}notify(e){ie.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){ie.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){ie.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Ee=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Te,this.#t=e.mutationCache||new Ce,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=me.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=fe.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(O(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=ce(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return ie.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;ie.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return ie.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=ie.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(k).catch(k)}invalidateQueries(e,t={}){return ie.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=ie.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(k)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(k)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(O(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(k).catch(k)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(k).catch(k)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return fe.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(pe(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{oe(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(pe(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{oe(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||=ae(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===ne&&(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()}},M=e(r(),1),De=e(Se(),1),Oe=class extends Error{status;method;path;constructor(e,t,n,r){super(e),this.name=`ApiError`,this.status=t,this.method=n,this.path=r}};function ke(e){let t=e.replace(/\s+/g,` `).trim();if(!t)return``;try{let t=JSON.parse(e);for(let e of[`detail`,`error`,`message`]){let n=t[e];if(typeof n==`string`&&n.trim())return n.trim();if(Array.isArray(n)){let e=n.map(e=>e&&typeof e==`object`?String(e.msg??``):``).filter(Boolean);if(e.length)return e.join(`; `)}}}catch{}return t.startsWith(`typeof e==`string`):[],o=Ie(r?.major),s=Ie(r?.minor);if(!n||!r||!i)return{compatible:!1,reason:`malformed /api/meta response`};if(typeof i.source_root!=`string`||Ie(i.pid)===null||typeof i.package_version!=`string`||typeof i.release_id!=`string`)return{compatible:!1,reason:`malformed /api/meta runtime identity`};if(n.service!==`argus-skill-webapi`)return{compatible:!1,reason:`unexpected service ${String(n.service||`unknown`)}`};let c=e;if(r.name!==Ne.name||o!==Ne.major)return{compatible:!1,reason:`protocol ${String(r.name||`unknown`)}/${String(o)} is incompatible with client ${Ne.name}/${Ne.major}`,meta:c};if(s===null||s!a.includes(e));if(l.length>0)return{compatible:!1,reason:`missing capabilities: ${l.join(`, `)}`,meta:c};if(i.source_root_matches_config===!1)return{compatible:!1,reason:`backend loaded source ${String(i.source_root)} but ARGUS_SKILL_SOURCE_ROOT points to ${String(i.configured_source_root)}`,meta:c};if(i.release_id!==t.releaseId)return{compatible:!1,reason:`backend release ${String(i.release_id)} does not match client release ${t.releaseId}`,meta:c};if(t.sourceDigest){if(typeof i.runtime_source_digest!=`string`||!i.runtime_source_digest)return{compatible:!1,reason:`backend process does not report the source digest required by this local checkout`,meta:c};if(i.runtime_source_digest!==t.sourceDigest)return{compatible:!1,reason:`backend process source ${String(i.runtime_source_digest).slice(0,16)} does not match local source ${t.sourceDigest.slice(0,16)}`,meta:c}}return{compatible:!0,reason:``,warning:i.release_matches_source===!1?`backend source differs from its prebuilt release artifacts; pull a complete published revision and reinstall`:void 0,meta:c}}function Re(e,t){let n=Le(e);if(!n.compatible||!n.meta)throw Error(`incompatible Argus API: ${n.reason}`);return n.warning&&t?.(n.warning),n.meta}function ze(e){let t=Fe(e),n=Fe(t?.daemon);if(!t||t.schema_version!==7)throw Error(`incompatible snapshot schema: expected 7, got ${String(t?.schema_version??`missing`)}`);if(!n)throw Error(`invalid snapshot: daemon section is missing`);let r=[`global_daily_cap_usd`,`read_status`,`read_error`,`protocol_compatible`,`protocol_error`].filter(e=>!Object.hasOwn(n,e));if(r.length>0)throw Error(`invalid snapshot: daemon fields missing: ${r.join(`, `)}`);let i=[`spend_usd`,`spend_status`,`usage_summary`,`request_usage`,`cost_control`,`daemon_commands`,`observability`,`mission_view`,`partial`,`diagnostics`].filter(e=>!Object.hasOwn(t,e));if(i.length>0)throw Error(`invalid snapshot: fields missing: ${i.join(`, `)}`);if(!Array.isArray(t.diagnostics))throw Error(`invalid snapshot: diagnostics must be an array`);return e}var Be=`argus_web_token`,Ve=null;function He(){let e;try{e=new URLSearchParams(window.location.search)}catch{return}let t=e.get(`token`);if(t){Ve=t;try{localStorage.setItem(Be,t)}catch{}try{e.delete(`token`);let t=e.toString();window.history.replaceState(null,``,`${window.location.pathname}${t?`?${t}`:``}${window.location.hash}`)}catch{}}}var Ue=()=>{if(Ve)return Ve;try{return new URLSearchParams(window.location.search).get(`token`)||localStorage.getItem(Be)}catch{return null}};function We(){let e=Ue();return e?{Authorization:`Bearer ${e}`}:{}}function Ge(){return Ue()??``}var Ke=8e3,qe=12e3,Je=class extends Error{constructor(){super(`This browser is not paired with Argus. Reopen it from Argus Desktop or use a fresh pairing link.`),this.name=`PairingRequiredError`}},N=class extends Error{method;path;constructor(e,t,n=`could not reach the local Argus service`){super(`${e.toUpperCase()} ${t} ${n}. Make sure Argus Desktop is running, then retry.`),this.name=`LocalArgusUnavailableError`,this.method=e.toUpperCase(),this.path=t}};function Ye(e){return e instanceof Je||!!(e&&typeof e==`object`&&Number(e.status)===401)}function Xe(e){return Ye(e)||e instanceof N}async function Ze(e,t){try{return await fetch(e,t)}catch(n){throw t.signal?.aborted?n:new N(String(t.method??`GET`),e)}}async function P(e,t,n,r){let i=new AbortController,a=t.signal??void 0,o=!1,s=()=>{};if(a){let e=()=>i.abort(a.reason);a.aborted?e():(a.addEventListener(`abort`,e,{once:!0}),s=()=>a.removeEventListener(`abort`,e))}let c,l=(async()=>await r(await Ze(e,{...t,signal:i.signal})))(),u=new Promise((e,t)=>{c=setTimeout(()=>{o=!0;let e=Error(`request timed out after ${n}ms`);i.abort(e),t(e)},n)});try{return await Promise.race([l,u])}catch(r){if(o){let r=Math.round(n/1e3);throw new N(String(t.method??`GET`),e,`timed out after ${r}s because the local Argus service did not respond`)}throw r}finally{c&&clearTimeout(c),s()}}async function Qe(e,t,n){return P(e,{headers:We(),signal:t},n??qe,async t=>(await je(t,`GET`,e),await t.json()))}async function F(e,t,n){let r=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`,...We()},body:t===void 0?void 0:JSON.stringify(t),signal:n});return await je(r,`POST`,e),await r.json()}async function $e(e,t,n){let r=await fetch(e,{method:`POST`,headers:We(),body:t,signal:n});return await je(r,`POST`,e),await r.json()}function et(e){let t=e&&typeof e==`object`?e:{},n=String(t.command_status??``);if(Number(t.rc??0)!==0||n===`failed`||n===`rejected`)throw Error(String(t.error||`daemon command ${n||`failed`}`));return e}async function tt(e,t,n){let r=await fetch(t,{method:e,headers:{"Content-Type":`application/json`,...We()},body:n===void 0?void 0:JSON.stringify(n)});return await je(r,e,t),await r.json()}async function nt(e,t){let n=await fetch(e,{headers:We(),signal:t});return await je(n,`GET`,e),n.blob()}var I=(e,t=``)=>`/api/projects/${encodeURIComponent(e)}${t}`,rt=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random()}`,L;function it(e){return!!(e&&typeof e==`object`&&`aborted`in e&&typeof e.aborted==`boolean`)}function at(e,t){return t?.length?{text:e,attachments:t}:{text:e}}function ot(){if(!L){let e=(async()=>{let e=`/api/meta`,t=await P(e,{headers:We()},Ke,async t=>{if(t.status===404)throw Error(`incompatible Argus API: service does not expose /api/meta`);return await je(t,`GET`,e),Re(await t.json(),e=>console.warn(`Argus API compatibility warning: ${e}`))});if(t.authentication?.required&&!t.authentication.authenticated)throw new Je;return t})();L=e,e.catch(t=>{L===e&&!(t instanceof Je)&&(L=void 0)})}return L}function st(e){let t=[],n;for(;(n=e.indexOf(` +`+e.stack}return{value:e,source:t,stack:i,digest:null}}function Cs(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function ws(e,t){try{console.error(t.value)}catch(e){setTimeout(function(){throw e})}}var Ts=typeof WeakMap==`function`?WeakMap:Map;function Es(e,t,n){n=Za(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){nl||(nl=!0,rl=r),ws(e,t)},n}function Ds(e,t,n){n=Za(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r==`function`){var i=t.value;n.payload=function(){return r(i)},n.callback=function(){ws(e,t)}}var a=e.stateNode;return a!==null&&typeof a.componentDidCatch==`function`&&(n.callback=function(){ws(e,t),typeof r!=`function`&&(il===null?il=new Set([this]):il.add(this));var n=t.stack;this.componentDidCatch(t.value,{componentStack:n===null?``:n})}),n}function Os(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Ts;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)||(i.add(n),e=zl.bind(null,e,t,n),t.then(e,e))}function ks(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t===null||t.dehydrated!==null),t)return e;e=e.return}while(e!==null);return null}function As(e,t,n,r,i){return e.mode&1?(e.flags|=65536,e.lanes=i,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Za(-1,1),t.tag=2,Qa(n,t,1))),n.lanes|=1),e)}var js=S.ReactCurrentOwner,Ms=!1;function Ns(e,t,n,r){t.child=e===null?Pa(t,null,n,r):Na(t,e.child,n,r)}function Ps(e,t,n,r,i){n=n.render;var a=t.ref;return Ha(t,i),r=ko(e,t,n,r,a,i),n=Ao(),e!==null&&!Ms?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~i,ec(e,t,i)):(Z&&n&&ma(t),t.flags|=1,Ns(e,t,r,i),t.child)}function Fs(e,t,n,r,i){if(e===null){var a=n.type;return typeof a==`function`&&!ql(a)&&a.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=a,Is(e,t,a,r,i)):(e=Xl(n.type,null,r,t,t.mode,i),e.ref=t.ref,e.return=t,t.child=e)}if(a=e.child,(e.lanes&i)===0){var o=a.memoizedProps;if(n=n.compare,n=n===null?Er:n,n(o,r)&&e.ref===t.ref)return ec(e,t,i)}return t.flags|=1,e=Yl(a,r),e.ref=t.ref,e.return=t,t.child=e}function Is(e,t,n,r,i){if(e!==null){var a=e.memoizedProps;if(Er(a,r)&&e.ref===t.ref){if(Ms=!1,t.pendingProps=r=a,(e.lanes&i)!==0)e.flags&131072&&(Ms=!0);else return t.lanes=e.lanes,ec(e,t,i)}}return zs(e,t,n,r,i)}function Ls(e,t,n){var r=t.pendingProps,i=r.children,a=e===null?null:e.memoizedState;if(r.mode===`hidden`){if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},X(Gc,Wc),Wc|=n;else{if(!(n&1073741824))return e=a===null?n:a.baseLanes|n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,X(Gc,Wc),Wc|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=a===null?n:a.baseLanes,X(Gc,Wc),Wc|=r}}else a===null?r=n:(r=a.baseLanes|n,t.memoizedState=null),X(Gc,Wc),Wc|=r;return Ns(e,t,i,n),t.child}function Rs(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function zs(e,t,n,r,i){var a=Gi(n)?Ui:Vi.current;return a=Wi(t,a),Ha(t,i),n=ko(e,t,n,r,a,i),r=Ao(),e!==null&&!Ms?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~i,ec(e,t,i)):(Z&&r&&ma(t),t.flags|=1,Ns(e,t,n,i),t.child)}function Bs(e,t,n,r,i){if(Gi(n)){var a=!0;Yi(t)}else a=!1;if(Ha(t,i),t.stateNode===null)$s(e,t),ys(t,n,r),xs(t,n,r,i),r=!0;else if(e===null){var o=t.stateNode,s=t.memoizedProps;o.props=s;var c=o.context,l=n.contextType;typeof l==`object`&&l?l=Ua(l):(l=Gi(n)?Ui:Vi.current,l=Wi(t,l));var u=n.getDerivedStateFromProps,d=typeof u==`function`||typeof o.getSnapshotBeforeUpdate==`function`;d||typeof o.UNSAFE_componentWillReceiveProps!=`function`&&typeof o.componentWillReceiveProps!=`function`||(s!==r||c!==l)&&bs(t,o,r,l),Ja=!1;var f=t.memoizedState;o.state=f,to(t,r,o,i),c=t.memoizedState,s!==r||f!==c||Hi.current||Ja?(typeof u==`function`&&(gs(t,n,u,r),c=t.memoizedState),(s=Ja||vs(t,n,s,r,f,c,l))?(d||typeof o.UNSAFE_componentWillMount!=`function`&&typeof o.componentWillMount!=`function`||(typeof o.componentWillMount==`function`&&o.componentWillMount(),typeof o.UNSAFE_componentWillMount==`function`&&o.UNSAFE_componentWillMount()),typeof o.componentDidMount==`function`&&(t.flags|=4194308)):(typeof o.componentDidMount==`function`&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=c),o.props=r,o.state=c,o.context=l,r=s):(typeof o.componentDidMount==`function`&&(t.flags|=4194308),r=!1)}else{o=t.stateNode,Xa(e,t),s=t.memoizedProps,l=t.type===t.elementType?s:hs(t.type,s),o.props=l,d=t.pendingProps,f=o.context,c=n.contextType,typeof c==`object`&&c?c=Ua(c):(c=Gi(n)?Ui:Vi.current,c=Wi(t,c));var p=n.getDerivedStateFromProps;(u=typeof p==`function`||typeof o.getSnapshotBeforeUpdate==`function`)||typeof o.UNSAFE_componentWillReceiveProps!=`function`&&typeof o.componentWillReceiveProps!=`function`||(s!==d||f!==c)&&bs(t,o,r,c),Ja=!1,f=t.memoizedState,o.state=f,to(t,r,o,i);var m=t.memoizedState;s!==d||f!==m||Hi.current||Ja?(typeof p==`function`&&(gs(t,n,p,r),m=t.memoizedState),(l=Ja||vs(t,n,l,r,f,m,c)||!1)?(u||typeof o.UNSAFE_componentWillUpdate!=`function`&&typeof o.componentWillUpdate!=`function`||(typeof o.componentWillUpdate==`function`&&o.componentWillUpdate(r,m,c),typeof o.UNSAFE_componentWillUpdate==`function`&&o.UNSAFE_componentWillUpdate(r,m,c)),typeof o.componentDidUpdate==`function`&&(t.flags|=4),typeof o.getSnapshotBeforeUpdate==`function`&&(t.flags|=1024)):(typeof o.componentDidUpdate!=`function`||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof o.getSnapshotBeforeUpdate!=`function`||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=m),o.props=r,o.state=m,o.context=c,r=l):(typeof o.componentDidUpdate!=`function`||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof o.getSnapshotBeforeUpdate!=`function`||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return Vs(e,t,n,r,a,i)}function Vs(e,t,n,r,i,a){Rs(e,t);var o=!!(t.flags&128);if(!r&&!o)return i&&Xi(t,n,!1),ec(e,t,a);r=t.stateNode,js.current=t;var s=o&&typeof n.getDerivedStateFromError!=`function`?null:r.render();return t.flags|=1,e!==null&&o?(t.child=Na(t,e.child,null,a),t.child=Na(t,null,s,a)):Ns(e,t,s,a),t.memoizedState=r.state,i&&Xi(t,n,!0),t.child}function Hs(e){var t=e.stateNode;t.pendingContext?qi(e,t.pendingContext,t.pendingContext!==t.context):t.context&&qi(e,t.context,!1),co(e,t.containerInfo)}function Us(e,t,n,r,i){return Ea(),Da(i),t.flags|=256,Ns(e,t,n,r),t.child}var Ws={dehydrated:null,treeContext:null,retryLane:0};function Gs(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ks(e,t,n){var r=t.pendingProps,i=po.current,a=!1,o=!!(t.flags&128),s;if((s=o)||(s=e!==null&&e.memoizedState===null?!1:!!(i&2)),s?(a=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(i|=1),X(po,i&1),e===null)return Sa(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.lanes=t.mode&1?e.data===`$!`?8:1073741824:1,null):(o=r.children,e=r.fallback,a?(r=t.mode,a=t.child,o={mode:`hidden`,children:o},!(r&1)&&a!==null?(a.childLanes=0,a.pendingProps=o):a=Ql(o,r,0,null),e=Zl(e,r,n,null),a.return=t,e.return=t,a.sibling=e,t.child=a,t.child.memoizedState=Gs(n),t.memoizedState=Ws,e):qs(t,o));if(i=e.memoizedState,i!==null&&(s=i.dehydrated,s!==null))return Ys(e,t,o,r,s,i,n);if(a){a=r.fallback,o=t.mode,i=e.child,s=i.sibling;var c={mode:`hidden`,children:r.children};return!(o&1)&&t.child!==i?(r=t.child,r.childLanes=0,r.pendingProps=c,t.deletions=null):(r=Yl(i,c),r.subtreeFlags=i.subtreeFlags&14680064),s===null?(a=Zl(a,o,n,null),a.flags|=2):a=Yl(s,a),a.return=t,r.return=t,r.sibling=a,t.child=r,r=a,a=t.child,o=e.child.memoizedState,o=o===null?Gs(n):{baseLanes:o.baseLanes|n,cachePool:null,transitions:o.transitions},a.memoizedState=o,a.childLanes=e.childLanes&~n,t.memoizedState=Ws,r}return a=e.child,e=a.sibling,r=Yl(a,{mode:`visible`,children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function qs(e,t){return t=Ql({mode:`visible`,children:t},e.mode,0,null),t.return=e,e.child=t}function Js(e,t,n,r){return r!==null&&Da(r),Na(t,e.child,null,n),e=qs(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Ys(e,t,n,r,a,o,s){if(n)return t.flags&256?(t.flags&=-257,r=Cs(Error(i(422))),Js(e,t,s,r)):t.memoizedState===null?(o=r.fallback,a=t.mode,r=Ql({mode:`visible`,children:r.children},a,0,null),o=Zl(o,a,s,null),o.flags|=2,r.return=t,o.return=t,r.sibling=o,t.child=r,t.mode&1&&Na(t,e.child,null,s),t.child.memoizedState=Gs(s),t.memoizedState=Ws,o):(t.child=e.child,t.flags|=128,null);if(!(t.mode&1))return Js(e,t,s,null);if(a.data===`$!`){if(r=a.nextSibling&&a.nextSibling.dataset,r)var c=r.dgst;return r=c,o=Error(i(419)),r=Cs(o,r,void 0),Js(e,t,s,r)}if(c=(s&e.childLanes)!==0,Ms||c){if(r=Vc,r!==null){switch(s&-s){case 4:a=2;break;case 16:a=8;break;case 64: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:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}a=(a&(r.suspendedLanes|s))===0?a:0,a!==0&&a!==o.retryLane&&(o.retryLane=a,qa(e,a),ml(r,e,a,-1))}return Ol(),r=Cs(Error(i(421))),Js(e,t,s,r)}return a.data===`$?`?(t.flags|=128,t.child=e.child,t=Vl.bind(null,e),a._reactRetry=t,null):(e=o.treeContext,_a=wi(a.nextSibling),ga=t,Z=!0,va=null,e!==null&&(sa[ca++]=ua,sa[ca++]=da,sa[ca++]=la,ua=e.id,da=e.overflow,la=t),t=qs(t,r.children),t.flags|=4096,t)}function Xs(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),Va(e.return,t,n)}function Zs(e,t,n,r,i){var a=e.memoizedState;a===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:i}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=i)}function Qs(e,t,n){var r=t.pendingProps,i=r.revealOrder,a=r.tail;if(Ns(e,t,r.children,n),r=po.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)a:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Xs(e,n,t);else if(e.tag===19)Xs(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break a;for(;e.sibling===null;){if(e.return===null||e.return===t)break a;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(X(po,r),!(t.mode&1))t.memoizedState=null;else switch(i){case`forwards`:for(n=t.child,i=null;n!==null;)e=n.alternate,e!==null&&mo(e)===null&&(i=n),n=n.sibling;n=i,n===null?(i=t.child,t.child=null):(i=n.sibling,n.sibling=null),Zs(t,!1,i,n,a);break;case`backwards`:for(n=null,i=t.child,t.child=null;i!==null;){if(e=i.alternate,e!==null&&mo(e)===null){t.child=i;break}e=i.sibling,i.sibling=n,n=i,i=e}Zs(t,!0,n,null,a);break;case`together`:Zs(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function $s(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function ec(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),Jc|=t.lanes,(n&t.childLanes)===0)return null;if(e!==null&&t.child!==e.child)throw Error(i(153));if(t.child!==null){for(e=t.child,n=Yl(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Yl(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function tc(e,t,n){switch(t.tag){case 3:Hs(t),Ea();break;case 5:uo(t);break;case 1:Gi(t.type)&&Yi(t);break;case 4:co(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,i=t.memoizedProps.value;X(Fa,r._currentValue),r._currentValue=i;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated===null?(n&t.child.childLanes)===0?(X(po,po.current&1),e=ec(e,t,n),e===null?null:e.sibling):Ks(e,t,n):(X(po,po.current&1),t.flags|=128,null);X(po,po.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return Qs(e,t,n);t.flags|=128}if(i=t.memoizedState,i!==null&&(i.rendering=null,i.tail=null,i.lastEffect=null),X(po,po.current),r)break;return null;case 22:case 23:return t.lanes=0,Ls(e,t,n)}return ec(e,t,n)}var nc=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},rc=function(e,t,n,r){var i=e.memoizedProps;if(i!==r){e=t.stateNode,so(io.current);var a=null;switch(n){case`input`:i=xe(e,i),r=xe(e,r),a=[];break;case`select`:i=k({},i,{value:void 0}),r=k({},r,{value:void 0}),a=[];break;case`textarea`:i=Oe(e,i),r=Oe(e,r),a=[];break;default:typeof i.onClick!=`function`&&typeof r.onClick==`function`&&(e.onclick=mi)}He(n,r);var s;for(u in n=null,i)if(!r.hasOwnProperty(u)&&i.hasOwnProperty(u)&&i[u]!=null){if(u===`style`){var c=i[u];for(s in c)c.hasOwnProperty(s)&&(n||={},n[s]=``)}else u!==`dangerouslySetInnerHTML`&&u!==`children`&&u!==`suppressContentEditableWarning`&&u!==`suppressHydrationWarning`&&u!==`autoFocus`&&(o.hasOwnProperty(u)?a||=[]:(a||=[]).push(u,null))}for(u in r){var l=r[u];if(c=i?.[u],r.hasOwnProperty(u)&&l!==c&&(l!=null||c!=null)){if(u===`style`){if(c){for(s in c)!c.hasOwnProperty(s)||l&&l.hasOwnProperty(s)||(n||={},n[s]=``);for(s in l)l.hasOwnProperty(s)&&c[s]!==l[s]&&(n||={},n[s]=l[s])}else n||(a||=[],a.push(u,n)),n=l}else u===`dangerouslySetInnerHTML`?(l=l?l.__html:void 0,c=c?c.__html:void 0,l!=null&&c!==l&&(a||=[]).push(u,l)):u===`children`?typeof l!=`string`&&typeof l!=`number`||(a||=[]).push(u,``+l):u!==`suppressContentEditableWarning`&&u!==`suppressHydrationWarning`&&(o.hasOwnProperty(u)?(l!=null&&u===`onScroll`&&J(`scroll`,e),a||c===l||(a=[])):(a||=[]).push(u,l))}}n&&(a||=[]).push(`style`,n);var u=a;(t.updateQueue=u)&&(t.flags|=4)}},ic=function(e,t,n,r){n!==r&&(t.flags|=4)};function ac(e,t){if(!Z)switch(e.tailMode){case`hidden`:t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case`collapsed`:n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function oc(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var i=e.child;i!==null;)n|=i.lanes|i.childLanes,r|=i.subtreeFlags&14680064,r|=i.flags&14680064,i.return=e,i=i.sibling;else for(i=e.child;i!==null;)n|=i.lanes|i.childLanes,r|=i.subtreeFlags,r|=i.flags,i.return=e,i=i.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function sc(e,t,n){var r=t.pendingProps;switch(ha(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return oc(t),null;case 1:return Gi(t.type)&&Ki(),oc(t),null;case 3:return r=t.stateNode,lo(),Y(Hi),Y(Vi),go(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(wa(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,va!==null&&(vl(va),va=null))),oc(t),null;case 5:fo(t);var a=so(oo.current);if(n=t.type,e!==null&&t.stateNode!=null)rc(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(i(166));return oc(t),null}if(e=so(io.current),wa(t)){r=t.stateNode,n=t.type;var s=t.memoizedProps;switch(r[Di]=t,r[Oi]=s,e=!!(t.mode&1),n){case`dialog`:J(`cancel`,r),J(`close`,r);break;case`iframe`:case`object`:case`embed`:J(`load`,r);break;case`video`:case`audio`:for(a=0;a<\/script>`,e=e.removeChild(e.firstChild)):typeof r.is==`string`?e=c.createElement(n,{is:r.is}):(e=c.createElement(n),n===`select`&&(c=e,r.multiple?c.multiple=!0:r.size&&(c.size=r.size))):e=c.createElementNS(e,n),e[Di]=t,e[Oi]=r,nc(e,t,!1,!1),t.stateNode=e;a:{switch(c=Ue(n,r),n){case`dialog`:J(`cancel`,e),J(`close`,e),a=r;break;case`iframe`:case`object`:case`embed`:J(`load`,e),a=r;break;case`video`:case`audio`:for(a=0;ael&&(t.flags|=128,r=!0,ac(s,!1),t.lanes=4194304)}}else{if(!r){if(e=mo(c),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),ac(s,!0),s.tail===null&&s.tailMode===`hidden`&&!c.alternate&&!Z)return oc(t),null}else 2*B()-s.renderingStartTime>el&&n!==1073741824&&(t.flags|=128,r=!0,ac(s,!1),t.lanes=4194304)}s.isBackwards?(c.sibling=t.child,t.child=c):(n=s.last,n===null?t.child=c:n.sibling=c,s.last=c)}return s.tail===null?(oc(t),null):(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=B(),t.sibling=null,n=po.current,X(po,r?n&1|2:n&1),t);case 22:case 23:return wl(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Wc&1073741824&&(oc(t),t.subtreeFlags&6&&(t.flags|=8192)):oc(t),null;case 24:return null;case 25:return null}throw Error(i(156,t.tag))}function cc(e,t){switch(ha(t),t.tag){case 1:return Gi(t.type)&&Ki(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return lo(),Y(Hi),Y(Vi),go(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return fo(t),null;case 13:if(Y(po),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Ea()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Y(po),null;case 4:return lo(),null;case 10:return Ba(t.type._context),null;case 22:case 23:return wl(),null;case 24:return null;default:return null}}var lc=!1,uc=!1,dc=typeof WeakSet==`function`?WeakSet:Set,Q=null;function fc(e,t){var n=e.ref;if(n!==null){if(typeof n==`function`)try{n(null)}catch(n){Rl(e,t,n)}else n.current=null}}function pc(e,t,n){try{n()}catch(n){Rl(e,t,n)}}var mc=!1;function hc(e,t){if(hi=fn,e=Ar(),jr(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(gi={focusedElem:e,selectionRange:n},fn=!1,Q=t;Q!==null;)if(t=Q,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,Q=e;else for(;Q!==null;){t=Q;try{var h=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(h!==null){var g=h.memoizedProps,_=h.memoizedState,v=t.stateNode;v.__reactInternalSnapshotBeforeUpdate=v.getSnapshotBeforeUpdate(t.elementType===t.type?g:hs(t.type,g),_)}break;case 3:var y=t.stateNode.containerInfo;y.nodeType===1?y.textContent=``:y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(i(163))}}catch(e){Rl(t,t.return,e)}if(e=t.sibling,e!==null){e.return=t.return,Q=e;break}Q=t.return}return h=mc,mc=!1,h}function gc(e,t,n){var r=t.updateQueue;if(r=r===null?null:r.lastEffect,r!==null){var i=r=r.next;do{if((i.tag&e)===e){var a=i.destroy;i.destroy=void 0,a!==void 0&&pc(t,n,a)}i=i.next}while(i!==r)}}function _c(e,t){if(t=t.updateQueue,t=t===null?null:t.lastEffect,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function vc(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t==`function`?t(e):t.current=e}}function yc(e){var t=e.alternate;t!==null&&(e.alternate=null,yc(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Di],delete t[Oi],delete t[Ai],delete t[ji],delete t[Mi])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function bc(e){return e.tag===5||e.tag===3||e.tag===4}function xc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||bc(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.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 Sc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=mi));else if(r!==4&&(e=e.child,e!==null))for(Sc(e,t,n),e=e.sibling;e!==null;)Sc(e,t,n),e=e.sibling}function Cc(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&&(e=e.child,e!==null))for(Cc(e,t,n),e=e.sibling;e!==null;)Cc(e,t,n),e=e.sibling}var wc=null,Tc=!1;function Ec(e,t,n){for(n=n.child;n!==null;)Dc(e,t,n),n=n.sibling}function Dc(e,t,n){if(St&&typeof St.onCommitFiberUnmount==`function`)try{St.onCommitFiberUnmount(xt,n)}catch{}switch(n.tag){case 5:uc||fc(n,t);case 6:var r=wc,i=Tc;wc=null,Ec(e,t,n),wc=r,Tc=i,wc!==null&&(Tc?(e=wc,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):wc.removeChild(n.stateNode));break;case 18:wc!==null&&(Tc?(e=wc,n=n.stateNode,e.nodeType===8?Ci(e.parentNode,n):e.nodeType===1&&Ci(e,n),un(e)):Ci(wc,n.stateNode));break;case 4:r=wc,i=Tc,wc=n.stateNode.containerInfo,Tc=!0,Ec(e,t,n),wc=r,Tc=i;break;case 0:case 11:case 14:case 15:if(!uc&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var a=i,o=a.destroy;a=a.tag,o!==void 0&&(a&2||a&4)&&pc(n,t,o),i=i.next}while(i!==r)}Ec(e,t,n);break;case 1:if(!uc&&(fc(n,t),r=n.stateNode,typeof r.componentWillUnmount==`function`))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(e){Rl(n,t,e)}Ec(e,t,n);break;case 21:Ec(e,t,n);break;case 22:n.mode&1?(uc=(r=uc)||n.memoizedState!==null,Ec(e,t,n),uc=r):Ec(e,t,n);break;default:Ec(e,t,n)}}function Oc(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new dc),t.forEach(function(t){var r=Hl.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))})}}function kc(e,t){var n=t.deletions;if(n!==null)for(var r=0;ra&&(a=s),r&=~o}if(r=a,r=B()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Lc(r/1960))-r,10e?16:e,ol===null)var r=!1;else{if(e=ol,ol=null,sl=0,$&6)throw Error(i(331));var a=$;for($|=4,Q=e.current;Q!==null;){var o=Q,s=o.child;if(Q.flags&16){var c=o.deletions;if(c!==null){for(var l=0;lB()-$c?Tl(e,0):Xc|=n),hl(e,t)}function Bl(e,t){t===0&&(e.mode&1?(t=kt,kt<<=1,!(kt&130023424)&&(kt=4194304)):t=1);var n=fl();e=qa(e,t),e!==null&&(Lt(e,t,n),hl(e,n))}function Vl(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Bl(e,n)}function Hl(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(i(314))}r!==null&&r.delete(t),Bl(e,n)}var Ul=function(e,t,n){if(e!==null){if(e.memoizedProps!==t.pendingProps||Hi.current)Ms=!0;else{if((e.lanes&n)===0&&!(t.flags&128))return Ms=!1,tc(e,t,n);Ms=!!(e.flags&131072)}}else Ms=!1,Z&&t.flags&1048576&&pa(t,oa,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;$s(e,t),e=t.pendingProps;var a=Wi(t,Vi.current);Ha(t,n),a=ko(null,t,r,e,a,n);var o=Ao();return t.flags|=1,typeof a==`object`&&a&&typeof a.render==`function`&&a.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Gi(r)?(o=!0,Yi(t)):o=!1,t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,Ya(t),a.updater=_s,t.stateNode=a,a._reactInternals=t,xs(t,r,e,n),t=Vs(null,t,r,!0,o,n)):(t.tag=0,Z&&o&&ma(t),Ns(null,t,a,n),t=t.child),t;case 16:r=t.elementType;a:{switch($s(e,t),e=t.pendingProps,a=r._init,r=a(r._payload),t.type=r,a=t.tag=Jl(r),e=hs(r,e),a){case 0:t=zs(null,t,r,e,n);break a;case 1:t=Bs(null,t,r,e,n);break a;case 11:t=Ps(null,t,r,e,n);break a;case 14:t=Fs(null,t,r,hs(r.type,e),n);break a}throw Error(i(306,r,``))}return t;case 0:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:hs(r,a),zs(e,t,r,a,n);case 1:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:hs(r,a),Bs(e,t,r,a,n);case 3:a:{if(Hs(t),e===null)throw Error(i(387));r=t.pendingProps,o=t.memoizedState,a=o.element,Xa(e,t),to(t,r,null,n);var s=t.memoizedState;if(r=s.element,o.isDehydrated){if(o={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){a=Ss(Error(i(423)),t),t=Us(e,t,r,n,a);break a}if(r!==a){a=Ss(Error(i(424)),t),t=Us(e,t,r,n,a);break a}for(_a=wi(t.stateNode.containerInfo.firstChild),ga=t,Z=!0,va=null,n=Pa(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling}else{if(Ea(),r===a){t=ec(e,t,n);break a}Ns(e,t,r,n)}t=t.child}return t;case 5:return uo(t),e===null&&Sa(t),r=t.type,a=t.pendingProps,o=e===null?null:e.memoizedProps,s=a.children,_i(r,a)?s=null:o!==null&&_i(r,o)&&(t.flags|=32),Rs(e,t),Ns(e,t,s,n),t.child;case 6:return e===null&&Sa(t),null;case 13:return Ks(e,t,n);case 4:return co(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Na(t,null,r,n):Ns(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:hs(r,a),Ps(e,t,r,a,n);case 7:return Ns(e,t,t.pendingProps,n),t.child;case 8:return Ns(e,t,t.pendingProps.children,n),t.child;case 12:return Ns(e,t,t.pendingProps.children,n),t.child;case 10:a:{if(r=t.type._context,a=t.pendingProps,o=t.memoizedProps,s=a.value,X(Fa,r._currentValue),r._currentValue=s,o!==null){if(Tr(o.value,s)){if(o.children===a.children&&!Hi.current){t=ec(e,t,n);break a}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var c=o.dependencies;if(c!==null){s=o.child;for(var l=c.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Za(-1,n&-n),l.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?l.next=l:(l.next=d.next,d.next=l),u.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),Va(o.return,n,t),c.lanes|=n;break}l=l.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(i(341));s.lanes|=n,c=s.alternate,c!==null&&(c.lanes|=n),Va(s,n,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}}Ns(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,Ha(t,n),a=Ua(a),r=r(a),t.flags|=1,Ns(e,t,r,n),t.child;case 14:return r=t.type,a=hs(r,t.pendingProps),a=hs(r.type,a),Fs(e,t,r,a,n);case 15:return Is(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:hs(r,a),$s(e,t),t.tag=1,Gi(r)?(e=!0,Yi(t)):e=!1,Ha(t,n),ys(t,r,a),xs(t,r,a,n),Vs(null,t,r,!0,e,n);case 19:return Qs(e,t,n);case 22:return Ls(e,t,n)}throw Error(i(156,t.tag))};function Wl(e,t){return ft(e,t)}function Gl(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Kl(e,t,n,r){return new Gl(e,t,n,r)}function ql(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Jl(e){if(typeof e==`function`)return+!!ql(e);if(e!=null){if(e=e.$$typeof,e===re)return 11;if(e===D)return 14}return 2}function Yl(e,t){var n=e.alternate;return n===null?(n=Kl(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Xl(e,t,n,r,a,o){var s=2;if(r=e,typeof e==`function`)ql(e)&&(s=1);else if(typeof e==`string`)s=5;else a:switch(e){case T:return Zl(n.children,a,o,t);case ee:s=8,a|=8;break;case te:return e=Kl(12,n,t,a|2),e.elementType=te,e.lanes=o,e;case ie:return e=Kl(13,n,t,a),e.elementType=ie,e.lanes=o,e;case ae:return e=Kl(19,n,t,a),e.elementType=ae,e.lanes=o,e;case oe:return Ql(n,a,o,t);default:if(typeof e==`object`&&e)switch(e.$$typeof){case E:s=10;break a;case ne:s=9;break a;case re:s=11;break a;case D:s=14;break a;case O:s=16,r=null;break a}throw Error(i(130,e==null?e:typeof e,``))}return t=Kl(s,n,t,a),t.elementType=e,t.type=r,t.lanes=o,t}function Zl(e,t,n,r){return e=Kl(7,e,r,t),e.lanes=n,e}function Ql(e,t,n,r){return e=Kl(22,e,r,t),e.elementType=oe,e.lanes=n,e.stateNode={isHidden:!1},e}function $l(e,t,n){return e=Kl(6,e,null,t),e.lanes=n,e}function eu(e,t,n){return t=Kl(4,e.children===null?[]:e.children,e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function tu(e,t,n,r,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=It(0),this.expirationTimes=It(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=It(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function nu(e,t,n,r,i,a,o,s,c){return e=new tu(e,t,n,s,c),t===1?(t=1,!0===a&&(t|=8)):t=0,a=Kl(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ya(a),e}function ru(e,t,n){var r=3{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=be()})),Se=t((e=>{var t=xe();e.createRoot=t.createRoot,e.hydrateRoot=t.hydrateRoot})),Ce=class extends he{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 re({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=we(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=we(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=we(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=we(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){ie.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=>D(t,e))}findAll(e={}){return this.getAll().filter(t=>D(e,t))}notify(e){ie.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return ie.batch(()=>Promise.all(e.map(e=>e.continue().catch(k))))}};function we(e){return e.options.scope?.id}var Te=class extends he{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??ae(r,t),a=this.get(i);return a||(a=new A({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(){ie.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=>ue(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>ue(e,t)):t}notify(e){ie.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){ie.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){ie.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Ee=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Te,this.#t=e.mutationCache||new Ce,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=me.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=fe.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(O(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=ce(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return ie.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;ie.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return ie.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=ie.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(k).catch(k)}invalidateQueries(e,t={}){return ie.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=ie.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(k)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(k)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(O(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(k).catch(k)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(k).catch(k)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return fe.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(pe(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{oe(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(pe(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{oe(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||=ae(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===ne&&(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()}},M=e(r(),1),De=e(Se(),1),Oe=class extends Error{status;method;path;constructor(e,t,n,r){super(e),this.name=`ApiError`,this.status=t,this.method=n,this.path=r}};function ke(e){let t=e.replace(/\s+/g,` `).trim();if(!t)return``;try{let t=JSON.parse(e);for(let e of[`detail`,`error`,`message`]){let n=t[e];if(typeof n==`string`&&n.trim())return n.trim();if(Array.isArray(n)){let e=n.map(e=>e&&typeof e==`object`?String(e.msg??``):``).filter(Boolean);if(e.length)return e.join(`; `)}}}catch{}return t.startsWith(`typeof e==`string`):[],o=Ie(r?.major),s=Ie(r?.minor);if(!n||!r||!i)return{compatible:!1,reason:`malformed /api/meta response`};if(typeof i.source_root!=`string`||Ie(i.pid)===null||typeof i.package_version!=`string`||typeof i.release_id!=`string`)return{compatible:!1,reason:`malformed /api/meta runtime identity`};if(n.service!==`argus-skill-webapi`)return{compatible:!1,reason:`unexpected service ${String(n.service||`unknown`)}`};let c=e;if(r.name!==Ne.name||o!==Ne.major)return{compatible:!1,reason:`protocol ${String(r.name||`unknown`)}/${String(o)} is incompatible with client ${Ne.name}/${Ne.major}`,meta:c};if(s===null||s!a.includes(e));if(l.length>0)return{compatible:!1,reason:`missing capabilities: ${l.join(`, `)}`,meta:c};if(i.source_root_matches_config===!1)return{compatible:!1,reason:`backend loaded source ${String(i.source_root)} but ARGUS_SKILL_SOURCE_ROOT points to ${String(i.configured_source_root)}`,meta:c};if(i.release_id!==t.releaseId)return{compatible:!1,reason:`backend release ${String(i.release_id)} does not match client release ${t.releaseId}`,meta:c};if(t.sourceDigest){if(typeof i.runtime_source_digest!=`string`||!i.runtime_source_digest)return{compatible:!1,reason:`backend process does not report the source digest required by this local checkout`,meta:c};if(i.runtime_source_digest!==t.sourceDigest)return{compatible:!1,reason:`backend process source ${String(i.runtime_source_digest).slice(0,16)} does not match local source ${t.sourceDigest.slice(0,16)}`,meta:c}}return{compatible:!0,reason:``,warning:i.release_matches_source===!1?`backend source differs from its prebuilt release artifacts; pull a complete published revision and reinstall`:void 0,meta:c}}function Re(e,t){let n=Le(e);if(!n.compatible||!n.meta)throw Error(`incompatible Argus API: ${n.reason}`);return n.warning&&t?.(n.warning),n.meta}function ze(e){let t=Fe(e),n=Fe(t?.daemon);if(!t||t.schema_version!==7)throw Error(`incompatible snapshot schema: expected 7, got ${String(t?.schema_version??`missing`)}`);if(!n)throw Error(`invalid snapshot: daemon section is missing`);let r=[`global_daily_cap_usd`,`read_status`,`read_error`,`protocol_compatible`,`protocol_error`].filter(e=>!Object.hasOwn(n,e));if(r.length>0)throw Error(`invalid snapshot: daemon fields missing: ${r.join(`, `)}`);let i=[`spend_usd`,`spend_status`,`usage_summary`,`request_usage`,`cost_control`,`daemon_commands`,`observability`,`mission_view`,`partial`,`diagnostics`].filter(e=>!Object.hasOwn(t,e));if(i.length>0)throw Error(`invalid snapshot: fields missing: ${i.join(`, `)}`);if(!Array.isArray(t.diagnostics))throw Error(`invalid snapshot: diagnostics must be an array`);return e}var Be=`argus_web_token`,Ve=null;function He(){let e;try{e=new URLSearchParams(window.location.search)}catch{return}let t=e.get(`token`);if(t){Ve=t;try{localStorage.setItem(Be,t)}catch{}try{e.delete(`token`);let t=e.toString();window.history.replaceState(null,``,`${window.location.pathname}${t?`?${t}`:``}${window.location.hash}`)}catch{}}}var Ue=()=>{if(Ve)return Ve;try{return new URLSearchParams(window.location.search).get(`token`)||localStorage.getItem(Be)}catch{return null}};function We(){let e=Ue();return e?{Authorization:`Bearer ${e}`}:{}}function Ge(){return Ue()??``}var Ke=8e3,qe=12e3,Je=class extends Error{constructor(){super(`This browser is not paired with Argus. Reopen it from Argus Desktop or use a fresh pairing link.`),this.name=`PairingRequiredError`}},N=class extends Error{method;path;constructor(e,t,n=`could not reach the local Argus service`){super(`${e.toUpperCase()} ${t} ${n}. Make sure Argus Desktop is running, then retry.`),this.name=`LocalArgusUnavailableError`,this.method=e.toUpperCase(),this.path=t}};function Ye(e){return e instanceof Je||!!(e&&typeof e==`object`&&Number(e.status)===401)}function Xe(e){return Ye(e)||e instanceof N}async function Ze(e,t){try{return await fetch(e,t)}catch(n){throw t.signal?.aborted?n:new N(String(t.method??`GET`),e)}}async function P(e,t,n,r){let i=new AbortController,a=t.signal??void 0,o=!1,s=()=>{};if(a){let e=()=>i.abort(a.reason);a.aborted?e():(a.addEventListener(`abort`,e,{once:!0}),s=()=>a.removeEventListener(`abort`,e))}let c,l=(async()=>await r(await Ze(e,{...t,signal:i.signal})))(),u=new Promise((e,t)=>{c=setTimeout(()=>{o=!0;let e=Error(`request timed out after ${n}ms`);i.abort(e),t(e)},n)});try{return await Promise.race([l,u])}catch(r){if(o){let r=Math.round(n/1e3);throw new N(String(t.method??`GET`),e,`timed out after ${r}s because the local Argus service did not respond`)}throw r}finally{c&&clearTimeout(c),s()}}async function Qe(e,t,n){return P(e,{headers:We(),signal:t},n??qe,async t=>(await je(t,`GET`,e),await t.json()))}async function F(e,t,n){let r=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`,...We()},body:t===void 0?void 0:JSON.stringify(t),signal:n});return await je(r,`POST`,e),await r.json()}async function $e(e,t,n){let r=await fetch(e,{method:`POST`,headers:We(),body:t,signal:n});return await je(r,`POST`,e),await r.json()}function et(e){let t=e&&typeof e==`object`?e:{},n=String(t.command_status??``);if(Number(t.rc??0)!==0||n===`failed`||n===`rejected`)throw Error(String(t.error||`daemon command ${n||`failed`}`));return e}async function tt(e,t,n){let r=await fetch(t,{method:e,headers:{"Content-Type":`application/json`,...We()},body:n===void 0?void 0:JSON.stringify(n)});return await je(r,e,t),await r.json()}async function nt(e,t){let n=await fetch(e,{headers:We(),signal:t});return await je(n,`GET`,e),n.blob()}var I=(e,t=``)=>`/api/projects/${encodeURIComponent(e)}${t}`,rt=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random()}`,L;function it(e){return!!(e&&typeof e==`object`&&`aborted`in e&&typeof e.aborted==`boolean`)}function at(e,t){return t?.length?{text:e,attachments:t}:{text:e}}function ot(){if(!L){let e=(async()=>{let e=`/api/meta`,t=await P(e,{headers:We()},Ke,async t=>{if(t.status===404)throw Error(`incompatible Argus API: service does not expose /api/meta`);return await je(t,`GET`,e),Re(await t.json(),e=>console.warn(`Argus API compatibility warning: ${e}`))});if(t.authentication?.required&&!t.authentication.authenticated)throw new Je;return t})();L=e,e.catch(t=>{L===e&&!(t instanceof Je)&&(L=void 0)})}return L}function st(e){let t=[],n;for(;(n=e.indexOf(` `))>=0;){let r=e.slice(0,n);e=e.slice(n+2);for(let e of r.split(` `)){let n=e.trim();if(n.startsWith(`data:`))try{t.push(JSON.parse(n.slice(5).trim()))}catch{}}}return{frames:t,rest:e}}var ct=null,R={meta:ot,projectIndex:async()=>(await ot(),Qe(`/api/projects`,void 0,qe)),listProjects:async()=>(await ot(),Qe(`/api/projects`,void 0,qe).then(e=>e.projects)),projectCosts:async e=>(await ot(),Qe(`/api/projects/costs`,e)),createDaemon:async(e,t=``,n=``,r)=>{let i=`/api/daemons`,a={objective:e,name:t,workdir:n,command_id:rt(),expected_revision:r},o=()=>fetch(i,{method:`POST`,headers:{"Content-Type":`application/json`,...We()},body:JSON.stringify(a),cache:`no-store`}),s=await o();return s.status===400&&/Invalid HTTP request received/i.test(await s.clone().text())&&(s=await o()),await je(s,`POST`,i),et(await s.json())},updateProject:(e,t)=>tt(`PATCH`,I(e),{name:t}),deleteProject:e=>tt(`DELETE`,I(e)),snapshot:async(e,t,n=!1)=>(await ot(),ze(await Qe(I(e,`/snapshot?compact=true&events_limit=1${n?`&prewarm=true`:``}`),t,qe))),activeSnapshot:async(e,t)=>{let n=ct!==e;n&&(ct=e);try{return await R.snapshot(e,t,n)}catch(t){throw n&&ct===e&&(ct=null),t}},prefetchSnapshot:(e,t)=>R.snapshot(e,t,!1),status:(e,t)=>Qe(I(e,`/status`),t),journal:(e,t=20,n)=>Qe(I(e,`/journal?n=${t}`),n).then(e=>e.journal),doctor:(e,t)=>Qe(I(e,`/doctor`),t),config:(e,t)=>Qe(I(e,`/config`),t),identity:(e,t)=>Qe(I(e,`/identity`),t).then(e=>e.identity),transcript:(e,t=30,n)=>Qe(I(e,`/transcript?n=${t}`),n).then(e=>e.turns),events:(e,t=80,n)=>Qe(I(e,`/events?limit=${t}&view=ui`),n).then(e=>e.events),backlogItem:(e,t,n)=>Qe(I(e,`/backlog/${encodeURIComponent(t)}`),n).then(e=>e.item),artifacts:(e,t)=>Qe(I(e,`/artifacts`),t).then(e=>e.artifacts),artifact:(e,t,n)=>Qe(I(e,`/artifact?${new URLSearchParams({path:t})}`),n),artifactBlob:(e,t,n=!1,r)=>{let i=new URLSearchParams({path:t});return n&&i.set(`download`,`true`),nt(I(e,`/artifact/raw?${i}`),r)},gitDiff:(e,t)=>Qe(I(e,`/git-diff`),t),metrics:e=>Qe(`/api/metrics`,e),trash:(e=``,t=100,n=0,r)=>Qe(`/api/trash?${new URLSearchParams({query:e,limit:String(t),offset:String(n)})}`,r),restoreTrash:e=>F(`/api/trash/${encodeURIComponent(e)}/restore`),addTask:(e,t)=>F(I(e,`/tasks`),{text:t}).then(e=>e.item),abortMission:(e,t)=>F(I(e,`/mission/abort`),{reason:t}),answerPending:(e,t,n)=>F(I(e,`/backlog/${encodeURIComponent(t)}/answer`),{text:n}),resolveDecision:(e,t,n,r)=>F(I(e,`/decisions/${encodeURIComponent(t)}/resolve`),{option_id:n,note:r}),uploadAttachments:async(e,t,n)=>{await ot();let r=new FormData;return t.forEach(e=>r.append(`files`,e,e.name)),$e(I(e,`/attachments`),r,n)},message:(e,t,n)=>{let r=it(n)?n:n?.signal,i=it(n)?void 0:n?.attachments;return F(I(e,`/message`),at(t,i),r)},messageStream:async(e,t,n,r)=>{let i=it(r)?r:r?.signal,a=it(r)?void 0:r?.attachments,o=await fetch(I(e,`/message/stream`),{method:`POST`,headers:{"Content-Type":`application/json`,...We()},body:JSON.stringify(at(t,a)),signal:i});if(await je(o,`POST`,I(e,`/message/stream`)),!o.body)throw Error(`Manager stream returned no response body`);let s=!1,c=e=>{if(!i?.aborted){if(e.type===`phase`){let t=Number(e.quiet_s??0);n.onPhase?.(String(e.label??``),String(e.role??`manager`),{heartbeat:e.heartbeat===!0,quietS:Number.isFinite(t)?t:0,kind:String(e.kind??``),detail:String(e.detail??``)})}else e.type===`delta`?n.onDelta?.(String(e.text??``),String(e.message_id??``),String(e.fragment_mode??`auto`)):e.type===`done`?(s=!0,n.onDone?.(e.result??{})):e.type===`error`&&(s=!0,n.onError?.(Error(String(e.error??`stream error`))))}},l=o.body.getReader(),u=new TextDecoder,d=``;for(;;){let{done:e,value:t}=await l.read();if(e)break;d+=u.decode(t,{stream:!0});let n=st(d);d=n.rest,n.frames.forEach(c)}if(!i?.aborted&&(st(d+` @@ -27,4 +27,4 @@ Error generating stack: `+e.message+` … content truncated`:``]}):(0,K.jsx)(`div`,{className:`mt-2 text-[10px] text-ink-faint`,children:r(`mission.skillUnavailable`)})]},String(e.id)))})]}):null,e.learned_wiki_pages.some(e=>e.status!==`retired`)?(0,K.jsxs)(`div`,{className:`mt-4 border-t border-line/50 pt-3`,children:[(0,K.jsx)(`div`,{className:`text-[10px] uppercase tracking-[0.12em] text-blue-sky`,children:r(`mission.knowledgeRetained`)}),(0,K.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:e.learned_wiki_pages.filter(e=>e.status!==`retired`).slice(-6).map(e=>(0,K.jsx)(`span`,{className:`rounded border border-blue/35 bg-blue/5 px-2 py-1 text-[10px] text-blue-sky`,children:String(e.title||e.id)},String(e.id)))})]}):null,e.storage.project_skill_dir||e.storage.global_skill_dir||e.storage.wiki_paths.length||e.storage.skill_history_compressed||e.storage.wiki_retired_compressed?(0,K.jsxs)(`div`,{className:`mt-4 border-t border-line/50 pt-3`,children:[(0,K.jsx)(`div`,{className:`text-[10px] uppercase tracking-[0.12em] text-ink-faint`,children:r(`mission.selfEvolution`)}),(0,K.jsxs)(`div`,{className:`mt-2 space-y-1 font-mono text-[10px] text-ink-dim`,children:[e.storage.project_skill_dir?(0,K.jsxs)(`div`,{className:`break-all`,children:[`project skills (`,e.storage.project_skill_count,`) · `,e.storage.project_skill_dir]}):null,e.storage.global_skill_dir?(0,K.jsxs)(`div`,{className:`break-all`,children:[`global skills (`,e.storage.global_skill_count,`) · `,e.storage.global_skill_dir]}):null,e.storage.wiki_paths.map(e=>(0,K.jsxs)(`div`,{className:`break-all`,children:[`project wiki · `,e]},e)),e.storage.skill_history_compressed||e.storage.wiki_retired_compressed?(0,K.jsxs)(`div`,{children:[`cold history · skill `,e.storage.skill_history_compressed,` · wiki `,e.storage.wiki_retired_compressed,` · `,ri(e.storage.skill_history_bytes_saved+e.storage.wiki_retired_bytes_saved),` saved`]}):null]})]}):null]})]}),(0,K.jsxs)(`section`,{className:`px-5 py-4`,children:[(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,K.jsx)(`div`,{className:`text-[10px] font-semibold uppercase tracking-[0.16em] text-ink-faint`,children:r(`mission.replay`)}),e.timeline.length>1?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`input`,{type:`range`,min:0,max:e.timeline.length-1,value:l,onChange:e=>u(Number(e.target.value)),"aria-label":r(`mission.replayTimeline`),className:`h-1 min-w-32 flex-1 accent-blue`}),(0,K.jsxs)(`span`,{className:`font-mono text-[10px] text-ink-faint`,children:[l+1,`/`,e.timeline.length]})]}):null]}),(0,K.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[_.map(e=>(0,K.jsxs)(`div`,{className:`grid grid-cols-[44px_10px_minmax(0,1fr)] gap-2 text-xs`,children:[(0,K.jsx)(`time`,{className:`font-mono text-[10px] text-ink-faint`,children:new Date(e.ts*1e3).toISOString().slice(11,16)}),(0,K.jsx)(`span`,{className:`mt-1 h-2 w-2 rounded-full ${e.tone===`error`?`bg-err`:e.tone===`success`||e.tone===`metric`||e.tone===`skill`?`bg-ok`:`bg-blue`}`}),(0,K.jsxs)(`div`,{className:`min-w-0`,children:[(0,K.jsx)(`span`,{className:`font-medium text-ink`,children:e.title}),e.detail?(0,K.jsxs)(`span`,{className:`text-ink-dim`,children:[` · `,e.detail]}):null]})]},e.id)),e.timeline.length?null:(0,K.jsx)(`div`,{className:`py-10 text-center text-xs text-ink-faint`,children:r(`mission.waitingEvents`)})]}),e.artifacts.length?(0,K.jsx)(`div`,{className:`mt-5 flex flex-wrap gap-2 border-t border-line/50 pt-4`,children:e.artifacts.slice(-8).map(e=>{let n=String(e.path||``);return(0,K.jsx)(`button`,{type:`button`,disabled:!n||!t,onClick:()=>n&&t?.(n),className:`rounded border border-line px-2 py-1 font-mono text-[10px] text-blue-sky hover:border-blue-sky/50 disabled:text-ink-faint`,children:String(e.title||n)},String(e.id||n))})}):null,n?.available&&(n.status||n.diff)?(0,K.jsxs)(`details`,{className:`mt-5 border-t border-line/50 pt-4`,children:[(0,K.jsxs)(`summary`,{className:`cursor-pointer text-[10px] font-semibold uppercase tracking-[0.14em] text-ink-faint hover:text-ink`,children:[`Git changes`,n.branch?` · ${n.branch}`:``]}),n.stat?(0,K.jsx)(`pre`,{className:`mt-3 overflow-x-auto whitespace-pre-wrap font-mono text-[10px] leading-5 text-ink-dim`,children:n.stat}):null,n.diff?(0,K.jsxs)(`pre`,{className:`mt-3 max-h-80 overflow-auto whitespace-pre font-mono text-[10px] leading-5 text-ink-dim scroll-thin`,children:[n.diff,n.truncated?` … diff truncated`:``]}):null]}):null]})]})}var uo=e=>e instanceof Error?e.message:String(e||`Unknown error`);async function fo(e){let t=await e,n=t&&typeof t==`object`?t:{},r=String(n.command_status??``);if(Number(n.rc??0)!==0||r===`failed`||r===`rejected`)throw Error(String(n.error||`daemon command ${r||`failed`}`));return t}function po({open:e,sid:t,snap:r,onClose:i,onChanged:a,onRestored:u}){let{t:f}=q(),[p,h]=(0,M.useState)(`task`),[g,_]=(0,M.useState)(``),[v,C]=(0,M.useState)(r.session.workdir??r.session.cwd??``),[w,ee]=(0,M.useState)(`ls`),[E,ne]=(0,M.useState)(``),[re,ie]=(0,M.useState)(``),[ae,D]=(0,M.useState)(null),[O,oe]=(0,M.useState)([]),[se,ce]=(0,M.useState)(0),[k,le]=(0,M.useState)(``),[A,ue]=(0,M.useState)(``),[de,fe]=(0,M.useState)(`work`);(0,M.useEffect)(()=>{e&&(C(r.session.workdir??r.session.cwd??``),Promise.all([R.metrics(),R.trash()]).then(([e,t])=>{D(e),oe(t.entries),ce(t.total)},e=>ne(uo(e))))},[e,r.session.cwd,r.session.workdir]);let j=async(e,t,n)=>{if(!A){ue(e),ne(``);try{let e=await t();n!==null&&ne(n||JSON.stringify(e,null,2)),a()}catch(e){ne(uo(e))}finally{ue(``)}}},pe=async()=>{let e=g.trim();if(e){if(p===`plan`){await j(`quick`,async()=>{let n=await R.previewPlan(t,e);return ne([...n.steps.map((e,t)=>`${t+1}. ${e.title}${e.detail?` — ${e.detail}`:``}`),...n.notes.map(e=>`Note: ${e}`),...n.error?[`Error: ${n.error}`]:[]].join(` `)),n},null);return}await j(`quick`,p===`task`?()=>R.addTask(t,e):p===`nudge`?()=>R.nudge(t,e):()=>R.note(t,e),`${p} submitted.`),_(``)}},me=async e=>{await j(`restore:${e.trash_id}`,async()=>{let t=await R.restoreTrash(e.trash_id);return oe(t=>t.filter(t=>t.trash_id!==e.trash_id)),ce(e=>Math.max(0,e-1)),await u(t.sid),t},`Restored ${e.label}.`)},he=r.daemon.alive&&r.daemon.protocol_compatible===!1,ge=r.daemon.alive&&r.daemon.control_available===!1,_e=r.daemon_admission?.running_daemons??[],ve=p===`task`?b:p===`nudge`?T:p===`note`?s:S,ye=async()=>{await j(`trash-search`,async()=>{let e=await R.trash(k);return oe(e.entries),ce(e.total),e},null)};return(0,K.jsxs)(aa,{open:e,onClose:()=>!A&&i(),label:f(`operations.title`),width:`max-w-5xl`,children:[(0,K.jsx)(oa,{title:f(`operations.title`),sub:r.session.display_name||t}),(0,K.jsx)(`div`,{className:`flex gap-1 border-b border-line bg-panel px-4 py-2`,children:[[`work`,f(`operations.work`),b],[`runtime`,f(`operations.runtime`),d],[`system`,f(`operations.system`),c],[`recovery`,f(`operations.recovery`),n]].map(([e,t,n])=>(0,K.jsx)(`button`,{type:`button`,onClick:()=>{fe(e),ne(``)},title:t,"aria-label":t,className:`flex h-8 w-9 items-center justify-center rounded-md text-xs ${de===e?`bg-blue-deep text-white`:`text-ink-faint hover:bg-bg hover:text-ink`}`,children:(0,K.jsx)(o,{icon:n})},e))}),(0,K.jsxs)(`div`,{className:`grid max-h-[76vh] gap-3 overflow-y-auto bg-bg p-3 scroll-thin lg:grid-cols-2`,children:[de===`work`?(0,K.jsxs)(`section`,{className:`rounded-lg border border-line bg-panel p-4 lg:col-span-2`,children:[(0,K.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-ink-dim`,children:f(`operations.workInput`)}),(0,K.jsx)(`p`,{className:`mt-1 text-xs text-ink-faint`,children:f(`operations.workHint`)}),(0,K.jsx)(`div`,{className:`mt-3 flex gap-1`,children:[[`task`,b],[`nudge`,T],[`note`,s],[`plan`,S]].map(([e,t])=>(0,K.jsx)(`button`,{type:`button`,onClick:()=>h(e),title:e,"aria-label":e,className:`flex h-8 w-9 items-center justify-center rounded text-xs capitalize ${p===e?`bg-blue-deep text-white`:`bg-bg text-ink-dim`}`,children:(0,K.jsx)(o,{icon:t})},e))}),(0,K.jsx)(`textarea`,{value:g,onChange:e=>_(e.target.value),rows:5,placeholder:p===`plan`?f(`operations.planPlaceholder`):f(`operations.actionPlaceholder`,{action:p}),className:`mt-3 w-full resize-y rounded border border-line bg-bg p-3 text-sm text-ink outline-none focus:border-blue`}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>void pe(),disabled:!!A||!g.trim(),title:p===`plan`?f(`operations.previewPlan`):f(`operations.submitAction`,{action:p}),"aria-label":p===`plan`?f(`operations.previewPlan`):f(`operations.submitAction`,{action:p}),className:`mt-2 flex h-9 w-9 items-center justify-center rounded bg-blue-deep text-xs font-medium text-white disabled:opacity-40`,children:A===`quick`?`…`:(0,K.jsx)(o,{icon:ve})})]}):null,de===`runtime`?(0,K.jsxs)(`section`,{className:`rounded-lg border border-line bg-panel p-4 lg:col-span-2`,children:[(0,K.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-ink-dim`,children:f(`operations.runtime`)}),(0,K.jsx)(`p`,{className:`mt-1 text-xs text-ink-faint`,children:f(`operations.runtimeHint`)}),(0,K.jsx)(`label`,{className:`mt-3 block text-[10px] uppercase tracking-wide text-ink-faint`,children:f(`operations.workdir`)}),(0,K.jsxs)(`div`,{className:`mt-1 flex gap-2`,children:[(0,K.jsx)(`input`,{value:v,onChange:e=>C(e.target.value),className:`h-9 min-w-0 flex-1 rounded border border-line bg-bg px-2 font-mono text-xs text-ink outline-none focus:border-blue`}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>void j(`cwd`,()=>R.setWorkdir(t,v),f(`operations.workdirUpdated`)),disabled:!!A||!v.trim(),title:f(`operations.applyWorkdir`),"aria-label":f(`operations.applyWorkdir`),className:`flex h-9 w-9 items-center justify-center rounded border border-blue/50 text-xs text-blue disabled:opacity-40`,children:(0,K.jsx)(o,{icon:y})})]}),(0,K.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:[(0,K.jsx)(`button`,{type:`button`,onClick:()=>void j(`reset`,()=>R.resetManager(t),`Manager context reset.`),disabled:!!A,title:f(`operations.resetManager`),"aria-label":f(`operations.resetManager`),className:`flex h-9 w-9 items-center justify-center rounded border border-line text-xs text-ink-dim disabled:opacity-40`,children:(0,K.jsx)(o,{icon:te})}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>void j(`upgrade`,()=>fo(R.upgradeDaemon(t,r.daemon_commands?.revision)),`Current-release daemon started after safely draining active work.`),disabled:!!A||ge,title:ge?`Externally supervised daemon cannot be restarted from this Web host`:he?`Upgrade incompatible daemon`:`Restart on current release`,"aria-label":ge?`Externally supervised daemon`:he?`Upgrade incompatible daemon`:`Restart on current release`,className:`flex h-9 w-9 items-center justify-center rounded border text-xs disabled:opacity-40 ${he?`border-err/60 bg-err/10 text-err`:`border-line text-ink-dim`}`,children:(0,K.jsx)(o,{icon:x})})]}),r.daemon.protocol_error?(0,K.jsx)(`p`,{className:`mt-2 text-xs text-err`,children:r.daemon.protocol_error}):null,_e.length?(0,K.jsxs)(`div`,{className:`mt-4`,children:[(0,K.jsx)(`div`,{className:`text-[10px] uppercase tracking-wide text-ink-faint`,children:f(`operations.replaceSlot`)}),(0,K.jsx)(`div`,{className:`mt-2 space-y-1`,children:_e.map(e=>(0,K.jsxs)(`button`,{type:`button`,disabled:!!A,onClick:()=>void j(`replace:${e.id}`,()=>fo(R.replaceDaemon(t,e.id,!!r.continuous?.enabled,r.daemon_commands?.revision)),`Parked ${e.label||e.id} and started this session.`),title:`Replace ${e.label||e.id}`,"aria-label":`Replace ${e.label||e.id}`,className:`flex w-full items-center justify-between rounded border border-line bg-bg px-2 py-1.5 text-left text-xs text-ink-dim disabled:opacity-40`,children:[(0,K.jsx)(`span`,{className:`truncate`,children:e.label||e.id}),(0,K.jsx)(o,{icon:x,className:`ml-2 text-warn`})]},e.id))})]}):null]}):null,de===`system`?(0,K.jsxs)(`section`,{className:`rounded-lg border border-line bg-panel p-4`,children:[(0,K.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-ink-dim`,children:f(`operations.skills`)}),(0,K.jsxs)(`div`,{className:`mt-3 flex gap-2`,children:[(0,K.jsx)(`input`,{value:w,onChange:e=>ee(e.target.value),className:`h-9 min-w-0 flex-1 rounded border border-line bg-bg px-2 font-mono text-xs text-ink outline-none focus:border-blue`,placeholder:`ls, stats, show NAME…`}),(0,K.jsx)(`button`,{type:`button`,disabled:!!A,onClick:()=>void j(`skills`,async()=>{let e=await R.skills(t,w);return ie(e),e},null),title:f(`operations.runSkill`),"aria-label":f(`operations.runSkill`),className:`flex h-9 w-9 items-center justify-center rounded border border-blue/50 text-xs text-blue disabled:opacity-40`,children:(0,K.jsx)(o,{icon:l})})]}),re?(0,K.jsx)(`pre`,{className:`mt-3 max-h-48 overflow-auto whitespace-pre-wrap rounded bg-bg p-3 font-mono text-xs text-ink-dim scroll-thin`,children:re}):null]}):null,de===`system`?(0,K.jsxs)(`section`,{className:`rounded-lg border border-line bg-panel p-4`,children:[(0,K.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-ink-dim`,children:f(`operations.metrics`)}),(0,K.jsxs)(`div`,{className:`mt-3 flex items-center gap-3`,children:[(0,K.jsx)(`span`,{className:`rounded px-2 py-1 text-xs font-semibold ${ae?.slo?.status===`healthy`?`bg-ok/10 text-ok`:`bg-warn/10 text-warn`}`,children:ae?.slo?.status??`loading`}),(0,K.jsxs)(`span`,{className:`text-xs text-ink-faint`,children:[`event validation failures: `,ae?.event_validation_failures??`—`]})]}),ae?(0,K.jsx)(`pre`,{className:`mt-3 max-h-48 overflow-auto whitespace-pre-wrap rounded bg-bg p-3 font-mono text-[10px] text-ink-dim scroll-thin`,children:JSON.stringify({web:ae.web,provider:ae.provider,cost_control:ae.cost_control},null,2)}):null]}):null,de===`recovery`?(0,K.jsxs)(`section`,{className:`rounded-lg border border-line bg-panel p-4 lg:col-span-2`,children:[(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,K.jsxs)(`h3`,{className:`mr-auto text-xs font-semibold uppercase tracking-wide text-ink-dim`,children:[f(`operations.trash`),` · `,se]}),(0,K.jsx)(`input`,{value:k,onChange:e=>le(e.target.value),onKeyDown:e=>{!Fi(e)&&e.key===`Enter`&&ye()},placeholder:f(`operations.searchTrash`),className:`h-8 min-w-52 rounded border border-line bg-bg px-2 text-xs text-ink outline-none focus:border-blue`}),(0,K.jsx)(`button`,{type:`button`,disabled:!!A,onClick:()=>void ye(),title:f(`operations.searchTrash`),"aria-label":f(`operations.searchTrash`),className:`flex h-8 w-8 items-center justify-center rounded border border-blue/50 text-xs text-blue disabled:opacity-40`,children:(0,K.jsx)(o,{icon:m})})]}),O.length?(0,K.jsx)(`div`,{className:`mt-3 grid gap-2 sm:grid-cols-2`,children:O.map(e=>(0,K.jsxs)(`div`,{className:`flex items-center gap-3 rounded border border-line bg-bg p-2`,children:[(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsx)(`div`,{className:`truncate text-xs text-ink`,children:e.label}),(0,K.jsx)(`div`,{className:`truncate font-mono text-[10px] text-ink-faint`,children:e.trash_path})]}),(0,K.jsx)(`button`,{type:`button`,disabled:!!A,onClick:()=>void me(e),title:`Restore ${e.label}`,"aria-label":`Restore ${e.label}`,className:`flex h-8 w-8 items-center justify-center rounded border border-blue/50 text-xs text-blue disabled:opacity-40`,children:(0,K.jsx)(o,{icon:n})})]},e.trash_id))}):(0,K.jsx)(`p`,{className:`mt-3 text-xs text-ink-faint`,children:f(`operations.trashEmpty`)}),se>O.length?(0,K.jsxs)(`p`,{className:`mt-2 text-[10px] text-ink-faint`,children:[`Showing the newest `,O.length,` matches. Narrow the search to find older sessions.`]}):null]}):null,E?(0,K.jsx)(`pre`,{className:`rounded-lg border border-line bg-panel p-3 font-mono text-xs whitespace-pre-wrap text-ink-dim lg:col-span-2`,children:E}):null]})]})}var mo=[`API`,`Protocol`,`Workspace`];function ho(){let{t:e}=q(),t=(0,M.useRef)(null);return $r(t,(e,t)=>{if(t){e.set(`[data-handshake-line], [data-handshake-node]`,{opacity:1,scale:1,clearProps:`transform`});return}e.to(`[data-handshake-mark]`,{scale:1.055,duration:.75,ease:`sine.inOut`,repeat:-1,yoyo:!0,transformOrigin:`50% 50%`}),e.timeline({repeat:-1,repeatDelay:.25}).fromTo(`[data-handshake-line]`,{scaleX:0,opacity:.25,transformOrigin:`0% 50%`},{scaleX:1,opacity:.8,duration:.9,ease:`power2.inOut`}).fromTo(`[data-handshake-node]`,{autoAlpha:.25,scale:.72},{autoAlpha:1,scale:1,duration:.28,stagger:.16,ease:`back.out(1.8)`},.12).to(`[data-handshake-node]`,{autoAlpha:.35,duration:.3,stagger:.08},`+=0.35`)}),(0,K.jsxs)(`div`,{ref:t,role:`status`,"aria-label":e(`handshake.connecting`),className:`w-full max-w-xl px-6 text-center`,children:[(0,K.jsx)(`div`,{"data-handshake-mark":!0,className:`handshake-mark glass-card mx-auto flex h-16 w-16 items-center justify-center rounded-3xl text-blue shadow-glow sm:h-20 sm:w-20`,children:(0,K.jsx)(Si,{size:48,className:`text-blue`})}),(0,K.jsxs)(`div`,{className:`relative mx-auto mt-8 h-10 max-w-sm sm:max-w-md`,children:[(0,K.jsx)(`div`,{className:`absolute left-[10%] right-[10%] top-3 h-px bg-line/80`}),(0,K.jsx)(`div`,{"data-handshake-line":!0,className:`handshake-line absolute left-[10%] right-[10%] top-3 h-px`}),(0,K.jsx)(`div`,{className:`relative flex justify-between`,children:mo.map(e=>(0,K.jsxs)(`div`,{className:`flex w-20 flex-col items-center gap-2.5`,children:[(0,K.jsx)(`span`,{"data-handshake-node":!0,className:`handshake-node h-6 w-6 rounded-full border ring-4 ring-bg`,children:(0,K.jsx)(`span`,{className:`m-auto mt-[7px] block h-2 w-2 rounded-full bg-blue`})}),(0,K.jsx)(`span`,{className:`text-xs font-medium text-ink-faint`,children:e})]},e))})]}),(0,K.jsx)(`p`,{className:`mt-9 text-base font-medium text-ink-dim`,children:`Connecting to Argus`}),(0,K.jsx)(`p`,{className:`mt-1.5 text-sm text-ink-faint`,children:`Negotiating protocol and restoring your workspace…`})]})}function go({loading:e,hasProjects:t,error:n,onRetry:r,onNew:i,onChoose:a,canCreate:o}){let{t:s}=q();return(0,K.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-4 text-center`,children:[e?(0,K.jsx)(ho,{}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(wi,{size:32,tag:si}),(0,K.jsx)(`p`,{className:`max-w-md text-sm leading-relaxed ${n?`text-err`:`text-ink-faint`}`,children:n||s(t?`landing.selectOrCreate`:`landing.noSessions`)})]}),!e&&(0,K.jsxs)(`div`,{className:`flex flex-wrap justify-center gap-2`,children:[n?(0,K.jsx)(fi,{onClick:r,variant:`danger`,children:s(`common.retry`)}):null,t?(0,K.jsx)(fi,{onClick:a,children:s(`landing.select`)}):o?(0,K.jsx)(fi,{onClick:i,variant:`primary`,children:s(`landing.new`)}):null]})]})}function _o({active:e,onSelect:t,onOpenSessions:n}){let{t:r}=q(),i=[{id:`mission`,label:r(`mobile.mission`),icon:S},{id:`activity`,label:r(`mobile.activity`),icon:_},{id:`workbench`,label:r(`mobile.workbench`),icon:g},{id:`preview`,label:r(`mobile.preview`),icon:ee}];return(0,K.jsxs)(`nav`,{"aria-label":r(`mobile.views`),className:`mobile-tabbar glass-panel glass-panel--raised fixed inset-x-0 bottom-0 z-40 flex items-stretch border-t border-line/60 lg:hidden`,children:[n?(0,K.jsxs)(`button`,{type:`button`,onClick:n,"aria-label":r(`topbar.openSessions`),className:`flex min-h-[3.25rem] flex-1 flex-col items-center justify-center gap-0.5 text-ink-faint active:bg-panel-raised`,children:[(0,K.jsx)(o,{icon:h,className:`h-4 w-4`}),(0,K.jsx)(`span`,{className:`text-[10px] leading-none`,children:r(`mobile.sessions`)})]}):null,i.map(n=>{let r=n.id===e;return(0,K.jsxs)(`button`,{type:`button`,onClick:()=>t(n.id),"aria-current":r?`page`:void 0,className:`flex min-h-[3.25rem] flex-1 flex-col items-center justify-center gap-0.5 active:bg-panel-raised ${r?`text-blue`:`text-ink-faint`}`,children:[(0,K.jsx)(o,{icon:n.icon,className:`h-4 w-4`}),(0,K.jsx)(`span`,{className:`text-[10px] leading-none`,children:n.label})]},n.id)})]})}function vo(){(0,M.useEffect)(()=>{let e=window.visualViewport,t=document.documentElement;if(!e)return;let n=null,r=()=>{n!=null&&window.cancelAnimationFrame(n),n=window.requestAnimationFrame(()=>{let n=window.innerHeight-e.height-e.offsetTop,r=n>24?Math.round(n):0;t.style.setProperty(`--keyboard-inset`,`${r}px`)})};return r(),e.addEventListener(`resize`,r),e.addEventListener(`scroll`,r),()=>{n!=null&&window.cancelAnimationFrame(n),e.removeEventListener(`resize`,r),e.removeEventListener(`scroll`,r),t.style.removeProperty(`--keyboard-inset`)}},[])}async function yo(e,t){let n=Bt(e.trim());if(!n)return{kind:`not-command`};if(!n.cmd){let e=Vt(n.name);return{kind:`error`,message:e?`Unknown command ${n.name}. Did you mean ${e}?`:`Unknown command ${n.name}. Use /help for the full list.`}}if(n.cmd.id===`ask`)return{kind:`not-command`};if(Nt(n.cmd)&&!n.rest)return{kind:`error`,message:`Usage: ${n.cmd.name}${n.cmd.arg?` ${n.cmd.arg}`:``}`};try{await t[n.cmd.id](n.rest)}catch(e){return{kind:`error`,message:e instanceof Error?e.message:String(e??`Command failed`)}}return{kind:`handled`}}function bo({activeSid:e,activityEventsRef:t,notify:n,onClearEvents:r,onDispose:i,onOpenConfig:a,onOpenDoctor:o,onOpenHelp:s,onOpenIdentity:c,onOpenInspector:l,onOpenNewDaemon:u,onOpenOperations:d,onOpenSidebar:f,onReconnectEvents:p,onRenameProject:m,onRewriteDraft:h,onSelectProject:g,onSetArtifactPath:_,onSetEventFilter:v,onSetEventQuery:y,onSetTaskItemId:b,onSetWorkspaceView:x,onShowArtifacts:S,onStopIteration:C,onStopWaiting:w,refetchSnapshot:T}){return{status:async()=>l(),roles:async()=>d(),journal:async()=>l(),backlog:async()=>x(`mission`),item:async e=>{e&&b(e)},artifacts:async()=>S(),artifact:async e=>{e&&_(e)},events:async e=>{x(`activity`);let{filter:t,query:n}=H(e);v(t),y(n)},find:async e=>{x(`activity`),v(`all`),y(e)},run:async()=>x(`activity`),clear:async()=>{x(`activity`),v(`all`),y(``),r(t.current.length)},cancel:async()=>w(),task:async t=>{e&&(await R.addTask(e,t),T(),n(`success`,`Task queued.`))},rewrite:async e=>{let t=e.trim();if(!t){n(`info`,`Type your prompt in the composer and press Rewrite, or use /rewrite .`);return}h(t)},plan:async t=>{if(!e)return;let r=await R.previewPlan(e,t);r.error?n(`error`,r.error):n(`info`,r.steps.map(e=>e.title).join(` -`)||`Plan preview ready.`)},nudge:async t=>{e&&(await R.nudge(e,t),n(`success`,`Guidance injected.`))},abort:async t=>{e&&(await R.abortMission(e,t||`operator abort`),n(`info`,`Abort requested.`))},note:async t=>{e&&(await R.note(e,t),n(`success`,`Note appended to timeline.`))},done:async e=>{e&&i(e,`done`)},skip:async e=>{e&&i(e,`rm`)},stop:async e=>{e&&C(e)},new:async()=>u(),daemons:async()=>f(),resume:async e=>{e&&e!==`list`?g(e):f()},attach:async e=>{e&&g(e)},rename:async t=>{!e||!t||await m(t)},doctor:async()=>o(),backend:async t=>{if(!e||!t){a();return}await R.setConfig(e,`runner_backend`,t),n(`success`,`Backend set to ${t}.`)},config:async t=>{if(!e||!t){a();return}let r=t.indexOf(`=`);r>0?(await R.setConfig(e,t.slice(0,r).trim(),t.slice(r+1).trim()),n(`success`,`Config updated.`)):a()},identity:async()=>c(),reset:async()=>{e&&(await R.resetManager(e),n(`success`,`Manager context reset.`))},skills:async t=>{e&&n(`info`,(await R.skills(e,t||`ls`)).slice(0,400))},reconnect:async()=>p(),help:async()=>s(),quit:async()=>n(`info`,`Background work continues; close this browser tab when ready.`)}}function xo(e){return e.kind===`error`?(typeof e.reply==`string`?e.reply.trim():``)||`Manager could not handle this message.`:null}function So(e,t){e.kind===`task`&&t.dispatchTask(e);let n=xo(e);n&&t.notifyError(n),t.refetchTranscript()}var Co={skipFirst:0,reconnectKey:0};function wo(e,t){return t.kind===`clear`?{...e,skipFirst:Math.max(0,t.offset)}:t.kind===`reconnect`?{skipFirst:0,reconnectKey:e.reconnectKey+1}:{...e,skipFirst:0}}var To=`local_request_id`;function Eo(e,t,n,r=Date.now()){return{type:`ui.operator`,agent_layer:`operator`,text:n,ts:r/1e3,event_id:`local-${e}-${t}-operator`,message_id:`local-${t}-operator`,[To]:t}}function Do(e,t,n,r,i,a=Date.now(),o=`auto`){let s=r.trim();if(!s)return e;let c=e.findIndex(e=>e.type===`ui.argus`&&Number(e[To])===n),l=i.endsWith(`-argus`)?`${i.slice(0,-6)}-operator`:``,u=l?e.map(e=>e.type===`ui.operator`&&Number(e[To])===n?{...e,message_id:l}:e):e,d=u.find(e=>e.type===`ui.operator`&&Number(e[To])===n),f=d?Math.max(0,a-Number(d.ts??a/1e3)*1e3):0;if(c<0)return[...u,{type:`ui.argus`,agent_layer:`manager`,text:s,ts:a/1e3,event_id:`local-${t}-${n}-argus`,message_id:i||`local-${n}-argus`,fragment_mode:o,response_latency_ms:f,[To]:n}];let p=u[c],m=[...u];return m[c]={...p,text:Dt(String(p.text??``),s,o),message_id:i||p.message_id,fragment_mode:o},m}function Oo(e,t,n){let r=new Map;e.forEach(e=>{let t=String(e.type??``);if(t!==`ui.operator`&&t!==`ui.argus`)return;let n=`${t}\u0000${String(e.text??``)}`;r.set(n,(r.get(n)??0)+1)});let i=t.map(e=>({type:e.role===`operator`?`ui.operator`:`ui.argus`,agent_layer:e.role===`operator`?`operator`:`manager`,text:e.text,ts:e.ts,message_id:`transcript-${e.ts}-${e.role}`})),a=Array(i.length).fill(!0);for(let e=i.length-1;e>=0;--e){let t=i[e],n=`${String(t.type)}\u0000${String(t.text??``)}`,o=r.get(n)??0;o>0&&(a[e]=!1,r.set(n,o-1))}let o=[...i.filter((e,t)=>a[t]),...e],s=Array(o.length).fill(!0),c=new Set,l=n.filter(e=>{let t=String(e.message_id??``),n=t?o.findIndex((e,n)=>!c.has(n)&&String(e.message_id??``)===t):-1,r=Number(e.ts??0);return n<0&&(n=o.findIndex((t,n)=>{if(c.has(n)||t.type!==e.type||t.text!==e.text)return!1;let i=Number(t.ts??0);return Math.abs(i-r)<=5})),n>=0&&(c.add(n),s[n]=!1),!0});return[...o.filter((e,t)=>s[t]),...l].sort((e,t)=>Number(e.ts??0)-Number(t.ts??0))}function ko(e,t){if(!t.length)return e;let n=new Map(t.map(e=>[e.id,e]));return e.map(e=>{let t=n.get(e.id);return t?{...e,spend_usd:t.spend_usd,known_cost_usd:t.known_cost_usd,spend_status:t.spend_status,usage_calls:t.usage_calls,premium_requests:t.premium_requests,cost_updated_at:t.updated_at}:e})}async function Ao(e,t,n,r=``){let i=await e.createDaemon(``,t,r),a=n.trim();return{created:i,startCampaign:a?()=>e.setContinuous(i.sid,!0,a):null}}var jo=e=>e instanceof Error?e.message:String(e||`Unknown error`);function Mo({localCwd:e,notify:t,onFocusComposer:n,queryClient:r,refetchProjects:i,selectProject:a}){let[o,s]=(0,M.useState)(!1),c=(0,M.useRef)(!1);return{createDaemon:async(o,l,u)=>{if(c.current)return!1;c.current=!0,s(!0);try{let{created:s,startCampaign:c}=await Ao(R,o,l,u),d=String(s.workdir||u||``);return r.setQueryData([`projects`],t=>({local_cwd:t?.local_cwd??e,projects:[{id:s.sid,label:o||s.sid,display_name:o,objective:``,launch_cwd:d,workdir:d,last_active:Date.now()/1e3,daemon_alive:!1,daemon_pid:null,uptime_seconds:null},...(t?.projects??[]).filter(e=>e.id!==s.sid)]})),a(s.sid),i(),window.setTimeout(n,0),t(c?`info`:`success`,c?`Session created and selected. Campaign is starting in the background.`:`Session created and selected.`),c&&c().then(()=>{r.invalidateQueries({queryKey:[`snapshot`,s.sid]}),i(),t(`success`,`Campaign started.`)}).catch(e=>{t(`error`,`Session was created, but the campaign could not start: ${jo(e)}`)}),!0}catch(e){return t(`error`,`Could not create session: ${jo(e)}`),!1}finally{c.current=!1,s(!1)}},creatingDaemon:o}}var No=e=>e instanceof Error?e.message:String(e||`Unknown error`);function Po({actions:e,activeSid:t,clearProjectSelection:n,continuous:r,currentSnapshotSid:i,notify:a,refetchProjects:o,selectProject:s,setDaemonManageOpen:c}){let[l,u]=(0,M.useState)(null),d=e.startDaemon.isPending||e.stopDaemon.isPending||e.updateProject.isPending||e.deleteProject.isPending,f=(0,M.useCallback)(e=>({onSuccess:()=>a(`success`,e),onError:e=>a(`error`,No(e))}),[a]),p=(0,M.useCallback)(()=>e.startDaemon.mutate(void 0,f(`Daemon start requested.`)),[f,e.startDaemon]),m=(0,M.useCallback)(()=>e.stopDaemon.mutate(!1,f(`Pause requested; the current operation is being interrupted.`)),[f,e.stopDaemon]),h=(0,M.useCallback)(async()=>{try{return await e.startDaemon.mutateAsync(),a(`success`,`Daemon resumed.`),!0}catch(e){return a(`error`,No(e)),!1}},[e.startDaemon,a]),g=(0,M.useCallback)(async()=>{try{return await e.stopDaemon.mutateAsync(!1),a(`success`,`Daemon paused. Progress remains resumable.`),!0}catch(e){return a(`error`,No(e)),!1}},[e.stopDaemon,a]),_=(0,M.useCallback)(async n=>{if(!t)return!1;try{return await e.updateProject.mutateAsync({sid:t,name:n}),a(`success`,`Session name updated.`),!0}catch(e){return a(`error`,No(e)),!1}},[e.updateProject,t,a]),v=(0,M.useCallback)(async()=>{if(!t)return!1;try{let t=await e.deleteProject.mutateAsync();c(!1),n(`replace`);let r=Gt((await o()).data?.projects??[])[0];return r&&s(r.id,`replace`),a(`success`,t.workdir_preserved?`Session moved to recoverable trash. Files remain in ${t.workdir}.`:`Session moved to recoverable trash.`),!0}catch(e){return a(`error`,No(e)),!1}},[e.deleteProject,t,n,a,o,s,c]),y=(0,M.useCallback)(e=>{if(c(!1),e===t&&i===e){u(null),c(!0);return}u(e),s(e)},[t,i,s,c]);return(0,M.useEffect)(()=>{!l||t!==l||i!==l||(u(null),c(!0))},[t,i,l,c]),{daemonBusy:d,manageDeleteProject:v,managePauseDaemon:g,manageRenameProject:_,manageStartDaemon:h,requestDispose:(0,M.useCallback)((t,n)=>e.disposeBacklog.mutate({id:t,op:n},{onSuccess:()=>a(`success`,n===`done`?`Work marked done.`:`Work removed.`),onError:e=>a(`error`,No(e))}),[e.disposeBacklog,a]),requestManageSession:y,requestStartDaemon:p,requestStopDaemon:m,requestStopIteration:(0,M.useCallback)(t=>e.stopBacklog.mutate(t,{onSuccess:()=>a(`success`,`Iteration stopped.`),onError:e=>a(`error`,No(e))}),[e.stopBacklog,a]),toggleContinuous:(0,M.useCallback)(()=>{if(!r)return;let t=!r.enabled;e.setContinuous.mutate({enabled:t,objective:r.objective},f(t?`Continuous campaign enabled.`:`Continuous campaign stopped.`))},[f,e.setContinuous,r])}}function Fo({focusComposer:e,openHelp:t,toggleKiosk:n,togglePalette:r,toggleReasoning:i,toggleSidebarCollapse:a}){(0,M.useEffect)(()=>{let o=o=>{let s=o.target,c=s?.tagName===`INPUT`||s?.tagName===`TEXTAREA`,l=o.metaKey||o.ctrlKey;l&&o.key.toLowerCase()===`k`?(o.preventDefault(),r()):l&&o.key.toLowerCase()===`t`?(o.preventDefault(),i()):l&&o.key===`.`?(o.preventDefault(),n()):l&&o.key.toLowerCase()===`b`?(o.preventDefault(),a()):l&&o.key.toLowerCase()===`j`?(o.preventDefault(),e()):!c&&o.key===`?`?(o.preventDefault(),t()):!c&&o.key===`/`&&(o.preventDefault(),e())};return window.addEventListener(`keydown`,o),()=>window.removeEventListener(`keydown`,o)},[e,t,n,r,i,a])}var Io=e=>e instanceof Error?e.message:String(e||`Unknown error`);function Lo({activeSid:e,backlog:t,notify:n,pendingQuestions:r,refetchSnapshot:i}){let[a,o]=(0,M.useState)(!1),[s,c]=(0,M.useState)(!1),l=(0,M.useRef)(``),u=(0,M.useMemo)(()=>{let e=(t??[]).map(e=>({...e,operator_decision:e.operator_decision}));return B(r??[],e)[0]??null},[t,r]);return(0,M.useEffect)(()=>{if(!u||!e){o(!1);return}let t=`${e}:${u.id}`;l.current!==t&&(l.current=t,o(!0))},[e,u]),{answerPendingReply:async(t,r)=>{if(!(!e||!u||s)){c(!0);try{let a=u.legacy?await R.answerPending(e,u.item_id,r):await R.resolveDecision(e,u.id,t,r);if(a.resolved===!1){n(`info`,String(a.reply||`Manager needs a more specific answer.`));return}o(!1),await i(),a.daemon&&Number(a.daemon.rc??0)!==0?n(`error`,`Answer queued, but the daemon did not start: ${a.daemon.error||`operator action required`}`):n(`success`,String(a.reply||`Manager delivered your answer to the team.`))}catch(e){await i(),n(`error`,`Could not send answer: ${Io(e)}`)}finally{c(!1)}}},pendingReply:u,pendingReplyBusy:s,pendingReplyOpen:a,setPendingReplyOpen:o}}var Ro=`argus.browser.project.v1`;function zo(){try{return window.sessionStorage.getItem(Ro)}catch{return null}}function Bo(e){try{e?window.sessionStorage.setItem(Ro,e):window.sessionStorage.removeItem(Ro)}catch{}}function Vo(e,t){let n=new URL(window.location.href);e?n.searchParams.set(`project`,e):n.searchParams.delete(`project`);let r=t===`push`?`pushState`:`replaceState`;window.history[r](window.history.state,``,n.toString())}function Ho({cancelActiveMessage:e,notify:t,projects:n,projectsError:r,projectsReady:i,queryClient:a,setArtifactPath:o,setSidebarOpen:s,setTaskItemId:c}){let l=new URLSearchParams(window.location.search),[u,d]=(0,M.useState)(l.get(`project`)||zo()),f=(0,M.useRef)(u),p=(0,M.useRef)(!1);f.current=u;let m=(0,M.useCallback)(t=>{t!==f.current&&(e(),o(null),c(null)),f.current=t,d(t),Bo(t)},[e,o,c]),h=(0,M.useCallback)((e,t=`push`)=>{let n=new URLSearchParams(window.location.search).get(`project`);m(e),n!==e&&Vo(e,t)},[m]),g=(0,M.useCallback)((e=`replace`)=>{let t=new URLSearchParams(window.location.search).get(`project`);m(null),t!=null&&Vo(null,e)},[m]),_=(0,M.useCallback)(e=>{a.prefetchQuery({queryKey:[`snapshot`,e],queryFn:({signal:t})=>R.prefetchSnapshot(e,t),staleTime:3e3})},[a]);return(0,M.useEffect)(()=>{if(!i)return;let e=p.current,r=Jt(n,f.current,e);if(!e&&(p.current=!0,r.id===f.current?Bo(r.id):m(r.id),new URLSearchParams(window.location.search).get(`project`)!==r.id&&Vo(r.id,`replace`),r.recovered)){let e=n.find(e=>e.id===r.id);t(`info`,e?`Project “${r.requested}” was not found. Switched to ${e.label||e.id}.`:`Project “${r.requested}” was not found. Create a daemon to continue.`)}},[m,t,n,i]),(0,M.useEffect)(()=>{let e=()=>{let e=new URLSearchParams(window.location.search).get(`project`);if(s(!1),!e){m(null);return}if(!i){m(e);return}let r=qt(n,e);if(m(r.id),r.recovered){Vo(r.id,`replace`);let e=n.find(e=>e.id===r.id);t(`info`,e?`Project “${r.requested}” was not found. Switched to ${e.label||e.id}.`:`Project “${r.requested}” was not found. Create a daemon to continue.`)}};return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[m,t,n,i,s]),{activateProject:m,activeSid:i?u&&n.some(e=>e.id===u)?u:null:r?u:null,clearProjectSelection:g,prefetchProject:_,selectProject:h,sid:u,sidRef:f}}function Uo(e,t){let n=localStorage.getItem(e);return n==null?t:n===`true`}function Wo(){let e=new URLSearchParams(window.location.search),[t,n]=(0,M.useState)(e.get(`kiosk`)===`1`),[r,i]=(0,M.useState)(()=>Uo(`argus.reasoning.visible.v1`,!1)),[a,o]=(0,M.useState)(()=>{let e=localStorage.getItem(`argus.workspace.view`);return e===`mission`||e===`workbench`?e:`activity`}),[s,c]=(0,M.useState)(`activity`),[l,u]=(0,M.useState)(()=>Uo(`argus.preview.expanded.v5`,!0)),[d,f]=(0,M.useState)(()=>{let e=Number(localStorage.getItem(`argus.sidebar.width.v2`)||256);return Number.isFinite(e)?Math.max(220,Math.min(400,e)):256}),[p,m]=(0,M.useState)(()=>{let e=Number(localStorage.getItem(`argus.preview.width.v2`)||440);return Number.isFinite(e)?Math.max(320,Math.min(600,e)):440}),[h,g]=(0,M.useState)(!1),[_,v]=(0,M.useState)(()=>Uo(`argus.sidebar.expanded.v4`,!0)),[y,b]=(0,M.useState)(()=>{let e=localStorage.getItem(`argus.theme`);return e===`light`||e===`dark`?e:null}),[x,S]=(0,M.useState)(()=>window.matchMedia(`(prefers-color-scheme: dark)`).matches),C=y??(x?`dark`:`light`),w=(0,M.useRef)(null),T=(0,M.useRef)(null);(0,M.useEffect)(()=>{localStorage.setItem(`argus.sidebar.expanded.v4`,String(_)),localStorage.setItem(`argus.preview.expanded.v5`,String(l)),localStorage.setItem(`argus.sidebar.width.v2`,String(d)),localStorage.setItem(`argus.preview.width.v2`,String(p))},[_,d,l,p]),(0,M.useEffect)(()=>{localStorage.setItem(`argus.workspace.view`,a)},[a]),(0,M.useEffect)(()=>{localStorage.setItem(`argus.reasoning.visible.v1`,String(r))},[r]),(0,M.useEffect)(()=>{let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>S(e.matches);return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),(0,M.useEffect)(()=>{document.documentElement.dataset.theme=C},[C]),(0,M.useEffect)(()=>{let e=()=>{document.documentElement.dataset.pageVisible=String(!document.hidden)};return e(),document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]);let ee=(0,M.useCallback)(()=>{let e=C===`light`?`dark`:`light`;b(e),localStorage.setItem(`argus.theme`,e)},[C]),te=(0,M.useCallback)((e,t)=>{let n=w.current;if(!n)return;t.preventDefault();let r=n.getBoundingClientRect();document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`;let i=t=>{T.current!=null&&window.cancelAnimationFrame(T.current),T.current=window.requestAnimationFrame(()=>{if(e===`left`){let e=l?p+8:56,n=Math.max(220,Math.min(400,r.width-e-360-8));f(Math.max(220,Math.min(n,t.clientX-r.left)))}else{let e=_?d+8:56,n=Math.max(320,Math.min(600,r.width-e-360-8));m(Math.max(320,Math.min(n,r.right-t.clientX)))}})},a=()=>{T.current!=null&&window.cancelAnimationFrame(T.current),T.current=null,document.body.style.cursor=``,document.body.style.userSelect=``,window.removeEventListener(`pointermove`,i),window.removeEventListener(`pointerup`,a),window.removeEventListener(`pointercancel`,a)};window.addEventListener(`pointermove`,i),window.addEventListener(`pointerup`,a,{once:!0}),window.addEventListener(`pointercancel`,a,{once:!0})},[_,d,l,p]);return(0,M.useEffect)(()=>{let e=()=>{if(window.innerWidth<1024||!w.current)return;let e=w.current.clientWidth,t=_?d:56,n=l?p:56,r=(_?8:0)+(l?8:0),i=Math.max(540,e-360-r);if(t+n<=i)return;let a=l?Math.max(320,Math.min(p,i-t)):n,o=_?Math.max(220,Math.min(d,i-a)):t;o+a>i&&l&&(a=Math.max(320,i-o)),_&&f(o),l&&m(a)};return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[_,d,l,p]),{cycleTheme:ee,kiosk:t,leftPanelOpen:_,leftWidth:d,mobileView:s,resizeSidebar:te,rightPanelOpen:l,rightWidth:p,setKiosk:n,setLeftPanelOpen:v,setLeftWidth:f,setMobileView:c,setRightPanelOpen:u,setRightWidth:m,setShowReasoning:i,setSidebarOpen:g,setWorkspaceView:o,shellRef:w,showReasoning:r,sidebarOpen:h,themeMode:C,workspaceView:a}}function Go({error:e,onRetry:t}){let{t:n}=q(),r=Ye(e),i=e instanceof N;return!r&&!i?null:(0,K.jsxs)(`div`,{role:`alert`,className:`fixed left-1/2 top-3 z-[100] flex w-[min(92vw,42rem)] -translate-x-1/2 items-start gap-3 rounded-xl border border-err/50 bg-panel/95 px-4 py-3 text-left text-sm text-ink shadow-xl backdrop-blur`,children:[(0,K.jsx)(`span`,{"aria-hidden":`true`,className:`mt-0.5 font-mono font-bold text-err`,children:`!`}),(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsx)(`strong`,{className:`block text-err`,children:n(r?`connection.pairingTitle`:`connection.unreachableTitle`)}),(0,K.jsx)(`span`,{className:`mt-0.5 block text-xs leading-relaxed text-ink-dim`,children:n(r?`connection.pairingDetail`:`connection.unreachableDetail`)})]}),r?null:(0,K.jsx)(`button`,{type:`button`,onClick:t,className:`shrink-0 rounded-md border border-err/40 px-2.5 py-1 text-xs text-err hover:bg-err/10`,children:n(`common.retry`)})]})}var Ko=0,qo=(0,M.lazy)(async()=>({default:(await Yr(()=>import(`./ResearchWorkbenchPanel-D0lDrnfL.js`),__vite__mapDeps([2,1,3,4,5,6]))).ResearchWorkbenchPanel}));function Jo(){let{locale:e,t}=q(),n=se(),r=pr(),i=mr(),a=(0,M.useMemo)(()=>Gt(ko(r.data?.projects??[],i.data?.projects??[])),[i.data?.projects,r.data?.projects]),s=r.data?.local_cwd??``,c=[r.error,i.error].find(e=>Xe(e)),[l,u]=(0,M.useState)(`none`),{cycleTheme:d,kiosk:f,leftPanelOpen:p,leftWidth:m,mobileView:h,resizeSidebar:g,rightPanelOpen:_,rightWidth:v,setKiosk:y,setLeftPanelOpen:b,setLeftWidth:x,setMobileView:S,setRightPanelOpen:w,setRightWidth:T,setShowReasoning:ee,setSidebarOpen:te,setWorkspaceView:E,shellRef:ne,showReasoning:re,sidebarOpen:ie,themeMode:ae,workspaceView:D}=Wo(),[O,oe]=(0,M.useState)(()=>D===`mission`?`mission`:`activity`),[ce,k]=(0,M.useState)(D===`workbench`);(0,M.useEffect)(()=>{if(D===`workbench`){k(!0);return}oe(D)},[D]),vo();let[le,A]=(0,M.useState)(0),[ue,de]=(0,M.useState)(``),[fe,j]=(0,M.useState)(!1),[pe,me]=(0,M.useState)(0),[he,ge]=(0,M.useState)(!1),[_e,ve]=(0,M.useState)([]),[ye,be]=(0,M.useState)(``),[xe,Se]=(0,M.useState)(!1),[Ce,we]=(0,M.useState)(0),[Te,Ee]=(0,M.useState)([]),[De,Oe]=(0,M.useState)(0),[ke,Ae]=(0,M.useState)(null),[je,Me]=(0,M.useState)(null),[Ne,Pe]=(0,M.useState)(!1),[Fe,Ie]=(0,M.useState)(!1),Le=(0,M.useRef)(!1),Re=(0,M.useRef)(null),ze=(0,M.useRef)(0),[Be,Ve]=(0,M.useState)(null),[He,Ue]=(0,M.useReducer)(wo,Co),[We,Ge]=(0,M.useState)(`all`),[Ke,qe]=(0,M.useState)(``),Je=(0,M.useCallback)(()=>Ve(null),[]),N=(0,M.useCallback)((e,t)=>{Ve({id:++Ko,tone:e,message:t})},[]),Ye=(0,M.useCallback)(()=>{let e=!!Re.current;return ze.current+=1,Re.current?.controller.abort(),Re.current=null,ge(!1),be(``),Se(!1),we(0),Ee([]),Oe(0),e},[]),Ze=(0,M.useCallback)(()=>{Ye()&&N(`info`,`Stopped waiting for this reply. Server-side work may still finish in the project timeline.`)},[Ye,N]),{activeSid:P,clearProjectSelection:Qe,prefetchProject:F,selectProject:$e,sidRef:et}=Ho({cancelActiveMessage:Ye,notify:N,projects:a,projectsError:r.isError,projectsReady:r.isSuccess,queryClient:n,setArtifactPath:Ae,setSidebarOpen:te,setTaskItemId:Me});(0,M.useEffect)(()=>()=>{ze.current+=1,Re.current?.controller.abort(),Re.current=null},[]);let tt=(0,M.useCallback)(e=>{let t=(e||``).trim(),n=et.current;!t||!n||fe||(j(!0),R.rewritePrompt(n,t).then(e=>{if(j(!1),e.error||!e.rewritten.trim()){N(`error`,`Rewrite failed: ${e.error||`empty rewrite`} — your prompt is unchanged`);return}de(e.rewritten),A(e=>e+1);let t=e.questions.length?` Manager asks: ${e.questions.join(` · `)}`:``;N(`success`,`Prompt rewritten — review it, then send.${t}`)},e=>{j(!1),N(`error`,`Rewrite failed: ${ai(e)} — your prompt is unchanged`)}))},[N,fe,et]),{createDaemon:nt,creatingDaemon:I}=Mo({localCwd:s,notify:N,onFocusComposer:()=>A(e=>e+1),queryClient:n,refetchProjects:r.refetch,selectProject:$e}),rt=hr(P),L=rt.data,it=L?.session.id===P?P:null,at=L?.continuous,ot=xr(it,!0),st=Cr(it,O===`mission`),{events:ct,connected:lt}=Mr(it,He.reconnectKey),ut=(0,M.useMemo)(()=>kr(ct),[ct]),z=(0,M.useMemo)(()=>jr(ct),[ct]);(0,M.useEffect)(()=>{!it||!ut||n.invalidateQueries({queryKey:[`artifacts`,it],exact:!0})},[ut,it,n]),(0,M.useEffect)(()=>{!it||!z||n.invalidateQueries({queryKey:[`snapshot`,it],exact:!0})},[it,n,z]);let dt=(0,M.useMemo)(()=>Fn(ct),[ct]),ft=br(it,O===`activity`,120),pt=gr(P,20,l===`inspector`),{answerPendingReply:mt,pendingReply:ht,pendingReplyBusy:B,pendingReplyOpen:V,setPendingReplyOpen:gt}=Lo({activeSid:P,backlog:L?.backlog,notify:N,pendingQuestions:L?.pending_questions,refetchSnapshot:rt.refetch}),_t=(0,M.useMemo)(()=>Oo(ct,ft.data??[],_e),[ct,_e,ft.data]),vt=(0,M.useMemo)(()=>L?Dn(L,_t,ot.data??[]):null,[_t,ot.data,L]),yt=(0,M.useRef)(_t);yt.current=_t,(0,M.useEffect)(()=>{Ge(`all`),qe(``),ve([]),Ue({kind:`reset`})},[it]);let bt=Tr(P,L?.daemon_commands?.revision),{daemonBusy:xt,manageDeleteProject:St,managePauseDaemon:Ct,manageRenameProject:wt,manageStartDaemon:Tt,requestDispose:Et,requestManageSession:Dt,requestStartDaemon:Ot,requestStopDaemon:kt,requestStopIteration:At,toggleContinuous:Mt}=Po({actions:bt,activeSid:P,clearProjectSelection:Qe,continuous:at,currentSnapshotSid:L?.session.id,notify:N,refetchProjects:r.refetch,selectProject:$e,setDaemonManageOpen:Ie}),Nt=(0,M.useCallback)(async e=>{if(!P)return;let t=await bt.updateProject.mutateAsync({sid:P,name:e});N(`success`,`Renamed to "${t.name}".`)},[bt.updateProject,P,N]),Pt=(0,M.useMemo)(()=>bo({activeSid:P,activityEventsRef:yt,notify:N,onClearEvents:e=>Ue({kind:`clear`,offset:e}),onDispose:Et,onOpenConfig:()=>u(`config`),onOpenDoctor:()=>u(`doctor`),onOpenHelp:()=>u(`help`),onOpenIdentity:()=>u(`identity`),onOpenInspector:()=>u(`inspector`),onOpenNewDaemon:()=>Pe(!0),onOpenOperations:()=>u(`operations`),onOpenSidebar:()=>te(!0),onReconnectEvents:()=>Ue({kind:`reconnect`}),onRenameProject:Nt,onRewriteDraft:tt,onSelectProject:$e,onSetArtifactPath:Ae,onSetEventFilter:Ge,onSetEventQuery:qe,onSetTaskItemId:Me,onSetWorkspaceView:E,onShowArtifacts:()=>w(!0),onStopIteration:At,onStopWaiting:Ze,refetchSnapshot:rt.refetch}),[P,N,Nt,Et,At,$e,rt.refetch,Ze,E]);Fo({focusComposer:()=>A(e=>e+1),openHelp:()=>u(`help`),toggleKiosk:()=>y(e=>!e),togglePalette:()=>u(e=>e===`palette`?`none`:`palette`),toggleReasoning:()=>ee(e=>!e),toggleSidebarCollapse:()=>b(e=>!e)});let Ft=async(e,n=[])=>{let r=P;if(!r||Le.current||Re.current)return!1;Le.current=!0;let i,a;try{if(!n.length){let t=await yo(e,Pt);if(t.kind===`handled`)return!0;if(t.kind===`error`)return N(`error`,t.message),!1}i=++ze.current,a=new AbortController,Re.current={id:i,sid:r,controller:a}}finally{Le.current=!1}let o=()=>{let e=Re.current;return!!(e&&e.id===i&&e.sid===r&&et.current===r&&!a.signal.aborted)},s=()=>{Re.current?.id===i&&(Re.current=null,ge(!1),be(``),Se(!1),we(0),Oe(0),Ee([]))};ge(!0),be(n.length?t(`chat.uploadingAttachments`):``),Se(!1),we(0),Ee([]),Oe(Date.now());let c=[];if(n.length)try{let e=await R.uploadAttachments(r,n,a.signal);if(!o())return!1;c=e.attachments.map(e=>({attachment_id:e.attachment_id}))}catch(e){return o()&&(N(`error`,t(`chat.attachmentUploadFailed`,{error:ai(e)})),s()),!1}ve(t=>[...t,Eo(r,i,e)]);let l=(e,t=``,n=`auto`)=>{!o()||typeof e!=`string`||!e.trim()||ve(a=>Do(a,r,i,e,t,Date.now(),n))},u=e=>{if(!o())return;let t=e.daemon&&typeof e.daemon==`object`?e.daemon:null,n=typeof e.reply==`string`?e.reply:null;t?.admission_required?N(`error`,n||`Task queued, but all daemon slots are busy: ${String(t.error||`operator action required`)}`):t&&Number(t.rc??0)!==0?N(`error`,n||`Task queued, but executor did not start: ${String(t.error||`unknown error`)}`):n&&N(`success`,n),rt.refetch?.()},d=e=>{o()&&So(e,{dispatchTask:u,notifyError:e=>N(`error`,e),refetchTranscript:()=>{ft.refetch()}})};return(async()=>{let t=!1,n=null,i=[];try{try{await R.messageStream(r,e,{onPhase:(e,t,n)=>{o()&&(be(e),Se(n.heartbeat),we(n.quietS),i=Kn(i,{label:e,role:t,kind:n.kind,detail:n.detail,heartbeat:n.heartbeat,quietS:n.quietS}),Ee(i))},onDelta:(e,n,r)=>{o()&&(t=!0,i=qn(i),Ee(i),be(``),Se(!1),we(0),l(e,n,r===`append`||r===`snapshot`?r:`auto`))},onDone:e=>{o()&&(l(e.reply,``,`snapshot`),d(e))},onError:e=>{o()&&(n=e)}},{signal:a.signal,attachments:c})}catch(e){o()&&(n=e)}if(!o())return;n&&N(`error`,oi(n,t))}finally{s()}})(),!0},It=(0,M.useRef)(Ft);It.current=Ft;let Lt=(0,M.useMemo)(()=>{let n=sa(jt,e=>{It.current(e)},e=>{de(e),A(e=>e+1)},e),r=[...f?[]:[{id:`new`,label:t(`palette.newDaemon`),hint:`+`,group:t(`palette.view`),run:()=>Pe(!0)}],{id:`transcript`,label:t(`palette.openTranscript`),hint:`/transcript`,group:t(`palette.view`),run:()=>u(`transcript`)},{id:`inspector`,label:t(`palette.openProject`),hint:t(`palette.projectHint`),group:t(`palette.view`),run:()=>u(`inspector`)},{id:`operations`,label:t(`palette.openOperations`),hint:t(`palette.operationsHint`),group:t(`palette.view`),run:()=>u(`operations`)},{id:`help`,label:t(`help.title`),hint:`?`,group:t(`palette.view`),run:()=>u(`help`)},{id:`reasoning`,label:t(re?`palette.hideReasoning`:`palette.showReasoning`),hint:`⌘T`,group:t(`palette.view`),run:()=>ee(e=>!e)},{id:`kiosk`,label:t(f?`palette.exitKiosk`:`palette.enterKiosk`),hint:`⌘.`,group:t(`palette.view`),run:()=>y(e=>!e)}],i=f?[]:[{id:`message`,label:t(`palette.messageArgus`),hint:`/`,group:t(`palette.action`),run:()=>A(e=>e+1)},...he?[{id:`cancel-message`,label:t(`palette.stopWaiting`),hint:`Esc`,group:t(`palette.action`),run:Ze}]:[],...at?[{id:`continuous`,label:at.enabled?t(`palette.stopContinuous`):t(`palette.startContinuous`),group:t(`palette.action`),run:Mt}]:[],...L?.daemon.control_available===!1?[]:[L?.daemon.alive?{id:`stop`,label:t(`palette.stopDaemon`),group:t(`palette.action`),run:kt}:{id:`start`,label:t(`palette.startDaemon`),group:t(`palette.action`),run:Ot}]],o=a.map(e=>({id:`p-${e.id}`,label:e.label||e.id,hint:e.daemon_alive?`● ${t(`common.live`)}`:`○`,keywords:`${e.id} ${e.display_name??``} ${e.objective} ${e.daemon_alive?`live running`:`stopped idle`}`,group:t(`palette.project`),run:()=>$e(e.id)}));return[...r,...i,...n,...o]},[a,L?.daemon.alive,f,re,at?.enabled,he,Ze,e,t]);return(0,K.jsxs)(`div`,{ref:ne,className:`workbench-shell ambient-canvas flex h-screen h-[100dvh] w-screen max-w-full overflow-hidden text-ink`,children:[(0,K.jsx)(Go,{error:c,onRetry:()=>{r.refetch(),i.refetch()}}),!f&&ie?(0,K.jsx)(`button`,{type:`button`,"aria-label":t(`common.closeSessions`),onClick:()=>te(!1),className:`fixed inset-0 z-30 bg-black/40 lg:hidden`}):null,f?null:(0,K.jsx)(Ka,{projects:a,activeId:P,localCwd:s,onSelect:e=>{$e(e),te(!1)},onPrefetch:F,onManage:Dt,onOpenPanel:e=>u(e),onNew:()=>Pe(!0),loading:r.isLoading,creating:I,error:r.isError?ai(r.error):void 0,onRetry:()=>void r.refetch(),mobileOpen:ie,collapsed:!p,onToggleCollapse:()=>b(e=>!e),themeMode:ae,onCycleTheme:d,expandedWidth:m}),!f&&p?(0,K.jsx)(io,{label:t(`common.resizeSessions`),value:m,min:220,max:400,onPointerDown:e=>g(`left`,e),onReset:()=>x(256),onNudge:e=>x(t=>Math.max(220,Math.min(400,t+e)))}):null,(0,K.jsx)(`main`,{className:`flex min-w-0 flex-1 overflow-x-hidden`,children:L?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`section`,{className:`${h===`activity`?`flex`:`hidden`} glass-panel glass-panel--main h-full min-w-0 flex-1 flex-col lg:flex`,children:[(0,K.jsx)(Gr,{snap:L,streamOk:lt,onStart:Ot,onStop:kt,onManage:()=>Ie(!0),busy:xt,snapshotStale:rt.isError,readOnly:f,missionView:vt}),(0,K.jsxs)(`div`,{className:`flex h-10 shrink-0 items-center gap-1 border-b border-line/60 px-3`,children:[(0,K.jsxs)(`div`,{className:`workspace-tabs`,"data-active":D,children:[(0,K.jsx)(`span`,{className:`workspace-tab-indicator`,"aria-hidden":`true`}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>E(`mission`),className:`workspace-tab`,"data-selected":D===`mission`,children:t(`mobile.mission`)}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>E(`activity`),className:`workspace-tab`,"data-selected":D===`activity`,children:t(`mobile.activity`)}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>E(`workbench`),className:`workspace-tab`,"data-selected":D===`workbench`,children:t(`mobile.workbench`)})]}),D===`mission`?(0,K.jsx)(`span`,{className:`ml-auto hidden max-w-72 truncate text-[10px] text-ink-faint sm:block`,children:vt?.active_role?t(`mission.roleActive`,{role:vt.active_role}):t(`mission.overview`)}):(0,K.jsx)(`span`,{className:`ml-auto`}),f?null:(0,K.jsx)(`button`,{type:`button`,onClick:()=>u(`operations`),className:`rounded border border-line/60 px-2 py-1 text-[10px] text-ink-faint hover:border-blue/50 hover:text-blue`,children:t(`mission.operations`)})]}),(0,K.jsxs)(`div`,{className:`${D===`workbench`?`hidden`:`flex`} min-h-0 flex-1 flex-col`,children:[(0,K.jsx)(Sa,{alert:dt}),O===`mission`&&vt?(0,K.jsx)(lo,{view:vt,gitDiff:st.data,onOpenArtifact:Ae}):(0,K.jsx)(Pi,{events:_t,connected:lt,showReasoning:re,onToggleReasoning:()=>ee(e=>!e),embedded:!0,filter:We,query:Ke,skipFirst:He.skipFirst}),f?null:(0,K.jsx)(`div`,{className:`composer-dock shrink-0 px-4 pt-3`,children:(0,K.jsxs)(`div`,{className:`mx-auto w-full max-w-full lg:max-w-[61.8vw]`,children:[(0,K.jsx)(ba,{questions:L.pending_questions??[],backlog:L.backlog,onAnswer:()=>gt(!0)}),(0,K.jsx)(ia,{value:ue,onChange:de,onSend:Ft,onCancel:Ze,disabled:!P,pending:he,focusSignal:le,embedded:!0,phase:ye,heartbeat:xe,quietS:Ce,steps:Te,startedAt:De,onRewrite:tt,rewriting:fe,slashSelection:pe,onSlashSelectionChange:me},P||`no-session`)]})})]}),ce&&P?(0,K.jsx)(`div`,{className:`${D===`workbench`?`flex`:`hidden`} min-h-0 flex-1`,children:(0,K.jsx)(M.Suspense,{fallback:(0,K.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center text-xs text-ink-faint`,children:t(`common.loading`)}),children:(0,K.jsx)(qo,{sid:P,active:D===`workbench`})})}):null]}),_?(0,K.jsx)(io,{label:t(`common.resizePreview`),value:v,min:320,max:600,onPointerDown:e=>g(`right`,e),onReset:()=>T(440),onNudge:e=>T(t=>Math.max(320,Math.min(600,t-e)))}):null,(0,K.jsxs)(`aside`,{style:{"--preview-width":`${v}px`},className:`${h===`preview`?`flex`:`hidden`} relative min-w-0 flex-1 flex-col overflow-hidden border-l border-line/60 bg-panel transition-[width] duration-[250ms] ease-panel lg:flex lg:flex-none ${_?`lg:w-[var(--preview-width)]`:`lg:w-14`}`,children:[(0,K.jsx)(`div`,{className:`lg:hidden`,children:(0,K.jsx)(Gr,{snap:L,streamOk:lt,onStart:Ot,onStop:kt,onManage:()=>Ie(!0),busy:xt,snapshotStale:rt.isError,readOnly:f,missionView:vt})}),(0,K.jsx)(Va,{sid:it,artifacts:ot.data,error:ot.isError,onExpand:Ae,className:`min-h-0 flex-1 mobile-scroll-region ${_?`lg:flex`:`lg:hidden`}`,embedded:!0,onCollapse:()=>w(!1),missionView:vt,activityEvents:_t}),_?null:(0,K.jsx)(`div`,{className:`hidden h-12 items-center justify-center border-b border-line/50 text-ink-faint lg:flex`,children:(0,K.jsx)(`button`,{type:`button`,onClick:()=>w(!0),"aria-label":t(`common.expandPreview`),title:t(`common.expandPreview`),className:`flex h-8 w-8 items-center justify-center rounded-md border border-line/50 bg-bg/40 hover:border-blue/50 hover:text-ink`,children:(0,K.jsx)(o,{icon:C,className:`h-3.5 w-3.5`})})})]})]}):(0,K.jsx)(go,{loading:r.isLoading||!!(P&&rt.isLoading),hasProjects:a.length>0,error:r.isError&&a.length===0?ai(r.error):rt.isError&&!L?ai(rt.error):void 0,onRetry:()=>{r.refetch(),P&&rt.refetch()},onNew:()=>Pe(!0),onChoose:()=>te(!0),canCreate:!f})}),(0,K.jsx)(la,{open:l===`palette`,onClose:()=>u(`none`),items:Lt}),(0,K.jsx)(da,{open:l===`help`,onClose:()=>u(`none`)}),P&&(0,K.jsx)(_a,{sid:P,open:l===`doctor`,onClose:()=>u(`none`)}),P&&(0,K.jsx)(Z,{sid:P,open:l===`config`,onClose:()=>u(`none`)}),P&&(0,K.jsx)(va,{sid:P,open:l===`identity`,onClose:()=>u(`none`)}),P&&(0,K.jsx)(ya,{sid:P,open:l===`transcript`,onClose:()=>u(`none`)}),P&&L?(0,K.jsx)(eo,{open:l===`inspector`,snap:L,journal:pt.data??[],busy:bt.disposeBacklog.isPending||bt.stopBacklog.isPending,onClose:()=>u(`none`),onDispose:Et,onStop:At,onInspect:Me}):null,P&&L?(0,K.jsx)(po,{open:l===`operations`,sid:P,snap:L,onClose:()=>u(`none`),onChanged:()=>{rt.refetch(),r.refetch()},onRestored:async e=>{await r.refetch(),$e(e)}}):null,(0,K.jsx)(Oa,{sid:P,path:ke,onClose:()=>Ae(null)}),(0,K.jsx)(ro,{sid:P,itemId:je,onClose:()=>Me(null),onDone:e=>Et(e,`done`),onSkip:e=>Et(e,`rm`),onStop:At,busy:bt.disposeBacklog.isPending||bt.stopBacklog.isPending,readOnly:f}),(0,K.jsx)(Ua,{open:Ne,busy:I,onClose:()=>Pe(!1),onCreate:nt}),(0,K.jsx)(xa,{reply:ht,open:V,busy:B,onClose:()=>gt(!1),onSubmit:mt}),P&&L?(0,K.jsx)(Wa,{open:Fe,sid:P,name:L.session.display_name||``,alive:L.daemon.alive,controlAvailable:L.daemon.control_available!==!1,busy:xt,onClose:()=>Ie(!1),onRename:wt,onStart:Tt,onPause:Ct,onDelete:St}):null,(0,K.jsx)(Ha,{notice:Be,onClose:Je}),L&&!f?(0,K.jsx)(_o,{active:h===`preview`?`preview`:D,onSelect:e=>{if(e===`preview`){S(`preview`);return}S(`activity`),E(e)},onOpenSessions:()=>te(!0)}):null]})}function Yo({onDone:e}){let{t}=q(),n=(0,M.useRef)(!1),r=(0,M.useCallback)(()=>{n.current||(n.current=!0,e())},[e]);return(0,M.useEffect)(()=>{let e=window.setTimeout(r,330),t=()=>r();return window.addEventListener(`keydown`,t,{once:!0}),()=>{window.clearTimeout(e),window.removeEventListener(`keydown`,t)}},[r]),(0,K.jsxs)(`div`,{role:`status`,"aria-label":t(`splash.starting`),onClick:r,onAnimationEnd:e=>{e.currentTarget===e.target&&r()},className:`argus-web-splash`,children:[(0,K.jsx)(`div`,{className:`argus-web-splash-logo argus-web-splash-logo-full`,"aria-hidden":`true`,children:(0,K.jsx)(wi,{size:72})}),(0,K.jsx)(`div`,{className:`argus-web-splash-logo argus-web-splash-logo-compact`,"aria-hidden":`true`,children:(0,K.jsx)(Si,{size:112})})]})}He();var Xo=new Ee({defaultOptions:{queries:{staleTime:3e3,retry:dr,refetchOnWindowFocus:!1}}});function Zo(){let[e,t]=(0,M.useState)(!0);return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Jo,{}),e?(0,K.jsx)(Yo,{onDone:()=>t(!1)}):null]})}De.createRoot(document.getElementById(`root`)).render((0,K.jsx)(M.StrictMode,{children:(0,K.jsx)(de,{client:Xo,children:(0,K.jsx)(Hr,{children:(0,K.jsx)(Zo,{})})})}));export{ot as a,Ge as i,q as n,P as o,We as r,Yr as t}; \ No newline at end of file +`)||`Plan preview ready.`)},nudge:async t=>{e&&(await R.nudge(e,t),n(`success`,`Guidance injected.`))},abort:async t=>{e&&(await R.abortMission(e,t||`operator abort`),n(`info`,`Abort requested.`))},note:async t=>{e&&(await R.note(e,t),n(`success`,`Note appended to timeline.`))},done:async e=>{e&&i(e,`done`)},skip:async e=>{e&&i(e,`rm`)},stop:async e=>{e&&C(e)},new:async()=>u(),daemons:async()=>f(),resume:async e=>{e&&e!==`list`?g(e):f()},attach:async e=>{e&&g(e)},rename:async t=>{!e||!t||await m(t)},doctor:async()=>o(),backend:async t=>{if(!e||!t){a();return}await R.setConfig(e,`runner_backend`,t),n(`success`,`Backend set to ${t}.`)},config:async t=>{if(!e||!t){a();return}let r=t.indexOf(`=`);r>0?(await R.setConfig(e,t.slice(0,r).trim(),t.slice(r+1).trim()),n(`success`,`Config updated.`)):a()},identity:async()=>c(),reset:async()=>{e&&(await R.resetManager(e),n(`success`,`Manager context reset.`))},skills:async t=>{e&&n(`info`,(await R.skills(e,t||`ls`)).slice(0,400))},reconnect:async()=>p(),help:async()=>s(),quit:async()=>n(`info`,`Background work continues; close this browser tab when ready.`)}}function xo(e){return e.kind===`error`?(typeof e.reply==`string`?e.reply.trim():``)||`Manager could not handle this message.`:null}function So(e,t){e.kind===`task`&&t.dispatchTask(e);let n=xo(e);n&&t.notifyError(n),t.refetchTranscript()}var Co={skipFirst:0,reconnectKey:0};function wo(e,t){return t.kind===`clear`?{...e,skipFirst:Math.max(0,t.offset)}:t.kind===`reconnect`?{skipFirst:0,reconnectKey:e.reconnectKey+1}:{...e,skipFirst:0}}var To=`local_request_id`;function Eo(e,t,n,r=Date.now()){return{type:`ui.operator`,agent_layer:`operator`,text:n,ts:r/1e3,event_id:`local-${e}-${t}-operator`,message_id:`local-${t}-operator`,[To]:t}}function Do(e,t,n,r,i,a=Date.now(),o=`auto`){let s=r.trim();if(!s)return e;let c=e.findIndex(e=>e.type===`ui.argus`&&Number(e[To])===n),l=i.endsWith(`-argus`)?`${i.slice(0,-6)}-operator`:``,u=l?e.map(e=>e.type===`ui.operator`&&Number(e[To])===n?{...e,message_id:l}:e):e,d=u.find(e=>e.type===`ui.operator`&&Number(e[To])===n),f=d?Math.max(0,a-Number(d.ts??a/1e3)*1e3):0;if(c<0)return[...u,{type:`ui.argus`,agent_layer:`manager`,text:s,ts:a/1e3,event_id:`local-${t}-${n}-argus`,message_id:i||`local-${n}-argus`,fragment_mode:o,response_latency_ms:f,[To]:n}];let p=u[c],m=[...u];return m[c]={...p,text:Dt(String(p.text??``),s,o),message_id:i||p.message_id,fragment_mode:o},m}function Oo(e,t,n){let r=new Map;e.forEach(e=>{let t=String(e.type??``);if(t!==`ui.operator`&&t!==`ui.argus`)return;let n=`${t}\u0000${String(e.text??``)}`;r.set(n,(r.get(n)??0)+1)});let i=t.map(e=>({type:e.role===`operator`?`ui.operator`:`ui.argus`,agent_layer:e.role===`operator`?`operator`:`manager`,text:e.text,ts:e.ts,message_id:`transcript-${e.ts}-${e.role}`})),a=Array(i.length).fill(!0);for(let e=i.length-1;e>=0;--e){let t=i[e],n=`${String(t.type)}\u0000${String(t.text??``)}`,o=r.get(n)??0;o>0&&(a[e]=!1,r.set(n,o-1))}let o=[...i.filter((e,t)=>a[t]),...e],s=Array(o.length).fill(!0),c=new Set,l=n.filter(e=>{let t=String(e.message_id??``),n=t?o.findIndex((e,n)=>!c.has(n)&&String(e.message_id??``)===t):-1,r=Number(e.ts??0);return n<0&&(n=o.findIndex((t,n)=>{if(c.has(n)||t.type!==e.type||t.text!==e.text)return!1;let i=Number(t.ts??0);return Math.abs(i-r)<=5})),n>=0&&(c.add(n),s[n]=!1),!0});return[...o.filter((e,t)=>s[t]),...l].sort((e,t)=>Number(e.ts??0)-Number(t.ts??0))}function ko(e,t){if(!t.length)return e;let n=new Map(t.map(e=>[e.id,e]));return e.map(e=>{let t=n.get(e.id);return t?{...e,spend_usd:t.spend_usd,known_cost_usd:t.known_cost_usd,spend_status:t.spend_status,usage_calls:t.usage_calls,premium_requests:t.premium_requests,cost_updated_at:t.updated_at}:e})}async function Ao(e,t,n,r=``){let i=await e.createDaemon(``,t,r),a=n.trim();return{created:i,startCampaign:a?()=>e.setContinuous(i.sid,!0,a):null}}var jo=e=>e instanceof Error?e.message:String(e||`Unknown error`);function Mo({localCwd:e,notify:t,onFocusComposer:n,queryClient:r,refetchProjects:i,selectProject:a}){let[o,s]=(0,M.useState)(!1),c=(0,M.useRef)(!1);return{createDaemon:async(o,l,u)=>{if(c.current)return!1;c.current=!0,s(!0);try{let{created:s,startCampaign:c}=await Ao(R,o,l,u),d=String(s.workdir||u||``);return r.setQueryData([`projects`],t=>({local_cwd:t?.local_cwd??e,projects:[{id:s.sid,label:o||s.sid,display_name:o,objective:``,launch_cwd:d,workdir:d,last_active:Date.now()/1e3,daemon_alive:!1,daemon_pid:null,uptime_seconds:null},...(t?.projects??[]).filter(e=>e.id!==s.sid)]})),a(s.sid),i(),window.setTimeout(n,0),t(c?`info`:`success`,c?`Session created and selected. Campaign is starting in the background.`:`Session created and selected.`),c&&c().then(()=>{r.invalidateQueries({queryKey:[`snapshot`,s.sid]}),i(),t(`success`,`Campaign started.`)}).catch(e=>{t(`error`,`Session was created, but the campaign could not start: ${jo(e)}`)}),!0}catch(e){return t(`error`,`Could not create session: ${jo(e)}`),!1}finally{c.current=!1,s(!1)}},creatingDaemon:o}}var No=e=>e instanceof Error?e.message:String(e||`Unknown error`);function Po({actions:e,activeSid:t,clearProjectSelection:n,continuous:r,currentSnapshotSid:i,notify:a,refetchProjects:o,selectProject:s,setDaemonManageOpen:c}){let[l,u]=(0,M.useState)(null),d=e.startDaemon.isPending||e.stopDaemon.isPending||e.updateProject.isPending||e.deleteProject.isPending,f=(0,M.useCallback)(e=>({onSuccess:()=>a(`success`,e),onError:e=>a(`error`,No(e))}),[a]),p=(0,M.useCallback)(()=>e.startDaemon.mutate(void 0,f(`Daemon start requested.`)),[f,e.startDaemon]),m=(0,M.useCallback)(()=>e.stopDaemon.mutate(!1,f(`Pause requested; the current operation is being interrupted.`)),[f,e.stopDaemon]),h=(0,M.useCallback)(async()=>{try{return await e.startDaemon.mutateAsync(),a(`success`,`Daemon resumed.`),!0}catch(e){return a(`error`,No(e)),!1}},[e.startDaemon,a]),g=(0,M.useCallback)(async()=>{try{return await e.stopDaemon.mutateAsync(!1),a(`success`,`Daemon paused. Progress remains resumable.`),!0}catch(e){return a(`error`,No(e)),!1}},[e.stopDaemon,a]),_=(0,M.useCallback)(async n=>{if(!t)return!1;try{return await e.updateProject.mutateAsync({sid:t,name:n}),a(`success`,`Session name updated.`),!0}catch(e){return a(`error`,No(e)),!1}},[e.updateProject,t,a]),v=(0,M.useCallback)(async()=>{if(!t)return!1;try{let t=await e.deleteProject.mutateAsync();c(!1),n(`replace`);let r=Gt((await o()).data?.projects??[])[0];return r&&s(r.id,`replace`),a(`success`,t.workdir_preserved?`Session moved to recoverable trash. Files remain in ${t.workdir}.`:`Session moved to recoverable trash.`),!0}catch(e){return a(`error`,No(e)),!1}},[e.deleteProject,t,n,a,o,s,c]),y=(0,M.useCallback)(e=>{if(c(!1),e===t&&i===e){u(null),c(!0);return}u(e),s(e)},[t,i,s,c]);return(0,M.useEffect)(()=>{!l||t!==l||i!==l||(u(null),c(!0))},[t,i,l,c]),{daemonBusy:d,manageDeleteProject:v,managePauseDaemon:g,manageRenameProject:_,manageStartDaemon:h,requestDispose:(0,M.useCallback)((t,n)=>e.disposeBacklog.mutate({id:t,op:n},{onSuccess:()=>a(`success`,n===`done`?`Work marked done.`:`Work removed.`),onError:e=>a(`error`,No(e))}),[e.disposeBacklog,a]),requestManageSession:y,requestStartDaemon:p,requestStopDaemon:m,requestStopIteration:(0,M.useCallback)(t=>e.stopBacklog.mutate(t,{onSuccess:()=>a(`success`,`Iteration stopped.`),onError:e=>a(`error`,No(e))}),[e.stopBacklog,a]),toggleContinuous:(0,M.useCallback)(()=>{if(!r)return;let t=!r.enabled;e.setContinuous.mutate({enabled:t,objective:r.objective},f(t?`Continuous campaign enabled.`:`Continuous campaign stopped.`))},[f,e.setContinuous,r])}}function Fo({focusComposer:e,openHelp:t,toggleKiosk:n,togglePalette:r,toggleReasoning:i,toggleSidebarCollapse:a}){(0,M.useEffect)(()=>{let o=o=>{let s=o.target,c=s?.tagName===`INPUT`||s?.tagName===`TEXTAREA`,l=o.metaKey||o.ctrlKey;l&&o.key.toLowerCase()===`k`?(o.preventDefault(),r()):l&&o.key.toLowerCase()===`t`?(o.preventDefault(),i()):l&&o.key===`.`?(o.preventDefault(),n()):l&&o.key.toLowerCase()===`b`?(o.preventDefault(),a()):l&&o.key.toLowerCase()===`j`?(o.preventDefault(),e()):!c&&o.key===`?`?(o.preventDefault(),t()):!c&&o.key===`/`&&(o.preventDefault(),e())};return window.addEventListener(`keydown`,o),()=>window.removeEventListener(`keydown`,o)},[e,t,n,r,i,a])}var Io=e=>e instanceof Error?e.message:String(e||`Unknown error`);function Lo({activeSid:e,backlog:t,notify:n,pendingQuestions:r,refetchSnapshot:i}){let[a,o]=(0,M.useState)(!1),[s,c]=(0,M.useState)(!1),l=(0,M.useRef)(``),u=(0,M.useMemo)(()=>{let e=(t??[]).map(e=>({...e,operator_decision:e.operator_decision}));return B(r??[],e)[0]??null},[t,r]);return(0,M.useEffect)(()=>{if(!u||!e){o(!1);return}let t=`${e}:${u.id}`;l.current!==t&&(l.current=t,o(!0))},[e,u]),{answerPendingReply:async(t,r)=>{if(!(!e||!u||s)){c(!0);try{let a=u.legacy?await R.answerPending(e,u.item_id,r):await R.resolveDecision(e,u.id,t,r);if(a.resolved===!1){n(`info`,String(a.reply||`Manager needs a more specific answer.`));return}o(!1),await i(),a.daemon&&Number(a.daemon.rc??0)!==0?n(`error`,`Answer queued, but the daemon did not start: ${a.daemon.error||`operator action required`}`):n(`success`,String(a.reply||`Manager delivered your answer to the team.`))}catch(e){await i(),n(`error`,`Could not send answer: ${Io(e)}`)}finally{c(!1)}}},pendingReply:u,pendingReplyBusy:s,pendingReplyOpen:a,setPendingReplyOpen:o}}var Ro=`argus.browser.project.v1`;function zo(){try{return window.sessionStorage.getItem(Ro)}catch{return null}}function Bo(e){try{e?window.sessionStorage.setItem(Ro,e):window.sessionStorage.removeItem(Ro)}catch{}}function Vo(e,t){let n=new URL(window.location.href);e?n.searchParams.set(`project`,e):n.searchParams.delete(`project`);let r=t===`push`?`pushState`:`replaceState`;window.history[r](window.history.state,``,n.toString())}function Ho({cancelActiveMessage:e,notify:t,projects:n,projectsError:r,projectsReady:i,queryClient:a,setArtifactPath:o,setSidebarOpen:s,setTaskItemId:c}){let l=new URLSearchParams(window.location.search),[u,d]=(0,M.useState)(l.get(`project`)||zo()),f=(0,M.useRef)(u),p=(0,M.useRef)(!1);f.current=u;let m=(0,M.useCallback)(t=>{t!==f.current&&(e(),o(null),c(null)),f.current=t,d(t),Bo(t)},[e,o,c]),h=(0,M.useCallback)((e,t=`push`)=>{let n=new URLSearchParams(window.location.search).get(`project`);m(e),n!==e&&Vo(e,t)},[m]),g=(0,M.useCallback)((e=`replace`)=>{let t=new URLSearchParams(window.location.search).get(`project`);m(null),t!=null&&Vo(null,e)},[m]),_=(0,M.useCallback)(e=>{a.prefetchQuery({queryKey:[`snapshot`,e],queryFn:({signal:t})=>R.prefetchSnapshot(e,t),staleTime:3e3})},[a]);return(0,M.useEffect)(()=>{if(!i)return;let e=p.current,r=Jt(n,f.current,e);if(!e&&(p.current=!0,r.id===f.current?Bo(r.id):m(r.id),new URLSearchParams(window.location.search).get(`project`)!==r.id&&Vo(r.id,`replace`),r.recovered)){let e=n.find(e=>e.id===r.id);t(`info`,e?`Project “${r.requested}” was not found. Switched to ${e.label||e.id}.`:`Project “${r.requested}” was not found. Create a daemon to continue.`)}},[m,t,n,i]),(0,M.useEffect)(()=>{let e=()=>{let e=new URLSearchParams(window.location.search).get(`project`);if(s(!1),!e){m(null);return}if(!i){m(e);return}let r=qt(n,e);if(m(r.id),r.recovered){Vo(r.id,`replace`);let e=n.find(e=>e.id===r.id);t(`info`,e?`Project “${r.requested}” was not found. Switched to ${e.label||e.id}.`:`Project “${r.requested}” was not found. Create a daemon to continue.`)}};return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[m,t,n,i,s]),{activateProject:m,activeSid:i?u&&n.some(e=>e.id===u)?u:null:r?u:null,clearProjectSelection:g,prefetchProject:_,selectProject:h,sid:u,sidRef:f}}function Uo(e,t){let n=localStorage.getItem(e);return n==null?t:n===`true`}function Wo(){let e=new URLSearchParams(window.location.search),[t,n]=(0,M.useState)(e.get(`kiosk`)===`1`),[r,i]=(0,M.useState)(()=>Uo(`argus.reasoning.visible.v1`,!1)),[a,o]=(0,M.useState)(()=>{let e=localStorage.getItem(`argus.workspace.view`);return e===`mission`||e===`workbench`?e:`activity`}),[s,c]=(0,M.useState)(`activity`),[l,u]=(0,M.useState)(()=>Uo(`argus.preview.expanded.v5`,!0)),[d,f]=(0,M.useState)(()=>{let e=Number(localStorage.getItem(`argus.sidebar.width.v2`)||256);return Number.isFinite(e)?Math.max(220,Math.min(400,e)):256}),[p,m]=(0,M.useState)(()=>{let e=Number(localStorage.getItem(`argus.preview.width.v2`)||440);return Number.isFinite(e)?Math.max(320,Math.min(600,e)):440}),[h,g]=(0,M.useState)(!1),[_,v]=(0,M.useState)(()=>Uo(`argus.sidebar.expanded.v4`,!0)),[y,b]=(0,M.useState)(()=>{let e=localStorage.getItem(`argus.theme`);return e===`light`||e===`dark`?e:null}),[x,S]=(0,M.useState)(()=>window.matchMedia(`(prefers-color-scheme: dark)`).matches),C=y??(x?`dark`:`light`),w=(0,M.useRef)(null),T=(0,M.useRef)(null);(0,M.useEffect)(()=>{localStorage.setItem(`argus.sidebar.expanded.v4`,String(_)),localStorage.setItem(`argus.preview.expanded.v5`,String(l)),localStorage.setItem(`argus.sidebar.width.v2`,String(d)),localStorage.setItem(`argus.preview.width.v2`,String(p))},[_,d,l,p]),(0,M.useEffect)(()=>{localStorage.setItem(`argus.workspace.view`,a)},[a]),(0,M.useEffect)(()=>{localStorage.setItem(`argus.reasoning.visible.v1`,String(r))},[r]),(0,M.useEffect)(()=>{let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>S(e.matches);return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),(0,M.useEffect)(()=>{document.documentElement.dataset.theme=C},[C]),(0,M.useEffect)(()=>{let e=()=>{document.documentElement.dataset.pageVisible=String(!document.hidden)};return e(),document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]);let ee=(0,M.useCallback)(()=>{let e=C===`light`?`dark`:`light`;b(e),localStorage.setItem(`argus.theme`,e)},[C]),te=(0,M.useCallback)((e,t)=>{let n=w.current;if(!n)return;t.preventDefault();let r=n.getBoundingClientRect();document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`;let i=t=>{T.current!=null&&window.cancelAnimationFrame(T.current),T.current=window.requestAnimationFrame(()=>{if(e===`left`){let e=l?p+8:56,n=Math.max(220,Math.min(400,r.width-e-360-8));f(Math.max(220,Math.min(n,t.clientX-r.left)))}else{let e=_?d+8:56,n=Math.max(320,Math.min(600,r.width-e-360-8));m(Math.max(320,Math.min(n,r.right-t.clientX)))}})},a=()=>{T.current!=null&&window.cancelAnimationFrame(T.current),T.current=null,document.body.style.cursor=``,document.body.style.userSelect=``,window.removeEventListener(`pointermove`,i),window.removeEventListener(`pointerup`,a),window.removeEventListener(`pointercancel`,a)};window.addEventListener(`pointermove`,i),window.addEventListener(`pointerup`,a,{once:!0}),window.addEventListener(`pointercancel`,a,{once:!0})},[_,d,l,p]);return(0,M.useEffect)(()=>{let e=()=>{if(window.innerWidth<1024||!w.current)return;let e=w.current.clientWidth,t=_?d:56,n=l?p:56,r=(_?8:0)+(l?8:0),i=Math.max(540,e-360-r);if(t+n<=i)return;let a=l?Math.max(320,Math.min(p,i-t)):n,o=_?Math.max(220,Math.min(d,i-a)):t;o+a>i&&l&&(a=Math.max(320,i-o)),_&&f(o),l&&m(a)};return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[_,d,l,p]),{cycleTheme:ee,kiosk:t,leftPanelOpen:_,leftWidth:d,mobileView:s,resizeSidebar:te,rightPanelOpen:l,rightWidth:p,setKiosk:n,setLeftPanelOpen:v,setLeftWidth:f,setMobileView:c,setRightPanelOpen:u,setRightWidth:m,setShowReasoning:i,setSidebarOpen:g,setWorkspaceView:o,shellRef:w,showReasoning:r,sidebarOpen:h,themeMode:C,workspaceView:a}}function Go({error:e,onRetry:t}){let{t:n}=q(),r=Ye(e),i=e instanceof N;return!r&&!i?null:(0,K.jsxs)(`div`,{role:`alert`,className:`fixed left-1/2 top-3 z-[100] flex w-[min(92vw,42rem)] -translate-x-1/2 items-start gap-3 rounded-xl border border-err/50 bg-panel/95 px-4 py-3 text-left text-sm text-ink shadow-xl backdrop-blur`,children:[(0,K.jsx)(`span`,{"aria-hidden":`true`,className:`mt-0.5 font-mono font-bold text-err`,children:`!`}),(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsx)(`strong`,{className:`block text-err`,children:n(r?`connection.pairingTitle`:`connection.unreachableTitle`)}),(0,K.jsx)(`span`,{className:`mt-0.5 block text-xs leading-relaxed text-ink-dim`,children:n(r?`connection.pairingDetail`:`connection.unreachableDetail`)})]}),r?null:(0,K.jsx)(`button`,{type:`button`,onClick:t,className:`shrink-0 rounded-md border border-err/40 px-2.5 py-1 text-xs text-err hover:bg-err/10`,children:n(`common.retry`)})]})}var Ko=0,qo=(0,M.lazy)(async()=>({default:(await Yr(()=>import(`./ResearchWorkbenchPanel-BnMJwuZz.js`),__vite__mapDeps([2,1,3,4,5,6]))).ResearchWorkbenchPanel}));function Jo(){let{locale:e,t}=q(),n=se(),r=pr(),i=mr(),a=(0,M.useMemo)(()=>Gt(ko(r.data?.projects??[],i.data?.projects??[])),[i.data?.projects,r.data?.projects]),s=r.data?.local_cwd??``,c=[r.error,i.error].find(e=>Xe(e)),[l,u]=(0,M.useState)(`none`),{cycleTheme:d,kiosk:f,leftPanelOpen:p,leftWidth:m,mobileView:h,resizeSidebar:g,rightPanelOpen:_,rightWidth:v,setKiosk:y,setLeftPanelOpen:b,setLeftWidth:x,setMobileView:S,setRightPanelOpen:w,setRightWidth:T,setShowReasoning:ee,setSidebarOpen:te,setWorkspaceView:E,shellRef:ne,showReasoning:re,sidebarOpen:ie,themeMode:ae,workspaceView:D}=Wo(),[O,oe]=(0,M.useState)(()=>D===`mission`?`mission`:`activity`),[ce,k]=(0,M.useState)(D===`workbench`);(0,M.useEffect)(()=>{if(D===`workbench`){k(!0);return}oe(D)},[D]),vo();let[le,A]=(0,M.useState)(0),[ue,de]=(0,M.useState)(``),[fe,j]=(0,M.useState)(!1),[pe,me]=(0,M.useState)(0),[he,ge]=(0,M.useState)(!1),[_e,ve]=(0,M.useState)([]),[ye,be]=(0,M.useState)(``),[xe,Se]=(0,M.useState)(!1),[Ce,we]=(0,M.useState)(0),[Te,Ee]=(0,M.useState)([]),[De,Oe]=(0,M.useState)(0),[ke,Ae]=(0,M.useState)(null),[je,Me]=(0,M.useState)(null),[Ne,Pe]=(0,M.useState)(!1),[Fe,Ie]=(0,M.useState)(!1),Le=(0,M.useRef)(!1),Re=(0,M.useRef)(null),ze=(0,M.useRef)(0),[Be,Ve]=(0,M.useState)(null),[He,Ue]=(0,M.useReducer)(wo,Co),[We,Ge]=(0,M.useState)(`all`),[Ke,qe]=(0,M.useState)(``),Je=(0,M.useCallback)(()=>Ve(null),[]),N=(0,M.useCallback)((e,t)=>{Ve({id:++Ko,tone:e,message:t})},[]),Ye=(0,M.useCallback)(()=>{let e=!!Re.current;return ze.current+=1,Re.current?.controller.abort(),Re.current=null,ge(!1),be(``),Se(!1),we(0),Ee([]),Oe(0),e},[]),Ze=(0,M.useCallback)(()=>{Ye()&&N(`info`,`Stopped waiting for this reply. Server-side work may still finish in the project timeline.`)},[Ye,N]),{activeSid:P,clearProjectSelection:Qe,prefetchProject:F,selectProject:$e,sidRef:et}=Ho({cancelActiveMessage:Ye,notify:N,projects:a,projectsError:r.isError,projectsReady:r.isSuccess,queryClient:n,setArtifactPath:Ae,setSidebarOpen:te,setTaskItemId:Me});(0,M.useEffect)(()=>()=>{ze.current+=1,Re.current?.controller.abort(),Re.current=null},[]);let tt=(0,M.useCallback)(e=>{let t=(e||``).trim(),n=et.current;!t||!n||fe||(j(!0),R.rewritePrompt(n,t).then(e=>{if(j(!1),e.error||!e.rewritten.trim()){N(`error`,`Rewrite failed: ${e.error||`empty rewrite`} — your prompt is unchanged`);return}de(e.rewritten),A(e=>e+1);let t=e.questions.length?` Manager asks: ${e.questions.join(` · `)}`:``;N(`success`,`Prompt rewritten — review it, then send.${t}`)},e=>{j(!1),N(`error`,`Rewrite failed: ${ai(e)} — your prompt is unchanged`)}))},[N,fe,et]),{createDaemon:nt,creatingDaemon:I}=Mo({localCwd:s,notify:N,onFocusComposer:()=>A(e=>e+1),queryClient:n,refetchProjects:r.refetch,selectProject:$e}),rt=hr(P),L=rt.data,it=L?.session.id===P?P:null,at=L?.continuous,ot=xr(it,!0),st=Cr(it,O===`mission`),{events:ct,connected:lt}=Mr(it,He.reconnectKey),ut=(0,M.useMemo)(()=>kr(ct),[ct]),z=(0,M.useMemo)(()=>jr(ct),[ct]);(0,M.useEffect)(()=>{!it||!ut||n.invalidateQueries({queryKey:[`artifacts`,it],exact:!0})},[ut,it,n]),(0,M.useEffect)(()=>{!it||!z||n.invalidateQueries({queryKey:[`snapshot`,it],exact:!0})},[it,n,z]);let dt=(0,M.useMemo)(()=>Fn(ct),[ct]),ft=br(it,O===`activity`,120),pt=gr(P,20,l===`inspector`),{answerPendingReply:mt,pendingReply:ht,pendingReplyBusy:B,pendingReplyOpen:V,setPendingReplyOpen:gt}=Lo({activeSid:P,backlog:L?.backlog,notify:N,pendingQuestions:L?.pending_questions,refetchSnapshot:rt.refetch}),_t=(0,M.useMemo)(()=>Oo(ct,ft.data??[],_e),[ct,_e,ft.data]),vt=(0,M.useMemo)(()=>L?Dn(L,_t,ot.data??[]):null,[_t,ot.data,L]),yt=(0,M.useRef)(_t);yt.current=_t,(0,M.useEffect)(()=>{Ge(`all`),qe(``),ve([]),Ue({kind:`reset`})},[it]);let bt=Tr(P,L?.daemon_commands?.revision),{daemonBusy:xt,manageDeleteProject:St,managePauseDaemon:Ct,manageRenameProject:wt,manageStartDaemon:Tt,requestDispose:Et,requestManageSession:Dt,requestStartDaemon:Ot,requestStopDaemon:kt,requestStopIteration:At,toggleContinuous:Mt}=Po({actions:bt,activeSid:P,clearProjectSelection:Qe,continuous:at,currentSnapshotSid:L?.session.id,notify:N,refetchProjects:r.refetch,selectProject:$e,setDaemonManageOpen:Ie}),Nt=(0,M.useCallback)(async e=>{if(!P)return;let t=await bt.updateProject.mutateAsync({sid:P,name:e});N(`success`,`Renamed to "${t.name}".`)},[bt.updateProject,P,N]),Pt=(0,M.useMemo)(()=>bo({activeSid:P,activityEventsRef:yt,notify:N,onClearEvents:e=>Ue({kind:`clear`,offset:e}),onDispose:Et,onOpenConfig:()=>u(`config`),onOpenDoctor:()=>u(`doctor`),onOpenHelp:()=>u(`help`),onOpenIdentity:()=>u(`identity`),onOpenInspector:()=>u(`inspector`),onOpenNewDaemon:()=>Pe(!0),onOpenOperations:()=>u(`operations`),onOpenSidebar:()=>te(!0),onReconnectEvents:()=>Ue({kind:`reconnect`}),onRenameProject:Nt,onRewriteDraft:tt,onSelectProject:$e,onSetArtifactPath:Ae,onSetEventFilter:Ge,onSetEventQuery:qe,onSetTaskItemId:Me,onSetWorkspaceView:E,onShowArtifacts:()=>w(!0),onStopIteration:At,onStopWaiting:Ze,refetchSnapshot:rt.refetch}),[P,N,Nt,Et,At,$e,rt.refetch,Ze,E]);Fo({focusComposer:()=>A(e=>e+1),openHelp:()=>u(`help`),toggleKiosk:()=>y(e=>!e),togglePalette:()=>u(e=>e===`palette`?`none`:`palette`),toggleReasoning:()=>ee(e=>!e),toggleSidebarCollapse:()=>b(e=>!e)});let Ft=async(e,n=[])=>{let r=P;if(!r||Le.current||Re.current)return!1;Le.current=!0;let i,a;try{if(!n.length){let t=await yo(e,Pt);if(t.kind===`handled`)return!0;if(t.kind===`error`)return N(`error`,t.message),!1}i=++ze.current,a=new AbortController,Re.current={id:i,sid:r,controller:a}}finally{Le.current=!1}let o=()=>{let e=Re.current;return!!(e&&e.id===i&&e.sid===r&&et.current===r&&!a.signal.aborted)},s=()=>{Re.current?.id===i&&(Re.current=null,ge(!1),be(``),Se(!1),we(0),Oe(0),Ee([]))};ge(!0),be(n.length?t(`chat.uploadingAttachments`):``),Se(!1),we(0),Ee([]),Oe(Date.now());let c=[];if(n.length)try{let e=await R.uploadAttachments(r,n,a.signal);if(!o())return!1;c=e.attachments.map(e=>({attachment_id:e.attachment_id}))}catch(e){return o()&&(N(`error`,t(`chat.attachmentUploadFailed`,{error:ai(e)})),s()),!1}ve(t=>[...t,Eo(r,i,e)]);let l=(e,t=``,n=`auto`)=>{!o()||typeof e!=`string`||!e.trim()||ve(a=>Do(a,r,i,e,t,Date.now(),n))},u=e=>{if(!o())return;let t=e.daemon&&typeof e.daemon==`object`?e.daemon:null,n=typeof e.reply==`string`?e.reply:null;t?.admission_required?N(`error`,n||`Task queued, but all daemon slots are busy: ${String(t.error||`operator action required`)}`):t&&Number(t.rc??0)!==0?N(`error`,n||`Task queued, but executor did not start: ${String(t.error||`unknown error`)}`):n&&N(`success`,n),rt.refetch?.()},d=e=>{o()&&So(e,{dispatchTask:u,notifyError:e=>N(`error`,e),refetchTranscript:()=>{ft.refetch()}})};return(async()=>{let t=!1,n=null,i=[];try{try{await R.messageStream(r,e,{onPhase:(e,t,n)=>{o()&&(be(e),Se(n.heartbeat),we(n.quietS),i=Kn(i,{label:e,role:t,kind:n.kind,detail:n.detail,heartbeat:n.heartbeat,quietS:n.quietS}),Ee(i))},onDelta:(e,n,r)=>{o()&&(t=!0,i=qn(i),Ee(i),be(``),Se(!1),we(0),l(e,n,r===`append`||r===`snapshot`?r:`auto`))},onDone:e=>{o()&&(l(e.reply,``,`snapshot`),d(e))},onError:e=>{o()&&(n=e)}},{signal:a.signal,attachments:c})}catch(e){o()&&(n=e)}if(!o())return;n&&N(`error`,oi(n,t))}finally{s()}})(),!0},It=(0,M.useRef)(Ft);It.current=Ft;let Lt=(0,M.useMemo)(()=>{let n=sa(jt,e=>{It.current(e)},e=>{de(e),A(e=>e+1)},e),r=[...f?[]:[{id:`new`,label:t(`palette.newDaemon`),hint:`+`,group:t(`palette.view`),run:()=>Pe(!0)}],{id:`transcript`,label:t(`palette.openTranscript`),hint:`/transcript`,group:t(`palette.view`),run:()=>u(`transcript`)},{id:`inspector`,label:t(`palette.openProject`),hint:t(`palette.projectHint`),group:t(`palette.view`),run:()=>u(`inspector`)},{id:`operations`,label:t(`palette.openOperations`),hint:t(`palette.operationsHint`),group:t(`palette.view`),run:()=>u(`operations`)},{id:`help`,label:t(`help.title`),hint:`?`,group:t(`palette.view`),run:()=>u(`help`)},{id:`reasoning`,label:t(re?`palette.hideReasoning`:`palette.showReasoning`),hint:`⌘T`,group:t(`palette.view`),run:()=>ee(e=>!e)},{id:`kiosk`,label:t(f?`palette.exitKiosk`:`palette.enterKiosk`),hint:`⌘.`,group:t(`palette.view`),run:()=>y(e=>!e)}],i=f?[]:[{id:`message`,label:t(`palette.messageArgus`),hint:`/`,group:t(`palette.action`),run:()=>A(e=>e+1)},...he?[{id:`cancel-message`,label:t(`palette.stopWaiting`),hint:`Esc`,group:t(`palette.action`),run:Ze}]:[],...at?[{id:`continuous`,label:at.enabled?t(`palette.stopContinuous`):t(`palette.startContinuous`),group:t(`palette.action`),run:Mt}]:[],...L?.daemon.control_available===!1?[]:[L?.daemon.alive?{id:`stop`,label:t(`palette.stopDaemon`),group:t(`palette.action`),run:kt}:{id:`start`,label:t(`palette.startDaemon`),group:t(`palette.action`),run:Ot}]],o=a.map(e=>({id:`p-${e.id}`,label:e.label||e.id,hint:e.daemon_alive?`● ${t(`common.live`)}`:`○`,keywords:`${e.id} ${e.display_name??``} ${e.objective} ${e.daemon_alive?`live running`:`stopped idle`}`,group:t(`palette.project`),run:()=>$e(e.id)}));return[...r,...i,...n,...o]},[a,L?.daemon.alive,f,re,at?.enabled,he,Ze,e,t]);return(0,K.jsxs)(`div`,{ref:ne,className:`workbench-shell ambient-canvas flex h-screen h-[100dvh] w-screen max-w-full overflow-hidden text-ink`,children:[(0,K.jsx)(Go,{error:c,onRetry:()=>{r.refetch(),i.refetch()}}),!f&&ie?(0,K.jsx)(`button`,{type:`button`,"aria-label":t(`common.closeSessions`),onClick:()=>te(!1),className:`fixed inset-0 z-30 bg-black/40 lg:hidden`}):null,f?null:(0,K.jsx)(Ka,{projects:a,activeId:P,localCwd:s,onSelect:e=>{$e(e),te(!1)},onPrefetch:F,onManage:Dt,onOpenPanel:e=>u(e),onNew:()=>Pe(!0),loading:r.isLoading,creating:I,error:r.isError?ai(r.error):void 0,onRetry:()=>void r.refetch(),mobileOpen:ie,collapsed:!p,onToggleCollapse:()=>b(e=>!e),themeMode:ae,onCycleTheme:d,expandedWidth:m}),!f&&p?(0,K.jsx)(io,{label:t(`common.resizeSessions`),value:m,min:220,max:400,onPointerDown:e=>g(`left`,e),onReset:()=>x(256),onNudge:e=>x(t=>Math.max(220,Math.min(400,t+e)))}):null,(0,K.jsx)(`main`,{className:`flex min-w-0 flex-1 overflow-x-hidden`,children:L?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`section`,{className:`${h===`activity`?`flex`:`hidden`} glass-panel glass-panel--main h-full min-w-0 flex-1 flex-col lg:flex`,children:[(0,K.jsx)(Gr,{snap:L,streamOk:lt,onStart:Ot,onStop:kt,onManage:()=>Ie(!0),busy:xt,snapshotStale:rt.isError,readOnly:f,missionView:vt}),(0,K.jsxs)(`div`,{className:`flex h-10 shrink-0 items-center gap-1 border-b border-line/60 px-3`,children:[(0,K.jsxs)(`div`,{className:`workspace-tabs`,"data-active":D,children:[(0,K.jsx)(`span`,{className:`workspace-tab-indicator`,"aria-hidden":`true`}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>E(`mission`),className:`workspace-tab`,"data-selected":D===`mission`,children:t(`mobile.mission`)}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>E(`activity`),className:`workspace-tab`,"data-selected":D===`activity`,children:t(`mobile.activity`)}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>E(`workbench`),className:`workspace-tab`,"data-selected":D===`workbench`,children:t(`mobile.workbench`)})]}),D===`mission`?(0,K.jsx)(`span`,{className:`ml-auto hidden max-w-72 truncate text-[10px] text-ink-faint sm:block`,children:vt?.active_role?t(`mission.roleActive`,{role:vt.active_role}):t(`mission.overview`)}):(0,K.jsx)(`span`,{className:`ml-auto`}),f?null:(0,K.jsx)(`button`,{type:`button`,onClick:()=>u(`operations`),className:`rounded border border-line/60 px-2 py-1 text-[10px] text-ink-faint hover:border-blue/50 hover:text-blue`,children:t(`mission.operations`)})]}),(0,K.jsxs)(`div`,{className:`${D===`workbench`?`hidden`:`flex`} min-h-0 flex-1 flex-col`,children:[(0,K.jsx)(Sa,{alert:dt}),O===`mission`&&vt?(0,K.jsx)(lo,{view:vt,gitDiff:st.data,onOpenArtifact:Ae}):(0,K.jsx)(Pi,{events:_t,connected:lt,showReasoning:re,onToggleReasoning:()=>ee(e=>!e),embedded:!0,filter:We,query:Ke,skipFirst:He.skipFirst}),f?null:(0,K.jsx)(`div`,{className:`composer-dock shrink-0 px-4 pt-3`,children:(0,K.jsxs)(`div`,{className:`mx-auto w-full max-w-full lg:max-w-[61.8vw]`,children:[(0,K.jsx)(ba,{questions:L.pending_questions??[],backlog:L.backlog,onAnswer:()=>gt(!0)}),(0,K.jsx)(ia,{value:ue,onChange:de,onSend:Ft,onCancel:Ze,disabled:!P,pending:he,focusSignal:le,embedded:!0,phase:ye,heartbeat:xe,quietS:Ce,steps:Te,startedAt:De,onRewrite:tt,rewriting:fe,slashSelection:pe,onSlashSelectionChange:me},P||`no-session`)]})})]}),ce&&P?(0,K.jsx)(`div`,{className:`${D===`workbench`?`flex`:`hidden`} min-h-0 flex-1`,children:(0,K.jsx)(M.Suspense,{fallback:(0,K.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center text-xs text-ink-faint`,children:t(`common.loading`)}),children:(0,K.jsx)(qo,{sid:P,active:D===`workbench`})})}):null]}),_?(0,K.jsx)(io,{label:t(`common.resizePreview`),value:v,min:320,max:600,onPointerDown:e=>g(`right`,e),onReset:()=>T(440),onNudge:e=>T(t=>Math.max(320,Math.min(600,t-e)))}):null,(0,K.jsxs)(`aside`,{style:{"--preview-width":`${v}px`},className:`${h===`preview`?`flex`:`hidden`} relative min-w-0 flex-1 flex-col overflow-hidden border-l border-line/60 bg-panel transition-[width] duration-[250ms] ease-panel lg:flex lg:flex-none ${_?`lg:w-[var(--preview-width)]`:`lg:w-14`}`,children:[(0,K.jsx)(`div`,{className:`lg:hidden`,children:(0,K.jsx)(Gr,{snap:L,streamOk:lt,onStart:Ot,onStop:kt,onManage:()=>Ie(!0),busy:xt,snapshotStale:rt.isError,readOnly:f,missionView:vt})}),(0,K.jsx)(Va,{sid:it,artifacts:ot.data,error:ot.isError,onExpand:Ae,className:`min-h-0 flex-1 mobile-scroll-region ${_?`lg:flex`:`lg:hidden`}`,embedded:!0,onCollapse:()=>w(!1),missionView:vt,activityEvents:_t}),_?null:(0,K.jsx)(`div`,{className:`hidden h-12 items-center justify-center border-b border-line/50 text-ink-faint lg:flex`,children:(0,K.jsx)(`button`,{type:`button`,onClick:()=>w(!0),"aria-label":t(`common.expandPreview`),title:t(`common.expandPreview`),className:`flex h-8 w-8 items-center justify-center rounded-md border border-line/50 bg-bg/40 hover:border-blue/50 hover:text-ink`,children:(0,K.jsx)(o,{icon:C,className:`h-3.5 w-3.5`})})})]})]}):(0,K.jsx)(go,{loading:r.isLoading||!!(P&&rt.isLoading),hasProjects:a.length>0,error:r.isError&&a.length===0?ai(r.error):rt.isError&&!L?ai(rt.error):void 0,onRetry:()=>{r.refetch(),P&&rt.refetch()},onNew:()=>Pe(!0),onChoose:()=>te(!0),canCreate:!f})}),(0,K.jsx)(la,{open:l===`palette`,onClose:()=>u(`none`),items:Lt}),(0,K.jsx)(da,{open:l===`help`,onClose:()=>u(`none`)}),P&&(0,K.jsx)(_a,{sid:P,open:l===`doctor`,onClose:()=>u(`none`)}),P&&(0,K.jsx)(Z,{sid:P,open:l===`config`,onClose:()=>u(`none`)}),P&&(0,K.jsx)(va,{sid:P,open:l===`identity`,onClose:()=>u(`none`)}),P&&(0,K.jsx)(ya,{sid:P,open:l===`transcript`,onClose:()=>u(`none`)}),P&&L?(0,K.jsx)(eo,{open:l===`inspector`,snap:L,journal:pt.data??[],busy:bt.disposeBacklog.isPending||bt.stopBacklog.isPending,onClose:()=>u(`none`),onDispose:Et,onStop:At,onInspect:Me}):null,P&&L?(0,K.jsx)(po,{open:l===`operations`,sid:P,snap:L,onClose:()=>u(`none`),onChanged:()=>{rt.refetch(),r.refetch()},onRestored:async e=>{await r.refetch(),$e(e)}}):null,(0,K.jsx)(Oa,{sid:P,path:ke,onClose:()=>Ae(null)}),(0,K.jsx)(ro,{sid:P,itemId:je,onClose:()=>Me(null),onDone:e=>Et(e,`done`),onSkip:e=>Et(e,`rm`),onStop:At,busy:bt.disposeBacklog.isPending||bt.stopBacklog.isPending,readOnly:f}),(0,K.jsx)(Ua,{open:Ne,busy:I,onClose:()=>Pe(!1),onCreate:nt}),(0,K.jsx)(xa,{reply:ht,open:V,busy:B,onClose:()=>gt(!1),onSubmit:mt}),P&&L?(0,K.jsx)(Wa,{open:Fe,sid:P,name:L.session.display_name||``,alive:L.daemon.alive,controlAvailable:L.daemon.control_available!==!1,busy:xt,onClose:()=>Ie(!1),onRename:wt,onStart:Tt,onPause:Ct,onDelete:St}):null,(0,K.jsx)(Ha,{notice:Be,onClose:Je}),L&&!f?(0,K.jsx)(_o,{active:h===`preview`?`preview`:D,onSelect:e=>{if(e===`preview`){S(`preview`);return}S(`activity`),E(e)},onOpenSessions:()=>te(!0)}):null]})}function Yo({onDone:e}){let{t}=q(),n=(0,M.useRef)(!1),r=(0,M.useCallback)(()=>{n.current||(n.current=!0,e())},[e]);return(0,M.useEffect)(()=>{let e=window.setTimeout(r,330),t=()=>r();return window.addEventListener(`keydown`,t,{once:!0}),()=>{window.clearTimeout(e),window.removeEventListener(`keydown`,t)}},[r]),(0,K.jsxs)(`div`,{role:`status`,"aria-label":t(`splash.starting`),onClick:r,onAnimationEnd:e=>{e.currentTarget===e.target&&r()},className:`argus-web-splash`,children:[(0,K.jsx)(`div`,{className:`argus-web-splash-logo argus-web-splash-logo-full`,"aria-hidden":`true`,children:(0,K.jsx)(wi,{size:72})}),(0,K.jsx)(`div`,{className:`argus-web-splash-logo argus-web-splash-logo-compact`,"aria-hidden":`true`,children:(0,K.jsx)(Si,{size:112})})]})}He();var Xo=new Ee({defaultOptions:{queries:{staleTime:3e3,retry:dr,refetchOnWindowFocus:!1}}});function Zo(){let[e,t]=(0,M.useState)(!0);return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Jo,{}),e?(0,K.jsx)(Yo,{onDone:()=>t(!1)}):null]})}De.createRoot(document.getElementById(`root`)).render((0,K.jsx)(M.StrictMode,{children:(0,K.jsx)(de,{client:Xo,children:(0,K.jsx)(Hr,{children:(0,K.jsx)(Zo,{})})})}));export{ot as a,Ge as i,q as n,P as o,We as r,Yr as t}; \ No newline at end of file diff --git a/frontend/web/dist/assets/pdf-7sVwyM5i.js b/frontend/web/dist/assets/pdf-CBJhoU3W.js similarity index 99% rename from frontend/web/dist/assets/pdf-7sVwyM5i.js rename to frontend/web/dist/assets/pdf-CBJhoU3W.js index 9d9c4028..64523593 100644 --- a/frontend/web/dist/assets/pdf-7sVwyM5i.js +++ b/frontend/web/dist/assets/pdf-CBJhoU3W.js @@ -1,4 +1,4 @@ -import{t as e}from"./index-BoGCagzS.js";var t=typeof process==`object`&&process+``==`[object process]`&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!==`browser`),n=[1/0,1/0,-1/0,-1/0],r=new Float32Array(n),i=[.001,0,0,.001,0,0],a=`http://www.w3.org/2000/svg`,o={ANY:1,DISPLAY:2,PRINT:4,SAVE:8,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,IS_EDITING:128,OPLIST:256},s={DISABLE:0,ENABLE:1,ENABLE_FORMS:2,ENABLE_STORAGE:3},c=`pdfjs_internal_id_`,l=`pdfjs_internal_editor_`,u={DISABLE:-1,NONE:0,FREETEXT:3,HIGHLIGHT:9,STAMP:13,INK:15,POPUP:16,SIGNATURE:101,COMMENT:102},d={RESIZE:1,CREATE:2,FREETEXT_SIZE:11,FREETEXT_COLOR:12,FREETEXT_OPACITY:13,INK_COLOR:21,INK_THICKNESS:22,INK_OPACITY:23,INK_COLOR_AND_OPACITY:24,HIGHLIGHT_COLOR:31,HIGHLIGHT_THICKNESS:32,HIGHLIGHT_FREE:33,HIGHLIGHT_SHOW_ALL:34,DRAW_STEP:41},f={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},p={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},m={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},h={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26,RICHMEDIA:27},g={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5},_={ERRORS:0,WARNINGS:1,INFOS:5},v={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91,setStrokeTransparent:92,setFillTransparent:93,rawFillPath:94},y={moveTo:0,lineTo:1,curveTo:2,quadraticCurveTo:3,closePath:4},b={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},x=_.WARNINGS;function S(e){Number.isInteger(e)&&(x=e)}function C(){return x}function w(e){x>=_.INFOS&&console.info(`Info: ${e}`)}function T(e){x>=_.WARNINGS&&console.warn(`Warning: ${e}`)}function E(e){throw Error(e)}function D(e,t){e||E(t)}function O(e){switch(e?.protocol){case`http:`:case`https:`:case`ftp:`:case`mailto:`:case`tel:`:return!0;default:return!1}}function k(e,t=null,n=null){if(!e)return null;if(n&&typeof e==`string`&&(n.addDefaultProtocol&&e.startsWith(`www.`)&&e.match(/\./g)?.length>=2&&(e=`http://${e}`),n.tryConvertEncoding))try{e=se(e)}catch{}let r=t?URL.parse(e,t):URL.parse(e);return O(r)?r:null}function A(e,t,n=!1){let r=URL.parse(e);return r?(r.hash=t,r.href):n&&k(e,`http://example.com`)?e.split(`#`,1)[0]+`${t?`#${t}`:``}`:``}function j(e){return e.substring(e.lastIndexOf(`/`)+1)}function M(e,t,n,r=!1){return Object.defineProperty(e,t,{value:n,enumerable:!r,configurable:!0,writable:!1}),n}var N=function(){function e(e,t){this.message=e,this.name=t}return e.prototype=Error(),e.constructor=e,e}(),ee=class extends N{constructor(e,t){super(e,`PasswordException`),this.code=t}},te=class extends N{constructor(e,t){super(e,`UnknownErrorException`),this.details=t}},ne=class extends N{constructor(e){super(e,`InvalidPDFException`)}},re=class extends N{constructor(e,t,n){super(e,`ResponseException`),this.status=t,this.missing=n}},ie=class extends N{constructor(e){super(e,`FormatError`)}},P=class extends N{constructor(e){super(e,`AbortException`)}};function ae(e){(typeof e!=`object`||e?.length===void 0)&&E(`Invalid argument for bytesToString`);let t=e.length,n=8192;if(t`u`)return M(this,`isAlphaColorInputSupported`,!1);let e=document.createElement(`input`);return e.type=`color`,e.setAttribute(`alpha`,``),e.value=`#ff000080`,M(this,`isAlphaColorInputSupported`,e.value!==`#ff0000`)}static get isBackdropFilterSupported(){return M(this,`isBackdropFilterSupported`,typeof CSS<`u`&&CSS.supports(`backdrop-filter`,`blur(1px)`))}},I=class{static get hexNums(){return M(this,`hexNums`,Array.from(Array(256).keys(),e=>e.toString(16).padStart(2,`0`)))}static makeHexColor(e,t,n){return`#${this.hexNums[e]}${this.hexNums[t]}${this.hexNums[n]}`}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static multiplyByDOMMatrix(e,t){return[e[0]*t.a+e[2]*t.b,e[1]*t.a+e[3]*t.b,e[0]*t.c+e[2]*t.d,e[1]*t.c+e[3]*t.d,e[0]*t.e+e[2]*t.f+e[4],e[1]*t.e+e[3]*t.f+e[5]]}static applyTransform(e,t,n=0){let r=e[n],i=e[n+1];e[n]=r*t[0]+i*t[2]+t[4],e[n+1]=r*t[1]+i*t[3]+t[5]}static applyTransformToBezier(e,t,n=0){let r=t[0],i=t[1],a=t[2],o=t[3],s=t[4],c=t[5];for(let t=0;t<6;t+=2){let l=e[n+t],u=e[n+t+1];e[n+t]=l*r+u*a+s,e[n+t+1]=l*i+u*o+c}}static applyInverseTransform(e,t){let n=e[0],r=e[1],i=t[0]*t[3]-t[1]*t[2];e[0]=(n*t[3]-r*t[2]+t[2]*t[5]-t[4]*t[3])/i,e[1]=(-n*t[1]+r*t[0]+t[4]*t[1]-t[5]*t[0])/i}static axialAlignedBoundingBox(e,t,n){let r=t[0],i=t[1],a=t[2],o=t[3],s=t[4],c=t[5],l=e[0],u=e[1],d=e[2],f=e[3],p=r*l+s,m=p,h=r*d+s,g=h,_=o*u+c,v=_,y=o*f+c,b=y;if(i!==0||a!==0){let e=i*l,t=i*d,n=a*u,r=a*f;p+=n,g+=n,h+=r,m+=r,_+=e,b+=e,y+=t,v+=t}n[0]=Math.min(n[0],p,h,m,g),n[1]=Math.min(n[1],_,y,v,b),n[2]=Math.max(n[2],p,h,m,g),n[3]=Math.max(n[3],_,y,v,b)}static inverseTransform(e){let t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static singularValueDecompose2dScale(e,t){let n=e[0],r=e[1],i=e[2],a=e[3],o=n**2+r**2,s=n*i+r*a,c=i**2+a**2,l=(o+c)/2,u=Math.sqrt(l**2-(o*c-s**2));t[0]=Math.sqrt(l+u||1),t[1]=Math.sqrt(l-u||1)}static normalizeRect(e){let t=e.slice(0);return e[0]>e[2]&&(t[0]=e[2],t[2]=e[0]),e[1]>e[3]&&(t[1]=e[3],t[3]=e[1]),t}static intersect(e,t){let n=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),r=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(n>r)return null;let i=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),a=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return i>a?null:[n,i,r,a]}static pointBoundingBox(e,t,n){n[0]=Math.min(n[0],e),n[1]=Math.min(n[1],t),n[2]=Math.max(n[2],e),n[3]=Math.max(n[3],t)}static rectBoundingBox(e,t,n,r,i){i[0]=Math.min(i[0],e,n),i[1]=Math.min(i[1],t,r),i[2]=Math.max(i[2],e,n),i[3]=Math.max(i[3],t,r)}static#e(e,t,n,r,i,a,o,s,c,l){if(c<=0||c>=1)return;let u=1-c,d=c*c,f=d*c,p=u*(u*(u*e+3*c*t)+3*d*n)+f*r,m=u*(u*(u*i+3*c*a)+3*d*o)+f*s;l[0]=Math.min(l[0],p),l[1]=Math.min(l[1],m),l[2]=Math.max(l[2],p),l[3]=Math.max(l[3],m)}static#t(e,t,n,r,i,a,o,s,c,l,u,d){if(Math.abs(c)<1e-12){Math.abs(l)>=1e-12&&this.#e(e,t,n,r,i,a,o,s,-u/l,d);return}let f=l**2-4*u*c;if(f<0)return;let p=Math.sqrt(f),m=2*c;this.#e(e,t,n,r,i,a,o,s,(-l+p)/m,d),this.#e(e,t,n,r,i,a,o,s,(-l-p)/m,d)}static bezierBoundingBox(e,t,n,r,i,a,o,s,c){c[0]=Math.min(c[0],e,o),c[1]=Math.min(c[1],t,s),c[2]=Math.max(c[2],e,o),c[3]=Math.max(c[3],t,s),this.#t(e,n,i,o,t,r,a,s,3*(-e+3*(n-i)+o),6*(e-2*n+i),3*(n-e),c),this.#t(e,n,i,o,t,r,a,s,3*(-t+3*(r-a)+s),6*(t-2*r+a),3*(r-t),c)}};function se(e){return decodeURIComponent(escape(e))}var ce=null,le=null;function ue(e){return ce||(ce=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu,le=new Map([[`ſt`,`ſt`]])),e.replaceAll(ce,(e,t,n)=>t?t.normalize(`NFKC`):le.get(n))}function de(){if(typeof crypto.randomUUID==`function`)return crypto.randomUUID();let e=new Uint8Array(32);return crypto.getRandomValues(e),ae(e)}function fe(e,t,n){if(!Array.isArray(n)||n.length<2)return!1;let[r,i,...a]=n;if(!e(r)&&!Number.isInteger(r)||!t(i))return!1;let o=a.length,s=!0;switch(i.name){case`XYZ`:if(o<2||o>3)return!1;break;case`Fit`:case`FitB`:return o===0;case`FitH`:case`FitBH`:case`FitV`:case`FitBV`:if(o>1)return!1;break;case`FitR`:if(o!==4)return!1;s=!1;break;default:return!1}for(let e of a)if(!(typeof e==`number`||s&&e===null))return!1;return!0}var pe=()=>[],me=()=>new Map,he=()=>Object.create(null),ge=()=>new Set;typeof Iterator.prototype.join!=`function`&&(Iterator.prototype.join=function(e){return[...this].join(e)});function L(e,t,n){return Math.min(Math.max(e,t),n)}var _e=class e{constructor({viewBox:e,userUnit:t,scale:n,rotation:r,offsetX:i=0,offsetY:a=0,dontFlip:o=!1}){this.viewBox=e,this.userUnit=t,this.scale=n,this.rotation=r,this.offsetX=i,this.offsetY=a,n*=t;let s=(e[2]+e[0])/2,c=(e[3]+e[1])/2,l,u,d,f;switch(r%=360,r<0&&(r+=360),r){case 180:l=-1,u=0,d=0,f=1;break;case 90:l=0,u=1,d=1,f=0;break;case 270:l=0,u=-1,d=-1,f=0;break;case 0:l=1,u=0,d=0,f=-1;break;default:throw Error(`PageViewport: Invalid rotation, must be a multiple of 90 degrees.`)}o&&(d=-d,f=-f);let p,m,h,g;l===0?(p=Math.abs(c-e[1])*n+i,m=Math.abs(s-e[0])*n+a,h=(e[3]-e[1])*n,g=(e[2]-e[0])*n):(p=Math.abs(s-e[0])*n+i,m=Math.abs(c-e[1])*n+a,h=(e[2]-e[0])*n,g=(e[3]-e[1])*n),this.transform=[l*n,u*n,d*n,f*n,p-l*n*s-d*n*c,m-u*n*s-f*n*c],this.width=h,this.height=g}get rawDims(){let e=this.viewBox;return M(this,`rawDims`,{pageWidth:e[2]-e[0],pageHeight:e[3]-e[1],pageX:e[0],pageY:e[1]})}clone({scale:t=this.scale,rotation:n=this.rotation,offsetX:r=this.offsetX,offsetY:i=this.offsetY,dontFlip:a=!1}={}){return new e({viewBox:this.viewBox.slice(),userUnit:this.userUnit,scale:t,rotation:n,offsetX:r,offsetY:i,dontFlip:a})}convertToViewportPoint(e,t){let n=[e,t];return I.applyTransform(n,this.transform),n}convertToPdfPoint(e,t){let n=[e,t];return I.applyInverseTransform(n,this.transform),n}},ve=class e{static textContent(t){let n=[],r={items:n,styles:Object.create(null)};function i(t){if(!t)return;let r=null,a=t.name;if(a===`#text`)r=t.value;else if(e.shouldBuildText(a))t?.attributes?.textContent?r=t.attributes.textContent:t.value&&(r=t.value);else return;if(r!==null&&n.push({str:r}),t.children)for(let e of t.children)i(e)}return i(t),r}static shouldBuildText(e){return e!==`textarea`&&e!==`input`&&e!==`option`&&e!==`select`}},ye=/url\(|image-set\(/i,be=/^on/i,xe=class{static get _allowedHtmlElements(){return M(this,`_allowedHtmlElements`,new Set([`a`,`b`,`br`,`button`,`div`,`i`,`img`,`input`,`label`,`li`,`ol`,`option`,`p`,`select`,`span`,`sub`,`sup`,`textarea`,`ul`]))}static get _allowedSvgElements(){return M(this,`_allowedSvgElements`,new Set([`ellipse`,`line`,`path`,`rect`,`svg`]))}static get _allowedRichTextElements(){return M(this,`_allowedRichTextElements`,new Set([`a`,`b`,`br`,`div`,`i`,`li`,`ol`,`p`,`span`,`sub`,`sup`,`ul`]))}static get _allowedRichTextAttributes(){return M(this,`_allowedRichTextAttributes`,new Set([`class`,`dir`,`style`]))}static get _allowedRichTextStyles(){return M(this,`_allowedRichTextStyles`,new Set(`color.font.fontFamily.fontSize.fontStretch.fontStyle.fontWeight.kerningMode.letterSpacing.lineHeight.margin.marginBottom.marginLeft.marginRight.marginTop.orphans.paddingLeft.paddingRight.breakAfter.breakBefore.breakInside.tabInterval.tabStop.textAlign.textDecoration.textIndent.transform.verticalAlign.widows`.split(`.`)))}static setupStorage(e,t,n,r,i){let a=r.getValue(t,{value:null});switch(n.name){case`textarea`:if(a.value!==null&&(e.textContent=a.value),i===`print`)break;e.addEventListener(`input`,e=>{r.setValue(t,{value:e.target.value})});break;case`input`:if(n.attributes.type===`radio`||n.attributes.type===`checkbox`){if(a.value===n.attributes.xfaOn?e.setAttribute(`checked`,!0):a.value===n.attributes.xfaOff&&e.removeAttribute(`checked`),i===`print`)break;e.addEventListener(`change`,e=>{r.setValue(t,{value:e.target.checked?e.target.getAttribute(`xfaOn`):e.target.getAttribute(`xfaOff`)})})}else{if(a.value!==null&&e.setAttribute(`value`,a.value),i===`print`)break;e.addEventListener(`input`,e=>{r.setValue(t,{value:e.target.value})})}break;case`select`:if(a.value!==null){e.setAttribute(`value`,a.value);for(let e of n.children)e.attributes.value===a.value?e.attributes.selected=!0:Object.hasOwn(e.attributes,`selected`)&&delete e.attributes.selected}e.addEventListener(`input`,e=>{let n=e.target.options,i=n.selectedIndex===-1?``:n[n.selectedIndex].value;r.setValue(t,{value:i})})}}static setAttributes({html:e,element:t,storage:n=null,intent:r,linkService:i}){let{attributes:a}=t,o=e instanceof HTMLAnchorElement;a.type===`radio`&&(a.name=`${a.name}-${r}`);for(let[t,n]of Object.entries(a))if(n!=null&&!be.test(t)&&!(r===`richText`&&!this._allowedRichTextAttributes.has(t)))switch(t){case`class`:n.length&&e.setAttribute(t,n.join(` `));break;case`dataId`:break;case`id`:e.setAttribute(`data-element-id`,n);break;case`style`:if(r===`richText`){let t=this._allowedRichTextStyles;for(let[r,i]of Object.entries(n))t.has(r)&&!ye.test(i)&&(e.style[r]=i)}else Object.assign(e.style,n);break;case`textContent`:e.textContent=n;break;default:(!o||t!==`href`&&t!==`newWindow`)&&e.setAttribute(t,n)}o&&i?.addLinkAttributes(e,a.href,a.newWindow),n&&a.dataId&&this.setupStorage(e,a.dataId,t,n)}static#e(e,t,n){return n===`richText`?!t&&this._allowedRichTextElements.has(e)?document.createElement(e):null:t?t===a&&this._allowedSvgElements.has(e)?document.createElementNS(a,e):null:this._allowedHtmlElements.has(e)?document.createElement(e):null}static render(e){let t=e.annotationStorage,n=e.linkService,r=e.xfaHtml,i=e.intent||`display`,a=this.#e(r.name,r.attributes?.xmlns,i)??document.createElement(`div`);r.attributes&&this.setAttributes({html:a,element:r,intent:i,linkService:n});let o=i!==`richText`,s=e.div;if(s.append(a),e.viewport){let t=`matrix(${e.viewport.transform.join(`,`)})`;s.style.transform=t}o&&s.setAttribute(`class`,`xfaLayer xfaFont`);let c=[];if(r.children.length===0){if(r.value){let e=document.createTextNode(r.value);a.append(e),o&&ve.shouldBuildText(r.name)&&c.push(e)}return{textDivs:c}}let l=[[r,-1,a]];for(;l.length>0;){let[e,r,a]=l.at(-1);if(r+1===e.children.length){l.pop();continue}let s=e.children[++l.at(-1)[1]];if(s===null)continue;let{name:u}=s;if(u===`#text`){let e=document.createTextNode(s.value);c.push(e),a.append(e);continue}let d=this.#e(u,s.attributes?.xmlns,i);if(d){if(a.append(d),s.attributes&&this.setAttributes({html:d,element:s,storage:t,intent:i,linkService:n}),s.children?.length>0)l.push([s,-1,d]);else if(s.value){let e=document.createTextNode(s.value);o&&ve.shouldBuildText(u)&&c.push(e),d.append(e)}}}for(let e of s.querySelectorAll(`.xfaNonInteractive input, .xfaNonInteractive textarea`))e.setAttribute(`readOnly`,!0);return{textDivs:c}}static update(e){let t=`matrix(${e.viewport.transform.join(`,`)})`;e.div.style.transform=t,e.div.hidden=!1}static getPageViewport(e,{scale:t=1,rotation:n=0}){let{width:r,height:i}=e.attributes.style;return new _e({viewBox:[0,0,parseInt(r,10),parseInt(i,10)],userUnit:1,scale:t,rotation:n})}},Se=class{static CSS=96;static PDF=72;static PDF_TO_CSS_UNITS=this.CSS/this.PDF};async function Ce(e,t=`text`){if(Ae(e,document.baseURI)){let n=await fetch(e);if(!n.ok)throw Error(n.statusText);switch(t){case`blob`:return n.blob();case`bytes`:return n.bytes();case`json`:return n.json()}return n.text()}return new Promise((n,r)=>{let i=new XMLHttpRequest;i.open(`GET`,e,!0),i.responseType=t===`bytes`?`arraybuffer`:t,i.onreadystatechange=()=>{if(i.readyState===XMLHttpRequest.DONE){if(i.status===200||i.status===0){switch(t){case`bytes`:n(new Uint8Array(i.response));return;case`blob`:case`json`:n(i.response);return}n(i.responseText);return}r(Error(i.statusText))}},i.send(null)})}var we=class extends N{constructor(e,t=0){super(e,`RenderingCancelledException`),this.extraDelay=t}};function Te(e){let t=e.length,n=0;for(;n{try{return new URL(e)}catch{}try{return new URL(decodeURIComponent(e))}catch{}try{return new URL(e,`https://foo.bar`)}catch{}try{return new URL(decodeURIComponent(e),`https://foo.bar`)}catch{}return null})(e);if(!n)return t;let r=e=>{try{let t=decodeURIComponent(e);return t.includes(`/`)&&(t=j(t),t.length===4&&i.test(t))?e:t}catch{return e}},i=/\.pdf$/i,a=j(n.pathname);if(i.test(a))return r(a);if(n.searchParams.size>0){let e=e=>[...e].findLast(e=>i.test(e)),t=e(n.searchParams.values())??e(n.searchParams.keys());if(t)return r(t)}if(n.hash){let e=/[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i.exec(n.hash);if(e)return r(e[0])}return t}var ke=class{#e=new Map;times=[];time(e){this.#e.has(e)&&T(`Timer is already running for ${e}`),this.#e.set(e,Date.now())}timeEnd(e){this.#e.has(e)||T(`Timer has not been started for ${e}`),this.times.push({name:e,start:this.#e.get(e),end:Date.now()}),this.#e.delete(e)}toString(){let e=Math.max(...this.times.map(e=>e.name.length));return this.times.map(t=>`${t.name.padEnd(e)} ${t.end-t.start}ms\n`).join(``)}};function Ae(e,t){let n=t?URL.parse(e,t):URL.parse(e);return/https?:/.test(n?.protocol??``)}function R(e){e.preventDefault()}function z(e){e.preventDefault(),e.stopPropagation()}var je=class{static#e;static toDateObject(e){if(e instanceof Date)return e;if(!e||typeof e!=`string`)return null;this.#e||=RegExp(`^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+\\-])?(\\d{2})?'?(\\d{2})?'?`);let t=this.#e.exec(e);if(!t)return null;let n=parseInt(t[1],10),r=parseInt(t[2],10);r=r>=1&&r<=12?r-1:0;let i=parseInt(t[3],10);i=i>=1&&i<=31?i:1;let a=parseInt(t[4],10);a=a>=0&&a<=23?a:0;let o=parseInt(t[5],10);o=o>=0&&o<=59?o:0;let s=parseInt(t[6],10);s=s>=0&&s<=59?s:0;let c=t[7]||`Z`,l=parseInt(t[8],10);l=l>=0&&l<=23?l:0;let u=parseInt(t[9],10)||0;return u=u>=0&&u<=59?u:0,c===`-`?(a+=l,o+=u):c===`+`&&(a-=l,o-=u),new Date(Date.UTC(n,r,i,a,o,s))}};function Me(e){if(e.startsWith(`#`)){let t=e.slice(1);return[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16),t.length>=8?parseInt(t.slice(6,8),16)/255:1]}if(e.startsWith(`rgb(`)){let[t,n,r]=e.slice(4,-1).split(`,`).map(e=>parseInt(e,10));return[t,n,r,1]}if(e.startsWith(`rgba(`)){let t=e.slice(5,-1).split(`,`);return[parseInt(t[0],10),parseInt(t[1],10),parseInt(t[2],10),parseFloat(t[3])]}let t=e.match(/^color\(srgb\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)(?:\s*\/\s*([\d.]+|none))?\)$/);return t?[Math.round(parseFloat(t[1])*255),Math.round(parseFloat(t[2])*255),Math.round(parseFloat(t[3])*255),t[4]!==void 0&&t[4]!==`none`?parseFloat(t[4]):1]:null}function Ne(e){let t=Me(e);return t?t.slice(0,3):(T(`Not a valid color format: "${e}"`),[0,0,0])}function Pe(e){let t=document.createElement(`span`);t.style.visibility=`hidden`,t.style.colorScheme=`only light`,document.body.append(t);for(let n of e.keys()){t.style.color=n;let r=window.getComputedStyle(t).color;e.set(n,Ne(r))}t.remove()}function B(e){let{a:t,b:n,c:r,d:i,e:a,f:o}=e.getTransform();return[t,n,r,i,a,o]}function V(e){let{a:t,b:n,c:r,d:i,e:a,f:o}=e.getTransform().invertSelf();return[t,n,r,i,a,o]}function Fe(e,t,n=!1,r=!0){if(t instanceof _e){let{pageWidth:r,pageHeight:i}=t.rawDims,{style:a}=e,o=`round(down, var(--total-scale-factor) * ${r}px, var(--scale-round-x))`,s=`round(down, var(--total-scale-factor) * ${i}px, var(--scale-round-y))`;!n||t.rotation%180==0?(a.width=o,a.height=s):(a.width=s,a.height=o)}r&&e.setAttribute(`data-main-rotation`,t.rotation)}var Ie=class e{constructor(){let{pixelRatio:t}=e;this.sx=t,this.sy=t}get scaled(){return this.sx!==1||this.sy!==1}get symmetric(){return this.sx===this.sy}limitCanvas(t,n,r,i,a=-1){let o=1/0,s=1/0,c=1/0;r=e.capPixels(r,a),r>0&&(o=Math.sqrt(r/(t*n))),i!==-1&&(s=i/t,c=i/n);let l=Math.min(o,s,c);return this.sx>l||this.sy>l?(this.sx=l,this.sy=l,!0):!1}static get pixelRatio(){return globalThis.devicePixelRatio||1}static capPixels(e,t){if(t>=0){let n=Math.ceil(window.screen.availWidth*window.screen.availHeight*this.pixelRatio**2*(1+t/100));return e>0?Math.min(e,n):n}return e}},Le=[`image/apng`,`image/avif`,`image/bmp`,`image/gif`,`image/jpeg`,`image/png`,`image/svg+xml`,`image/webp`,`image/x-icon`],Re=class{static get isDarkMode(){return M(this,`isDarkMode`,!!window?.matchMedia?.(`(prefers-color-scheme: dark)`).matches)}},ze=class{static get commentForegroundColor(){let e=document.createElement(`span`);e.classList.add(`comment`,`sidebar`);let{style:t}=e;t.width=t.height=`0`,t.display=`none`,t.color=`var(--comment-fg-color)`,document.body.append(e);let{color:n}=window.getComputedStyle(e);return e.remove(),M(this,`commentForegroundColor`,Ne(n))}};function Be(e,t){t=L(t??1,0,1);let n=255*(1-t);return e.map(e=>Math.round(e*t+n))}function Ve(e,t){let n=e[0]/255,r=e[1]/255,i=e[2]/255,a=Math.max(n,r,i),o=Math.min(n,r,i),s=(a+o)/2;if(a===o)t[0]=t[1]=0;else{let e=a-o;switch(t[1]=s<.5?e/(a+o):e/(2-a-o),a){case n:t[0]=((r-i)/e+(ri?(r+.05)/(i+.05):(i+.05)/(r+.05)}var Ge=new Map;function Ke(e,t){let n=e[0]+e[1]*256+e[2]*65536+t[0]*16777216+t[1]*4294967296+t[2]*1099511627776,r=Ge.get(n);if(r)return r;let i=new Float32Array(9),a=i.subarray(0,3),o=i.subarray(3,6);Ve(e,o);let s=i.subarray(6,9);Ve(t,s);let c=s[2]<.5,l=c?12:4.5;if(o[2]=c?Math.sqrt(o[2]):1-Math.sqrt(1-o[2]),We(o,s,a).005;){let n=o[2]=(e+t)/2;c===We(o,s,a){n.delete()},{signal:n._signal}),this.#r.append(r)}get#p(){let e=document.createElement(`div`);return e.className=`divider`,e}async addAltText(e){let t=await e.render();this.#f(t),this.#r.append(t,this.#p),this.#i=e}addComment(e,t=null){if(this.#a)return;let n=e.renderForToolbar();if(!n)return;this.#f(n);let r=this.#o=this.#p;t?(this.#r.insertBefore(n,t),this.#r.insertBefore(r,t)):this.#r.append(n,r),this.#a=e,e.toolbar=this}addColorPicker(e){if(this.#t)return;this.#t=e;let t=e.renderButton();this.#f(t),this.#r.append(t,this.#p)}async addEditSignatureButton(e){let t=this.#s=await e.renderEditButton(this.#n);this.#f(t),this.#r.append(t,this.#p)}removeButton(e){e===`comment`&&(this.#a?.removeToolbarCommentButton(),this.#a=null,this.#o?.remove(),this.#o=null)}async addButton(e,t){switch(e){case`colorPicker`:t&&this.addColorPicker(t);break;case`altText`:t&&await this.addAltText(t);break;case`editSignature`:t&&await this.addEditSignatureButton(t);break;case`delete`:this.addDeleteButton();break;case`comment`:t&&this.addComment(t)}}async addButtonBefore(e,t,n){if(!t&&e===`comment`)return;let r=this.#r.querySelector(n);r&&e===`comment`&&this.addComment(t,r)}updateEditSignatureButton(e){this.#s&&(this.#s.title=e)}remove(){this.#e.remove(),this.#t?.destroy(),this.#t=null}},Xe=class{#e=null;#t=null;#n;constructor(e){this.#n=e}#r(){let e=this.#t=document.createElement(`div`);e.className=`editToolbar`,e.setAttribute(`role`,`toolbar`);let t=this.#n._signal;t instanceof AbortSignal&&!t.aborted&&e.addEventListener(`contextmenu`,R,{signal:t});let n=this.#e=document.createElement(`div`);return n.className=`buttons`,e.append(n),this.#n.hasCommentManager()&&this.#a(`commentButton`,`pdfjs-comment-floating-button`,`pdfjs-comment-floating-button-label`,()=>{this.#n.commentSelection(`floating_button`)}),this.#a(`highlightButton`,`pdfjs-highlight-floating-button1`,`pdfjs-highlight-floating-button-label`,()=>{this.#n.highlightSelection(`floating_button`)}),e}#i(e,t){let n=0,r=0;for(let i of e){let e=i.y+i.height;if(en){r=a,n=e;continue}t?a>r&&(r=a):a=1}static clearPointerType(){e.#r=null}static clearPointerIds(){e.#e=NaN,e.#t=null}static clearTimeStamp(){e.#n=NaN}},$e=class{#e=0;get id(){return`${l}${this.#e++}`}},et=class e{#e=de();#t=0;#n=null;static get _isSVGFittingCanvas(){let e=`data:image/svg+xml;charset=UTF-8,`,t=new OffscreenCanvas(1,3).getContext(`2d`,{willReadFrequently:!0}),n=new Image;n.src=e;let r=n.decode().then(()=>(t.drawImage(n,0,0,1,1,0,0,1,3),new Uint32Array(t.getImageData(0,0,1,1).data.buffer)[0]===0));return M(this,`_isSVGFittingCanvas`,r)}async#r(t,n){this.#n||=new Map;let r=this.#n.get(t);if(r===null)return null;if(r?.bitmap)return r.refCounter+=1,r;try{r||={bitmap:null,id:`image_${this.#e}_${this.#t++}`,refCounter:0,isSvg:!1};let t;if(typeof n==`string`?(r.url=n,t=await Ce(n,`blob`)):n instanceof File?t=r.file=n:n instanceof Blob&&(t=n),t.type===`image/svg+xml`){let n=e._isSVGFittingCanvas,i=new FileReader,a=new Image,o=new Promise((e,t)=>{a.onload=()=>{r.bitmap=a,r.isSvg=!0,e()},i.onload=async()=>{let e=r.svgUrl=i.result;a.src=await n?`${e}#svgView(preserveAspectRatio(none))`:e},a.onerror=i.onerror=t});i.readAsDataURL(t),await o}else r.bitmap=await createImageBitmap(t);r.refCounter=1}catch(e){T(e),r=null}return this.#n.set(t,r),r&&this.#n.set(r.id,r),r}async getFromFile(e){let{lastModified:t,name:n,size:r,type:i}=e;return this.#r(`${t}_${n}_${r}_${i}`,e)}async getFromUrl(e){return this.#r(e,e)}async getFromBlob(e,t){let n=await t;return this.#r(e,n)}async getFromId(e){this.#n||=new Map;let t=this.#n.get(e);if(!t)return null;if(t.bitmap)return t.refCounter+=1,t;if(t.file)return this.getFromFile(t.file);if(t.blobPromise){let{blobPromise:e}=t;return delete t.blobPromise,this.getFromBlob(t.id,e)}return this.getFromUrl(t.url)}getFromCanvas(e,t){this.#n||=new Map;let n=this.#n.get(e);if(n?.bitmap)return n.refCounter+=1,n;let r=new OffscreenCanvas(t.width,t.height);return r.getContext(`2d`).drawImage(t,0,0),n={bitmap:r.transferToImageBitmap(),id:`image_${this.#e}_${this.#t++}`,refCounter:1,isSvg:!1},this.#n.set(e,n),this.#n.set(n.id,n),n}getSvgUrl(e){let t=this.#n.get(e);return t?.isSvg?t.svgUrl:null}deleteId(e){this.#n||=new Map;let t=this.#n.get(e);if(!t||(--t.refCounter,t.refCounter!==0))return;let{bitmap:n}=t;if(!t.url&&!t.file){let e=new OffscreenCanvas(n.width,n.height);e.getContext(`bitmaprenderer`).transferFromImageBitmap(n),t.blobPromise=e.convertToBlob()}n.close?.(),t.bitmap=null}isValidId(e){return e.startsWith(`image_${this.#e}_`)}},tt=class{#e=[];#t=!1;#n;#r=-1;constructor(e=128){this.#n=e}add({cmd:e,undo:t,post:n,mustExec:r,type:i=NaN,overwriteIfSameType:a=!1,keepUndo:o=!1}){if(r&&e(),this.#t)return;let s={cmd:e,undo:t,post:n,type:i};if(this.#r===-1){this.#e.length>0&&(this.#e.length=0),this.#r=0,this.#e.push(s);return}if(a&&this.#e[this.#r].type===i){o&&(s.undo=this.#e[this.#r].undo),this.#e[this.#r]=s;return}let c=this.#r+1;c===this.#n?this.#e.splice(0,1):(this.#r=c,c=0;t--)if(this.#e[t].type!==e){this.#e.splice(t+1,this.#r-t),this.#r=t;return}this.#e.length=0,this.#r=-1}}destroy(){this.#e=null}},nt=class e{static ALT=1;static CTRL=2;static META=4;static SHIFT=8;constructor(t){this.callbacks=new Map;let{isMac:n}=F.platform;for(let[r,i,a={}]of t){let t=r.some(e=>e.startsWith(`mac+`));for(let o of r){let r=o;if(t){let e=o.startsWith(`mac+`);if(n!==e)continue;e&&(r=o.slice(4))}let[s,c]=e.#e(r);s!==null&&this.callbacks.getOrInsertComputed(s,pe).push({callback:i,options:a,modifiers:c})}}}static#e(t){let n=null,r=0;for(let i of t.split(`+`)){if(i=i.trim(),!i)continue;let a=i.toUpperCase(),o=e[a];if(o){r|=o;continue}if(n!==null){T(`KeyboardManager: multiple keys in shortcut "${t}"`);break}n=a===`SPACE`?` `:i}return n===null&&T(`KeyboardManager: no key found in shortcut "${t}"`),[n,r]}static#t(e){let t=/^(?:Key([A-Z])|(?:Digit|Numpad)(\d))$/.exec(e);return t?t[1]?.toLowerCase()??t[2]:null}exec(t,n){let r=this.callbacks.get(n.key);if(!r){if(/^[a-z]$/i.test(n.key))return;let t=e.#t(n.code);if(t===null||t===n.key||(r=this.callbacks.get(t),!r))return}let i=(n.altKey?e.ALT:0)|(n.ctrlKey?e.CTRL:0)|(n.metaKey?e.META:0)|(n.shiftKey?e.SHIFT:0),a=r.find(e=>e.modifiers===i);if(!a)return;let{callback:o,options:{bubbles:s=!1,args:c=[],checker:l=null}}=a;l&&!l(t,n)||(o.bind(t,...c,n)(),s||z(n))}},rt=class e{static _colorsMapping=new Map([[`CanvasText`,[0,0,0]],[`Canvas`,[255,255,255]]]);get _colors(){let e=new Map([[`CanvasText`,null],[`Canvas`,null]]);return Pe(e),M(this,`_colors`,e)}convert(t){let n=Ne(t);if(!window.matchMedia(`(forced-colors: active)`).matches)return n;for(let[t,r]of this._colors)if(r.every((e,t)=>e===n[t]))return e._colorsMapping.get(t);return n}getHexCode(e){let t=this._colors.get(e);return t?I.makeHexColor(...t):e}},it=class e{#e=new AbortController;#t=null;#n=null;#r=new Map;#i=new Map;#a=null;#o=null;#s=null;#c=null;#l=new tt;#u=null;#d=null;#f=null;#p=0;#m=new Set;#h=null;#g=null;#_=new Set;_editorUndoBar=null;#v=!1;#y=!1;#b=!1;#x=null;#S=null;#C=null;#w=null;#T=!1;#E=null;#D=new $e;#O=!1;#k=!1;#A=!1;#j=null;#M=null;#N=null;#P=null;#F=null;#I=u.NONE;#L=new Set;#R=null;#z=null;#B=null;#V=null;#H=null;#U={isEditing:!1,isEmpty:!0,hasSomethingToUndo:!1,hasSomethingToRedo:!1,hasSelectedEditor:!1,hasSelectedText:!1};#W=[0,0];#G=null;#K=null;#q=null;#J=null;#Y=null;static TRANSLATE_SMALL=1;static TRANSLATE_BIG=10;static get _keyboardManager(){let t=e.prototype,n=e=>e.#K.contains(document.activeElement)&&document.activeElement.tagName!==`BUTTON`&&e.hasSomethingToControl(),r=(e,{target:t})=>{if(t instanceof HTMLInputElement){let{type:e}=t;return e!==`text`&&e!==`number`}return!0},i=this.TRANSLATE_SMALL,a=this.TRANSLATE_BIG;return M(this,`_keyboardManager`,new nt([[[`ctrl+a`,`mac+meta+a`],t.selectAll,{checker:r}],[[`ctrl+z`,`mac+meta+z`],t.undo,{checker:r}],[[`ctrl+y`,`ctrl+shift+z`,`mac+meta+shift+z`,`ctrl+shift+Z`,`mac+meta+shift+Z`],t.redo,{checker:r}],[[`Backspace`,`alt+Backspace`,`ctrl+Backspace`,`shift+Backspace`,`mac+Backspace`,`mac+alt+Backspace`,`mac+ctrl+Backspace`,`Delete`,`ctrl+Delete`,`shift+Delete`,`mac+Delete`],t.delete,{checker:r}],[[`Enter`],t.addNewEditorFromKeyboard,{checker:(e,{target:t})=>!(t instanceof HTMLButtonElement)&&e.#K.contains(t)&&!e.isEnterHandled}],[[`Space`],t.addNewEditorFromKeyboard,{checker:(e,{target:t})=>!(t instanceof HTMLButtonElement)&&e.#K.contains(document.activeElement)}],[[`Escape`],t.unselectAll],[[`ArrowLeft`],t.translateSelectedEditors,{args:[-i,0],checker:n}],[[`ctrl+ArrowLeft`,`mac+shift+ArrowLeft`],t.translateSelectedEditors,{args:[-a,0],checker:n}],[[`ArrowRight`],t.translateSelectedEditors,{args:[i,0],checker:n}],[[`ctrl+ArrowRight`,`mac+shift+ArrowRight`],t.translateSelectedEditors,{args:[a,0],checker:n}],[[`ArrowUp`],t.translateSelectedEditors,{args:[0,-i],checker:n}],[[`ctrl+ArrowUp`,`mac+shift+ArrowUp`],t.translateSelectedEditors,{args:[0,-a],checker:n}],[[`ArrowDown`],t.translateSelectedEditors,{args:[0,i],checker:n}],[[`ctrl+ArrowDown`,`mac+shift+ArrowDown`],t.translateSelectedEditors,{args:[0,a],checker:n}]]))}constructor(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this._signal=this.#e.signal;this.#K=e,this.#q=t,this.#J=n,this.#o=r,this.#u=i,this.#z=a,this.#H=s,this._eventBus=o;let _={signal:g,...Ze};o.on(`editingaction`,this.onEditingAction.bind(this),_),o.on(`pagechanging`,this.onPageChanging.bind(this),_),o.on(`scalechanging`,this.onScaleChanging.bind(this),_),o.on(`rotationchanging`,this.onRotationChanging.bind(this),_),o.on(`setpreference`,this.onSetPreference.bind(this),_),o.on(`switchannotationeditorparams`,e=>this.updateParams(e.type,e.value),_),window.addEventListener(`pointerdown`,()=>{this.#k=!0},{capture:!0,signal:g}),window.addEventListener(`pointerup`,()=>{this.#k=!1},{capture:!0,signal:g}),window.addEventListener(`beforeunload`,this.endCurrentEditing.bind(this),{capture:!0,signal:g}),this.#te(),this.#ce(),this.#ie(),this.#s=s.annotationStorage,this.#x=s.filterFactory,this.#B=c,this.#w=l||null,this.#v=u,this.#y=d,this.#b=f,this.#F=p||null,this.viewParameters={realScale:Se.PDF_TO_CSS_UNITS,rotation:0},this.isShiftKeyDown=!1,this._editorUndoBar=m||null,this._supportsPinchToZoom=h!==!1,i?.setSidebarUiManager(this)}destroy(){this.#Y?.resolve(),this.#Y=null,this.#e?.abort(),this.#e=null,this._signal=null;for(let e of this.#i.values())e.destroy();this.#i.clear(),this.#r.clear(),this.#_.clear(),this.#P?.clear(),this.#t=null,this.#L.clear(),this.#l.destroy(),this.#o?.destroy(),this.#u?.destroy(),this.#z?.destroy(),this.#E?.hide(),this.#E=null,this.#N?.destroy(),this.#N=null,this.#n=null,this.#S&&=(clearTimeout(this.#S),null),this.#G&&=(clearTimeout(this.#G),null),this._editorUndoBar?.destroy(),this.#H=null}combinedSignal(e){return AbortSignal.any([this._signal,e.signal])}get mlManager(){return this.#F}get useNewAltTextFlow(){return this.#y}get useNewAltTextWhenAddingImage(){return this.#b}get hcmFilter(){return M(this,`hcmFilter`,this.#B?this.#x.addHCMFilter(this.#B.foreground,this.#B.background):`none`)}get direction(){return M(this,`direction`,getComputedStyle(this.#K).direction)}get _highlightColors(){return M(this,`_highlightColors`,this.#w?new Map(this.#w.split(`,`).map(e=>(e=e.split(`=`).map(e=>e.trim()),e[1]=e[1].toUpperCase(),e))):null)}get highlightColors(){let{_highlightColors:e}=this;if(!e)return M(this,`highlightColors`,null);let t=new Map,n=!!this.#B;for(let[r,i]of e){let e=r.endsWith(`_HCM`);if(n&&e){t.set(r.replace(`_HCM`,``),i);continue}!n&&!e&&t.set(r,i)}return M(this,`highlightColors`,t)}get highlightColorNames(){return M(this,`highlightColorNames`,this.highlightColors?new Map(Array.from(this.highlightColors,e=>e.reverse())):null)}getNonHCMColor(e){if(!this._highlightColors)return e;let t=this.highlightColorNames.get(e);return this._highlightColors.get(t)||e}getNonHCMColorName(e){return this.highlightColorNames.get(e)||e}setCurrentDrawingSession(e){e?(this.unselectAll(),this.disableUserSelect(!0)):this.disableUserSelect(!1),this.#f=e}setMainHighlightColorPicker(e){this.#N=e}editAltText(e,t=!1){this.#o?.editAltText(this,e,t)}hasCommentManager(){return!!this.#u}editComment(e,t,n,r){this.#u?.showDialog(this,e,t,n,r)}selectComment(e,t){(this.#i.get(e)?.getEditorByUID(t))?.toggleComment(!0,!0)}updateComment(e){this.#u?.updateComment(e.getData())}updatePopupColor(e){this.#u?.updatePopupColor(e)}removeComment(e){this.#u?.removeComments([e.uid])}deleteComment(e,t){let n=()=>{e.comment=t};this.addCommands({cmd:()=>{this._editorUndoBar?.show(n,`comment`),this.toggleComment(null),e.comment=null},undo:n,mustExec:!0})}toggleComment(e,t,n=void 0){this.#u?.toggleCommentPopup(e,t,n)}makeCommentColor(e,t){return e&&this.#u?.makeCommentColor(e,t)||null}getCommentDialogElement(){return this.#u?.dialogElement||null}async waitForEditorsRendered(e){if(this.#i.has(e-1))return;let{resolve:t,promise:n}=Promise.withResolvers(),r=n=>{n.pageNumber===e&&(this._eventBus.off(`editorsrendered`,r),t())};this._eventBus.on(`editorsrendered`,r,Ze),await n}getSignature(e){this.#z?.getSignature({uiManager:this,editor:e})}get signatureManager(){return this.#z}switchToMode(e,t){this._eventBus.on(`annotationeditormodechanged`,t,{once:!0,signal:this._signal,...Ze}),this._eventBus.dispatch(`showannotationeditorui`,{source:this,mode:e})}setPreference(e,t){this._eventBus.dispatch(`setpreference`,{source:this,name:e,value:t})}onSetPreference({name:e,value:t}){e===`enableNewAltTextWhenAddingImage`&&(this.#b=t)}onPageChanging({pageNumber:e}){this.#p=e-1}deletePage(e){for(let t of this.getEditors(e))t.remove();this.#i.delete(e),this.#p===e&&(this.#p=0)}focusMainContainer(){this.#K.focus()}findParent(e,t){for(let n of this.#i.values()){let{x:r,y:i,width:a,height:o}=n.div.getBoundingClientRect();if(e>=r&&e<=r+a&&t>=i&&t<=i+o)return n}return null}disableUserSelect(e=!1){this.#q.classList.toggle(`noUserSelect`,e)}addShouldRescale(e){this.#_.add(e)}removeShouldRescale(e){this.#_.delete(e)}onScaleChanging({scale:e}){this.commitOrRemove(),this.viewParameters.realScale=e*Se.PDF_TO_CSS_UNITS;for(let e of this.#_)e.onScaleChanging();this.#f?.onScaleChanging()}onRotationChanging({pagesRotation:e}){this.commitOrRemove(),this.viewParameters.rotation=e}#X({anchorNode:e}){return e.nodeType===Node.TEXT_NODE?e.parentElement:e}#Z(e){let{currentLayer:t}=this;if(t.hasTextLayer(e))return t;for(let t of this.#i.values())if(t.hasTextLayer(e))return t;return null}highlightSelection(e=``,t=!1){let n=document.getSelection();if(!n||n.isCollapsed)return;let{anchorNode:r,anchorOffset:i,focusNode:a,focusOffset:o}=n,s=n.toString(),c=this.#X(n).closest(`.textLayer`),l=this.getSelectionBoxes(c);if(!l)return;n.empty();let d=this.#Z(c),f=this.#I===u.NONE,p=()=>{let n=d?.createAndAddNewEditor({x:0,y:0},!1,{methodOfCreation:e,boxes:l,anchorNode:r,anchorOffset:i,focusNode:a,focusOffset:o,text:s});f&&this.showAllEditors(`highlight`,!0,!0),t&&n?.editComment()};if(f){this.switchToMode(u.HIGHLIGHT,p);return}p()}commentSelection(e=``){this.highlightSelection(e,!0)}endCurrentEditing(){this.commitOrRemove(),this.currentLayer?.endDrawingSession(!1)}#Q(){let e=document.getSelection();if(!e||e.isCollapsed)return;let t=this.#X(e).closest(`.textLayer`),n=this.getSelectionBoxes(t);n&&(this.#E||=new Xe(this),this.#E.show(t,n,this.direction===`ltr`))}getAndRemoveDataFromAnnotationStorage(e){if(!this.#s)return null;let t=`${l}${e}`,n=this.#s.getRawValue(t);return n&&this.#s.remove(t),n}addToAnnotationStorage(e){!e.isEmpty()&&this.#s&&!this.#s.has(e.id)&&this.#s.setValue(e.id,e)}a11yAlert(e,t=null){let n=this.#J;n&&(n.setAttribute(`data-l10n-id`,e),t?n.setAttribute(`data-l10n-args`,JSON.stringify(t)):n.removeAttribute(`data-l10n-args`))}#$(){let e=document.getSelection();if(!e||e.isCollapsed){this.#R&&(this.#E?.hide(),this.#R=null,this.#le({hasSelectedText:!1}));return}let{anchorNode:t}=e;if(t===this.#R)return;let n=this.#X(e).closest(`.textLayer`);if(!n){this.#R&&(this.#E?.hide(),this.#R=null,this.#le({hasSelectedText:!1}));return}if(this.#E?.hide(),this.#R=t,this.#le({hasSelectedText:!0}),(this.#I===u.HIGHLIGHT||this.#I===u.NONE)&&(this.#I===u.HIGHLIGHT&&this.showAllEditors(`highlight`,!0,!0),this.#T=this.isShiftKeyDown,!this.isShiftKeyDown)){let e=this.#I===u.HIGHLIGHT?this.#Z(n):null;if(e?.toggleDrawing(),this.#k){let t=new AbortController,n=this.combinedSignal(t),r=n=>{(n.type!==`pointerup`||n.button===0)&&(t.abort(),e?.toggleDrawing(!0),n.type===`pointerup`&&this.#ee(`main_toolbar`))};window.addEventListener(`pointerup`,r,{signal:n}),window.addEventListener(`blur`,r,{signal:n})}else e?.toggleDrawing(!0),this.#ee(`main_toolbar`)}}#ee(e=``){this.#I===u.HIGHLIGHT?this.highlightSelection(e):this.#v&&this.#Q()}#te(){document.addEventListener(`selectionchange`,this.#$.bind(this),{signal:this._signal})}#ne(){if(this.#C)return;this.#C=new AbortController;let e=this.combinedSignal(this.#C);window.addEventListener(`focus`,this.focus.bind(this),{signal:e}),window.addEventListener(`blur`,this.blur.bind(this),{signal:e})}#re(){this.#C?.abort(),this.#C=null}blur(){if(this.isShiftKeyDown=!1,this.#T&&(this.#T=!1,this.#ee(`main_toolbar`)),!this.hasSelection)return;let{activeElement:e}=document;for(let t of this.#L)if(t.div.contains(e)){this.#M=[t,e],t._focusEventsAllowed=!1;break}}focus(){if(!this.#M)return;let[e,t]=this.#M;this.#M=null,t.addEventListener(`focusin`,()=>{e._focusEventsAllowed=!0},{once:!0,signal:this._signal}),t.focus()}#ie(){if(this.#j)return;this.#j=new AbortController;let e=this.combinedSignal(this.#j);window.addEventListener(`keydown`,this.keydown.bind(this),{signal:e}),window.addEventListener(`keyup`,this.keyup.bind(this),{signal:e})}#ae(){this.#j?.abort(),this.#j=null}#oe(){if(this.#d)return;this.#d=new AbortController;let e=this.combinedSignal(this.#d);document.addEventListener(`copy`,this.copy.bind(this),{signal:e}),document.addEventListener(`cut`,this.cut.bind(this),{signal:e}),document.addEventListener(`paste`,this.paste.bind(this),{signal:e})}#se(){this.#d?.abort(),this.#d=null}#ce(){let e=this._signal;document.addEventListener(`dragover`,this.dragOver.bind(this),{signal:e}),document.addEventListener(`drop`,this.drop.bind(this),{signal:e})}addEditListeners(){this.#ie(),this.setEditingState(!0)}removeEditListeners(){this.#ae(),this.setEditingState(!1)}dragOver(e){for(let{type:t}of e.dataTransfer.items)for(let n of this.#g)if(n.isHandlingMimeForPasting(t)){e.dataTransfer.dropEffect=`copy`,e.preventDefault();return}}drop(e){for(let t of e.dataTransfer.items)for(let n of this.#g)if(n.isHandlingMimeForPasting(t.type)){n.paste(t,this.currentLayer),e.preventDefault();return}}copy(e){if(e.preventDefault(),this.#t?.commitOrRemove(),!this.hasSelection)return;let t=[];for(let e of this.#L){let n=e.serialize(!0);n&&t.push(n)}t.length!==0&&e.clipboardData.setData(`application/pdfjs`,JSON.stringify(t))}cut(e){this.copy(e),this.delete()}async paste(e){e.preventDefault();let{clipboardData:t}=e;for(let e of t.items)for(let t of this.#g)if(t.isHandlingMimeForPasting(e.type)){t.paste(e,this.currentLayer);return}let n=t.getData(`application/pdfjs`);if(!n)return;try{n=JSON.parse(n)}catch(e){T(`paste: "${e.message}".`);return}if(!Array.isArray(n))return;this.unselectAll();let r=this.currentLayer;try{let e=[];for(let t of n){let n=await r.deserialize(t);if(!n)return;e.push(n)}this.addCommands({cmd:()=>{for(let t of e)this.#pe(t);this.#ge(e)},undo:()=>{for(let t of e)t.remove()},mustExec:!0})}catch(e){T(`paste: "${e.message}".`)}}keydown(t){!this.isShiftKeyDown&&t.key===`Shift`&&(this.isShiftKeyDown=!0),this.#I!==u.NONE&&!this.isEditorHandlingKeyboard&&e._keyboardManager.exec(this,t)}keyup(e){this.isShiftKeyDown&&e.key===`Shift`&&(this.isShiftKeyDown=!1,this.#T&&(this.#T=!1,this.#ee(`main_toolbar`)))}onEditingAction({name:e}){switch(e){case`undo`:case`redo`:case`delete`:case`selectAll`:this[e]();break;case`highlightSelection`:this.highlightSelection(`context_menu`);break;case`commentSelection`:this.commentSelection(`context_menu`)}}updatePageIndex(e,t){for(let n of this.getEditors(e))n.pageIndex=t;let n=this.#a.get(e);n&&(n.pageIndex=t,this.#i.set(t,n),this.#O?n.enable():n.disable())}startUpdatePages(){this.#a=new Map(this.#i),this.#i.clear()}endUpdatePages(){this.#a=null}clonePage(e,t){for(let n of this.getEditors(e)){let e=n.serialize(n.mode!==u.HIGHLIGHT);e&&(e.pageIndex=t,e.id=this.getId(),e.isClone=!0,delete e.popupRef,this.#s.setValue(e.id,e))}}findClonesForPage(e){let t=[],{pageIndex:n}=e;for(let[r,i]of this.#s)i.pageIndex===n&&i.isClone&&(this.#s.remove(r),t.push(e.deserialize(i).then(t=>{t&&(t.isClone=!0,e.addOrRebuild(t))})));return Promise.all(t)}#le(e){Object.entries(e).some(([e,t])=>this.#U[e]!==t)&&(this._eventBus.dispatch(`editingstateschanged`,{source:this,details:Object.assign(this.#U,e)}),this.#I===u.HIGHLIGHT&&e.hasSelectedEditor===!1&&this.#ue([[d.HIGHLIGHT_FREE,!0]]))}#ue(e){this._eventBus.dispatch(`annotationeditorparamschanged`,{source:this,details:e})}setEditingState(e){e?(this.#ne(),this.#oe(),this.#le({isEditing:this.#I!==u.NONE,isEmpty:this.#he(),hasSomethingToUndo:this.#l.hasSomethingToUndo(),hasSomethingToRedo:this.#l.hasSomethingToRedo(),hasSelectedEditor:!1})):(this.#re(),this.#se(),this.#le({isEditing:!1}),this.disableUserSelect(!1))}registerEditorTypes(e){if(!this.#g){this.#g=e;for(let e of this.#g)this.#ue(e.defaultPropertiesToUpdate)}}getId(){return this.#D.id}get currentLayer(){return this.#i.get(this.#p)}getLayer(e){return this.#i.get(e)}get currentPageIndex(){return this.#p}addLayer(e){this.#i.set(e.pageIndex,e),this.#O?e.enable():e.disable()}removeLayer(e){this.#i.delete(e.pageIndex)}async updateMode(e,t=null,n=!1,r=!1,i=!1,a=!1){if(this.#I!==e&&!(this.#Y&&(await this.#Y.promise,!this.#Y))){if(this.#Y=Promise.withResolvers(),this.#f?.commitOrRemove(),this.#I===u.POPUP&&this.#u?.hideSidebar(),this.#u?.destroyPopup(),this.#I=e,e===u.NONE){this.setEditingState(!1),this.#fe();for(let e of this.#r.values())e.hideStandaloneCommentButton();this._editorUndoBar?.hide(),this.toggleComment(null),this.#Y.resolve();return}for(let e of this.#r.values())e.addStandaloneCommentButton();e===u.SIGNATURE&&await this.#z?.loadSignatures(),n&&H.clearPointerType(),this.setEditingState(!0),await this.#de(),this.unselectAll();for(let t of this.#i.values())t.updateMode(e);if(e===u.POPUP){this.#n||=await this.#H.getAnnotationsByType(new Set(this.#g.map(e=>e._editorType)));let e=new Set,t=[];for(let n of this.#r.values()){let{annotationElementId:r,hasComment:i,deleted:a}=n;r&&e.add(r),i&&!a&&t.push(n.getData())}for(let n of this.#n){let{id:r,popupRef:i,contentsObj:a}=n;i&&a?.str&&!e.has(r)&&!this.#m.has(r)&&t.push(n)}this.#u?.showSidebar(t)}if(!t){r&&this.addNewEditorFromKeyboard(),this.#Y.resolve();return}for(let e of this.#r.values())e.uid===t?(this.setSelected(e),a?e.editComment():i?e.enterInEditMode():e.focus()):e.unselect();this.#Y.resolve()}}addNewEditorFromKeyboard(){this.currentLayer.canCreateNewEmptyEditor()&&this.currentLayer.addNewEditor()}updateToolbar(e){e.mode!==this.#I&&this._eventBus.dispatch(`switchannotationeditormode`,{source:this,...e})}updateParams(e,t){if(this.#g){switch(e){case d.CREATE:this.currentLayer.addNewEditor(t);return;case d.HIGHLIGHT_SHOW_ALL:this._eventBus.dispatch(`reporttelemetry`,{source:this,details:{type:`editing`,data:{type:`highlight`,action:`toggle_visibility`}}}),(this.#V||=new Map).set(e,t),this.showAllEditors(`highlight`,t)}if(this.hasSelection)for(let n of this.#L)n.updateParams(e,t);else for(let n of this.#g)n.updateDefaultParams(e,t)}}showAllEditors(e,t,n=!1){for(let n of this.#r.values())n.editorType===e&&n.show(t);(this.#V?.get(d.HIGHLIGHT_SHOW_ALL)??!0)!==t&&this.#ue([[d.HIGHLIGHT_SHOW_ALL,t]])}enableWaiting(e=!1){if(this.#A!==e){this.#A=e;for(let t of this.#i.values())e?t.disableClick():t.enableClick(),t.div.classList.toggle(`waiting`,e)}}async#de(){if(!this.#O){this.#O=!0;let e=[];for(let t of this.#i.values())e.push(t.enable());await Promise.all(e);for(let e of this.#r.values())e.enable()}}#fe(){if(this.unselectAll(),this.#O){this.#O=!1;for(let e of this.#i.values())e.disable();for(let e of this.#r.values())e.disable()}}*getEditors(e){for(let t of this.#r.values())t.pageIndex===e&&(yield t)}getEditor(e){return this.#r.get(e)}addEditor(e){this.#r.set(e.id,e)}removeEditor(e){e.div.contains(document.activeElement)&&(this.#S&&clearTimeout(this.#S),this.#S=setTimeout(()=>{this.focusMainContainer(),this.#S=null},0)),this.#r.delete(e.id),e.annotationElementId&&this.#P?.delete(e.annotationElementId),this.unselect(e),(!e.annotationElementId||!this.#m.has(e.annotationElementId))&&this.#s?.remove(e.id)}addDeletedAnnotationElement(e){this.#m.add(e.annotationElementId),this.addChangedExistingAnnotation(e),e.deleted=!0}isDeletedAnnotationElement(e){return this.#m.has(e)}removeDeletedAnnotationElement(e){this.#m.delete(e.annotationElementId),this.removeChangedExistingAnnotation(e),e.deleted=!1}#pe(e){let t=this.#i.get(e.pageIndex);t?t.addOrRebuild(e):(this.addEditor(e),this.addToAnnotationStorage(e))}setActiveEditor(e){this.#t!==e&&(this.#t=e,e&&this.#ue(e.propertiesToUpdate))}get#me(){let e=null;for(e of this.#L);return e}updateUI(e){this.#me===e&&this.#ue(e.propertiesToUpdate)}updateUIForDefaultProperties(e){this.#ue(e.defaultPropertiesToUpdate)}toggleSelected(e){if(this.#L.has(e)){this.#L.delete(e),e.unselect(),this.#le({hasSelectedEditor:this.hasSelection});return}this.#L.add(e),e.select(),this.#ue(e.propertiesToUpdate),this.#le({hasSelectedEditor:!0})}setSelected(e){this.updateToolbar({mode:e.mode,editId:e.uid}),this.#f?.commitOrRemove();for(let t of this.#L)t!==e&&t.unselect();this.#u?.destroyPopup(),this.#L.clear(),this.#L.add(e),e.select(),this.#ue(e.propertiesToUpdate),this.#le({hasSelectedEditor:!0})}get firstSelectedEditor(){return this.#L.values().next().value}unselect(e){e.unselect(),this.#L.delete(e),this.#le({hasSelectedEditor:this.hasSelection})}get hasSelection(){return this.#L.size!==0}get isEnterHandled(){return this.#L.size===1&&this.firstSelectedEditor.isEnterHandled}undo(){this.#l.undo(),this.#le({hasSomethingToUndo:this.#l.hasSomethingToUndo(),hasSomethingToRedo:!0,isEmpty:this.#he()}),this._editorUndoBar?.hide()}redo(){this.#l.redo(),this.#le({hasSomethingToUndo:!0,hasSomethingToRedo:this.#l.hasSomethingToRedo(),isEmpty:this.#he()})}addCommands(e){this.#l.add(e),this.#le({hasSomethingToUndo:!0,hasSomethingToRedo:!1,isEmpty:this.#he()})}cleanUndoStack(e){this.#l.cleanType(e)}#he(){if(this.#r.size===0)return!0;if(this.#r.size===1)for(let e of this.#r.values())return e.isEmpty();return!1}delete(){this.commitOrRemove();let e=this.currentLayer?.endDrawingSession(!0);if(!this.hasSelection&&!e)return;let t=e?[e]:[...this.#L],n=()=>{this._editorUndoBar?.show(r,t.length===1?t[0].editorType:t.length);for(let e of t)e.remove()},r=()=>{for(let e of t)this.#pe(e)};this.addCommands({cmd:n,undo:r,mustExec:!0})}commitOrRemove(){this.#t?.commitOrRemove()}hasSomethingToControl(){return this.#t||this.hasSelection}#ge(e){for(let e of this.#L)e.unselect();this.#L.clear();for(let t of e)t.isEmpty()||(this.#L.add(t),t.select());this.#le({hasSelectedEditor:this.hasSelection})}selectAll(){for(let e of this.#L)e.commit();this.#ge(this.#r.values())}unselectAll(){if(!(this.#t&&(this.#t.commitOrRemove(),this.#I!==u.NONE))&&!this.#f?.commitOrRemove()&&(this.#u?.destroyPopup(),this.hasSelection)){for(let e of this.#L)e.unselect();this.#L.clear(),this.#le({hasSelectedEditor:!1})}}translateSelectedEditors(e,t,n=!1){if(n||this.commitOrRemove(),!this.hasSelection)return;this.#W[0]+=e,this.#W[1]+=t;let[r,i]=this.#W,a=[...this.#L];this.#G&&clearTimeout(this.#G),this.#G=setTimeout(()=>{this.#G=null,this.#W[0]=this.#W[1]=0,this.addCommands({cmd:()=>{for(let e of a)this.#r.has(e.id)&&(e.translateInPage(r,i),e.translationDone())},undo:()=>{for(let e of a)this.#r.has(e.id)&&(e.translateInPage(-r,-i),e.translationDone())},mustExec:!1})},1e3);for(let n of a)n.translateInPage(e,t),n.translationDone()}setUpDragSession(){if(this.hasSelection){this.disableUserSelect(!0),this.#h=new Map;for(let e of this.#L)this.#h.set(e,{savedX:e.x,savedY:e.y,savedPageIndex:e.pageIndex,newX:0,newY:0,newPageIndex:-1})}}endDragSession(){if(!this.#h)return!1;this.disableUserSelect(!1);let e=this.#h;this.#h=null;let t=!1;for(let[{x:n,y:r,pageIndex:i},a]of e)a.newX=n,a.newY=r,a.newPageIndex=i,t||=n!==a.savedX||r!==a.savedY||i!==a.savedPageIndex;if(!t)return!1;let n=(e,t,n,r)=>{if(this.#r.has(e.id)){let i=this.#i.get(r);i?e._setParentAndPosition(i,t,n):(e.pageIndex=r,e.x=t,e.y=n)}};return this.addCommands({cmd:()=>{for(let[t,{newX:r,newY:i,newPageIndex:a}]of e)n(t,r,i,a)},undo:()=>{for(let[t,{savedX:r,savedY:i,savedPageIndex:a}]of e)n(t,r,i,a)},mustExec:!0}),!0}dragSelectedEditors(e,t){if(this.#h)for(let n of this.#h.keys())n.drag(e,t)}rebuild(e){if(e.parent===null){let t=this.getLayer(e.pageIndex);t?(t.changeParent(e),t.addOrRebuild(e)):(this.addEditor(e),this.addToAnnotationStorage(e),e.rebuild())}else e.parent.addOrRebuild(e)}get isEditorHandlingKeyboard(){return this.getActive()?.shouldGetKeyboardEvents()||this.#L.size===1&&this.firstSelectedEditor.shouldGetKeyboardEvents()}isActive(e){return this.#t===e}getActive(){return this.#t}getMode(){return this.#I}isEditingMode(){return this.#I!==u.NONE}get imageManager(){return M(this,`imageManager`,new et)}getSelectionBoxes(e){if(!e)return null;let t=document.getSelection();for(let n=0,r=t.rangeCount;n({x:(t-r)/a,y:1-(e+o-n)/i,width:s/a,height:o/i});break;case`180`:o=(e,t,o,s)=>({x:1-(e+o-n)/i,y:1-(t+s-r)/a,width:o/i,height:s/a});break;case`270`:o=(e,t,o,s)=>({x:1-(t+s-r)/a,y:(e-n)/i,width:s/a,height:o/i});break;default:o=(e,t,o,s)=>({x:(e-n)/i,y:(t-r)/a,width:o/i,height:s/a})}let s=[];for(let e=0,n=t.rangeCount;ee.stopPropagation(),{signal:r});let i=e=>{e.preventDefault(),this.#c._uiManager.editAltText(this.#c),this.#d&&this.#c._reportTelemetry({action:`pdfjs.image.alt_text.image_status_label_clicked`,data:{label:this.#p}})};return t.addEventListener(`click`,i,{capture:!0,signal:r}),t.addEventListener(`keydown`,e=>{e.target===t&&e.key===`Enter`&&(this.#o=!0,i(e))},{signal:r}),await this.#m(),t}get#p(){return this.#e&&`added`||this.#e===null&&this.guessedText&&`review`||`missing`}finish(){this.#n&&(this.#n.focus({focusVisible:this.#o}),this.#o=!1)}isEmpty(){return this.#d?this.#e===null:!this.#e&&!this.#t}hasData(){return this.#d?this.#e!==null||!!this.#l:this.isEmpty()}get guessedText(){return this.#l}async setGuessedText(t){this.#e===null&&(this.#l=t,this.#u=await e._l10n.get(`pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer`,{generatedAltText:t}),this.#m())}toggleAltTextBadge(e=!1){if(!this.#d||this.#e){this.#s?.remove(),this.#s=null;return}if(!this.#s){let e=this.#s=document.createElement(`div`);e.className=`noAltTextBadge`,this.#c.div.append(e)}this.#s.classList.toggle(`hidden`,!e)}serialize(e){let t=this.#e;return!e&&this.#l===t&&(t=this.#u),{altText:t,decorative:this.#t,guessedText:this.#l,textWithDisclaimer:this.#u}}get data(){return{altText:this.#e,decorative:this.#t}}set data({altText:e,decorative:t,guessedText:n,textWithDisclaimer:r,cancel:i=!1}){n&&(this.#l=n,this.#u=r),(this.#e!==e||this.#t!==t)&&(i||(this.#e=e,this.#t=t),this.#m())}toggle(e=!1){this.#n&&(!e&&this.#a&&(clearTimeout(this.#a),this.#a=null),this.#n.disabled=!e)}shown(){this.#c._reportTelemetry({action:`pdfjs.image.alt_text.image_status_label_displayed`,data:{label:this.#p}})}destroy(){this.#n?.remove(),this.#n=null,this.#r=null,this.#i=null,this.#s?.remove(),this.#s=null}async#m(){let t=this.#n;if(!t)return;if(this.#d){if(t.classList.toggle(`done`,!!this.#e),t.setAttribute(`data-l10n-id`,e.#f[this.#p]),this.#r?.setAttribute(`data-l10n-id`,e.#f[`${this.#p}-label`]),!this.#e){this.#i?.remove();return}}else{if(!this.#e&&!this.#t){t.classList.remove(`done`),this.#i?.remove();return}t.classList.add(`done`),t.setAttribute(`data-l10n-id`,`pdfjs-editor-alt-text-edit-button`)}let n=this.#i;if(!n){this.#i=n=document.createElement(`span`),n.className=`tooltip`,n.setAttribute(`role`,`tooltip`),n.id=`alt-text-tooltip-${this.#c.id}`;let e=this.#c._uiManager._signal;e.addEventListener(`abort`,()=>{clearTimeout(this.#a),this.#a=null},{once:!0}),t.addEventListener(`mouseenter`,()=>{this.#a=setTimeout(()=>{this.#a=null,this.#i.classList.add(`show`),this.#c._reportTelemetry({action:`alt_text_tooltip`})},100)},{signal:e}),t.addEventListener(`mouseleave`,()=>{this.#a&&=(clearTimeout(this.#a),null),this.#i?.classList.remove(`show`)},{signal:e})}this.#t?n.setAttribute(`data-l10n-id`,`pdfjs-editor-alt-text-decorative-tooltip`):(n.removeAttribute(`data-l10n-id`),n.textContent=this.#e),n.parentNode||t.append(n),this.#c.getElementForAltText()?.setAttribute(`aria-describedby`,n.id)}},ot=class{#e=null;#t=null;#n=!1;#r=null;#i=null;#a=null;#o=null;#s=null;#c=!1;#l=null;constructor(e){this.#r=e}renderForToolbar(){let e=this.#t=document.createElement(`button`);return e.className=`comment`,this.#u(e,!1)}renderForStandalone(){let e=this.#e=document.createElement(`button`);e.className=`annotationCommentButton`;let t=this.#r.commentButtonPosition;if(t){let{style:n}=e;n.insetInlineEnd=`calc(${100*(this.#r._uiManager.direction===`ltr`?1-t[0]:t[0])}% - var(--comment-button-dim))`,n.top=`calc(${100*t[1]}% - var(--comment-button-dim))`;let r=this.#r.commentButtonColor;r&&(n.backgroundColor=r)}return this.#u(e,!0)}focusButton(){setTimeout(()=>{(this.#e??this.#t)?.focus()},0)}onUpdatedColor(){if(!this.#e)return;let e=this.#r.commentButtonColor;e&&(this.#e.style.backgroundColor=e),this.#r._uiManager.updatePopupColor(this.#r)}get commentButtonWidth(){return(this.#e?.getBoundingClientRect().width??0)/this.#r.parent.boundingClientRect.width}get commentPopupPositionInLayer(){if(this.#l)return this.#l;if(!this.#e)return null;let{x:e,y:t,height:n}=this.#e.getBoundingClientRect(),{x:r,y:i,width:a,height:o}=this.#r.parent.boundingClientRect;return[(e-r)/a,(t+n-i)/o]}set commentPopupPositionInLayer(e){this.#l=e}hasDefaultPopupPosition(){return this.#l===null}removeStandaloneCommentButton(){this.#e?.remove(),this.#e=null}removeToolbarCommentButton(){this.#t?.remove(),this.#t=null}setCommentButtonStates({selected:e,hasPopup:t}){this.#e&&(this.#e.classList.toggle(`selected`,e),this.#e.ariaExpanded=t)}#u(e,t){if(!this.#r._uiManager.hasCommentManager())return null;e.tabIndex=`0`,e.ariaHasPopup=`dialog`,t?(e.ariaControls=`commentPopup`,e.setAttribute(`data-l10n-id`,`pdfjs-show-comment-button`)):(e.ariaControlsElements=[this.#r._uiManager.getCommentDialogElement()],e.setAttribute(`data-l10n-id`,`pdfjs-editor-add-comment-button`));let n=this.#r._uiManager._signal;if(!(n instanceof AbortSignal)||n.aborted)return e;e.addEventListener(`contextmenu`,R,{signal:n}),t&&(e.addEventListener(`focusin`,e=>{this.#r._focusEventsAllowed=!1,z(e)},{capture:!0,signal:n}),e.addEventListener(`focusout`,e=>{this.#r._focusEventsAllowed=!0,z(e)},{capture:!0,signal:n})),e.addEventListener(`pointerdown`,e=>e.stopPropagation(),{signal:n});let r=t=>{t.preventDefault(),e===this.#t?this.edit():this.#r.toggleComment(!0)};return e.addEventListener(`click`,r,{capture:!0,signal:n}),e.addEventListener(`keydown`,t=>{t.target===e&&t.key===`Enter`&&(this.#n=!0,r(t))},{signal:n}),e.addEventListener(`pointerenter`,()=>{this.#r.toggleComment(!1,!0)},{signal:n}),e.addEventListener(`pointerleave`,()=>{this.#r.toggleComment(!1,!1)},{signal:n}),e}edit(e){let t=this.commentPopupPositionInLayer,n,r;if(t)[n,r]=t;else{[n,r]=this.#r.commentButtonPosition;let{width:e,height:t,x:i,y:a}=this.#r;n=i+n*e,r=a+r*t}let i=this.#r.parent.boundingClientRect,{x:a,y:o,width:s,height:c}=i;this.#r._uiManager.editComment(this.#r,a+n*s,o+r*c,{...e,parentDimensions:i})}finish(){this.#t&&(this.#t.focus({focusVisible:this.#n}),this.#n=!1)}isDeleted(){return this.#c||this.#o===``}isEmpty(){return this.#o===null}hasBeenEdited(){return this.isDeleted()||this.#o!==this.#i}serialize(){return this.data}get data(){return{text:this.#o,richText:this.#a,date:this.#s,deleted:this.isDeleted()}}set data(e){if(e!==this.#o&&(this.#a=null),e===null){this.#o=``,this.#c=!0;return}this.#o=e,this.#s=new Date,this.#c=!1}restoreData({text:e,richText:t,date:n}){this.#o=e,this.#a=t,this.#s=n,this.#c=!1}setInitialText(e,t=null){this.#i=e,this.data=e,this.#s=null,this.#a=t}shown(){}destroy(){this.#t?.remove(),this.#t=null,this.#e?.remove(),this.#e=null,this.#o=``,this.#a=null,this.#s=null,this.#r=null,this.#n=!1,this.#c=!1}},st=class e{#e;#t=!1;#n=null;#r;#i;#a;#o;#s=null;#c;#l=null;#u;#d=null;constructor({container:e,isPinchingDisabled:t=null,isPinchingStopped:n=null,onPinchStart:r=null,onPinching:i=null,onPinchEnd:a=null,signal:o}){this.#e=e,this.#n=n,this.#r=t,this.#i=r,this.#a=i,this.#o=a,this.#u=new AbortController,this.#c=AbortSignal.any([o,this.#u.signal]),e.addEventListener(`touchstart`,this.#f.bind(this),{passive:!1,signal:this.#c})}get MIN_TOUCH_DISTANCE_TO_PINCH(){return 35/Ie.pixelRatio}#f(e){if(this.#r?.())return;if(e.touches.length===1){if(this.#s)return;let e=this.#s=new AbortController,t=AbortSignal.any([this.#c,e.signal]),n=this.#e,r={capture:!0,signal:t,passive:!1},i=e=>{e.pointerType===`touch`&&(this.#s?.abort(),this.#s=null)};n.addEventListener(`pointerdown`,e=>{e.pointerType===`touch`&&(z(e),i(e))},r),n.addEventListener(`pointerup`,i,r),n.addEventListener(`pointercancel`,i,r);return}if(!this.#d){this.#d=new AbortController;let e=AbortSignal.any([this.#c,this.#d.signal]),t=this.#e,n={signal:e,capture:!1,passive:!1};t.addEventListener(`touchmove`,this.#p.bind(this),n);let r=this.#m.bind(this);t.addEventListener(`touchend`,r,n),t.addEventListener(`touchcancel`,r,n),n.capture=!0,t.addEventListener(`pointerdown`,z,n),t.addEventListener(`pointermove`,z,n),t.addEventListener(`pointercancel`,z,n),t.addEventListener(`pointerup`,z,n),this.#i?.()}if(z(e),e.touches.length!==2||this.#n?.()){this.#l=null;return}let[t,n]=e.touches;t.identifier>n.identifier&&([t,n]=[n,t]),this.#l={touch0X:t.screenX,touch0Y:t.screenY,touch1X:n.screenX,touch1Y:n.screenY}}#p(t){if(!this.#l||t.touches.length!==2)return;z(t);let[n,r]=t.touches;n.identifier>r.identifier&&([n,r]=[r,n]);let{screenX:i,screenY:a}=n,{screenX:o,screenY:s}=r,c=this.#l,{touch0X:l,touch0Y:u,touch1X:d,touch1Y:f}=c,p=d-l,m=f-u,h=o-i,g=s-a,_=Math.hypot(h,g)||1,v=Math.hypot(p,m)||1;if(!this.#t&&Math.abs(v-_)<=e.MIN_TOUCH_DISTANCE_TO_PINCH)return;if(c.touch0X=i,c.touch0Y=a,c.touch1X=o,c.touch1Y=s,!this.#t){this.#t=!0;return}let y=[(i+o)/2,(a+s)/2];this.#a?.(y,v,_)}#m(e){e.touches.length>=2||(this.#d&&(this.#d.abort(),this.#d=null,this.#o?.()),this.#l&&(z(e),this.#l=null,this.#t=!1))}destroy(){this.#u?.abort(),this.#u=null,this.#s?.abort(),this.#s=null}},U=class e{#e=null;#t=null;#n=null;#r=null;#i=null;#a=!1;#o=null;#s=``;#c=null;#l=null;#u=null;#d=null;#f=null;#p=``;#m=!1;#h=null;#g=!1;#_=!1;#v=!1;#y=null;#b=0;#x=0;#S=null;#C=null;isSelected=!1;_isCopy=!1;_editToolbar=null;_initialOptions=Object.create(null);_initialData=null;_isVisible=!0;_uiManager=null;_focusEventsAllowed=!0;static _l10n=null;static _l10nAlert=null;static _l10nResizer=null;#w=!1;#T=e._zIndex++;static _borderLineWidth=-1;static _colorManager=new rt;static _zIndex=1;static _telemetryTimeout=1e3;static get _resizerKeyboardManager(){let t=e.prototype._resizeWithKeyboard,n=it.TRANSLATE_SMALL,r=it.TRANSLATE_BIG;return M(this,`_resizerKeyboardManager`,new nt([[[`ArrowLeft`],t,{args:[-n,0]}],[[`ctrl+ArrowLeft`,`mac+shift+ArrowLeft`],t,{args:[-r,0]}],[[`ArrowRight`],t,{args:[n,0]}],[[`ctrl+ArrowRight`,`mac+shift+ArrowRight`],t,{args:[r,0]}],[[`ArrowUp`],t,{args:[0,-n]}],[[`ctrl+ArrowUp`,`mac+shift+ArrowUp`],t,{args:[0,-r]}],[[`ArrowDown`],t,{args:[0,n]}],[[`ctrl+ArrowDown`,`mac+shift+ArrowDown`],t,{args:[0,r]}],[[`Escape`],e.prototype._stopResizingWithKeyboard]]))}constructor(e){this.parent=e.parent,this.id=e.id,this.width=this.height=null,this.pageIndex=e.parent.pageIndex,this.name=e.name,this.div=null,this._uiManager=e.uiManager,this.annotationElementId=null,this._willKeepAspectRatio=!1,this._initialOptions.isCentered=e.isCentered,this._structTreeParentId=null,this.annotationElementId=e.annotationElementId||null,this.creationDate=e.creationDate||new Date,this.modificationDate=e.modificationDate||null,this.canAddComment=!0;let{rotation:t,rawDims:{pageWidth:n,pageHeight:r,pageX:i,pageY:a}}=this.parent.viewport;this.rotation=t,this.pageRotation=(360+t-this._uiManager.viewParameters.rotation)%360,this.pageDimensions=[n,r],this.pageTranslation=[i,a];let[o,s]=this.parentDimensions;this.x=e.x/o,this.y=e.y/s,this.isAttachedToDOM=!1,this.deleted=!1}updatePageIndex(e){this.pageIndex=e}get editorType(){return Object.getPrototypeOf(this).constructor._type}get mode(){return Object.getPrototypeOf(this).constructor._editorType}static get isDrawer(){return!1}static get _defaultLineColor(){return M(this,`_defaultLineColor`,this._colorManager.getHexCode(`CanvasText`))}static deleteAnnotationElement(e){let t=new ct({id:e._uiManager.getId(),parent:e.parent,uiManager:e._uiManager});t.annotationElementId=e.annotationElementId,t.deleted=!0,t._uiManager.addToAnnotationStorage(t)}static initialize(t,n){if(e._l10n??=t,e._l10nAlert??=Object.freeze({highlight:`pdfjs-editor-highlight-added-alert`,freetext:`pdfjs-editor-freetext-added-alert`,ink:`pdfjs-editor-ink-added-alert`,stamp:`pdfjs-editor-stamp-added-alert`,signature:`pdfjs-editor-signature-added-alert`}),e._l10nResizer??=Object.freeze({topLeft:`pdfjs-editor-resizer-top-left`,topMiddle:`pdfjs-editor-resizer-top-middle`,topRight:`pdfjs-editor-resizer-top-right`,middleRight:`pdfjs-editor-resizer-middle-right`,bottomRight:`pdfjs-editor-resizer-bottom-right`,bottomMiddle:`pdfjs-editor-resizer-bottom-middle`,bottomLeft:`pdfjs-editor-resizer-bottom-left`,middleLeft:`pdfjs-editor-resizer-middle-left`}),e._borderLineWidth!==-1)return;let r=getComputedStyle(document.documentElement);e._borderLineWidth=parseFloat(r.getPropertyValue(`--outline-width`))||0}static updateDefaultParams(e,t){}static get defaultPropertiesToUpdate(){return[]}static isHandlingMimeForPasting(e){return!1}static paste(e,t){E(`Not implemented`)}get propertiesToUpdate(){return[]}get _isDraggable(){return this.#w}set _isDraggable(e){this.#w=e,this.div?.classList.toggle(`draggable`,e)}get uid(){return this.annotationElementId||this.id}get isEnterHandled(){return!0}center(){let[e,t]=this.pageDimensions;switch(this.parentRotation){case 90:this.x-=this.height*t/(e*2),this.y+=this.width*e/(t*2);break;case 180:this.x+=this.width/2,this.y+=this.height/2;break;case 270:this.x+=this.height*t/(e*2),this.y-=this.width*e/(t*2);break;default:this.x-=this.width/2,this.y-=this.height/2}this.fixAndSetPosition()}addCommands(e){this._uiManager.addCommands(e)}get currentLayer(){return this._uiManager.currentLayer}setInBackground(){this.div.style.zIndex=0}setInForeground(){this.div.style.zIndex=this.#T}setParent(e){e===null?(this.#W(),this.#d?.remove(),this.#d=null):(this.pageIndex=e.pageIndex,this.pageDimensions=e.pageDimensions),this.parent=e}focusin(e){this._focusEventsAllowed&&(this.#m?this.#m=!1:this.parent.setSelected(this))}focusout(e){this._focusEventsAllowed&&this.isAttachedToDOM&&(e.relatedTarget?.closest(`#${this.id}`)||(e.preventDefault(),this.parent?.isMultipleSelection||this.commitOrRemove()))}commitOrRemove(){this.isEmpty()?this.remove():this.commit()}commit(){this.isInEditMode()&&this.addToAnnotationStorage()}addToAnnotationStorage(){this._uiManager.addToAnnotationStorage(this)}setAt(e,t,n,r){let[i,a]=this.parentDimensions;[n,r]=this.screenToPageTranslation(n,r),this.x=(e+n)/i,this.y=(t+r)/a,this.fixAndSetPosition()}_moveAfterPaste(e,t){if(this.isClone){delete this.isClone;return}let[n,r]=this.parentDimensions;this.setAt(e*n,t*r,this.width*n,this.height*r),this._onTranslated()}#E([e,t],n,r){[n,r]=this.screenToPageTranslation(n,r),this.x+=n/e,this.y+=r/t,this._onTranslating(this.x,this.y),this.fixAndSetPosition()}translate(e,t){this.#E(this.parentDimensions,e,t)}translateInPage(e,t){this.#h||=[this.x,this.y,this.width,this.height],this.#E(this.pageDimensions,e,t),this.div.scrollIntoView({block:`nearest`})}translationDone(){this._onTranslated(this.x,this.y)}drag(e,t){this.#h||=[this.x,this.y,this.width,this.height];let{div:n,parentDimensions:[r,i]}=this;if(this.x+=e/r,this.y+=t/i,this.parent&&(this.x<0||this.x>1||this.y<0||this.y>1)){let{x:e,y:t}=this.div.getBoundingClientRect();this.parent.findNewParent(this,e,t)&&(this.x-=Math.floor(this.x),this.y-=Math.floor(this.y))}let{x:a,y:o}=this,[s,c]=this.getBaseTranslation();a+=s,o+=c;let{style:l}=n;l.left=`${(100*a).toFixed(2)}%`,l.top=`${(100*o).toFixed(2)}%`,this._onTranslating(a,o),n.scrollIntoView({block:`nearest`})}_onTranslating(e,t){}_onTranslated(e,t){}get _hasBeenMoved(){return!!this.#h&&(this.#h[0]!==this.x||this.#h[1]!==this.y)}get _hasBeenResized(){return!!this.#h&&(this.#h[2]!==this.width||this.#h[3]!==this.height)}getBaseTranslation(){let[t,n]=this.parentDimensions,{_borderLineWidth:r}=e,i=r/t,a=r/n;switch(this.rotation){case 90:return[-i,a];case 180:return[i,a];case 270:return[i,-a];default:return[-i,-a]}}get _mustFixPosition(){return!0}fixAndSetPosition(e=this.rotation){let{div:{style:t},pageDimensions:[n,r]}=this,{x:i,y:a,width:o,height:s}=this;if(o*=n,s*=r,i*=n,a*=r,this._mustFixPosition)switch(e){case 0:i=L(i,0,n-o),a=L(a,0,r-s);break;case 90:i=L(i,0,n-s),a=L(a,o,r);break;case 180:i=L(i,o,n),a=L(a,s,r);break;case 270:i=L(i,s,n),a=L(a,0,r-o)}this.x=i/=n,this.y=a/=r;let[c,l]=this.getBaseTranslation();i+=c,a+=l,t.left=`${(100*i).toFixed(2)}%`,t.top=`${(100*a).toFixed(2)}%`,this.moveInDOM()}static#D(e,t,n){switch(n){case 90:return[t,-e];case 180:return[-e,-t];case 270:return[-t,e];default:return[e,t]}}screenToPageTranslation(t,n){return e.#D(t,n,this.parentRotation)}pageTranslationToScreen(t,n){return e.#D(t,n,360-this.parentRotation)}#O(e){switch(e){case 90:{let[e,t]=this.pageDimensions;return[0,-e/t,t/e,0]}case 180:return[-1,0,0,-1];case 270:{let[e,t]=this.pageDimensions;return[0,e/t,-t/e,0]}default:return[1,0,0,1]}}get parentScale(){return this._uiManager.viewParameters.realScale}get parentRotation(){return(this._uiManager.viewParameters.rotation+this.pageRotation)%360}get parentDimensions(){let{parentScale:e,pageDimensions:[t,n]}=this;return[t*e,n*e]}setDims(){let{div:{style:e},width:t,height:n}=this;e.width=`${(100*t).toFixed(2)}%`,e.height=`${(100*n).toFixed(2)}%`}getInitialTranslation(){return[0,0]}#k(){if(this.#c)return;this.#c=document.createElement(`div`),this.#c.classList.add(`resizers`);let e=this._willKeepAspectRatio?[`topLeft`,`topRight`,`bottomRight`,`bottomLeft`]:[`topLeft`,`topMiddle`,`topRight`,`middleRight`,`bottomRight`,`bottomMiddle`,`bottomLeft`,`middleLeft`],t=this._uiManager._signal;for(let n of e){let e=document.createElement(`div`);this.#c.append(e),e.classList.add(`resizer`,n),e.setAttribute(`data-resizer-name`,n),e.addEventListener(`pointerdown`,this.#A.bind(this,n),{signal:t}),e.addEventListener(`contextmenu`,R,{signal:t}),e.tabIndex=-1}this.div.prepend(this.#c)}#A(e,t){t.preventDefault();let{isMac:n}=F.platform;if(t.button!==0||t.ctrlKey&&n)return;this.#n?.toggle(!1);let r=this._isDraggable;this._isDraggable=!1,this.#l=[t.screenX,t.screenY];let i=new AbortController,a=this._uiManager.combinedSignal(i);this.parent.togglePointerEvents(!1),window.addEventListener(`pointermove`,this.#N.bind(this,e),{passive:!0,capture:!0,signal:a}),window.addEventListener(`touchmove`,z,{passive:!1,signal:a}),window.addEventListener(`contextmenu`,R,{signal:a}),this.#u={savedX:this.x,savedY:this.y,savedWidth:this.width,savedHeight:this.height};let o=this.parent.div.style.cursor,s=this.div.style.cursor;this.div.style.cursor=this.parent.div.style.cursor=window.getComputedStyle(t.target).cursor;let c=()=>{i.abort(),this.parent.togglePointerEvents(!0),this.#n?.toggle(!0),this._isDraggable=r,this.parent.div.style.cursor=o,this.div.style.cursor=s,this.#M()};window.addEventListener(`pointerup`,c,{signal:a}),window.addEventListener(`blur`,c,{signal:a})}#j(e,t,n,r){this.width=n,this.height=r,this.x=e,this.y=t,this.setDims(),this.fixAndSetPosition(),this._onResized()}_onResized(){}#M(){if(!this.#u)return;let{savedX:e,savedY:t,savedWidth:n,savedHeight:r}=this.#u;this.#u=null;let i=this.x,a=this.y,o=this.width,s=this.height;(i!==e||a!==t||o!==n||s!==r)&&this.addCommands({cmd:this.#j.bind(this,i,a,o,s),undo:this.#j.bind(this,e,t,n,r),mustExec:!0})}static _round(e){return Math.round(e*1e4)/1e4}#N(t,n){let[r,i]=this.parentDimensions,a=this.x,o=this.y,s=this.width,c=this.height,l=e.MIN_SIZE/r,u=e.MIN_SIZE/i,d=this.#O(this.rotation),f=(e,t)=>[d[0]*e+d[2]*t,d[1]*e+d[3]*t],p=this.#O(360-this.rotation),m=(e,t)=>[p[0]*e+p[2]*t,p[1]*e+p[3]*t],h,g,_=!1,v=!1;switch(t){case`topLeft`:_=!0,h=(e,t)=>[0,0],g=(e,t)=>[e,t];break;case`topMiddle`:h=(e,t)=>[e/2,0],g=(e,t)=>[e/2,t];break;case`topRight`:_=!0,h=(e,t)=>[e,0],g=(e,t)=>[0,t];break;case`middleRight`:v=!0,h=(e,t)=>[e,t/2],g=(e,t)=>[0,t/2];break;case`bottomRight`:_=!0,h=(e,t)=>[e,t],g=(e,t)=>[0,0];break;case`bottomMiddle`:h=(e,t)=>[e/2,t],g=(e,t)=>[e/2,0];break;case`bottomLeft`:_=!0,h=(e,t)=>[0,t],g=(e,t)=>[e,0];break;case`middleLeft`:v=!0,h=(e,t)=>[0,t/2],g=(e,t)=>[e,t/2]}let y=h(s,c),b=g(s,c),x=f(...b),S=e._round(a+x[0]),C=e._round(o+x[1]),w=1,T=1,E,D;if(n.fromKeyboard)({deltaX:E,deltaY:D}=n);else{let{screenX:e,screenY:t}=n,[r,i]=this.#l;[E,D]=this.screenToPageTranslation(e-r,t-i),this.#l[0]=e,this.#l[1]=t}if([E,D]=m(E/r,D/i),_){let e=Math.hypot(s,c);w=T=Math.max(Math.min(Math.hypot(b[0]-y[0]-E,b[1]-y[1]-D)/e,1/s,1/c),l/s,u/c)}else v?w=L(Math.abs(b[0]-y[0]-E),l,1)/s:T=L(Math.abs(b[1]-y[1]-D),u,1)/c;let O=e._round(s*w),k=e._round(c*T);x=f(...g(O,k));let A=S-x[0],j=C-x[1];this.#h||=[this.x,this.y,this.width,this.height],this.width=O,this.height=k,this.x=A,this.y=j,this.setDims(),this.fixAndSetPosition(),this._onResizing()}_onResizing(){}altTextFinish(){this.#n?.finish()}get toolbarButtons(){return null}async addEditToolbar(){if(this._editToolbar||this.#_)return this._editToolbar;this._editToolbar=new Ye(this),this.div.append(this._editToolbar.render());let{toolbarButtons:e}=this;if(e)for(let[t,n]of e)await this._editToolbar.addButton(t,n);return this.hasComment||this._editToolbar.addButton(`comment`,this.addCommentButton()),this._editToolbar.addButton(`delete`),this._editToolbar}addCommentButtonInToolbar(){this._editToolbar?.addButtonBefore(`comment`,this.addCommentButton(),`.deleteButton`)}removeCommentButtonFromToolbar(){this._editToolbar?.removeButton(`comment`)}removeEditToolbar(){this._editToolbar?.remove(),this._editToolbar=null,this.#n?.destroy()}addContainer(e){let t=this._editToolbar?.div;t?t.before(e):this.div.append(e)}getClientDimensions(){return this.div.getBoundingClientRect()}createAltText(){return this.#n||(at.initialize(e._l10n),this.#n=new at(this),this.#e&&=(this.#n.data=this.#e,null)),this.#n}get altTextData(){return this.#n?.data}set altTextData(e){this.#n&&(this.#n.data=e)}get guessedAltText(){return this.#n?.guessedText}async setGuessedAltText(e){await this.#n?.setGuessedText(e)}serializeAltText(e){return this.#n?.serialize(e)}hasAltText(){return!!this.#n&&!this.#n.isEmpty()}hasAltTextData(){return this.#n?.hasData()??!1}focusCommentButton(){this.#r?.focusButton()}addCommentButton(){return this.canAddComment?this.#r||=new ot(this):null}addStandaloneCommentButton(){if(this._uiManager.hasCommentManager()){if(this.#i){this._uiManager.isEditingMode()&&this.#i.classList.remove(`hidden`);return}this.hasComment&&(this.#i=this.#r.renderForStandalone(),this.div.append(this.#i))}}removeStandaloneCommentButton(){this.#r.removeStandaloneCommentButton(),this.#i=null}hideStandaloneCommentButton(){this.#i?.classList.add(`hidden`)}get comment(){if(!this.#r)return null;let{data:{richText:e,text:t,date:n,deleted:r}}=this.#r;return{text:t,richText:e,date:n,deleted:r,color:this.getNonHCMColor(),opacity:this.opacity??1}}set comment(e){this.#r||=new ot(this),typeof e==`object`&&e?this.#r.restoreData(e):this.#r.data=e,this.hasComment?(this.removeCommentButtonFromToolbar(),this.addStandaloneCommentButton(),this._uiManager.updateComment(this)):(this.addCommentButtonInToolbar(),this.removeStandaloneCommentButton(),this._uiManager.removeComment(this))}setCommentData({comment:e,popupRef:t,richText:n}){if(!t||(this.#r||=new ot(this),this.#r.setInitialText(e,n),!this.annotationElementId))return;let r=this._uiManager.getAndRemoveDataFromAnnotationStorage(this.annotationElementId);r&&this.updateFromAnnotationLayer(r)}get hasEditedComment(){return this.#r?.hasBeenEdited()}get hasDeletedComment(){return this.#r?.isDeleted()}get hasComment(){return!!this.#r&&!this.#r.isEmpty()&&!this.#r.isDeleted()}async editComment(e){this.#r||=new ot(this),this.#r.edit(e)}toggleComment(e,t=void 0){this.hasComment&&this._uiManager.toggleComment(this,e,t)}setSelectedCommentButton(e){this.#r.setSelectedButton(e)}addComment(e){if(this.hasEditedComment){let[,,,t]=e.rect,[n]=this.pageDimensions,[r]=this.pageTranslation,i=r+n+1,a=t-100,o=i+180;e.popup={contents:this.comment.text,deleted:this.comment.deleted,rect:[i,a,o,t]}}}updateFromAnnotationLayer({popup:{contents:e,deleted:t}}){this.#r.data=t?null:e}get parentBoundingClientRect(){return this.parent.boundingClientRect}render(){let e=this.div=document.createElement(`div`);e.setAttribute(`data-editor-rotation`,(360-this.rotation)%360),e.className=this.name,e.setAttribute(`id`,this.id),e.tabIndex=this.#a?-1:0,e.setAttribute(`role`,`application`),this.defaultL10nId&&e.setAttribute(`data-l10n-id`,this.defaultL10nId),this._isVisible||e.classList.add(`hidden`),this.setInForeground(),this.#z();let[t,n]=this.parentDimensions;this.parentRotation%180!=0&&(e.style.maxWidth=`${(100*n/t).toFixed(2)}%`,e.style.maxHeight=`${(100*t/n).toFixed(2)}%`);let[r,i]=this.getInitialTranslation();return this.translate(r,i),Qe(this,e,[`keydown`,`pointerdown`,`dblclick`]),this.isResizable&&this._uiManager._supportsPinchToZoom&&(this.#C||=new st({container:e,isPinchingDisabled:()=>!this.isSelected,onPinchStart:this.#P.bind(this),onPinching:this.#F.bind(this),onPinchEnd:this.#I.bind(this),signal:this._uiManager._signal})),this.addStandaloneCommentButton(),this._uiManager._editorUndoBar?.hide(),e}#P(){this.#u={savedX:this.x,savedY:this.y,savedWidth:this.width,savedHeight:this.height},this.#n?.toggle(!1),this.parent.togglePointerEvents(!1)}#F(t,n,r){let i=.7,a=r/n*i+1-i;if(a===1)return;let o=this.#O(this.rotation),s=(e,t)=>[o[0]*e+o[2]*t,o[1]*e+o[3]*t],[c,l]=this.parentDimensions,u=this.x,d=this.y,f=this.width,p=this.height,m=e.MIN_SIZE/c,h=e.MIN_SIZE/l;a=Math.max(Math.min(a,1/f,1/p),m/f,h/p);let g=e._round(f*a),_=e._round(p*a);if(g===f&&_===p)return;this.#h||=[u,d,f,p];let v=s(f/2,p/2),y=e._round(u+v[0]),b=e._round(d+v[1]),x=s(g/2,_/2);this.x=y-x[0],this.y=b-x[1],this.width=g,this.height=_,this.setDims(),this.fixAndSetPosition(),this._onResizing()}#I(){this.#n?.toggle(!0),this.parent.togglePointerEvents(!0),this.#M()}pointerdown(e){let{isMac:t}=F.platform;if(e.button!==0||e.ctrlKey&&t){e.preventDefault();return}if(this.#m=!0,this._isDraggable){this.#R(e);return}this.#L(e)}#L(e){let{isMac:t}=F.platform;e.ctrlKey&&!t||e.shiftKey||e.metaKey&&t?this.parent.toggleSelected(this):this.parent.setSelected(this)}#R(e){let{isSelected:t}=this;this._uiManager.setUpDragSession();let n=!1,r=new AbortController,i=this._uiManager.combinedSignal(r),a={capture:!0,passive:!1,signal:i},o=e=>{r.abort(),this.#o=null,this.#m=!1,this._uiManager.endDragSession()||this.#L(e),n&&this._onStopDragging()};t&&(this.#b=e.clientX,this.#x=e.clientY,this.#o=e.pointerId,this.#s=e.pointerType,window.addEventListener(`pointermove`,e=>{n||(n=!0,this._uiManager.toggleComment(this,!0,!1),this._onStartDragging());let{clientX:t,clientY:r,pointerId:i}=e;if(i!==this.#o){z(e);return}let[a,o]=this.screenToPageTranslation(t-this.#b,r-this.#x);this.#b=t,this.#x=r,this._uiManager.dragSelectedEditors(a,o)},a),window.addEventListener(`touchmove`,z,a),window.addEventListener(`pointerdown`,e=>{e.pointerType===this.#s&&(this.#C||e.isPrimary)&&o(e),z(e)},a));let s=e=>{if(!this.#o||this.#o===e.pointerId){o(e);return}z(e)};window.addEventListener(`pointerup`,s,{signal:i}),window.addEventListener(`blur`,s,{signal:i})}_onStartDragging(){}_onStopDragging(){}moveInDOM(){this.#y&&clearTimeout(this.#y),this.#y=setTimeout(()=>{this.#y=null,this.parent?.moveEditorInDOM(this)},0)}_setParentAndPosition(e,t,n){e.changeParent(this),this.x=t,this.y=n,this.fixAndSetPosition(),this._onTranslated()}getRect(e,t,n=this.rotation){let r=this.parentScale,[i,a]=this.pageDimensions,[o,s]=this.pageTranslation,c=e/r,l=t/r,u=this.x*i,d=this.y*a,f=this.width*i,p=this.height*a;switch(n){case 0:return[u+c+o,a-d-l-p+s,u+c+f+o,a-d-l+s];case 90:return[u+l+o,a-d+c+s,u+l+p+o,a-d+c+f+s];case 180:return[u-c-f+o,a-d+l+s,u-c+o,a-d+l+p+s];case 270:return[u-l-p+o,a-d-c-f+s,u-l+o,a-d-c+s];default:throw Error(`Invalid rotation`)}}getRectInCurrentCoords(e,t){let[n,r,i,a]=e,o=i-n,s=a-r;switch(this.rotation){case 0:return[n,t-a,o,s];case 90:return[n,t-r,s,o];case 180:return[i,t-r,o,s];case 270:return[i,t-a,s,o];default:throw Error(`Invalid rotation`)}}getPDFRect(){return this.getRect(0,0)}getNonHCMColor(){return this.color&&e._colorManager.convert(this._uiManager.getNonHCMColor(this.color))}onUpdatedColor(){this.#r?.onUpdatedColor()}getData(){let{comment:{text:e,color:t,date:n,opacity:r,deleted:i,richText:a},uid:o,pageIndex:s,creationDate:c,modificationDate:l}=this;return{id:o,pageIndex:s,rect:this.getPDFRect(),richText:a,contentsObj:{str:e},creationDate:c,modificationDate:n||l,popupRef:!i,color:t,opacity:r}}onceAdded(e){}isEmpty(){return!1}enableEditMode(){return!this.isInEditMode()&&(this.parent.setEditingState(!1),this.#_=!0,!0)}disableEditMode(){return this.isInEditMode()?(this.parent.setEditingState(!0),this.#_=!1,!0):!1}isInEditMode(){return this.#_}shouldGetKeyboardEvents(){return this.#v}needsToBeRebuilt(){return this.div&&!this.isAttachedToDOM}get isOnScreen(){let{top:e,left:t,bottom:n,right:r}=this.getClientDimensions(),{innerHeight:i,innerWidth:a}=window;return t0&&e0}#z(){if(this.#f||!this.div)return;this.#f=new AbortController;let e=this._uiManager.combinedSignal(this.#f);this.div.addEventListener(`focusin`,this.focusin.bind(this),{signal:e}),this.div.addEventListener(`focusout`,this.focusout.bind(this),{signal:e})}rebuild(){this.#z()}rotate(e){}resize(){}serializeDeleted(){return{id:this.annotationElementId,deleted:!0,pageIndex:this.pageIndex,popupRef:this._initialData?.popupRef||``}}serialize(e=!1,t=null){return{annotationType:this.mode,pageIndex:this.pageIndex,rect:this.getPDFRect(),rotation:this.rotation,structTreeParentId:this._structTreeParentId,popupRef:this._initialData?.popupRef||``}}static async deserialize(e,t,n){let r=new this.prototype.constructor({parent:t,id:n.getId(),uiManager:n,annotationElementId:e.annotationElementId,creationDate:e.creationDate,modificationDate:e.modificationDate});r.rotation=e.rotation,r.#e=e.accessibilityData,r._isCopy=e.isCopy||!1;let[i,a]=r.pageDimensions,[o,s,c,l]=r.getRectInCurrentCoords(e.rect,a);return r.x=o/i,r.y=s/a,r.width=c/i,r.height=l/a,r}get hasBeenModified(){return!!this.annotationElementId&&(this.deleted||this.serialize()!==null)}remove(){if(this.#f?.abort(),this.#f=null,this.isEmpty()||this.commit(),this.parent?this.parent.remove(this):this._uiManager.removeEditor(this),this.hideCommentPopup(),this.#y&&=(clearTimeout(this.#y),null),this.#W(),this.removeEditToolbar(),this.#S){for(let e of this.#S.values())clearTimeout(e);this.#S=null}this.parent=null,this.#C?.destroy(),this.#C=null,this.#d?.remove(),this.#d=null}get isResizable(){return!1}makeResizable(){this.isResizable&&(this.#k(),this.#c.classList.remove(`hidden`))}get toolbarPosition(){return null}get commentButtonPosition(){return this._uiManager.direction===`ltr`?[1,0]:[0,0]}get commentButtonPositionInPage(){let{commentButtonPosition:[t,n]}=this,[r,i,a,o]=this.getPDFRect();return[e._round(r+(a-r)*t),e._round(i+(o-i)*(1-n))]}get commentButtonColor(){return this._uiManager.makeCommentColor(this.getNonHCMColor(),this.opacity)}get commentPopupPosition(){return this.#r.commentPopupPositionInLayer}set commentPopupPosition(e){this.#r.commentPopupPositionInLayer=e}hasDefaultPopupPosition(){return this.#r.hasDefaultPopupPosition()}get commentButtonWidth(){return this.#r.commentButtonWidth}get elementBeforePopup(){return this.div}setCommentButtonStates(e){this.#r?.setCommentButtonStates(e)}keydown(t){if(!this.isResizable||t.target!==this.div||t.key!==`Enter`)return;this._uiManager.setSelected(this),this.#u={savedX:this.x,savedY:this.y,savedWidth:this.width,savedHeight:this.height};let n=this.#c.children;if(!this.#t){this.#t=Array.from(n);let t=this.#B.bind(this),r=this.#V.bind(this),i=this._uiManager._signal;for(let n of this.#t){let a=n.getAttribute(`data-resizer-name`);n.setAttribute(`role`,`spinbutton`),n.addEventListener(`keydown`,t,{signal:i}),n.addEventListener(`blur`,r,{signal:i}),n.addEventListener(`focus`,this.#H.bind(this,a),{signal:i}),n.setAttribute(`data-l10n-id`,e._l10nResizer[a])}}let r=this.#t[0],i=0;for(let e of n){if(e===r)break;i++}let a=(360-this.rotation+this.parentRotation)%360/90*(this.#t.length/4);if(a!==i){if(ai)for(let e=0;e{this.div?.classList.contains(`selectedEditor`)&&this._editToolbar?.show()});return}this._editToolbar?.show(),this.#n?.toggleAltTextBadge(!1)}focus(){this.div&&!this.div.contains(document.activeElement)&&setTimeout(()=>this.div?.focus({preventScroll:!0}),0)}unselect(){this.isSelected&&(this.isSelected=!1,this.#c?.classList.add(`hidden`),this.div?.classList.remove(`selectedEditor`),this.div?.contains(document.activeElement)&&this._uiManager.currentLayer.div.focus({preventScroll:!0}),this._editToolbar?.hide(),this.#n?.toggleAltTextBadge(!0),this.hideCommentPopup())}hideCommentPopup(){this.hasComment&&this._uiManager.toggleComment(null)}updateParams(e,t){}disableEditing(){}enableEditing(){}get canChangeContent(){return!1}enterInEditMode(){this.canChangeContent&&(this.enableEditMode(),this.div.focus())}dblclick(e){e.target.nodeName!==`BUTTON`&&(this.enterInEditMode(),this.parent.updateToolbar({mode:this.constructor._editorType,editId:this.uid}))}getElementForAltText(){return this.div}get contentDiv(){return this.div}get isEditing(){return this.#g}set isEditing(e){this.#g=e,this.parent&&(e?(this.parent.setSelected(this),this.parent.setActiveEditor(this)):this.parent.setActiveEditor(null))}static get MIN_SIZE(){return 16}static canCreateNewEmptyEditor(){return!0}get telemetryInitialData(){return{action:`added`}}get telemetryFinalData(){return null}_reportTelemetry(t,n=!1){if(n){this.#S||=new Map;let{action:n}=t,r=this.#S.get(n);r&&clearTimeout(r),r=setTimeout(()=>{this._reportTelemetry(t),this.#S.delete(n),this.#S.size===0&&(this.#S=null)},e._telemetryTimeout),this.#S.set(n,r);return}t.type||=this.editorType,this._uiManager._eventBus.dispatch(`reporttelemetry`,{source:this,details:{type:`editing`,data:t}})}show(e=this._isVisible){this.div.classList.toggle(`hidden`,!e),this._isVisible=e}enable(){this.div&&(this.div.tabIndex=0),this.#a=!1}disable(){this.div&&(this.div.tabIndex=-1),this.#a=!0}updateFakeAnnotationElement(e){if(!this.#d&&!this.deleted){this.#d=e.addFakeAnnotation(this);return}if(this.deleted){this.#d.remove(),this.#d=null;return}(this.hasEditedComment||this._hasBeenMoved||this._hasBeenResized)&&this.#d.updateEdited({rect:this.getPDFRect(),popup:this.comment})}renderAnnotationElement(e){if(this.deleted)return e.hide(),null;let t=e.container.querySelector(`.annotationContent`);if(!t)t=document.createElement(`div`),t.classList.add(`annotationContent`,this.editorType),e.container.prepend(t);else if(t.nodeName===`CANVAS`){let e=t;t=document.createElement(`div`),t.classList.add(`annotationContent`,this.editorType),e.before(t)}return t}resetAnnotationElement(e){let{firstElementChild:t}=e.container;t?.nodeName===`DIV`&&t.classList.contains(`annotationContent`)&&t.remove()}},ct=class extends U{constructor(e){super(e),this.annotationElementId=e.annotationElementId,this.deleted=!0}serialize(){return this.serializeDeleted()}},lt=3285377520,W=4294901760,ut=65535,dt=class{constructor(e){this.h1=e?e&4294967295:lt,this.h2=e?e&4294967295:lt}update(e){let t,n;if(typeof e==`string`){t=new Uint8Array(e.length*2),n=0;for(let r=0,i=e.length;r>>8,t[n++]=i&255)}}else if(ArrayBuffer.isView(e))t=e.slice(),n=t.byteLength;else throw Error(`Invalid data format, must be a string or TypedArray.`);let r=n>>2,i=n-r*4,a=new Uint32Array(t.buffer,0,r),o=0,s=0,c=this.h1,l=this.h2,u=3432918353,d=461845907,f=11601,p=13715;for(let e=0;e>>17,o=o*d&W|o*p&ut,c^=o,c=c<<13|c>>>19,c=c*5+3864292196):(s=a[e],s=s*u&W|s*f&ut,s=s<<15|s>>>17,s=s*d&W|s*p&ut,l^=s,l=l<<13|l>>>19,l=l*5+3864292196);switch(o=0,i){case 3:o^=t[r*4+2]<<16;case 2:o^=t[r*4+1]<<8;case 1:o^=t[r*4],o=o*u&W|o*f&ut,o=o<<15|o>>>17,o=o*d&W|o*p&ut,r&1?c^=o:l^=o}this.h1=c,this.h2=l}hexdigest(){let e=this.h1,t=this.h2;return e^=t>>>1,e=e*3981806797&W|e*36045&ut,t=t*4283543511&W|((t<<16|e>>>16)*2950163797&W)>>>16,e^=t>>>1,e=e*444984403&W|e*60499&ut,t=t*3301882366&W|((t<<16|e>>>16)*3120437893&W)>>>16,e^=t>>>1,(e>>>0).toString(16).padStart(8,`0`)+(t>>>0).toString(16).padStart(8,`0`)}},ft=Object.freeze({map:null,hash:``,transfer:void 0}),pt=class{#e=!1;#t=null;#n=null;#r=new Map;onSetModified=null;onResetModified=null;onAnnotationEditor=null;getValue(e,t){let n=this.#r.get(e);return n===void 0?t:Object.assign(t,n)}getRawValue(e){return this.#r.get(e)}remove(e){let t=this.#r.get(e);t!==void 0&&(t instanceof U&&this.#n.delete(t.annotationElementId),this.#r.delete(e),this.#r.size===0&&this.resetModified(),!this.#r.values().some(e=>e instanceof U)&&this.onAnnotationEditor?.(null))}setValue(e,t){let n=this.#r.get(e),r=!1;if(n!==void 0)for(let[e,i]of Object.entries(t))n[e]!==i&&(r=!0,n[e]=i);else r=!0,this.#r.set(e,t);r&&this.#i(),t instanceof U&&((this.#n||=new Map).set(t.annotationElementId,t),this.onAnnotationEditor?.(t.constructor._type))}has(e){return this.#r.has(e)}get size(){return this.#r.size}#i(){this.#e||(this.#e=!0,this.onSetModified?.())}resetModified(){this.#e&&(this.#e=!1,this.onResetModified?.())}get print(){return new mt(this)}get serializable(){if(this.#r.size===0)return ft;let e=new Map,t=new dt,n=[],r=Object.create(null),i=!1;for(let[n,a]of this.#r){let o=a instanceof U?a.serialize(!1,r):a;a.page&&(a.pageIndex=a.page._pageIndex,delete a.page),o&&(e.set(n,o),t.update(`${n}:${JSON.stringify(o)}`),i||=!!o.bitmap)}if(i)for(let t of e.values())t.bitmap&&n.push(t.bitmap);return e.size>0?{map:e,hash:t.hexdigest(),transfer:n}:ft}get editorStats(){let e=null,t=new Map,n=0,r=0;for(let i of this.#r.values()){if(!(i instanceof U)){i.popup&&(i.popup.deleted?r+=1:n+=1);continue}i.isCommentDeleted?r+=1:i.hasEditedComment&&(n+=1);let a=i.telemetryFinalData;if(!a)continue;let{type:o}=a;t.getOrInsertComputed(o,()=>Object.getPrototypeOf(i).constructor),e||=Object.create(null);let s=e[o]||=new Map;for(let[e,t]of Object.entries(a)){if(e===`type`)continue;let n=s.getOrInsertComputed(e,me);n.set(t,(n.get(t)??0)+1)}}if((r>0||n>0)&&(e||=Object.create(null),e.comments={deleted:r,edited:n}),!e)return null;for(let[n,r]of t)e[n]=r.computeTelemetryFinalData(e[n]);return e}resetModifiedIds(){this.#t=null}updateEditor(e,t){let n=this.#n?.get(e);return n?(n.updateFromAnnotationLayer(t),!0):!1}getEditor(e){return this.#n?.get(e)||null}get modifiedIds(){if(this.#t)return this.#t;let e=[];if(this.#n)for(let t of this.#n.values())t.serialize()&&e.push(t.annotationElementId);let t=``;if(e.length){let n=new dt;n.update(e.join(`,`)),t=n.hexdigest()}return this.#t={ids:new Set(e),hash:t}}[Symbol.iterator](){return this.#r.entries()}},mt=class extends pt{#e=ft;constructor(e){super();let{serializable:t}=e;if(t===ft)return;let{map:n,hash:r,transfer:i}=t,a=structuredClone(n,i?{transfer:i}:null);this.#e={map:a,hash:r,transfer:[]}}get print(){E(`Should not call PrintAnnotationStorage.print`)}get serializable(){return this.#e}get modifiedIds(){return M(this,`modifiedIds`,{ids:new Set,hash:``})}},ht=`__forcedDependency`,{floor:gt,ceil:_t}=Math;function vt(e,t,n,r,i,a){e[t*4+0]=Math.min(e[t*4+0],n),e[t*4+1]=Math.min(e[t*4+1],r),e[t*4+2]=Math.max(e[t*4+2],i),e[t*4+3]=Math.max(e[t*4+3],a)}function yt(e,t,n,r,i){let a;e?(e<0&&(a=i[0],i[0]=i[2],i[2]=a),i[0]*=e,i[2]*=e,t<0&&(a=i[1],i[1]=i[3],i[3]=a),i[1]*=t,i[3]*=t):i.fill(0),i[0]+=n,i[1]+=r,i[2]+=n,i[3]+=r}var bt=new Uint32Array(new Uint8Array([255,255,0,0]).buffer)[0],xt=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}get length(){return this.#e.length}isEmpty(e){return this.#e[e]===bt}minX(e){return this.#t[e*4+0]/256}minY(e){return this.#t[e*4+1]/256}maxX(e){return(this.#t[e*4+2]+1)/256}maxY(e){return(this.#t[e*4+3]+1)/256}},St=(e,t)=>e?.getOrInsertComputed(t,()=>({dependencies:new Set,isRenderingOperation:!1})),Ct=class{#e=[[1,0,0,1,0,0]];#t=[-1/0,-1/0,1/0,1/0];#n=new Float64Array(n);_pendingBBoxIdx=-1;#r;#i;#a;#o;_savesStack=[];_markedContentStack=[];constructor(e,t){this.#r=e.width,this.#i=e.height,this.#s(t)}growOperationsCount(e){e>=this.#o.length&&this.#s(e,this.#o)}#s(e,t){let n=new ArrayBuffer(e*4);this.#a=new Uint8ClampedArray(n),this.#o=new Uint32Array(n),t&&t.length>0?(this.#o.set(t),this.#o.fill(bt,t.length)):this.#o.fill(bt)}get clipBox(){return this.#t}save(e){return this.#t={__proto__:this.#t},this._savesStack.push(e),this}restore(e,t){let n=Object.getPrototypeOf(this.#t);if(n===null)return this;this.#t=n;let r=this._savesStack.pop();return r!==void 0&&(t?.(r,e),this.#o[e]=this.#o[r]),this}recordOpenMarker(e){return this._savesStack.push(e),this}getOpenMarker(){return this._savesStack.length===0?null:this._savesStack.at(-1)}recordCloseMarker(e,t){let n=this._savesStack.pop();return n!==void 0&&(t?.(n,e),this.#o[e]=this.#o[n]),this}beginMarkedContent(e){return this._markedContentStack.push(e),this}endMarkedContent(e,t){let n=this._markedContentStack.pop();return n!==void 0&&(t?.(n,e),this.#o[e]=this.#o[n]),this}pushBaseTransform(e){return this.#e.push(I.multiplyByDOMMatrix(this.#e.at(-1),e.getTransform())),this}popBaseTransform(){return this.#e.length>1&&this.#e.pop(),this}resetBBox(e){return this._pendingBBoxIdx!==e&&(this._pendingBBoxIdx=e,this.#n.set(n,0)),this}recordClipBox(e,t,r,i,a,o){let s=I.multiplyByDOMMatrix(this.#e.at(-1),t.getTransform()),c=n.slice();I.axialAlignedBoundingBox([r,a,i,o],s,c);let l=I.intersect(this.#t,c);return l?(this.#t[0]=l[0],this.#t[1]=l[1],this.#t[2]=l[2],this.#t[3]=l[3]):(this.#t[0]=this.#t[1]=1/0,this.#t[2]=this.#t[3]=-1/0),this}recordBBox(e,t,r,i,a,o){let s=this.#t;if(s[0]===1/0)return this;let c=I.multiplyByDOMMatrix(this.#e.at(-1),t.getTransform());if(s[0]===-1/0)return I.axialAlignedBoundingBox([r,a,i,o],c,this.#n),this;let l=n.slice();return I.axialAlignedBoundingBox([r,a,i,o],c,l),this.#n[0]=L(l[0],s[0],this.#n[0]),this.#n[1]=L(l[1],s[1],this.#n[1]),this.#n[2]=L(l[2],this.#n[2],s[2]),this.#n[3]=L(l[3],this.#n[3],s[3]),this}recordFullPageBBox(e){return this.#n[0]=Math.max(0,this.#t[0]),this.#n[1]=Math.max(0,this.#t[1]),this.#n[2]=Math.min(this.#r,this.#t[2]),this.#n[3]=Math.min(this.#i,this.#t[3]),this}recordOperation(e,t=!1,n){if(this._pendingBBoxIdx!==e)return this;let r=gt(this.#n[0]*256/this.#r),i=gt(this.#n[1]*256/this.#i),a=_t(this.#n[2]*256/this.#r),o=_t(this.#n[3]*256/this.#i);if(vt(this.#a,e,r,i,a,o),n)for(let t of n)for(let n of t)n!==e&&vt(this.#a,n,r,i,a,o);return t||(this._pendingBBoxIdx=-1),this}bboxToClipBoxDropOperation(e){return this._pendingBBoxIdx===e&&(this._pendingBBoxIdx=-1,this.#t[0]=Math.max(this.#t[0],this.#n[0]),this.#t[1]=Math.max(this.#t[1],this.#n[1]),this.#t[2]=Math.min(this.#t[2],this.#n[2]),this.#t[3]=Math.min(this.#t[3],this.#n[3])),this}take(){return new xt(this.#o,this.#a)}takeDebugMetadata(){throw Error(`Unreachable`)}recordSimpleData(e,t){return this}recordIncrementalData(e,t){return this}resetIncrementalData(e,t){return this}recordNamedData(e,t){return this}recordSimpleDataFromNamed(e,t,n){return this}recordFutureForcedDependency(e,t){return this}inheritSimpleDataAsFutureForcedDependencies(e){return this}inheritPendingDependenciesAsFutureForcedDependencies(){return this}recordCharacterBBox(e,t,n,r=1,i=0,a=0,o){return this}getSimpleIndex(e){}recordDependencies(e,t){return this}recordNamedDependency(e,t){return this}recordShowTextOperation(e,t=!1){return this}},wt=class{#e={__proto__:null};#t={__proto__:null,transform:[],moveText:[],sameLineText:[],[ht]:[]};#n=new Map;#r=new Set;#i=new Map;#a;#o;#s;constructor(e,t=!1){this.#s=e,t&&(this.#a=new Map,this.#o=(e,t)=>{St(this.#a,t).dependencies.add(e)})}get clipBox(){return this.#s.clipBox}growOperationsCount(e){this.#s.growOperationsCount(e)}save(e){return this.#e={__proto__:this.#e},this.#t={__proto__:this.#t,transform:{__proto__:this.#t.transform},moveText:{__proto__:this.#t.moveText},sameLineText:{__proto__:this.#t.sameLineText},[ht]:{__proto__:this.#t[ht]}},this.#s.save(e),this}restore(e){this.#s.restore(e,this.#o);let t=Object.getPrototypeOf(this.#e);return t===null?this:(this.#e=t,this.#t=Object.getPrototypeOf(this.#t),this)}recordOpenMarker(e){return this.#s.recordOpenMarker(e,this.#o),this}getOpenMarker(){return this.#s.getOpenMarker()}recordCloseMarker(e){return this.#s.recordCloseMarker(e,this.#o),this}beginMarkedContent(e){return this.#s.beginMarkedContent(e),this}endMarkedContent(e){return this.#s.endMarkedContent(e,this.#o),this}pushBaseTransform(e){return this.#s.pushBaseTransform(e),this}popBaseTransform(){return this.#s.popBaseTransform(),this}recordSimpleData(e,t){return this.#e[e]=t,this}recordIncrementalData(e,t){return this.#t[e].push(t),this}resetIncrementalData(e,t){return this.#t[e].length=0,this}recordNamedData(e,t){return this.#n.set(e,t),this}recordSimpleDataFromNamed(e,t,n){this.#e[e]=this.#n.get(t)??n}recordFutureForcedDependency(e,t){return this.recordIncrementalData(ht,t),this}inheritSimpleDataAsFutureForcedDependencies(e){for(let t of e)t in this.#e&&this.recordFutureForcedDependency(t,this.#e[t]);return this}inheritPendingDependenciesAsFutureForcedDependencies(){for(let e of this.#r)this.recordFutureForcedDependency(ht,e);return this}resetBBox(e){return this.#s.resetBBox(e),this}recordClipBox(e,t,n,r,i,a){return this.#s.recordClipBox(e,t,n,r,i,a),this}recordBBox(e,t,n,r,i,a){return this.#s.recordBBox(e,t,n,r,i,a),this}recordCharacterBBox(e,t,n,r=1,i=0,a=0,o){let s=n.bbox,c,l;if(s&&(c=s[2]!==s[0]&&s[3]!==s[1]&&this.#i.get(n),c!==!1&&(l=[0,0,0,0],I.axialAlignedBoundingBox(s,n.fontMatrix,l),(r!==1||i!==0||a!==0)&&yt(r,-r,i,a,l),c)))return this.recordBBox(e,t,l[0],l[2],l[1],l[3]);if(!o)return this.recordFullPageBBox(e);let u=o();return s&&l&&c===void 0&&(c=l[0]<=i-u.actualBoundingBoxLeft&&l[2]>=i+u.actualBoundingBoxRight&&l[1]<=a-u.actualBoundingBoxAscent&&l[3]>=a+u.actualBoundingBoxDescent,this.#i.set(n,c),c)?this.recordBBox(e,t,l[0],l[2],l[1],l[3]):this.recordBBox(e,t,i-u.actualBoundingBoxLeft,i+u.actualBoundingBoxRight,a-u.actualBoundingBoxAscent,a+u.actualBoundingBoxDescent)}recordFullPageBBox(e){return this.#s.recordFullPageBBox(e),this}getSimpleIndex(e){return this.#e[e]}recordDependencies(e,t){let n=this.#r,r=this.#e,i=this.#t;for(let e of t)e in this.#e?n.add(r[e]):e in i&&i[e].forEach(n.add,n);return this}recordNamedDependency(e,t){return this.#n.has(t)&&this.#r.add(this.#n.get(t)),this}recordOperation(e,t=!1){if(this.recordDependencies(e,[ht]),this.#a){let t=St(this.#a,e),{dependencies:n}=t;this.#r.forEach(n.add,n),this.#s._savesStack.forEach(n.add,n),this.#s._markedContentStack.forEach(n.add,n),n.delete(e),t.isRenderingOperation=!0}let n=!t&&e===this.#s._pendingBBoxIdx;return this.#s.recordOperation(e,t,[this.#r,this.#s._savesStack,this.#s._markedContentStack]),n&&this.#r.clear(),this}recordShowTextOperation(e,t=!1){let n=Array.from(this.#r);this.recordOperation(e,t),this.recordIncrementalData(`sameLineText`,e);for(let e of n)this.recordIncrementalData(`sameLineText`,e);return this}bboxToClipBoxDropOperation(e,t=!1){let n=!t&&e===this.#s._pendingBBoxIdx;return this.#s.bboxToClipBoxDropOperation(e),n&&this.#r.clear(),this}take(){return this.#i.clear(),this.#s.take()}takeDebugMetadata(){return this.#a}},Tt=class e{#e;#t;#n;#r=0;#i=0;constructor(t,n,r){if(t instanceof e&&t.#n===!!r)return t;this.#e=t,this.#t=n,this.#n=!!r}get clipBox(){return this.#e.clipBox}growOperationsCount(){throw Error(`Unreachable`)}save(e){return this.#i++,this.#e.save(this.#t),this}restore(e){return this.#i>0&&(this.#e.restore(this.#t),this.#i--),this}recordOpenMarker(e){return this.#r++,this}getOpenMarker(){return this.#r>0?this.#t:this.#e.getOpenMarker()}recordCloseMarker(e){return this.#r--,this}beginMarkedContent(e){return this}endMarkedContent(e){return this}pushBaseTransform(e){return this.#e.pushBaseTransform(e),this}popBaseTransform(){return this.#e.popBaseTransform(),this}recordSimpleData(e,t){return this.#e.recordSimpleData(e,this.#t),this}recordIncrementalData(e,t){return this.#e.recordIncrementalData(e,this.#t),this}resetIncrementalData(e,t){return this.#e.resetIncrementalData(e,this.#t),this}recordNamedData(e,t){return this}recordSimpleDataFromNamed(e,t,n){return this.#e.recordSimpleDataFromNamed(e,t,this.#t),this}recordFutureForcedDependency(e,t){return this.#e.recordFutureForcedDependency(e,this.#t),this}inheritSimpleDataAsFutureForcedDependencies(e){return this.#e.inheritSimpleDataAsFutureForcedDependencies(e),this}inheritPendingDependenciesAsFutureForcedDependencies(){return this.#e.inheritPendingDependenciesAsFutureForcedDependencies(),this}resetBBox(e){return this.#n||this.#e.resetBBox(this.#t),this}recordClipBox(e,t,n,r,i,a){return this.#n||this.#e.recordClipBox(this.#t,t,n,r,i,a),this}recordBBox(e,t,n,r,i,a){return this.#n||this.#e.recordBBox(this.#t,t,n,r,i,a),this}recordCharacterBBox(e,t,n,r,i,a,o){return this.#n||this.#e.recordCharacterBBox(this.#t,t,n,r,i,a,o),this}recordFullPageBBox(e){return this.#n||this.#e.recordFullPageBBox(this.#t),this}getSimpleIndex(e){return this.#e.getSimpleIndex(e)}recordDependencies(e,t){return this.#e.recordDependencies(this.#t,t),this}recordNamedDependency(e,t){return this.#e.recordNamedDependency(this.#t,t),this}recordOperation(e){return this.#e.recordOperation(this.#t,!0),this}recordShowTextOperation(e){return this.#e.recordShowTextOperation(this.#t,!0),this}bboxToClipBoxDropOperation(e){return this.#n||this.#e.bboxToClipBoxDropOperation(this.#t,!0),this}take(){throw Error(`Unreachable`)}takeDebugMetadata(){throw Error(`Unreachable`)}},G={stroke:[`path`,`transform`,`filter`,`strokeColor`,`strokeAlpha`,`lineWidth`,`lineCap`,`lineJoin`,`miterLimit`,`dash`],fill:[`path`,`transform`,`filter`,`fillColor`,`fillAlpha`,`globalCompositeOperation`,`SMask`],imageXObject:[`transform`,`SMask`,`filter`,`fillAlpha`,`strokeAlpha`,`globalCompositeOperation`],rawFillPath:[`filter`,`fillColor`,`fillAlpha`],showText:[`transform`,`leading`,`charSpacing`,`wordSpacing`,`hScale`,`textRise`,`moveText`,`textMatrix`,`font`,`fontObj`,`filter`,`fillColor`,`textRenderingMode`,`SMask`,`fillAlpha`,`strokeAlpha`,`globalCompositeOperation`,`sameLineText`],transform:[`transform`],transformAndFill:[`transform`,`fillColor`]},Et=class e{#e;#t;#n=4;#r=0;#i=new e.#a(this.#n*6);static#a=F.isFloat16ArraySupported?Float16Array:Float32Array;constructor(e){this.#e=e.width,this.#t=e.height}record(t,r,i,a){if(this.#r===this.#n){this.#n*=2;let t=new e.#a(this.#n*6);t.set(this.#i),this.#i=t}let o=B(t),s;if(a[0]!==1/0){let e=n.slice();I.axialAlignedBoundingBox([0,-i,r,0],o,e);let t=I.intersect(a,e);if(!t)return;let[c,l,u,d]=t;if(c!==e[0]||l!==e[1]||u!==e[2]||d!==e[3]){let e=Math.atan2(o[1],o[0]),t=Math.abs(Math.sin(e)),n=Math.abs(Math.cos(e));if(t<1e-6||n<1e-6||Math.abs(t-n)<1e-6)s=[c,l,c,d,u,l];else{let e=u-c,r=d-l,i=t*t,a=n*n,o=n*t,f=a-i,p=(r*a-e*o)/f;s=[c+(r*o-e*i)/f,l,c,l+p,u,d-p]}}}s||(s=[0,-i,0,0,r,-i],I.applyTransform(s,o,0),I.applyTransform(s,o,2),I.applyTransform(s,o,4)),s[0]/=this.#e,s[1]/=this.#t,s[2]/=this.#e,s[3]/=this.#t,s[4]/=this.#e,s[5]/=this.#t,this.#i.set(s,this.#r*6),this.#r++}take(){return this.#i.subarray(0,this.#r*6)}},Dt=class{#e=new Set;#t=null;constructor({ownerDocument:e=globalThis.document,styleElement:t=null}){this._document=e,this.nativeFontFaces=new Set,this.styleElement=null,this.loadingRequests=[],this.loadTestFontId=0}addNativeFontFace(e){this.nativeFontFaces.add(e),this._document.fonts.add(e)}removeNativeFontFace(e){this.nativeFontFaces.delete(e),this._document.fonts.delete(e)}insertRule(e){let t=this.#n();t.insertRule(e,t.cssRules.length)}#n(){if(this.#t)return this.#t;let e=this._document.defaultView?.CSSStyleSheet||globalThis.CSSStyleSheet;if(!this.styleElement&&e){let{adoptedStyleSheets:t}=this._document;if(t){let n=new e;return t.push(n),this.#t=n}}return this.styleElement||(this.styleElement=this._document.createElement(`style`),this._document.documentElement.getElementsByTagName(`head`)[0].append(this.styleElement)),this.#t=this.styleElement.sheet}clear(){for(let e of this.nativeFontFaces)this._document.fonts.delete(e);if(this.nativeFontFaces.clear(),this.#e.clear(),this.#t){let{adoptedStyleSheets:e}=this._document;e?.includes(this.#t)&&(this._document.adoptedStyleSheets=e.filter(e=>e!==this.#t)),this.#t=null}this.styleElement&&=(this.styleElement.remove(),null)}async loadSystemFont({systemFontInfo:e,disableFontFace:t,_inspectFont:n}){if(!(!e||this.#e.has(e.loadedName))){if(D(!t,"loadSystemFont shouldn't be called when `disableFontFace` is set."),this.isFontLoadingAPISupported){let{loadedName:t,src:r,style:i}=e,a=new FontFace(t,r,i);this.addNativeFontFace(a);try{await a.load(),this.#e.add(t),n?.(e)}catch{T(`Cannot load system font: ${e.baseFontName}, installing it could help to improve PDF rendering.`),this.removeNativeFontFace(a)}return}E(`Not implemented: loadSystemFont without the Font Loading API.`)}}async bind(e){if(e.attached||e.missingFile&&!e.systemFontInfo)return;if(e.attached=!0,e.systemFontInfo){await this.loadSystemFont(e);return}if(this.isFontLoadingAPISupported){let t=e.createNativeFontFace();if(t){this.addNativeFontFace(t);try{await t.loaded}catch(n){throw T(`Failed to load font '${t.family}': '${n}'.`),e.disableFontFace=!0,n}}return}let t=e.createFontFaceRule();if(t){if(this.insertRule(t),this.isSyncFontLoadingSupported)return;await new Promise(t=>{let n=this._queueLoadingCallback(t);this._prepareFontLoadEvent(e,n)})}}get isFontLoadingAPISupported(){let e=!!this._document?.fonts;return M(this,`isFontLoadingAPISupported`,e)}get isSyncFontLoadingSupported(){return M(this,`isSyncFontLoadingSupported`,t||F.platform.isFirefox)}_queueLoadingCallback(e){function t(){for(D(!r.done,`completeRequest() cannot be called twice.`),r.done=!0;n.length>0&&n[0].done;){let e=n.shift();setTimeout(e.callback,0)}}let{loadingRequests:n}=this,r={done:!1,complete:t,callback:e};return n.push(r),r}get _loadTestFont(){let e=atob(`T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==`);return M(this,`_loadTestFont`,e)}_prepareFontLoadEvent(e,t){function n(e,t){return e.charCodeAt(t)<<24|e.charCodeAt(t+1)<<16|e.charCodeAt(t+2)<<8|e.charCodeAt(t+3)&255}function r(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,e&255)}function i(e,t,n,r){let i=e.substring(0,t),a=e.substring(t+n);return i+r+a}let a,o,s=this._document.createElement(`canvas`);s.width=1,s.height=1;let c=s.getContext(`2d`),l=0;function u(e,t){if(++l>30){T(`Load test font never loaded.`),t();return}if(c.font=`30px `+e,c.fillText(`.`,0,20),c.getImageData(0,0,1,1).data[3]>0){t();return}setTimeout(u.bind(null,e,t))}let d=`lt${Date.now()}${this.loadTestFontId++}`,f=this._loadTestFont;f=i(f,976,d.length,d);let p=1482184792,m=n(f,16);for(a=0,o=d.length-3;a{g.remove(),t.complete()})}},Ot=class{compiledGlyphs=Object.create(null);#e;constructor(e,t=null,n,r){this.#e=e,this._inspectFont=t,n&&(this.charProcOperatorList=n),r&&Object.assign(this,r)}createNativeFontFace(){if(!this.data||this.disableFontFace)return null;let e;if(!this.cssFontInfo)e=new FontFace(this.loadedName,this.data,{});else{let t={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(t.style=`oblique ${this.cssFontInfo.italicAngle}deg`),e=new FontFace(this.cssFontInfo.fontFamily,this.data,t)}return this._inspectFont?.(this),e}createFontFaceRule(){if(!this.data||this.disableFontFace)return null;let e=`url(data:${this.mimetype};base64,${this.data.toBase64()});`,t;if(!this.cssFontInfo)t=`@font-face {font-family:"${this.loadedName}";src:${e}}`;else{let n=`font-weight: ${this.cssFontInfo.fontWeight};`;this.cssFontInfo.italicAngle&&(n+=`font-style: oblique ${this.cssFontInfo.italicAngle}deg;`),t=`@font-face {font-family:"${this.cssFontInfo.fontFamily}";${n}src:${e}}`}return this._inspectFont?.(this,e),t}getPathGenerator(e,t){if(this.compiledGlyphs[t]!==void 0)return this.compiledGlyphs[t];let n=this.loadedName+`_path_`+t,r;try{r=e.get(n)}catch(e){T(`getPathGenerator - ignoring character: "${e}".`)}let i=Je(r?.path);return this.fontExtraProperties||e.delete(n),this.compiledGlyphs[t]=i}get black(){return this.#e.black}get bold(){return this.#e.bold}get disableFontFace(){return this.#e.disableFontFace}set disableFontFace(e){M(this,`disableFontFace`,!!e)}get fontExtraProperties(){return this.#e.fontExtraProperties}get isInvalidPDFjsFont(){return this.#e.isInvalidPDFjsFont}get isType3Font(){return this.#e.isType3Font}get italic(){return this.#e.italic}get missingFile(){return this.#e.missingFile}get remeasure(){return this.#e.remeasure}get vertical(){return this.#e.vertical}get ascent(){return this.#e.ascent}get defaultWidth(){return this.#e.defaultWidth}get descent(){return this.#e.descent}get bbox(){return this.#e.bbox}get fontMatrix(){return this.#e.fontMatrix}get fallbackName(){return this.#e.fallbackName}get loadedName(){return this.#e.loadedName}get mimetype(){return this.#e.mimetype}get name(){return this.#e.name}get data(){return this.#e.data}clearData(){this.#e.clearData()}get cssFontInfo(){return this.#e.cssFontInfo}get systemFontInfo(){return this.#e.systemFontInfo}get defaultVMetrics(){return this.#e.defaultVMetrics}},kt=class{static strings=[`fontFamily`,`fontWeight`,`italicAngle`]},At=class{static strings=[`css`,`loadedName`,`baseFontName`,`src`]},K=class{static bools=[`black`,`bold`,`disableFontFace`,`fontExtraProperties`,`isInvalidPDFjsFont`,`isType3Font`,`italic`,`missingFile`,`remeasure`,`vertical`];static numbers=[`ascent`,`defaultWidth`,`descent`];static strings=[`fallbackName`,`loadedName`,`mimetype`,`name`];static OFFSET_NUMBERS=Math.ceil(this.bools.length*2/8);static OFFSET_BBOX=this.OFFSET_NUMBERS+this.numbers.length*8;static OFFSET_FONT_MATRIX=this.OFFSET_BBOX+1+8;static OFFSET_DEFAULT_VMETRICS=this.OFFSET_FONT_MATRIX+1+48;static OFFSET_STRINGS=this.OFFSET_DEFAULT_VMETRICS+1+6},jt=class{static KIND=0;static HAS_BBOX=1;static HAS_BACKGROUND=2;static SHADING_TYPE=3;static N_COORD=4;static N_COLOR=8;static N_STOP=12;static N_FIGURES=16},Mt=class{#e;#t=new TextDecoder;#n;constructor(e){this.#e=e,this.#n=new DataView(e)}#r(e){D(e>n&3;return r===0?void 0:r===2}get black(){return this.#r(0)}get bold(){return this.#r(1)}get disableFontFace(){return this.#r(2)}get fontExtraProperties(){return this.#r(3)}get isInvalidPDFjsFont(){return this.#r(4)}get isType3Font(){return this.#r(5)}get italic(){return this.#r(6)}get missingFile(){return this.#r(7)}get remeasure(){return this.#r(8)}get vertical(){return this.#r(9)}#i(e){return D(e0){t=n.slice();for(let e=0,n=l.length;etypeof e==`object`&&Number.isInteger(e?.num)&&e.num>=0&&Number.isInteger(e?.gen)&&e.gen>=0,Vt=fe.bind(null,Bt,e=>typeof e==`object`&&typeof e?.name==`string`),Ht=class{#e=new Map;#t=Promise.resolve();postMessage(e,t){let n={data:structuredClone(e,t?{transfer:t}:null)};this.#t.then(()=>{for(let[e]of this.#e)e.call(this,n)})}addEventListener(e,t,n=null){let r=null;if(n?.signal instanceof AbortSignal){let{signal:i}=n;if(i.aborted){T("LoopbackPort - cannot use an `aborted` signal.");return}let a=()=>this.removeEventListener(e,t);r=()=>i.removeEventListener(`abort`,a),i.addEventListener(`abort`,a)}this.#e.set(t,r)}removeEventListener(e,t){this.#e.get(t)?.(),this.#e.delete(t)}terminate(){for(let[,e]of this.#e)e?.();this.#e.clear()}},Ut={DATA:1,ERROR:2},q={CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function Wt(){}function J(e){if(e instanceof P||e instanceof ne||e instanceof ee||e instanceof re||e instanceof te)return e;switch(e instanceof Error||typeof e==`object`&&e||E(`wrapReason: Expected "reason" to be a (possibly cloned) Error.`),e.name){case`AbortException`:return new P(e.message);case`InvalidPDFException`:return new ne(e.message);case`PasswordException`:return new ee(e.message,e.code);case`ResponseException`:return new re(e.message,e.status,e.missing);case`UnknownErrorException`:return new te(e.message,e.details)}return new te(e.message,e.toString())}var Gt=class{#e=new AbortController;constructor(e,t,n){this.sourceName=e,this.targetName=t,this.comObj=n,this.callbackId=1,this.streamId=1,this.streamSinks=Object.create(null),this.streamControllers=Object.create(null),this.callbackCapabilities=Object.create(null),this.actionHandler=Object.create(null),n.addEventListener(`message`,this.#t.bind(this),{signal:this.#e.signal})}#t({data:e}){if(e.targetName!==this.sourceName)return;if(e.stream){this.#r(e);return}if(e.callback){let t=e.callbackId,n=this.callbackCapabilities[t];if(!n)throw Error(`Cannot resolve callback ${t}`);if(delete this.callbackCapabilities[t],e.callback===Ut.DATA)n.resolve(e.data);else if(e.callback===Ut.ERROR)n.reject(J(e.reason));else throw Error(`Unexpected callback case`);return}let t=this.actionHandler[e.action];if(!t)throw Error(`Unknown action from worker: ${e.action}`);if(e.callbackId){let n=this.sourceName,r=e.sourceName,i=this.comObj;Promise.try(t,e.data).then(function(t){i.postMessage({sourceName:n,targetName:r,callback:Ut.DATA,callbackId:e.callbackId,data:t})},function(t){i.postMessage({sourceName:n,targetName:r,callback:Ut.ERROR,callbackId:e.callbackId,reason:J(t)})});return}if(e.streamId){this.#n(e);return}t(e.data)}on(e,t){let n=this.actionHandler;if(n[e])throw Error(`There is already an actionName called "${e}"`);n[e]=t}send(e,t,n){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,data:t},n)}sendWithPromise(e,t,n){let r=this.callbackId++,i=Promise.withResolvers();this.callbackCapabilities[r]=i;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,callbackId:r,data:t},n)}catch(e){i.reject(e)}return i.promise}sendWithStream(e,t,n,r){let i=this.streamId++,a=this.sourceName,o=this.targetName,s=this.comObj;return new ReadableStream({start:n=>{let c=Promise.withResolvers();return this.streamControllers[i]={controller:n,startCall:c,pullCall:null,cancelCall:null,isClosed:!1},s.postMessage({sourceName:a,targetName:o,action:e,streamId:i,data:t,desiredSize:n.desiredSize},r),c.promise},pull:e=>{let t=Promise.withResolvers();return this.streamControllers[i].pullCall=t,s.postMessage({sourceName:a,targetName:o,stream:q.PULL,streamId:i,desiredSize:e.desiredSize}),t.promise},cancel:e=>{D(e instanceof Error,`cancel must have a valid reason`);let t=Promise.withResolvers();return this.streamControllers[i].cancelCall=t,this.streamControllers[i].isClosed=!0,s.postMessage({sourceName:a,targetName:o,stream:q.CANCEL,streamId:i,reason:J(e)}),t.promise}},n)}#n(e){let t=e.streamId,n=this.sourceName,r=e.sourceName,i=this.comObj,a=this,o=this.actionHandler[e.action],s={enqueue(e,a=1,o){if(this.isCancelled)return;let s=this.desiredSize;this.desiredSize-=a,s>0&&this.desiredSize<=0&&(this.sinkCapability=Promise.withResolvers(),this.ready=this.sinkCapability.promise),i.postMessage({sourceName:n,targetName:r,stream:q.ENQUEUE,streamId:t,chunk:e},o)},close(){this.isCancelled||(this.isCancelled=!0,i.postMessage({sourceName:n,targetName:r,stream:q.CLOSE,streamId:t}),delete a.streamSinks[t])},error(e){D(e instanceof Error,`error must have a valid reason`),!this.isCancelled&&(this.isCancelled=!0,i.postMessage({sourceName:n,targetName:r,stream:q.ERROR,streamId:t,reason:J(e)}))},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};s.sinkCapability.resolve(),s.ready=s.sinkCapability.promise,this.streamSinks[t]=s,Promise.try(o,e.data,s).then(function(){i.postMessage({sourceName:n,targetName:r,stream:q.START_COMPLETE,streamId:t,success:!0})},function(e){i.postMessage({sourceName:n,targetName:r,stream:q.START_COMPLETE,streamId:t,reason:J(e)})})}#r(e){let t=e.streamId,n=this.sourceName,r=e.sourceName,i=this.comObj,a=this.streamControllers[t],o=this.streamSinks[t];switch(e.stream){case q.START_COMPLETE:e.success?a.startCall.resolve():a.startCall.reject(J(e.reason));break;case q.PULL_COMPLETE:e.success?a.pullCall.resolve():a.pullCall.reject(J(e.reason));break;case q.PULL:if(!o){i.postMessage({sourceName:n,targetName:r,stream:q.PULL_COMPLETE,streamId:t,success:!0});break}o.desiredSize<=0&&e.desiredSize>0&&o.sinkCapability.resolve(),o.desiredSize=e.desiredSize,Promise.try(o.onPull||Wt).then(function(){i.postMessage({sourceName:n,targetName:r,stream:q.PULL_COMPLETE,streamId:t,success:!0})},function(e){i.postMessage({sourceName:n,targetName:r,stream:q.PULL_COMPLETE,streamId:t,reason:J(e)})});break;case q.ENQUEUE:if(D(a,`enqueue should have stream controller`),a.isClosed)break;a.controller.enqueue(e.chunk);break;case q.CLOSE:if(D(a,`close should have stream controller`),a.isClosed)break;a.isClosed=!0,a.controller.close(),this.#i(a,t);break;case q.ERROR:D(a,`error should have stream controller`),a.controller.error(J(e.reason)),this.#i(a,t);break;case q.CANCEL_COMPLETE:e.success?a.cancelCall.resolve():a.cancelCall.reject(J(e.reason)),this.#i(a,t);break;case q.CANCEL:if(!o)break;let s=J(e.reason);Promise.try(o.onCancel||Wt,s).then(function(){i.postMessage({sourceName:n,targetName:r,stream:q.CANCEL_COMPLETE,streamId:t,success:!0})},function(e){i.postMessage({sourceName:n,targetName:r,stream:q.CANCEL_COMPLETE,streamId:t,reason:J(e)})}),o.sinkCapability.reject(s),o.isCancelled=!0,delete this.streamSinks[t];break;default:throw Error(`Unexpected stream case`)}}async#i(e,t){await Promise.allSettled([e.startCall?.promise,e.pullCall?.promise,e.cancelCall?.promise]),delete this.streamControllers[t]}destroy(){this.#e?.abort(),this.#e=null}},Kt=class{#e=Object.freeze({cMapUrl:`CMap`,standardFontDataUrl:`font`,wasmUrl:`wasm`});constructor({cMapUrl:e=null,standardFontDataUrl:t=null,wasmUrl:n=null}){this.cMapUrl=e,this.standardFontDataUrl=t,this.wasmUrl=n}async fetch({kind:e,filename:t}){switch(e){case`cMapUrl`:case`standardFontDataUrl`:case`wasmUrl`:break;default:E(`Not implemented: ${e}`)}let n=this[e];if(!n)throw Error(`Ensure that the \`${e}\` API parameter is provided.`);let r=`${n}${t}`;return this._fetch(r,e).catch(t=>{throw Error(`Unable to load ${this.#e[e]} data at: ${r}`)})}async _fetch(e,t){E("Abstract method `_fetch` called.")}},qt=class extends Kt{async _fetch(e,t){let n=await Ce(e,t===`cMapUrl`&&!e.endsWith(`.bcmap`)?`text`:`bytes`);return n instanceof Uint8Array?n:oe(n)}},Jt=class{#e=!1;constructor({enableHWA:e=!1}){this.#e=e}create(e,t){if(e<=0||t<=0)throw Error(`Invalid canvas size`);let n=this._createCanvas(e,t);return{canvas:n,context:n.getContext(`2d`,{willReadFrequently:!this.#e})}}reset({canvas:e},t,n){if(!e)throw Error(`Canvas is not specified`);if(t<=0||n<=0)throw Error(`Invalid canvas size`);e.width=t,e.height=n}destroy(e){let{canvas:t}=e;if(!t)throw Error(`Canvas is not specified`);t.width=t.height=0,e.canvas=null,e.context=null}_createCanvas(e,t){E("Abstract method `_createCanvas` called.")}},Yt=class extends Jt{constructor({ownerDocument:e=globalThis.document,enableHWA:t=!1}){super({enableHWA:t}),this._document=e}_createCanvas(e,t){let n=this._document.createElement(`canvas`);return n.width=e,n.height=t,n}},Xt=class{addFilter(e){return`none`}addHCMFilter(e,t){return`none`}addAlphaFilter(e){return`none`}addLuminosityFilter(e){return`none`}addKnockoutFilter(e=0){return`none`}addHighlightHCMFilter(e,t,n,r,i){return`none`}addSelectionHCMFilter(e,t){return`none`}addSelectionFilter(){return`none`}createSelectionStyle(e=null){return null}destroy(e=!1){}},Zt=class extends Xt{#e;#t;#n;#r;#i;#a;#o=0;constructor({docId:e,ownerDocument:t=globalThis.document}){super(),this.#r=e,this.#i=t}get#s(){return this.#t||=new Map}get#c(){return this.#a||=new Map}get#l(){if(!this.#n){let e=this.#i.createElement(`div`),{style:t}=e;t.colorScheme=`only light`,t.visibility=`hidden`,t.contain=`strict`,t.width=t.height=0,t.position=`absolute`,t.top=t.left=0,t.zIndex=-1;let n=this.#i.createElementNS(a,`svg`);n.setAttribute(`width`,0),n.setAttribute(`height`,0),this.#n=this.#i.createElementNS(a,`defs`),e.append(n),n.append(this.#n),this.#i.body.append(e)}return this.#n}#u(e){if(e.length===1){let t=e[0],n=Array(256);for(let e=0;e<256;e++)n[e]=t[e]/255;let r=n.join(`,`);return[r,r,r]}let[t,n,r]=e,i=Array(256),a=Array(256),o=Array(256);for(let e=0;e<256;e++)i[e]=t[e]/255,a[e]=n[e]/255,o[e]=r[e]/255;return[i.join(`,`),a.join(`,`),o.join(`,`)]}#d(e){if(this.#e===void 0){this.#e=``;let e=this.#i.URL;e!==this.#i.baseURI&&(Te(e)?T(`#createUrl: ignore "data:"-URL for performance reasons.`):this.#e=A(e,``))}return`url(${this.#e}#${e})`}addFilter(e){if(!e)return`none`;let t=this.#s.get(e);if(t)return t;let[n,r,i]=this.#u(e),a=e.length===1?n:`${n}${r}${i}`;if(t=this.#s.get(a),t)return this.#s.set(e,t),t;let o=`g_${this.#r}_transfer_map_${this.#o++}`,s=this.#d(o);this.#s.set(e,s),this.#s.set(a,s);let c=this.#m(o);return this.#g(n,r,i,c),s}addHCMFilter(e,t){let n=`${e}-${t}`,r=`base`,i=this.#c.get(r);if(i?.key===n||(i?(i.filter?.remove(),i.key=n,i.url=`none`,i.filter=null):(i={key:n,url:`none`,filter:null},this.#c.set(r,i)),!e||!t))return i.url;let a=this.#v(e);e=I.makeHexColor(...a);let o=this.#v(t);if(t=I.makeHexColor(...o),this.#b(),e===`#000000`&&t===`#ffffff`||e===t)return i.url;let s=Array(256);for(let e=0;e<=255;e++){let t=e/255;s[e]=t<=.03928?t/12.92:((t+.055)/1.055)**2.4}let c=s.join(`,`),l=`g_${this.#r}_hcm_filter`,u=i.filter=this.#m(l);this.#g(c,c,c,u),this.#p(u);let d=(e,t)=>{let n=a[e]/255,r=o[e]/255,i=Array(t+1);for(let e=0;e<=t;e++)i[e]=n+e/t*(r-n);return i.join(`,`)};return this.#g(d(0,5),d(1,5),d(2,5),u),i.url=this.#d(l),i.url}addSelectionHCMFilter(e,t){return this.addHighlightHCMFilter(`selection`,e,t,`HighlightText`,`Highlight`)}addSelectionFilter(){return this.addHighlightHCMFilter(`selection_default`,`black`,`white`,`HighlightText`,`Highlight`)}createSelectionStyle(e=null){let t=e?this.addSelectionHCMFilter(e.foreground,e.background):this.addSelectionFilter();return t===`none`||!F.platform.isFirefox?null:{"backdrop-filter":t,"background-color":`transparent`}}addAlphaFilter(e){let t=this.#s.get(e);if(t)return t;let[n]=this.#u([e]),r=`alpha_${n}`;if(t=this.#s.get(r),t)return this.#s.set(e,t),t;let i=`g_${this.#r}_alpha_map_${this.#o++}`,a=this.#d(i);this.#s.set(e,a),this.#s.set(r,a);let o=this.#m(i);return this.#_(n,o),a}addLuminosityFilter(e){let t=this.#s.get(e||`luminosity`);if(t)return t;let n,r;if(e?([n]=this.#u([e]),r=`luminosity_${n}`):r=`luminosity`,t=this.#s.get(r),t)return this.#s.set(e,t),t;let i=`g_${this.#r}_luminosity_map_${this.#o++}`,a=this.#d(i);this.#s.set(e,a),this.#s.set(r,a);let o=this.#m(i);return this.#f(o),e&&this.#_(n,o),a}addKnockoutFilter(e=0){let t=e>0?Math.min(1/e,1e6):1e6,n=`knockout_${t}`,r=this.#s.get(n);if(r)return r;let i=`g_${this.#r}_knockout_filter_${this.#o++}`,o=this.#d(i);this.#s.set(n,o);let s=this.#m(i),c=this.#i.createElementNS(a,`feComponentTransfer`);s.append(c);let l=this.#i.createElementNS(a,`feFuncA`);return l.setAttribute(`type`,`linear`),l.setAttribute(`slope`,`${t}`),l.setAttribute(`intercept`,`0`),c.append(l),o}addHighlightHCMFilter(e,t,n,r,i){let a=`${t}-${n}-${r}-${i}`,o=this.#c.get(e);if(o?.key===a||(o?(o.filter?.remove(),o.key=a,o.url=`none`,o.filter=null):(o={key:a,url:`none`,filter:null},this.#c.set(e,o)),!t||!n))return o.url;let[s,c]=[t,n].map(this.#v.bind(this)),l=Math.round(.2126*s[0]+.7152*s[1]+.0722*s[2]),u=Math.round(.2126*c[0]+.7152*c[1]+.0722*c[2]),[d,f]=[r,i].map(this.#x.bind(this));u{let r=Array(256),i=(u-l)/n,a=e/255,o=(t-e)/(255*n),s=0;for(let e=0;e<=n;e++){let t=Math.round(l+e*i),n=a+e*o;for(let e=s;e<=t;e++)r[e]=n;s=t+1}for(let e=s;e<256;e++)r[e]=r[s-1];return r.join(`,`)},m=`g_${this.#r}_hcm_${e}_filter`,h=o.filter=this.#m(m);return this.#p(h),this.#g(p(d[0],f[0],5),p(d[1],f[1],5),p(d[2],f[2],5),h),o.url=this.#d(m),o.url}destroy(e=!1){e&&this.#a?.size||(this.#n?.parentNode.parentNode.remove(),this.#n=null,this.#t?.clear(),this.#t=null,this.#a?.clear(),this.#a=null,this.#o=0)}#f(e){let t=this.#i.createElementNS(a,`feColorMatrix`);t.setAttribute(`type`,`matrix`),t.setAttribute(`values`,`0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0`),e.append(t)}#p(e){let t=this.#i.createElementNS(a,`feColorMatrix`);t.setAttribute(`type`,`matrix`),t.setAttribute(`values`,`0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0`),e.append(t)}#m(e){let t=this.#i.createElementNS(a,`filter`);return t.setAttribute(`color-interpolation-filters`,`sRGB`),t.setAttribute(`id`,e),this.#l.append(t),t}#h(e,t,n){let r=this.#i.createElementNS(a,t);r.setAttribute(`type`,`discrete`),r.setAttribute(`tableValues`,n),e.append(r)}#g(e,t,n,r){let i=this.#i.createElementNS(a,`feComponentTransfer`);r.append(i),this.#h(i,`feFuncR`,e),this.#h(i,`feFuncG`,t),this.#h(i,`feFuncB`,n)}#_(e,t){let n=this.#i.createElementNS(a,`feComponentTransfer`);t.append(n),this.#h(n,`feFuncA`,e)}#v(e){return this.#l.style.color=`CanvasText`,this.#l.style.backgroundColor=e,Ne(getComputedStyle(this.#l).getPropertyValue(`background-color`))}#y(e){return this.#l.style.color=`CanvasText`,this.#l.style.backgroundColor=e,Me(getComputedStyle(this.#l).getPropertyValue(`background-color`))}#b(){this.#l.style.color=``,this.#l.style.backgroundColor=``}#x(e){let[t,n,r,i]=this.#y(e);if(i===1)return[t,n,r];let[a,o,s]=this.#v(`Canvas`);return[Qt(t,a,i),Qt(n,o,i),Qt(r,s,i)]}};function Qt(e,t,n){return Math.round(n*e+(1-n)*t)}t&&T("Please use the `legacy` build in Node.js environments.");async function $t(e){let t=await process.getBuiltinModule(`fs/promises`).readFile(e);return new Uint8Array(t)}var en=class extends Xt{},tn=class extends Jt{_createCanvas(e,t){return process.getBuiltinModule(`module`).createRequire(import.meta.url)(`@napi-rs/canvas`).createCanvas(e,t)}},nn=class extends Kt{async _fetch(e,t){return $t(e)}};function rn({src:e,srcPos:t=0,dest:n,width:r,height:i,nonBlackColor:a=4294967295,inverseDecode:o=!1}){let s=F.isLittleEndian?4278190080:255,[c,l]=o?[a,s]:[s,a],u=r>>3,d=r&7,f=c^l,p=e.length;n=new Uint32Array(n.buffer);let m=0;for(let r=0;r>7&1)&f,n[m+1]=c^-(r>>6&1)&f,n[m+2]=c^-(r>>5&1)&f,n[m+3]=c^-(r>>4&1)&f,n[m+4]=c^-(r>>3&1)&f,n[m+5]=c^-(r>>2&1)&f,n[m+6]=c^-(r>>1&1)&f,n[m+7]=c^-(r&1)&f}if(d===0)continue;let r=t>7-e&1)&f}return{srcPos:t,destPos:m}}function an({src:e,srcPos:t=0,dest:n,destPos:r=0,width:i,height:a}){let o=0,s=i*a*3,c=s>>2,l=new Uint32Array(e.buffer,t,c),u=F.isLittleEndian?4278190080:255;if(F.isLittleEndian){for(;o>>24|t<<8|u,n[r+2]=t>>>16|i<<16|u,n[r+3]=i>>>8|u}for(let i=o*4,a=t+s;i>>8|u,n[r+2]=t<<16|i>>>16|u,n[r+3]=i<<8|u}for(let i=o*4,a=t+s;i=_.INFOS&&console.info(`Info: ${e}`)}function T(e){x>=_.WARNINGS&&console.warn(`Warning: ${e}`)}function E(e){throw Error(e)}function D(e,t){e||E(t)}function O(e){switch(e?.protocol){case`http:`:case`https:`:case`ftp:`:case`mailto:`:case`tel:`:return!0;default:return!1}}function k(e,t=null,n=null){if(!e)return null;if(n&&typeof e==`string`&&(n.addDefaultProtocol&&e.startsWith(`www.`)&&e.match(/\./g)?.length>=2&&(e=`http://${e}`),n.tryConvertEncoding))try{e=se(e)}catch{}let r=t?URL.parse(e,t):URL.parse(e);return O(r)?r:null}function A(e,t,n=!1){let r=URL.parse(e);return r?(r.hash=t,r.href):n&&k(e,`http://example.com`)?e.split(`#`,1)[0]+`${t?`#${t}`:``}`:``}function j(e){return e.substring(e.lastIndexOf(`/`)+1)}function M(e,t,n,r=!1){return Object.defineProperty(e,t,{value:n,enumerable:!r,configurable:!0,writable:!1}),n}var N=function(){function e(e,t){this.message=e,this.name=t}return e.prototype=Error(),e.constructor=e,e}(),ee=class extends N{constructor(e,t){super(e,`PasswordException`),this.code=t}},te=class extends N{constructor(e,t){super(e,`UnknownErrorException`),this.details=t}},ne=class extends N{constructor(e){super(e,`InvalidPDFException`)}},re=class extends N{constructor(e,t,n){super(e,`ResponseException`),this.status=t,this.missing=n}},ie=class extends N{constructor(e){super(e,`FormatError`)}},P=class extends N{constructor(e){super(e,`AbortException`)}};function ae(e){(typeof e!=`object`||e?.length===void 0)&&E(`Invalid argument for bytesToString`);let t=e.length,n=8192;if(t`u`)return M(this,`isAlphaColorInputSupported`,!1);let e=document.createElement(`input`);return e.type=`color`,e.setAttribute(`alpha`,``),e.value=`#ff000080`,M(this,`isAlphaColorInputSupported`,e.value!==`#ff0000`)}static get isBackdropFilterSupported(){return M(this,`isBackdropFilterSupported`,typeof CSS<`u`&&CSS.supports(`backdrop-filter`,`blur(1px)`))}},I=class{static get hexNums(){return M(this,`hexNums`,Array.from(Array(256).keys(),e=>e.toString(16).padStart(2,`0`)))}static makeHexColor(e,t,n){return`#${this.hexNums[e]}${this.hexNums[t]}${this.hexNums[n]}`}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static multiplyByDOMMatrix(e,t){return[e[0]*t.a+e[2]*t.b,e[1]*t.a+e[3]*t.b,e[0]*t.c+e[2]*t.d,e[1]*t.c+e[3]*t.d,e[0]*t.e+e[2]*t.f+e[4],e[1]*t.e+e[3]*t.f+e[5]]}static applyTransform(e,t,n=0){let r=e[n],i=e[n+1];e[n]=r*t[0]+i*t[2]+t[4],e[n+1]=r*t[1]+i*t[3]+t[5]}static applyTransformToBezier(e,t,n=0){let r=t[0],i=t[1],a=t[2],o=t[3],s=t[4],c=t[5];for(let t=0;t<6;t+=2){let l=e[n+t],u=e[n+t+1];e[n+t]=l*r+u*a+s,e[n+t+1]=l*i+u*o+c}}static applyInverseTransform(e,t){let n=e[0],r=e[1],i=t[0]*t[3]-t[1]*t[2];e[0]=(n*t[3]-r*t[2]+t[2]*t[5]-t[4]*t[3])/i,e[1]=(-n*t[1]+r*t[0]+t[4]*t[1]-t[5]*t[0])/i}static axialAlignedBoundingBox(e,t,n){let r=t[0],i=t[1],a=t[2],o=t[3],s=t[4],c=t[5],l=e[0],u=e[1],d=e[2],f=e[3],p=r*l+s,m=p,h=r*d+s,g=h,_=o*u+c,v=_,y=o*f+c,b=y;if(i!==0||a!==0){let e=i*l,t=i*d,n=a*u,r=a*f;p+=n,g+=n,h+=r,m+=r,_+=e,b+=e,y+=t,v+=t}n[0]=Math.min(n[0],p,h,m,g),n[1]=Math.min(n[1],_,y,v,b),n[2]=Math.max(n[2],p,h,m,g),n[3]=Math.max(n[3],_,y,v,b)}static inverseTransform(e){let t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static singularValueDecompose2dScale(e,t){let n=e[0],r=e[1],i=e[2],a=e[3],o=n**2+r**2,s=n*i+r*a,c=i**2+a**2,l=(o+c)/2,u=Math.sqrt(l**2-(o*c-s**2));t[0]=Math.sqrt(l+u||1),t[1]=Math.sqrt(l-u||1)}static normalizeRect(e){let t=e.slice(0);return e[0]>e[2]&&(t[0]=e[2],t[2]=e[0]),e[1]>e[3]&&(t[1]=e[3],t[3]=e[1]),t}static intersect(e,t){let n=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),r=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(n>r)return null;let i=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),a=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return i>a?null:[n,i,r,a]}static pointBoundingBox(e,t,n){n[0]=Math.min(n[0],e),n[1]=Math.min(n[1],t),n[2]=Math.max(n[2],e),n[3]=Math.max(n[3],t)}static rectBoundingBox(e,t,n,r,i){i[0]=Math.min(i[0],e,n),i[1]=Math.min(i[1],t,r),i[2]=Math.max(i[2],e,n),i[3]=Math.max(i[3],t,r)}static#e(e,t,n,r,i,a,o,s,c,l){if(c<=0||c>=1)return;let u=1-c,d=c*c,f=d*c,p=u*(u*(u*e+3*c*t)+3*d*n)+f*r,m=u*(u*(u*i+3*c*a)+3*d*o)+f*s;l[0]=Math.min(l[0],p),l[1]=Math.min(l[1],m),l[2]=Math.max(l[2],p),l[3]=Math.max(l[3],m)}static#t(e,t,n,r,i,a,o,s,c,l,u,d){if(Math.abs(c)<1e-12){Math.abs(l)>=1e-12&&this.#e(e,t,n,r,i,a,o,s,-u/l,d);return}let f=l**2-4*u*c;if(f<0)return;let p=Math.sqrt(f),m=2*c;this.#e(e,t,n,r,i,a,o,s,(-l+p)/m,d),this.#e(e,t,n,r,i,a,o,s,(-l-p)/m,d)}static bezierBoundingBox(e,t,n,r,i,a,o,s,c){c[0]=Math.min(c[0],e,o),c[1]=Math.min(c[1],t,s),c[2]=Math.max(c[2],e,o),c[3]=Math.max(c[3],t,s),this.#t(e,n,i,o,t,r,a,s,3*(-e+3*(n-i)+o),6*(e-2*n+i),3*(n-e),c),this.#t(e,n,i,o,t,r,a,s,3*(-t+3*(r-a)+s),6*(t-2*r+a),3*(r-t),c)}};function se(e){return decodeURIComponent(escape(e))}var ce=null,le=null;function ue(e){return ce||(ce=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu,le=new Map([[`ſt`,`ſt`]])),e.replaceAll(ce,(e,t,n)=>t?t.normalize(`NFKC`):le.get(n))}function de(){if(typeof crypto.randomUUID==`function`)return crypto.randomUUID();let e=new Uint8Array(32);return crypto.getRandomValues(e),ae(e)}function fe(e,t,n){if(!Array.isArray(n)||n.length<2)return!1;let[r,i,...a]=n;if(!e(r)&&!Number.isInteger(r)||!t(i))return!1;let o=a.length,s=!0;switch(i.name){case`XYZ`:if(o<2||o>3)return!1;break;case`Fit`:case`FitB`:return o===0;case`FitH`:case`FitBH`:case`FitV`:case`FitBV`:if(o>1)return!1;break;case`FitR`:if(o!==4)return!1;s=!1;break;default:return!1}for(let e of a)if(!(typeof e==`number`||s&&e===null))return!1;return!0}var pe=()=>[],me=()=>new Map,he=()=>Object.create(null),ge=()=>new Set;typeof Iterator.prototype.join!=`function`&&(Iterator.prototype.join=function(e){return[...this].join(e)});function L(e,t,n){return Math.min(Math.max(e,t),n)}var _e=class e{constructor({viewBox:e,userUnit:t,scale:n,rotation:r,offsetX:i=0,offsetY:a=0,dontFlip:o=!1}){this.viewBox=e,this.userUnit=t,this.scale=n,this.rotation=r,this.offsetX=i,this.offsetY=a,n*=t;let s=(e[2]+e[0])/2,c=(e[3]+e[1])/2,l,u,d,f;switch(r%=360,r<0&&(r+=360),r){case 180:l=-1,u=0,d=0,f=1;break;case 90:l=0,u=1,d=1,f=0;break;case 270:l=0,u=-1,d=-1,f=0;break;case 0:l=1,u=0,d=0,f=-1;break;default:throw Error(`PageViewport: Invalid rotation, must be a multiple of 90 degrees.`)}o&&(d=-d,f=-f);let p,m,h,g;l===0?(p=Math.abs(c-e[1])*n+i,m=Math.abs(s-e[0])*n+a,h=(e[3]-e[1])*n,g=(e[2]-e[0])*n):(p=Math.abs(s-e[0])*n+i,m=Math.abs(c-e[1])*n+a,h=(e[2]-e[0])*n,g=(e[3]-e[1])*n),this.transform=[l*n,u*n,d*n,f*n,p-l*n*s-d*n*c,m-u*n*s-f*n*c],this.width=h,this.height=g}get rawDims(){let e=this.viewBox;return M(this,`rawDims`,{pageWidth:e[2]-e[0],pageHeight:e[3]-e[1],pageX:e[0],pageY:e[1]})}clone({scale:t=this.scale,rotation:n=this.rotation,offsetX:r=this.offsetX,offsetY:i=this.offsetY,dontFlip:a=!1}={}){return new e({viewBox:this.viewBox.slice(),userUnit:this.userUnit,scale:t,rotation:n,offsetX:r,offsetY:i,dontFlip:a})}convertToViewportPoint(e,t){let n=[e,t];return I.applyTransform(n,this.transform),n}convertToPdfPoint(e,t){let n=[e,t];return I.applyInverseTransform(n,this.transform),n}},ve=class e{static textContent(t){let n=[],r={items:n,styles:Object.create(null)};function i(t){if(!t)return;let r=null,a=t.name;if(a===`#text`)r=t.value;else if(e.shouldBuildText(a))t?.attributes?.textContent?r=t.attributes.textContent:t.value&&(r=t.value);else return;if(r!==null&&n.push({str:r}),t.children)for(let e of t.children)i(e)}return i(t),r}static shouldBuildText(e){return e!==`textarea`&&e!==`input`&&e!==`option`&&e!==`select`}},ye=/url\(|image-set\(/i,be=/^on/i,xe=class{static get _allowedHtmlElements(){return M(this,`_allowedHtmlElements`,new Set([`a`,`b`,`br`,`button`,`div`,`i`,`img`,`input`,`label`,`li`,`ol`,`option`,`p`,`select`,`span`,`sub`,`sup`,`textarea`,`ul`]))}static get _allowedSvgElements(){return M(this,`_allowedSvgElements`,new Set([`ellipse`,`line`,`path`,`rect`,`svg`]))}static get _allowedRichTextElements(){return M(this,`_allowedRichTextElements`,new Set([`a`,`b`,`br`,`div`,`i`,`li`,`ol`,`p`,`span`,`sub`,`sup`,`ul`]))}static get _allowedRichTextAttributes(){return M(this,`_allowedRichTextAttributes`,new Set([`class`,`dir`,`style`]))}static get _allowedRichTextStyles(){return M(this,`_allowedRichTextStyles`,new Set(`color.font.fontFamily.fontSize.fontStretch.fontStyle.fontWeight.kerningMode.letterSpacing.lineHeight.margin.marginBottom.marginLeft.marginRight.marginTop.orphans.paddingLeft.paddingRight.breakAfter.breakBefore.breakInside.tabInterval.tabStop.textAlign.textDecoration.textIndent.transform.verticalAlign.widows`.split(`.`)))}static setupStorage(e,t,n,r,i){let a=r.getValue(t,{value:null});switch(n.name){case`textarea`:if(a.value!==null&&(e.textContent=a.value),i===`print`)break;e.addEventListener(`input`,e=>{r.setValue(t,{value:e.target.value})});break;case`input`:if(n.attributes.type===`radio`||n.attributes.type===`checkbox`){if(a.value===n.attributes.xfaOn?e.setAttribute(`checked`,!0):a.value===n.attributes.xfaOff&&e.removeAttribute(`checked`),i===`print`)break;e.addEventListener(`change`,e=>{r.setValue(t,{value:e.target.checked?e.target.getAttribute(`xfaOn`):e.target.getAttribute(`xfaOff`)})})}else{if(a.value!==null&&e.setAttribute(`value`,a.value),i===`print`)break;e.addEventListener(`input`,e=>{r.setValue(t,{value:e.target.value})})}break;case`select`:if(a.value!==null){e.setAttribute(`value`,a.value);for(let e of n.children)e.attributes.value===a.value?e.attributes.selected=!0:Object.hasOwn(e.attributes,`selected`)&&delete e.attributes.selected}e.addEventListener(`input`,e=>{let n=e.target.options,i=n.selectedIndex===-1?``:n[n.selectedIndex].value;r.setValue(t,{value:i})})}}static setAttributes({html:e,element:t,storage:n=null,intent:r,linkService:i}){let{attributes:a}=t,o=e instanceof HTMLAnchorElement;a.type===`radio`&&(a.name=`${a.name}-${r}`);for(let[t,n]of Object.entries(a))if(n!=null&&!be.test(t)&&!(r===`richText`&&!this._allowedRichTextAttributes.has(t)))switch(t){case`class`:n.length&&e.setAttribute(t,n.join(` `));break;case`dataId`:break;case`id`:e.setAttribute(`data-element-id`,n);break;case`style`:if(r===`richText`){let t=this._allowedRichTextStyles;for(let[r,i]of Object.entries(n))t.has(r)&&!ye.test(i)&&(e.style[r]=i)}else Object.assign(e.style,n);break;case`textContent`:e.textContent=n;break;default:(!o||t!==`href`&&t!==`newWindow`)&&e.setAttribute(t,n)}o&&i?.addLinkAttributes(e,a.href,a.newWindow),n&&a.dataId&&this.setupStorage(e,a.dataId,t,n)}static#e(e,t,n){return n===`richText`?!t&&this._allowedRichTextElements.has(e)?document.createElement(e):null:t?t===a&&this._allowedSvgElements.has(e)?document.createElementNS(a,e):null:this._allowedHtmlElements.has(e)?document.createElement(e):null}static render(e){let t=e.annotationStorage,n=e.linkService,r=e.xfaHtml,i=e.intent||`display`,a=this.#e(r.name,r.attributes?.xmlns,i)??document.createElement(`div`);r.attributes&&this.setAttributes({html:a,element:r,intent:i,linkService:n});let o=i!==`richText`,s=e.div;if(s.append(a),e.viewport){let t=`matrix(${e.viewport.transform.join(`,`)})`;s.style.transform=t}o&&s.setAttribute(`class`,`xfaLayer xfaFont`);let c=[];if(r.children.length===0){if(r.value){let e=document.createTextNode(r.value);a.append(e),o&&ve.shouldBuildText(r.name)&&c.push(e)}return{textDivs:c}}let l=[[r,-1,a]];for(;l.length>0;){let[e,r,a]=l.at(-1);if(r+1===e.children.length){l.pop();continue}let s=e.children[++l.at(-1)[1]];if(s===null)continue;let{name:u}=s;if(u===`#text`){let e=document.createTextNode(s.value);c.push(e),a.append(e);continue}let d=this.#e(u,s.attributes?.xmlns,i);if(d){if(a.append(d),s.attributes&&this.setAttributes({html:d,element:s,storage:t,intent:i,linkService:n}),s.children?.length>0)l.push([s,-1,d]);else if(s.value){let e=document.createTextNode(s.value);o&&ve.shouldBuildText(u)&&c.push(e),d.append(e)}}}for(let e of s.querySelectorAll(`.xfaNonInteractive input, .xfaNonInteractive textarea`))e.setAttribute(`readOnly`,!0);return{textDivs:c}}static update(e){let t=`matrix(${e.viewport.transform.join(`,`)})`;e.div.style.transform=t,e.div.hidden=!1}static getPageViewport(e,{scale:t=1,rotation:n=0}){let{width:r,height:i}=e.attributes.style;return new _e({viewBox:[0,0,parseInt(r,10),parseInt(i,10)],userUnit:1,scale:t,rotation:n})}},Se=class{static CSS=96;static PDF=72;static PDF_TO_CSS_UNITS=this.CSS/this.PDF};async function Ce(e,t=`text`){if(Ae(e,document.baseURI)){let n=await fetch(e);if(!n.ok)throw Error(n.statusText);switch(t){case`blob`:return n.blob();case`bytes`:return n.bytes();case`json`:return n.json()}return n.text()}return new Promise((n,r)=>{let i=new XMLHttpRequest;i.open(`GET`,e,!0),i.responseType=t===`bytes`?`arraybuffer`:t,i.onreadystatechange=()=>{if(i.readyState===XMLHttpRequest.DONE){if(i.status===200||i.status===0){switch(t){case`bytes`:n(new Uint8Array(i.response));return;case`blob`:case`json`:n(i.response);return}n(i.responseText);return}r(Error(i.statusText))}},i.send(null)})}var we=class extends N{constructor(e,t=0){super(e,`RenderingCancelledException`),this.extraDelay=t}};function Te(e){let t=e.length,n=0;for(;n{try{return new URL(e)}catch{}try{return new URL(decodeURIComponent(e))}catch{}try{return new URL(e,`https://foo.bar`)}catch{}try{return new URL(decodeURIComponent(e),`https://foo.bar`)}catch{}return null})(e);if(!n)return t;let r=e=>{try{let t=decodeURIComponent(e);return t.includes(`/`)&&(t=j(t),t.length===4&&i.test(t))?e:t}catch{return e}},i=/\.pdf$/i,a=j(n.pathname);if(i.test(a))return r(a);if(n.searchParams.size>0){let e=e=>[...e].findLast(e=>i.test(e)),t=e(n.searchParams.values())??e(n.searchParams.keys());if(t)return r(t)}if(n.hash){let e=/[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i.exec(n.hash);if(e)return r(e[0])}return t}var ke=class{#e=new Map;times=[];time(e){this.#e.has(e)&&T(`Timer is already running for ${e}`),this.#e.set(e,Date.now())}timeEnd(e){this.#e.has(e)||T(`Timer has not been started for ${e}`),this.times.push({name:e,start:this.#e.get(e),end:Date.now()}),this.#e.delete(e)}toString(){let e=Math.max(...this.times.map(e=>e.name.length));return this.times.map(t=>`${t.name.padEnd(e)} ${t.end-t.start}ms\n`).join(``)}};function Ae(e,t){let n=t?URL.parse(e,t):URL.parse(e);return/https?:/.test(n?.protocol??``)}function R(e){e.preventDefault()}function z(e){e.preventDefault(),e.stopPropagation()}var je=class{static#e;static toDateObject(e){if(e instanceof Date)return e;if(!e||typeof e!=`string`)return null;this.#e||=RegExp(`^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+\\-])?(\\d{2})?'?(\\d{2})?'?`);let t=this.#e.exec(e);if(!t)return null;let n=parseInt(t[1],10),r=parseInt(t[2],10);r=r>=1&&r<=12?r-1:0;let i=parseInt(t[3],10);i=i>=1&&i<=31?i:1;let a=parseInt(t[4],10);a=a>=0&&a<=23?a:0;let o=parseInt(t[5],10);o=o>=0&&o<=59?o:0;let s=parseInt(t[6],10);s=s>=0&&s<=59?s:0;let c=t[7]||`Z`,l=parseInt(t[8],10);l=l>=0&&l<=23?l:0;let u=parseInt(t[9],10)||0;return u=u>=0&&u<=59?u:0,c===`-`?(a+=l,o+=u):c===`+`&&(a-=l,o-=u),new Date(Date.UTC(n,r,i,a,o,s))}};function Me(e){if(e.startsWith(`#`)){let t=e.slice(1);return[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16),t.length>=8?parseInt(t.slice(6,8),16)/255:1]}if(e.startsWith(`rgb(`)){let[t,n,r]=e.slice(4,-1).split(`,`).map(e=>parseInt(e,10));return[t,n,r,1]}if(e.startsWith(`rgba(`)){let t=e.slice(5,-1).split(`,`);return[parseInt(t[0],10),parseInt(t[1],10),parseInt(t[2],10),parseFloat(t[3])]}let t=e.match(/^color\(srgb\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)(?:\s*\/\s*([\d.]+|none))?\)$/);return t?[Math.round(parseFloat(t[1])*255),Math.round(parseFloat(t[2])*255),Math.round(parseFloat(t[3])*255),t[4]!==void 0&&t[4]!==`none`?parseFloat(t[4]):1]:null}function Ne(e){let t=Me(e);return t?t.slice(0,3):(T(`Not a valid color format: "${e}"`),[0,0,0])}function Pe(e){let t=document.createElement(`span`);t.style.visibility=`hidden`,t.style.colorScheme=`only light`,document.body.append(t);for(let n of e.keys()){t.style.color=n;let r=window.getComputedStyle(t).color;e.set(n,Ne(r))}t.remove()}function B(e){let{a:t,b:n,c:r,d:i,e:a,f:o}=e.getTransform();return[t,n,r,i,a,o]}function V(e){let{a:t,b:n,c:r,d:i,e:a,f:o}=e.getTransform().invertSelf();return[t,n,r,i,a,o]}function Fe(e,t,n=!1,r=!0){if(t instanceof _e){let{pageWidth:r,pageHeight:i}=t.rawDims,{style:a}=e,o=`round(down, var(--total-scale-factor) * ${r}px, var(--scale-round-x))`,s=`round(down, var(--total-scale-factor) * ${i}px, var(--scale-round-y))`;!n||t.rotation%180==0?(a.width=o,a.height=s):(a.width=s,a.height=o)}r&&e.setAttribute(`data-main-rotation`,t.rotation)}var Ie=class e{constructor(){let{pixelRatio:t}=e;this.sx=t,this.sy=t}get scaled(){return this.sx!==1||this.sy!==1}get symmetric(){return this.sx===this.sy}limitCanvas(t,n,r,i,a=-1){let o=1/0,s=1/0,c=1/0;r=e.capPixels(r,a),r>0&&(o=Math.sqrt(r/(t*n))),i!==-1&&(s=i/t,c=i/n);let l=Math.min(o,s,c);return this.sx>l||this.sy>l?(this.sx=l,this.sy=l,!0):!1}static get pixelRatio(){return globalThis.devicePixelRatio||1}static capPixels(e,t){if(t>=0){let n=Math.ceil(window.screen.availWidth*window.screen.availHeight*this.pixelRatio**2*(1+t/100));return e>0?Math.min(e,n):n}return e}},Le=[`image/apng`,`image/avif`,`image/bmp`,`image/gif`,`image/jpeg`,`image/png`,`image/svg+xml`,`image/webp`,`image/x-icon`],Re=class{static get isDarkMode(){return M(this,`isDarkMode`,!!window?.matchMedia?.(`(prefers-color-scheme: dark)`).matches)}},ze=class{static get commentForegroundColor(){let e=document.createElement(`span`);e.classList.add(`comment`,`sidebar`);let{style:t}=e;t.width=t.height=`0`,t.display=`none`,t.color=`var(--comment-fg-color)`,document.body.append(e);let{color:n}=window.getComputedStyle(e);return e.remove(),M(this,`commentForegroundColor`,Ne(n))}};function Be(e,t){t=L(t??1,0,1);let n=255*(1-t);return e.map(e=>Math.round(e*t+n))}function Ve(e,t){let n=e[0]/255,r=e[1]/255,i=e[2]/255,a=Math.max(n,r,i),o=Math.min(n,r,i),s=(a+o)/2;if(a===o)t[0]=t[1]=0;else{let e=a-o;switch(t[1]=s<.5?e/(a+o):e/(2-a-o),a){case n:t[0]=((r-i)/e+(ri?(r+.05)/(i+.05):(i+.05)/(r+.05)}var Ge=new Map;function Ke(e,t){let n=e[0]+e[1]*256+e[2]*65536+t[0]*16777216+t[1]*4294967296+t[2]*1099511627776,r=Ge.get(n);if(r)return r;let i=new Float32Array(9),a=i.subarray(0,3),o=i.subarray(3,6);Ve(e,o);let s=i.subarray(6,9);Ve(t,s);let c=s[2]<.5,l=c?12:4.5;if(o[2]=c?Math.sqrt(o[2]):1-Math.sqrt(1-o[2]),We(o,s,a).005;){let n=o[2]=(e+t)/2;c===We(o,s,a){n.delete()},{signal:n._signal}),this.#r.append(r)}get#p(){let e=document.createElement(`div`);return e.className=`divider`,e}async addAltText(e){let t=await e.render();this.#f(t),this.#r.append(t,this.#p),this.#i=e}addComment(e,t=null){if(this.#a)return;let n=e.renderForToolbar();if(!n)return;this.#f(n);let r=this.#o=this.#p;t?(this.#r.insertBefore(n,t),this.#r.insertBefore(r,t)):this.#r.append(n,r),this.#a=e,e.toolbar=this}addColorPicker(e){if(this.#t)return;this.#t=e;let t=e.renderButton();this.#f(t),this.#r.append(t,this.#p)}async addEditSignatureButton(e){let t=this.#s=await e.renderEditButton(this.#n);this.#f(t),this.#r.append(t,this.#p)}removeButton(e){e===`comment`&&(this.#a?.removeToolbarCommentButton(),this.#a=null,this.#o?.remove(),this.#o=null)}async addButton(e,t){switch(e){case`colorPicker`:t&&this.addColorPicker(t);break;case`altText`:t&&await this.addAltText(t);break;case`editSignature`:t&&await this.addEditSignatureButton(t);break;case`delete`:this.addDeleteButton();break;case`comment`:t&&this.addComment(t)}}async addButtonBefore(e,t,n){if(!t&&e===`comment`)return;let r=this.#r.querySelector(n);r&&e===`comment`&&this.addComment(t,r)}updateEditSignatureButton(e){this.#s&&(this.#s.title=e)}remove(){this.#e.remove(),this.#t?.destroy(),this.#t=null}},Xe=class{#e=null;#t=null;#n;constructor(e){this.#n=e}#r(){let e=this.#t=document.createElement(`div`);e.className=`editToolbar`,e.setAttribute(`role`,`toolbar`);let t=this.#n._signal;t instanceof AbortSignal&&!t.aborted&&e.addEventListener(`contextmenu`,R,{signal:t});let n=this.#e=document.createElement(`div`);return n.className=`buttons`,e.append(n),this.#n.hasCommentManager()&&this.#a(`commentButton`,`pdfjs-comment-floating-button`,`pdfjs-comment-floating-button-label`,()=>{this.#n.commentSelection(`floating_button`)}),this.#a(`highlightButton`,`pdfjs-highlight-floating-button1`,`pdfjs-highlight-floating-button-label`,()=>{this.#n.highlightSelection(`floating_button`)}),e}#i(e,t){let n=0,r=0;for(let i of e){let e=i.y+i.height;if(en){r=a,n=e;continue}t?a>r&&(r=a):a=1}static clearPointerType(){e.#r=null}static clearPointerIds(){e.#e=NaN,e.#t=null}static clearTimeStamp(){e.#n=NaN}},$e=class{#e=0;get id(){return`${l}${this.#e++}`}},et=class e{#e=de();#t=0;#n=null;static get _isSVGFittingCanvas(){let e=`data:image/svg+xml;charset=UTF-8,`,t=new OffscreenCanvas(1,3).getContext(`2d`,{willReadFrequently:!0}),n=new Image;n.src=e;let r=n.decode().then(()=>(t.drawImage(n,0,0,1,1,0,0,1,3),new Uint32Array(t.getImageData(0,0,1,1).data.buffer)[0]===0));return M(this,`_isSVGFittingCanvas`,r)}async#r(t,n){this.#n||=new Map;let r=this.#n.get(t);if(r===null)return null;if(r?.bitmap)return r.refCounter+=1,r;try{r||={bitmap:null,id:`image_${this.#e}_${this.#t++}`,refCounter:0,isSvg:!1};let t;if(typeof n==`string`?(r.url=n,t=await Ce(n,`blob`)):n instanceof File?t=r.file=n:n instanceof Blob&&(t=n),t.type===`image/svg+xml`){let n=e._isSVGFittingCanvas,i=new FileReader,a=new Image,o=new Promise((e,t)=>{a.onload=()=>{r.bitmap=a,r.isSvg=!0,e()},i.onload=async()=>{let e=r.svgUrl=i.result;a.src=await n?`${e}#svgView(preserveAspectRatio(none))`:e},a.onerror=i.onerror=t});i.readAsDataURL(t),await o}else r.bitmap=await createImageBitmap(t);r.refCounter=1}catch(e){T(e),r=null}return this.#n.set(t,r),r&&this.#n.set(r.id,r),r}async getFromFile(e){let{lastModified:t,name:n,size:r,type:i}=e;return this.#r(`${t}_${n}_${r}_${i}`,e)}async getFromUrl(e){return this.#r(e,e)}async getFromBlob(e,t){let n=await t;return this.#r(e,n)}async getFromId(e){this.#n||=new Map;let t=this.#n.get(e);if(!t)return null;if(t.bitmap)return t.refCounter+=1,t;if(t.file)return this.getFromFile(t.file);if(t.blobPromise){let{blobPromise:e}=t;return delete t.blobPromise,this.getFromBlob(t.id,e)}return this.getFromUrl(t.url)}getFromCanvas(e,t){this.#n||=new Map;let n=this.#n.get(e);if(n?.bitmap)return n.refCounter+=1,n;let r=new OffscreenCanvas(t.width,t.height);return r.getContext(`2d`).drawImage(t,0,0),n={bitmap:r.transferToImageBitmap(),id:`image_${this.#e}_${this.#t++}`,refCounter:1,isSvg:!1},this.#n.set(e,n),this.#n.set(n.id,n),n}getSvgUrl(e){let t=this.#n.get(e);return t?.isSvg?t.svgUrl:null}deleteId(e){this.#n||=new Map;let t=this.#n.get(e);if(!t||(--t.refCounter,t.refCounter!==0))return;let{bitmap:n}=t;if(!t.url&&!t.file){let e=new OffscreenCanvas(n.width,n.height);e.getContext(`bitmaprenderer`).transferFromImageBitmap(n),t.blobPromise=e.convertToBlob()}n.close?.(),t.bitmap=null}isValidId(e){return e.startsWith(`image_${this.#e}_`)}},tt=class{#e=[];#t=!1;#n;#r=-1;constructor(e=128){this.#n=e}add({cmd:e,undo:t,post:n,mustExec:r,type:i=NaN,overwriteIfSameType:a=!1,keepUndo:o=!1}){if(r&&e(),this.#t)return;let s={cmd:e,undo:t,post:n,type:i};if(this.#r===-1){this.#e.length>0&&(this.#e.length=0),this.#r=0,this.#e.push(s);return}if(a&&this.#e[this.#r].type===i){o&&(s.undo=this.#e[this.#r].undo),this.#e[this.#r]=s;return}let c=this.#r+1;c===this.#n?this.#e.splice(0,1):(this.#r=c,c=0;t--)if(this.#e[t].type!==e){this.#e.splice(t+1,this.#r-t),this.#r=t;return}this.#e.length=0,this.#r=-1}}destroy(){this.#e=null}},nt=class e{static ALT=1;static CTRL=2;static META=4;static SHIFT=8;constructor(t){this.callbacks=new Map;let{isMac:n}=F.platform;for(let[r,i,a={}]of t){let t=r.some(e=>e.startsWith(`mac+`));for(let o of r){let r=o;if(t){let e=o.startsWith(`mac+`);if(n!==e)continue;e&&(r=o.slice(4))}let[s,c]=e.#e(r);s!==null&&this.callbacks.getOrInsertComputed(s,pe).push({callback:i,options:a,modifiers:c})}}}static#e(t){let n=null,r=0;for(let i of t.split(`+`)){if(i=i.trim(),!i)continue;let a=i.toUpperCase(),o=e[a];if(o){r|=o;continue}if(n!==null){T(`KeyboardManager: multiple keys in shortcut "${t}"`);break}n=a===`SPACE`?` `:i}return n===null&&T(`KeyboardManager: no key found in shortcut "${t}"`),[n,r]}static#t(e){let t=/^(?:Key([A-Z])|(?:Digit|Numpad)(\d))$/.exec(e);return t?t[1]?.toLowerCase()??t[2]:null}exec(t,n){let r=this.callbacks.get(n.key);if(!r){if(/^[a-z]$/i.test(n.key))return;let t=e.#t(n.code);if(t===null||t===n.key||(r=this.callbacks.get(t),!r))return}let i=(n.altKey?e.ALT:0)|(n.ctrlKey?e.CTRL:0)|(n.metaKey?e.META:0)|(n.shiftKey?e.SHIFT:0),a=r.find(e=>e.modifiers===i);if(!a)return;let{callback:o,options:{bubbles:s=!1,args:c=[],checker:l=null}}=a;l&&!l(t,n)||(o.bind(t,...c,n)(),s||z(n))}},rt=class e{static _colorsMapping=new Map([[`CanvasText`,[0,0,0]],[`Canvas`,[255,255,255]]]);get _colors(){let e=new Map([[`CanvasText`,null],[`Canvas`,null]]);return Pe(e),M(this,`_colors`,e)}convert(t){let n=Ne(t);if(!window.matchMedia(`(forced-colors: active)`).matches)return n;for(let[t,r]of this._colors)if(r.every((e,t)=>e===n[t]))return e._colorsMapping.get(t);return n}getHexCode(e){let t=this._colors.get(e);return t?I.makeHexColor(...t):e}},it=class e{#e=new AbortController;#t=null;#n=null;#r=new Map;#i=new Map;#a=null;#o=null;#s=null;#c=null;#l=new tt;#u=null;#d=null;#f=null;#p=0;#m=new Set;#h=null;#g=null;#_=new Set;_editorUndoBar=null;#v=!1;#y=!1;#b=!1;#x=null;#S=null;#C=null;#w=null;#T=!1;#E=null;#D=new $e;#O=!1;#k=!1;#A=!1;#j=null;#M=null;#N=null;#P=null;#F=null;#I=u.NONE;#L=new Set;#R=null;#z=null;#B=null;#V=null;#H=null;#U={isEditing:!1,isEmpty:!0,hasSomethingToUndo:!1,hasSomethingToRedo:!1,hasSelectedEditor:!1,hasSelectedText:!1};#W=[0,0];#G=null;#K=null;#q=null;#J=null;#Y=null;static TRANSLATE_SMALL=1;static TRANSLATE_BIG=10;static get _keyboardManager(){let t=e.prototype,n=e=>e.#K.contains(document.activeElement)&&document.activeElement.tagName!==`BUTTON`&&e.hasSomethingToControl(),r=(e,{target:t})=>{if(t instanceof HTMLInputElement){let{type:e}=t;return e!==`text`&&e!==`number`}return!0},i=this.TRANSLATE_SMALL,a=this.TRANSLATE_BIG;return M(this,`_keyboardManager`,new nt([[[`ctrl+a`,`mac+meta+a`],t.selectAll,{checker:r}],[[`ctrl+z`,`mac+meta+z`],t.undo,{checker:r}],[[`ctrl+y`,`ctrl+shift+z`,`mac+meta+shift+z`,`ctrl+shift+Z`,`mac+meta+shift+Z`],t.redo,{checker:r}],[[`Backspace`,`alt+Backspace`,`ctrl+Backspace`,`shift+Backspace`,`mac+Backspace`,`mac+alt+Backspace`,`mac+ctrl+Backspace`,`Delete`,`ctrl+Delete`,`shift+Delete`,`mac+Delete`],t.delete,{checker:r}],[[`Enter`],t.addNewEditorFromKeyboard,{checker:(e,{target:t})=>!(t instanceof HTMLButtonElement)&&e.#K.contains(t)&&!e.isEnterHandled}],[[`Space`],t.addNewEditorFromKeyboard,{checker:(e,{target:t})=>!(t instanceof HTMLButtonElement)&&e.#K.contains(document.activeElement)}],[[`Escape`],t.unselectAll],[[`ArrowLeft`],t.translateSelectedEditors,{args:[-i,0],checker:n}],[[`ctrl+ArrowLeft`,`mac+shift+ArrowLeft`],t.translateSelectedEditors,{args:[-a,0],checker:n}],[[`ArrowRight`],t.translateSelectedEditors,{args:[i,0],checker:n}],[[`ctrl+ArrowRight`,`mac+shift+ArrowRight`],t.translateSelectedEditors,{args:[a,0],checker:n}],[[`ArrowUp`],t.translateSelectedEditors,{args:[0,-i],checker:n}],[[`ctrl+ArrowUp`,`mac+shift+ArrowUp`],t.translateSelectedEditors,{args:[0,-a],checker:n}],[[`ArrowDown`],t.translateSelectedEditors,{args:[0,i],checker:n}],[[`ctrl+ArrowDown`,`mac+shift+ArrowDown`],t.translateSelectedEditors,{args:[0,a],checker:n}]]))}constructor(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this._signal=this.#e.signal;this.#K=e,this.#q=t,this.#J=n,this.#o=r,this.#u=i,this.#z=a,this.#H=s,this._eventBus=o;let _={signal:g,...Ze};o.on(`editingaction`,this.onEditingAction.bind(this),_),o.on(`pagechanging`,this.onPageChanging.bind(this),_),o.on(`scalechanging`,this.onScaleChanging.bind(this),_),o.on(`rotationchanging`,this.onRotationChanging.bind(this),_),o.on(`setpreference`,this.onSetPreference.bind(this),_),o.on(`switchannotationeditorparams`,e=>this.updateParams(e.type,e.value),_),window.addEventListener(`pointerdown`,()=>{this.#k=!0},{capture:!0,signal:g}),window.addEventListener(`pointerup`,()=>{this.#k=!1},{capture:!0,signal:g}),window.addEventListener(`beforeunload`,this.endCurrentEditing.bind(this),{capture:!0,signal:g}),this.#te(),this.#ce(),this.#ie(),this.#s=s.annotationStorage,this.#x=s.filterFactory,this.#B=c,this.#w=l||null,this.#v=u,this.#y=d,this.#b=f,this.#F=p||null,this.viewParameters={realScale:Se.PDF_TO_CSS_UNITS,rotation:0},this.isShiftKeyDown=!1,this._editorUndoBar=m||null,this._supportsPinchToZoom=h!==!1,i?.setSidebarUiManager(this)}destroy(){this.#Y?.resolve(),this.#Y=null,this.#e?.abort(),this.#e=null,this._signal=null;for(let e of this.#i.values())e.destroy();this.#i.clear(),this.#r.clear(),this.#_.clear(),this.#P?.clear(),this.#t=null,this.#L.clear(),this.#l.destroy(),this.#o?.destroy(),this.#u?.destroy(),this.#z?.destroy(),this.#E?.hide(),this.#E=null,this.#N?.destroy(),this.#N=null,this.#n=null,this.#S&&=(clearTimeout(this.#S),null),this.#G&&=(clearTimeout(this.#G),null),this._editorUndoBar?.destroy(),this.#H=null}combinedSignal(e){return AbortSignal.any([this._signal,e.signal])}get mlManager(){return this.#F}get useNewAltTextFlow(){return this.#y}get useNewAltTextWhenAddingImage(){return this.#b}get hcmFilter(){return M(this,`hcmFilter`,this.#B?this.#x.addHCMFilter(this.#B.foreground,this.#B.background):`none`)}get direction(){return M(this,`direction`,getComputedStyle(this.#K).direction)}get _highlightColors(){return M(this,`_highlightColors`,this.#w?new Map(this.#w.split(`,`).map(e=>(e=e.split(`=`).map(e=>e.trim()),e[1]=e[1].toUpperCase(),e))):null)}get highlightColors(){let{_highlightColors:e}=this;if(!e)return M(this,`highlightColors`,null);let t=new Map,n=!!this.#B;for(let[r,i]of e){let e=r.endsWith(`_HCM`);if(n&&e){t.set(r.replace(`_HCM`,``),i);continue}!n&&!e&&t.set(r,i)}return M(this,`highlightColors`,t)}get highlightColorNames(){return M(this,`highlightColorNames`,this.highlightColors?new Map(Array.from(this.highlightColors,e=>e.reverse())):null)}getNonHCMColor(e){if(!this._highlightColors)return e;let t=this.highlightColorNames.get(e);return this._highlightColors.get(t)||e}getNonHCMColorName(e){return this.highlightColorNames.get(e)||e}setCurrentDrawingSession(e){e?(this.unselectAll(),this.disableUserSelect(!0)):this.disableUserSelect(!1),this.#f=e}setMainHighlightColorPicker(e){this.#N=e}editAltText(e,t=!1){this.#o?.editAltText(this,e,t)}hasCommentManager(){return!!this.#u}editComment(e,t,n,r){this.#u?.showDialog(this,e,t,n,r)}selectComment(e,t){(this.#i.get(e)?.getEditorByUID(t))?.toggleComment(!0,!0)}updateComment(e){this.#u?.updateComment(e.getData())}updatePopupColor(e){this.#u?.updatePopupColor(e)}removeComment(e){this.#u?.removeComments([e.uid])}deleteComment(e,t){let n=()=>{e.comment=t};this.addCommands({cmd:()=>{this._editorUndoBar?.show(n,`comment`),this.toggleComment(null),e.comment=null},undo:n,mustExec:!0})}toggleComment(e,t,n=void 0){this.#u?.toggleCommentPopup(e,t,n)}makeCommentColor(e,t){return e&&this.#u?.makeCommentColor(e,t)||null}getCommentDialogElement(){return this.#u?.dialogElement||null}async waitForEditorsRendered(e){if(this.#i.has(e-1))return;let{resolve:t,promise:n}=Promise.withResolvers(),r=n=>{n.pageNumber===e&&(this._eventBus.off(`editorsrendered`,r),t())};this._eventBus.on(`editorsrendered`,r,Ze),await n}getSignature(e){this.#z?.getSignature({uiManager:this,editor:e})}get signatureManager(){return this.#z}switchToMode(e,t){this._eventBus.on(`annotationeditormodechanged`,t,{once:!0,signal:this._signal,...Ze}),this._eventBus.dispatch(`showannotationeditorui`,{source:this,mode:e})}setPreference(e,t){this._eventBus.dispatch(`setpreference`,{source:this,name:e,value:t})}onSetPreference({name:e,value:t}){e===`enableNewAltTextWhenAddingImage`&&(this.#b=t)}onPageChanging({pageNumber:e}){this.#p=e-1}deletePage(e){for(let t of this.getEditors(e))t.remove();this.#i.delete(e),this.#p===e&&(this.#p=0)}focusMainContainer(){this.#K.focus()}findParent(e,t){for(let n of this.#i.values()){let{x:r,y:i,width:a,height:o}=n.div.getBoundingClientRect();if(e>=r&&e<=r+a&&t>=i&&t<=i+o)return n}return null}disableUserSelect(e=!1){this.#q.classList.toggle(`noUserSelect`,e)}addShouldRescale(e){this.#_.add(e)}removeShouldRescale(e){this.#_.delete(e)}onScaleChanging({scale:e}){this.commitOrRemove(),this.viewParameters.realScale=e*Se.PDF_TO_CSS_UNITS;for(let e of this.#_)e.onScaleChanging();this.#f?.onScaleChanging()}onRotationChanging({pagesRotation:e}){this.commitOrRemove(),this.viewParameters.rotation=e}#X({anchorNode:e}){return e.nodeType===Node.TEXT_NODE?e.parentElement:e}#Z(e){let{currentLayer:t}=this;if(t.hasTextLayer(e))return t;for(let t of this.#i.values())if(t.hasTextLayer(e))return t;return null}highlightSelection(e=``,t=!1){let n=document.getSelection();if(!n||n.isCollapsed)return;let{anchorNode:r,anchorOffset:i,focusNode:a,focusOffset:o}=n,s=n.toString(),c=this.#X(n).closest(`.textLayer`),l=this.getSelectionBoxes(c);if(!l)return;n.empty();let d=this.#Z(c),f=this.#I===u.NONE,p=()=>{let n=d?.createAndAddNewEditor({x:0,y:0},!1,{methodOfCreation:e,boxes:l,anchorNode:r,anchorOffset:i,focusNode:a,focusOffset:o,text:s});f&&this.showAllEditors(`highlight`,!0,!0),t&&n?.editComment()};if(f){this.switchToMode(u.HIGHLIGHT,p);return}p()}commentSelection(e=``){this.highlightSelection(e,!0)}endCurrentEditing(){this.commitOrRemove(),this.currentLayer?.endDrawingSession(!1)}#Q(){let e=document.getSelection();if(!e||e.isCollapsed)return;let t=this.#X(e).closest(`.textLayer`),n=this.getSelectionBoxes(t);n&&(this.#E||=new Xe(this),this.#E.show(t,n,this.direction===`ltr`))}getAndRemoveDataFromAnnotationStorage(e){if(!this.#s)return null;let t=`${l}${e}`,n=this.#s.getRawValue(t);return n&&this.#s.remove(t),n}addToAnnotationStorage(e){!e.isEmpty()&&this.#s&&!this.#s.has(e.id)&&this.#s.setValue(e.id,e)}a11yAlert(e,t=null){let n=this.#J;n&&(n.setAttribute(`data-l10n-id`,e),t?n.setAttribute(`data-l10n-args`,JSON.stringify(t)):n.removeAttribute(`data-l10n-args`))}#$(){let e=document.getSelection();if(!e||e.isCollapsed){this.#R&&(this.#E?.hide(),this.#R=null,this.#le({hasSelectedText:!1}));return}let{anchorNode:t}=e;if(t===this.#R)return;let n=this.#X(e).closest(`.textLayer`);if(!n){this.#R&&(this.#E?.hide(),this.#R=null,this.#le({hasSelectedText:!1}));return}if(this.#E?.hide(),this.#R=t,this.#le({hasSelectedText:!0}),(this.#I===u.HIGHLIGHT||this.#I===u.NONE)&&(this.#I===u.HIGHLIGHT&&this.showAllEditors(`highlight`,!0,!0),this.#T=this.isShiftKeyDown,!this.isShiftKeyDown)){let e=this.#I===u.HIGHLIGHT?this.#Z(n):null;if(e?.toggleDrawing(),this.#k){let t=new AbortController,n=this.combinedSignal(t),r=n=>{(n.type!==`pointerup`||n.button===0)&&(t.abort(),e?.toggleDrawing(!0),n.type===`pointerup`&&this.#ee(`main_toolbar`))};window.addEventListener(`pointerup`,r,{signal:n}),window.addEventListener(`blur`,r,{signal:n})}else e?.toggleDrawing(!0),this.#ee(`main_toolbar`)}}#ee(e=``){this.#I===u.HIGHLIGHT?this.highlightSelection(e):this.#v&&this.#Q()}#te(){document.addEventListener(`selectionchange`,this.#$.bind(this),{signal:this._signal})}#ne(){if(this.#C)return;this.#C=new AbortController;let e=this.combinedSignal(this.#C);window.addEventListener(`focus`,this.focus.bind(this),{signal:e}),window.addEventListener(`blur`,this.blur.bind(this),{signal:e})}#re(){this.#C?.abort(),this.#C=null}blur(){if(this.isShiftKeyDown=!1,this.#T&&(this.#T=!1,this.#ee(`main_toolbar`)),!this.hasSelection)return;let{activeElement:e}=document;for(let t of this.#L)if(t.div.contains(e)){this.#M=[t,e],t._focusEventsAllowed=!1;break}}focus(){if(!this.#M)return;let[e,t]=this.#M;this.#M=null,t.addEventListener(`focusin`,()=>{e._focusEventsAllowed=!0},{once:!0,signal:this._signal}),t.focus()}#ie(){if(this.#j)return;this.#j=new AbortController;let e=this.combinedSignal(this.#j);window.addEventListener(`keydown`,this.keydown.bind(this),{signal:e}),window.addEventListener(`keyup`,this.keyup.bind(this),{signal:e})}#ae(){this.#j?.abort(),this.#j=null}#oe(){if(this.#d)return;this.#d=new AbortController;let e=this.combinedSignal(this.#d);document.addEventListener(`copy`,this.copy.bind(this),{signal:e}),document.addEventListener(`cut`,this.cut.bind(this),{signal:e}),document.addEventListener(`paste`,this.paste.bind(this),{signal:e})}#se(){this.#d?.abort(),this.#d=null}#ce(){let e=this._signal;document.addEventListener(`dragover`,this.dragOver.bind(this),{signal:e}),document.addEventListener(`drop`,this.drop.bind(this),{signal:e})}addEditListeners(){this.#ie(),this.setEditingState(!0)}removeEditListeners(){this.#ae(),this.setEditingState(!1)}dragOver(e){for(let{type:t}of e.dataTransfer.items)for(let n of this.#g)if(n.isHandlingMimeForPasting(t)){e.dataTransfer.dropEffect=`copy`,e.preventDefault();return}}drop(e){for(let t of e.dataTransfer.items)for(let n of this.#g)if(n.isHandlingMimeForPasting(t.type)){n.paste(t,this.currentLayer),e.preventDefault();return}}copy(e){if(e.preventDefault(),this.#t?.commitOrRemove(),!this.hasSelection)return;let t=[];for(let e of this.#L){let n=e.serialize(!0);n&&t.push(n)}t.length!==0&&e.clipboardData.setData(`application/pdfjs`,JSON.stringify(t))}cut(e){this.copy(e),this.delete()}async paste(e){e.preventDefault();let{clipboardData:t}=e;for(let e of t.items)for(let t of this.#g)if(t.isHandlingMimeForPasting(e.type)){t.paste(e,this.currentLayer);return}let n=t.getData(`application/pdfjs`);if(!n)return;try{n=JSON.parse(n)}catch(e){T(`paste: "${e.message}".`);return}if(!Array.isArray(n))return;this.unselectAll();let r=this.currentLayer;try{let e=[];for(let t of n){let n=await r.deserialize(t);if(!n)return;e.push(n)}this.addCommands({cmd:()=>{for(let t of e)this.#pe(t);this.#ge(e)},undo:()=>{for(let t of e)t.remove()},mustExec:!0})}catch(e){T(`paste: "${e.message}".`)}}keydown(t){!this.isShiftKeyDown&&t.key===`Shift`&&(this.isShiftKeyDown=!0),this.#I!==u.NONE&&!this.isEditorHandlingKeyboard&&e._keyboardManager.exec(this,t)}keyup(e){this.isShiftKeyDown&&e.key===`Shift`&&(this.isShiftKeyDown=!1,this.#T&&(this.#T=!1,this.#ee(`main_toolbar`)))}onEditingAction({name:e}){switch(e){case`undo`:case`redo`:case`delete`:case`selectAll`:this[e]();break;case`highlightSelection`:this.highlightSelection(`context_menu`);break;case`commentSelection`:this.commentSelection(`context_menu`)}}updatePageIndex(e,t){for(let n of this.getEditors(e))n.pageIndex=t;let n=this.#a.get(e);n&&(n.pageIndex=t,this.#i.set(t,n),this.#O?n.enable():n.disable())}startUpdatePages(){this.#a=new Map(this.#i),this.#i.clear()}endUpdatePages(){this.#a=null}clonePage(e,t){for(let n of this.getEditors(e)){let e=n.serialize(n.mode!==u.HIGHLIGHT);e&&(e.pageIndex=t,e.id=this.getId(),e.isClone=!0,delete e.popupRef,this.#s.setValue(e.id,e))}}findClonesForPage(e){let t=[],{pageIndex:n}=e;for(let[r,i]of this.#s)i.pageIndex===n&&i.isClone&&(this.#s.remove(r),t.push(e.deserialize(i).then(t=>{t&&(t.isClone=!0,e.addOrRebuild(t))})));return Promise.all(t)}#le(e){Object.entries(e).some(([e,t])=>this.#U[e]!==t)&&(this._eventBus.dispatch(`editingstateschanged`,{source:this,details:Object.assign(this.#U,e)}),this.#I===u.HIGHLIGHT&&e.hasSelectedEditor===!1&&this.#ue([[d.HIGHLIGHT_FREE,!0]]))}#ue(e){this._eventBus.dispatch(`annotationeditorparamschanged`,{source:this,details:e})}setEditingState(e){e?(this.#ne(),this.#oe(),this.#le({isEditing:this.#I!==u.NONE,isEmpty:this.#he(),hasSomethingToUndo:this.#l.hasSomethingToUndo(),hasSomethingToRedo:this.#l.hasSomethingToRedo(),hasSelectedEditor:!1})):(this.#re(),this.#se(),this.#le({isEditing:!1}),this.disableUserSelect(!1))}registerEditorTypes(e){if(!this.#g){this.#g=e;for(let e of this.#g)this.#ue(e.defaultPropertiesToUpdate)}}getId(){return this.#D.id}get currentLayer(){return this.#i.get(this.#p)}getLayer(e){return this.#i.get(e)}get currentPageIndex(){return this.#p}addLayer(e){this.#i.set(e.pageIndex,e),this.#O?e.enable():e.disable()}removeLayer(e){this.#i.delete(e.pageIndex)}async updateMode(e,t=null,n=!1,r=!1,i=!1,a=!1){if(this.#I!==e&&!(this.#Y&&(await this.#Y.promise,!this.#Y))){if(this.#Y=Promise.withResolvers(),this.#f?.commitOrRemove(),this.#I===u.POPUP&&this.#u?.hideSidebar(),this.#u?.destroyPopup(),this.#I=e,e===u.NONE){this.setEditingState(!1),this.#fe();for(let e of this.#r.values())e.hideStandaloneCommentButton();this._editorUndoBar?.hide(),this.toggleComment(null),this.#Y.resolve();return}for(let e of this.#r.values())e.addStandaloneCommentButton();e===u.SIGNATURE&&await this.#z?.loadSignatures(),n&&H.clearPointerType(),this.setEditingState(!0),await this.#de(),this.unselectAll();for(let t of this.#i.values())t.updateMode(e);if(e===u.POPUP){this.#n||=await this.#H.getAnnotationsByType(new Set(this.#g.map(e=>e._editorType)));let e=new Set,t=[];for(let n of this.#r.values()){let{annotationElementId:r,hasComment:i,deleted:a}=n;r&&e.add(r),i&&!a&&t.push(n.getData())}for(let n of this.#n){let{id:r,popupRef:i,contentsObj:a}=n;i&&a?.str&&!e.has(r)&&!this.#m.has(r)&&t.push(n)}this.#u?.showSidebar(t)}if(!t){r&&this.addNewEditorFromKeyboard(),this.#Y.resolve();return}for(let e of this.#r.values())e.uid===t?(this.setSelected(e),a?e.editComment():i?e.enterInEditMode():e.focus()):e.unselect();this.#Y.resolve()}}addNewEditorFromKeyboard(){this.currentLayer.canCreateNewEmptyEditor()&&this.currentLayer.addNewEditor()}updateToolbar(e){e.mode!==this.#I&&this._eventBus.dispatch(`switchannotationeditormode`,{source:this,...e})}updateParams(e,t){if(this.#g){switch(e){case d.CREATE:this.currentLayer.addNewEditor(t);return;case d.HIGHLIGHT_SHOW_ALL:this._eventBus.dispatch(`reporttelemetry`,{source:this,details:{type:`editing`,data:{type:`highlight`,action:`toggle_visibility`}}}),(this.#V||=new Map).set(e,t),this.showAllEditors(`highlight`,t)}if(this.hasSelection)for(let n of this.#L)n.updateParams(e,t);else for(let n of this.#g)n.updateDefaultParams(e,t)}}showAllEditors(e,t,n=!1){for(let n of this.#r.values())n.editorType===e&&n.show(t);(this.#V?.get(d.HIGHLIGHT_SHOW_ALL)??!0)!==t&&this.#ue([[d.HIGHLIGHT_SHOW_ALL,t]])}enableWaiting(e=!1){if(this.#A!==e){this.#A=e;for(let t of this.#i.values())e?t.disableClick():t.enableClick(),t.div.classList.toggle(`waiting`,e)}}async#de(){if(!this.#O){this.#O=!0;let e=[];for(let t of this.#i.values())e.push(t.enable());await Promise.all(e);for(let e of this.#r.values())e.enable()}}#fe(){if(this.unselectAll(),this.#O){this.#O=!1;for(let e of this.#i.values())e.disable();for(let e of this.#r.values())e.disable()}}*getEditors(e){for(let t of this.#r.values())t.pageIndex===e&&(yield t)}getEditor(e){return this.#r.get(e)}addEditor(e){this.#r.set(e.id,e)}removeEditor(e){e.div.contains(document.activeElement)&&(this.#S&&clearTimeout(this.#S),this.#S=setTimeout(()=>{this.focusMainContainer(),this.#S=null},0)),this.#r.delete(e.id),e.annotationElementId&&this.#P?.delete(e.annotationElementId),this.unselect(e),(!e.annotationElementId||!this.#m.has(e.annotationElementId))&&this.#s?.remove(e.id)}addDeletedAnnotationElement(e){this.#m.add(e.annotationElementId),this.addChangedExistingAnnotation(e),e.deleted=!0}isDeletedAnnotationElement(e){return this.#m.has(e)}removeDeletedAnnotationElement(e){this.#m.delete(e.annotationElementId),this.removeChangedExistingAnnotation(e),e.deleted=!1}#pe(e){let t=this.#i.get(e.pageIndex);t?t.addOrRebuild(e):(this.addEditor(e),this.addToAnnotationStorage(e))}setActiveEditor(e){this.#t!==e&&(this.#t=e,e&&this.#ue(e.propertiesToUpdate))}get#me(){let e=null;for(e of this.#L);return e}updateUI(e){this.#me===e&&this.#ue(e.propertiesToUpdate)}updateUIForDefaultProperties(e){this.#ue(e.defaultPropertiesToUpdate)}toggleSelected(e){if(this.#L.has(e)){this.#L.delete(e),e.unselect(),this.#le({hasSelectedEditor:this.hasSelection});return}this.#L.add(e),e.select(),this.#ue(e.propertiesToUpdate),this.#le({hasSelectedEditor:!0})}setSelected(e){this.updateToolbar({mode:e.mode,editId:e.uid}),this.#f?.commitOrRemove();for(let t of this.#L)t!==e&&t.unselect();this.#u?.destroyPopup(),this.#L.clear(),this.#L.add(e),e.select(),this.#ue(e.propertiesToUpdate),this.#le({hasSelectedEditor:!0})}get firstSelectedEditor(){return this.#L.values().next().value}unselect(e){e.unselect(),this.#L.delete(e),this.#le({hasSelectedEditor:this.hasSelection})}get hasSelection(){return this.#L.size!==0}get isEnterHandled(){return this.#L.size===1&&this.firstSelectedEditor.isEnterHandled}undo(){this.#l.undo(),this.#le({hasSomethingToUndo:this.#l.hasSomethingToUndo(),hasSomethingToRedo:!0,isEmpty:this.#he()}),this._editorUndoBar?.hide()}redo(){this.#l.redo(),this.#le({hasSomethingToUndo:!0,hasSomethingToRedo:this.#l.hasSomethingToRedo(),isEmpty:this.#he()})}addCommands(e){this.#l.add(e),this.#le({hasSomethingToUndo:!0,hasSomethingToRedo:!1,isEmpty:this.#he()})}cleanUndoStack(e){this.#l.cleanType(e)}#he(){if(this.#r.size===0)return!0;if(this.#r.size===1)for(let e of this.#r.values())return e.isEmpty();return!1}delete(){this.commitOrRemove();let e=this.currentLayer?.endDrawingSession(!0);if(!this.hasSelection&&!e)return;let t=e?[e]:[...this.#L],n=()=>{this._editorUndoBar?.show(r,t.length===1?t[0].editorType:t.length);for(let e of t)e.remove()},r=()=>{for(let e of t)this.#pe(e)};this.addCommands({cmd:n,undo:r,mustExec:!0})}commitOrRemove(){this.#t?.commitOrRemove()}hasSomethingToControl(){return this.#t||this.hasSelection}#ge(e){for(let e of this.#L)e.unselect();this.#L.clear();for(let t of e)t.isEmpty()||(this.#L.add(t),t.select());this.#le({hasSelectedEditor:this.hasSelection})}selectAll(){for(let e of this.#L)e.commit();this.#ge(this.#r.values())}unselectAll(){if(!(this.#t&&(this.#t.commitOrRemove(),this.#I!==u.NONE))&&!this.#f?.commitOrRemove()&&(this.#u?.destroyPopup(),this.hasSelection)){for(let e of this.#L)e.unselect();this.#L.clear(),this.#le({hasSelectedEditor:!1})}}translateSelectedEditors(e,t,n=!1){if(n||this.commitOrRemove(),!this.hasSelection)return;this.#W[0]+=e,this.#W[1]+=t;let[r,i]=this.#W,a=[...this.#L];this.#G&&clearTimeout(this.#G),this.#G=setTimeout(()=>{this.#G=null,this.#W[0]=this.#W[1]=0,this.addCommands({cmd:()=>{for(let e of a)this.#r.has(e.id)&&(e.translateInPage(r,i),e.translationDone())},undo:()=>{for(let e of a)this.#r.has(e.id)&&(e.translateInPage(-r,-i),e.translationDone())},mustExec:!1})},1e3);for(let n of a)n.translateInPage(e,t),n.translationDone()}setUpDragSession(){if(this.hasSelection){this.disableUserSelect(!0),this.#h=new Map;for(let e of this.#L)this.#h.set(e,{savedX:e.x,savedY:e.y,savedPageIndex:e.pageIndex,newX:0,newY:0,newPageIndex:-1})}}endDragSession(){if(!this.#h)return!1;this.disableUserSelect(!1);let e=this.#h;this.#h=null;let t=!1;for(let[{x:n,y:r,pageIndex:i},a]of e)a.newX=n,a.newY=r,a.newPageIndex=i,t||=n!==a.savedX||r!==a.savedY||i!==a.savedPageIndex;if(!t)return!1;let n=(e,t,n,r)=>{if(this.#r.has(e.id)){let i=this.#i.get(r);i?e._setParentAndPosition(i,t,n):(e.pageIndex=r,e.x=t,e.y=n)}};return this.addCommands({cmd:()=>{for(let[t,{newX:r,newY:i,newPageIndex:a}]of e)n(t,r,i,a)},undo:()=>{for(let[t,{savedX:r,savedY:i,savedPageIndex:a}]of e)n(t,r,i,a)},mustExec:!0}),!0}dragSelectedEditors(e,t){if(this.#h)for(let n of this.#h.keys())n.drag(e,t)}rebuild(e){if(e.parent===null){let t=this.getLayer(e.pageIndex);t?(t.changeParent(e),t.addOrRebuild(e)):(this.addEditor(e),this.addToAnnotationStorage(e),e.rebuild())}else e.parent.addOrRebuild(e)}get isEditorHandlingKeyboard(){return this.getActive()?.shouldGetKeyboardEvents()||this.#L.size===1&&this.firstSelectedEditor.shouldGetKeyboardEvents()}isActive(e){return this.#t===e}getActive(){return this.#t}getMode(){return this.#I}isEditingMode(){return this.#I!==u.NONE}get imageManager(){return M(this,`imageManager`,new et)}getSelectionBoxes(e){if(!e)return null;let t=document.getSelection();for(let n=0,r=t.rangeCount;n({x:(t-r)/a,y:1-(e+o-n)/i,width:s/a,height:o/i});break;case`180`:o=(e,t,o,s)=>({x:1-(e+o-n)/i,y:1-(t+s-r)/a,width:o/i,height:s/a});break;case`270`:o=(e,t,o,s)=>({x:1-(t+s-r)/a,y:(e-n)/i,width:s/a,height:o/i});break;default:o=(e,t,o,s)=>({x:(e-n)/i,y:(t-r)/a,width:o/i,height:s/a})}let s=[];for(let e=0,n=t.rangeCount;ee.stopPropagation(),{signal:r});let i=e=>{e.preventDefault(),this.#c._uiManager.editAltText(this.#c),this.#d&&this.#c._reportTelemetry({action:`pdfjs.image.alt_text.image_status_label_clicked`,data:{label:this.#p}})};return t.addEventListener(`click`,i,{capture:!0,signal:r}),t.addEventListener(`keydown`,e=>{e.target===t&&e.key===`Enter`&&(this.#o=!0,i(e))},{signal:r}),await this.#m(),t}get#p(){return this.#e&&`added`||this.#e===null&&this.guessedText&&`review`||`missing`}finish(){this.#n&&(this.#n.focus({focusVisible:this.#o}),this.#o=!1)}isEmpty(){return this.#d?this.#e===null:!this.#e&&!this.#t}hasData(){return this.#d?this.#e!==null||!!this.#l:this.isEmpty()}get guessedText(){return this.#l}async setGuessedText(t){this.#e===null&&(this.#l=t,this.#u=await e._l10n.get(`pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer`,{generatedAltText:t}),this.#m())}toggleAltTextBadge(e=!1){if(!this.#d||this.#e){this.#s?.remove(),this.#s=null;return}if(!this.#s){let e=this.#s=document.createElement(`div`);e.className=`noAltTextBadge`,this.#c.div.append(e)}this.#s.classList.toggle(`hidden`,!e)}serialize(e){let t=this.#e;return!e&&this.#l===t&&(t=this.#u),{altText:t,decorative:this.#t,guessedText:this.#l,textWithDisclaimer:this.#u}}get data(){return{altText:this.#e,decorative:this.#t}}set data({altText:e,decorative:t,guessedText:n,textWithDisclaimer:r,cancel:i=!1}){n&&(this.#l=n,this.#u=r),(this.#e!==e||this.#t!==t)&&(i||(this.#e=e,this.#t=t),this.#m())}toggle(e=!1){this.#n&&(!e&&this.#a&&(clearTimeout(this.#a),this.#a=null),this.#n.disabled=!e)}shown(){this.#c._reportTelemetry({action:`pdfjs.image.alt_text.image_status_label_displayed`,data:{label:this.#p}})}destroy(){this.#n?.remove(),this.#n=null,this.#r=null,this.#i=null,this.#s?.remove(),this.#s=null}async#m(){let t=this.#n;if(!t)return;if(this.#d){if(t.classList.toggle(`done`,!!this.#e),t.setAttribute(`data-l10n-id`,e.#f[this.#p]),this.#r?.setAttribute(`data-l10n-id`,e.#f[`${this.#p}-label`]),!this.#e){this.#i?.remove();return}}else{if(!this.#e&&!this.#t){t.classList.remove(`done`),this.#i?.remove();return}t.classList.add(`done`),t.setAttribute(`data-l10n-id`,`pdfjs-editor-alt-text-edit-button`)}let n=this.#i;if(!n){this.#i=n=document.createElement(`span`),n.className=`tooltip`,n.setAttribute(`role`,`tooltip`),n.id=`alt-text-tooltip-${this.#c.id}`;let e=this.#c._uiManager._signal;e.addEventListener(`abort`,()=>{clearTimeout(this.#a),this.#a=null},{once:!0}),t.addEventListener(`mouseenter`,()=>{this.#a=setTimeout(()=>{this.#a=null,this.#i.classList.add(`show`),this.#c._reportTelemetry({action:`alt_text_tooltip`})},100)},{signal:e}),t.addEventListener(`mouseleave`,()=>{this.#a&&=(clearTimeout(this.#a),null),this.#i?.classList.remove(`show`)},{signal:e})}this.#t?n.setAttribute(`data-l10n-id`,`pdfjs-editor-alt-text-decorative-tooltip`):(n.removeAttribute(`data-l10n-id`),n.textContent=this.#e),n.parentNode||t.append(n),this.#c.getElementForAltText()?.setAttribute(`aria-describedby`,n.id)}},ot=class{#e=null;#t=null;#n=!1;#r=null;#i=null;#a=null;#o=null;#s=null;#c=!1;#l=null;constructor(e){this.#r=e}renderForToolbar(){let e=this.#t=document.createElement(`button`);return e.className=`comment`,this.#u(e,!1)}renderForStandalone(){let e=this.#e=document.createElement(`button`);e.className=`annotationCommentButton`;let t=this.#r.commentButtonPosition;if(t){let{style:n}=e;n.insetInlineEnd=`calc(${100*(this.#r._uiManager.direction===`ltr`?1-t[0]:t[0])}% - var(--comment-button-dim))`,n.top=`calc(${100*t[1]}% - var(--comment-button-dim))`;let r=this.#r.commentButtonColor;r&&(n.backgroundColor=r)}return this.#u(e,!0)}focusButton(){setTimeout(()=>{(this.#e??this.#t)?.focus()},0)}onUpdatedColor(){if(!this.#e)return;let e=this.#r.commentButtonColor;e&&(this.#e.style.backgroundColor=e),this.#r._uiManager.updatePopupColor(this.#r)}get commentButtonWidth(){return(this.#e?.getBoundingClientRect().width??0)/this.#r.parent.boundingClientRect.width}get commentPopupPositionInLayer(){if(this.#l)return this.#l;if(!this.#e)return null;let{x:e,y:t,height:n}=this.#e.getBoundingClientRect(),{x:r,y:i,width:a,height:o}=this.#r.parent.boundingClientRect;return[(e-r)/a,(t+n-i)/o]}set commentPopupPositionInLayer(e){this.#l=e}hasDefaultPopupPosition(){return this.#l===null}removeStandaloneCommentButton(){this.#e?.remove(),this.#e=null}removeToolbarCommentButton(){this.#t?.remove(),this.#t=null}setCommentButtonStates({selected:e,hasPopup:t}){this.#e&&(this.#e.classList.toggle(`selected`,e),this.#e.ariaExpanded=t)}#u(e,t){if(!this.#r._uiManager.hasCommentManager())return null;e.tabIndex=`0`,e.ariaHasPopup=`dialog`,t?(e.ariaControls=`commentPopup`,e.setAttribute(`data-l10n-id`,`pdfjs-show-comment-button`)):(e.ariaControlsElements=[this.#r._uiManager.getCommentDialogElement()],e.setAttribute(`data-l10n-id`,`pdfjs-editor-add-comment-button`));let n=this.#r._uiManager._signal;if(!(n instanceof AbortSignal)||n.aborted)return e;e.addEventListener(`contextmenu`,R,{signal:n}),t&&(e.addEventListener(`focusin`,e=>{this.#r._focusEventsAllowed=!1,z(e)},{capture:!0,signal:n}),e.addEventListener(`focusout`,e=>{this.#r._focusEventsAllowed=!0,z(e)},{capture:!0,signal:n})),e.addEventListener(`pointerdown`,e=>e.stopPropagation(),{signal:n});let r=t=>{t.preventDefault(),e===this.#t?this.edit():this.#r.toggleComment(!0)};return e.addEventListener(`click`,r,{capture:!0,signal:n}),e.addEventListener(`keydown`,t=>{t.target===e&&t.key===`Enter`&&(this.#n=!0,r(t))},{signal:n}),e.addEventListener(`pointerenter`,()=>{this.#r.toggleComment(!1,!0)},{signal:n}),e.addEventListener(`pointerleave`,()=>{this.#r.toggleComment(!1,!1)},{signal:n}),e}edit(e){let t=this.commentPopupPositionInLayer,n,r;if(t)[n,r]=t;else{[n,r]=this.#r.commentButtonPosition;let{width:e,height:t,x:i,y:a}=this.#r;n=i+n*e,r=a+r*t}let i=this.#r.parent.boundingClientRect,{x:a,y:o,width:s,height:c}=i;this.#r._uiManager.editComment(this.#r,a+n*s,o+r*c,{...e,parentDimensions:i})}finish(){this.#t&&(this.#t.focus({focusVisible:this.#n}),this.#n=!1)}isDeleted(){return this.#c||this.#o===``}isEmpty(){return this.#o===null}hasBeenEdited(){return this.isDeleted()||this.#o!==this.#i}serialize(){return this.data}get data(){return{text:this.#o,richText:this.#a,date:this.#s,deleted:this.isDeleted()}}set data(e){if(e!==this.#o&&(this.#a=null),e===null){this.#o=``,this.#c=!0;return}this.#o=e,this.#s=new Date,this.#c=!1}restoreData({text:e,richText:t,date:n}){this.#o=e,this.#a=t,this.#s=n,this.#c=!1}setInitialText(e,t=null){this.#i=e,this.data=e,this.#s=null,this.#a=t}shown(){}destroy(){this.#t?.remove(),this.#t=null,this.#e?.remove(),this.#e=null,this.#o=``,this.#a=null,this.#s=null,this.#r=null,this.#n=!1,this.#c=!1}},st=class e{#e;#t=!1;#n=null;#r;#i;#a;#o;#s=null;#c;#l=null;#u;#d=null;constructor({container:e,isPinchingDisabled:t=null,isPinchingStopped:n=null,onPinchStart:r=null,onPinching:i=null,onPinchEnd:a=null,signal:o}){this.#e=e,this.#n=n,this.#r=t,this.#i=r,this.#a=i,this.#o=a,this.#u=new AbortController,this.#c=AbortSignal.any([o,this.#u.signal]),e.addEventListener(`touchstart`,this.#f.bind(this),{passive:!1,signal:this.#c})}get MIN_TOUCH_DISTANCE_TO_PINCH(){return 35/Ie.pixelRatio}#f(e){if(this.#r?.())return;if(e.touches.length===1){if(this.#s)return;let e=this.#s=new AbortController,t=AbortSignal.any([this.#c,e.signal]),n=this.#e,r={capture:!0,signal:t,passive:!1},i=e=>{e.pointerType===`touch`&&(this.#s?.abort(),this.#s=null)};n.addEventListener(`pointerdown`,e=>{e.pointerType===`touch`&&(z(e),i(e))},r),n.addEventListener(`pointerup`,i,r),n.addEventListener(`pointercancel`,i,r);return}if(!this.#d){this.#d=new AbortController;let e=AbortSignal.any([this.#c,this.#d.signal]),t=this.#e,n={signal:e,capture:!1,passive:!1};t.addEventListener(`touchmove`,this.#p.bind(this),n);let r=this.#m.bind(this);t.addEventListener(`touchend`,r,n),t.addEventListener(`touchcancel`,r,n),n.capture=!0,t.addEventListener(`pointerdown`,z,n),t.addEventListener(`pointermove`,z,n),t.addEventListener(`pointercancel`,z,n),t.addEventListener(`pointerup`,z,n),this.#i?.()}if(z(e),e.touches.length!==2||this.#n?.()){this.#l=null;return}let[t,n]=e.touches;t.identifier>n.identifier&&([t,n]=[n,t]),this.#l={touch0X:t.screenX,touch0Y:t.screenY,touch1X:n.screenX,touch1Y:n.screenY}}#p(t){if(!this.#l||t.touches.length!==2)return;z(t);let[n,r]=t.touches;n.identifier>r.identifier&&([n,r]=[r,n]);let{screenX:i,screenY:a}=n,{screenX:o,screenY:s}=r,c=this.#l,{touch0X:l,touch0Y:u,touch1X:d,touch1Y:f}=c,p=d-l,m=f-u,h=o-i,g=s-a,_=Math.hypot(h,g)||1,v=Math.hypot(p,m)||1;if(!this.#t&&Math.abs(v-_)<=e.MIN_TOUCH_DISTANCE_TO_PINCH)return;if(c.touch0X=i,c.touch0Y=a,c.touch1X=o,c.touch1Y=s,!this.#t){this.#t=!0;return}let y=[(i+o)/2,(a+s)/2];this.#a?.(y,v,_)}#m(e){e.touches.length>=2||(this.#d&&(this.#d.abort(),this.#d=null,this.#o?.()),this.#l&&(z(e),this.#l=null,this.#t=!1))}destroy(){this.#u?.abort(),this.#u=null,this.#s?.abort(),this.#s=null}},U=class e{#e=null;#t=null;#n=null;#r=null;#i=null;#a=!1;#o=null;#s=``;#c=null;#l=null;#u=null;#d=null;#f=null;#p=``;#m=!1;#h=null;#g=!1;#_=!1;#v=!1;#y=null;#b=0;#x=0;#S=null;#C=null;isSelected=!1;_isCopy=!1;_editToolbar=null;_initialOptions=Object.create(null);_initialData=null;_isVisible=!0;_uiManager=null;_focusEventsAllowed=!0;static _l10n=null;static _l10nAlert=null;static _l10nResizer=null;#w=!1;#T=e._zIndex++;static _borderLineWidth=-1;static _colorManager=new rt;static _zIndex=1;static _telemetryTimeout=1e3;static get _resizerKeyboardManager(){let t=e.prototype._resizeWithKeyboard,n=it.TRANSLATE_SMALL,r=it.TRANSLATE_BIG;return M(this,`_resizerKeyboardManager`,new nt([[[`ArrowLeft`],t,{args:[-n,0]}],[[`ctrl+ArrowLeft`,`mac+shift+ArrowLeft`],t,{args:[-r,0]}],[[`ArrowRight`],t,{args:[n,0]}],[[`ctrl+ArrowRight`,`mac+shift+ArrowRight`],t,{args:[r,0]}],[[`ArrowUp`],t,{args:[0,-n]}],[[`ctrl+ArrowUp`,`mac+shift+ArrowUp`],t,{args:[0,-r]}],[[`ArrowDown`],t,{args:[0,n]}],[[`ctrl+ArrowDown`,`mac+shift+ArrowDown`],t,{args:[0,r]}],[[`Escape`],e.prototype._stopResizingWithKeyboard]]))}constructor(e){this.parent=e.parent,this.id=e.id,this.width=this.height=null,this.pageIndex=e.parent.pageIndex,this.name=e.name,this.div=null,this._uiManager=e.uiManager,this.annotationElementId=null,this._willKeepAspectRatio=!1,this._initialOptions.isCentered=e.isCentered,this._structTreeParentId=null,this.annotationElementId=e.annotationElementId||null,this.creationDate=e.creationDate||new Date,this.modificationDate=e.modificationDate||null,this.canAddComment=!0;let{rotation:t,rawDims:{pageWidth:n,pageHeight:r,pageX:i,pageY:a}}=this.parent.viewport;this.rotation=t,this.pageRotation=(360+t-this._uiManager.viewParameters.rotation)%360,this.pageDimensions=[n,r],this.pageTranslation=[i,a];let[o,s]=this.parentDimensions;this.x=e.x/o,this.y=e.y/s,this.isAttachedToDOM=!1,this.deleted=!1}updatePageIndex(e){this.pageIndex=e}get editorType(){return Object.getPrototypeOf(this).constructor._type}get mode(){return Object.getPrototypeOf(this).constructor._editorType}static get isDrawer(){return!1}static get _defaultLineColor(){return M(this,`_defaultLineColor`,this._colorManager.getHexCode(`CanvasText`))}static deleteAnnotationElement(e){let t=new ct({id:e._uiManager.getId(),parent:e.parent,uiManager:e._uiManager});t.annotationElementId=e.annotationElementId,t.deleted=!0,t._uiManager.addToAnnotationStorage(t)}static initialize(t,n){if(e._l10n??=t,e._l10nAlert??=Object.freeze({highlight:`pdfjs-editor-highlight-added-alert`,freetext:`pdfjs-editor-freetext-added-alert`,ink:`pdfjs-editor-ink-added-alert`,stamp:`pdfjs-editor-stamp-added-alert`,signature:`pdfjs-editor-signature-added-alert`}),e._l10nResizer??=Object.freeze({topLeft:`pdfjs-editor-resizer-top-left`,topMiddle:`pdfjs-editor-resizer-top-middle`,topRight:`pdfjs-editor-resizer-top-right`,middleRight:`pdfjs-editor-resizer-middle-right`,bottomRight:`pdfjs-editor-resizer-bottom-right`,bottomMiddle:`pdfjs-editor-resizer-bottom-middle`,bottomLeft:`pdfjs-editor-resizer-bottom-left`,middleLeft:`pdfjs-editor-resizer-middle-left`}),e._borderLineWidth!==-1)return;let r=getComputedStyle(document.documentElement);e._borderLineWidth=parseFloat(r.getPropertyValue(`--outline-width`))||0}static updateDefaultParams(e,t){}static get defaultPropertiesToUpdate(){return[]}static isHandlingMimeForPasting(e){return!1}static paste(e,t){E(`Not implemented`)}get propertiesToUpdate(){return[]}get _isDraggable(){return this.#w}set _isDraggable(e){this.#w=e,this.div?.classList.toggle(`draggable`,e)}get uid(){return this.annotationElementId||this.id}get isEnterHandled(){return!0}center(){let[e,t]=this.pageDimensions;switch(this.parentRotation){case 90:this.x-=this.height*t/(e*2),this.y+=this.width*e/(t*2);break;case 180:this.x+=this.width/2,this.y+=this.height/2;break;case 270:this.x+=this.height*t/(e*2),this.y-=this.width*e/(t*2);break;default:this.x-=this.width/2,this.y-=this.height/2}this.fixAndSetPosition()}addCommands(e){this._uiManager.addCommands(e)}get currentLayer(){return this._uiManager.currentLayer}setInBackground(){this.div.style.zIndex=0}setInForeground(){this.div.style.zIndex=this.#T}setParent(e){e===null?(this.#W(),this.#d?.remove(),this.#d=null):(this.pageIndex=e.pageIndex,this.pageDimensions=e.pageDimensions),this.parent=e}focusin(e){this._focusEventsAllowed&&(this.#m?this.#m=!1:this.parent.setSelected(this))}focusout(e){this._focusEventsAllowed&&this.isAttachedToDOM&&(e.relatedTarget?.closest(`#${this.id}`)||(e.preventDefault(),this.parent?.isMultipleSelection||this.commitOrRemove()))}commitOrRemove(){this.isEmpty()?this.remove():this.commit()}commit(){this.isInEditMode()&&this.addToAnnotationStorage()}addToAnnotationStorage(){this._uiManager.addToAnnotationStorage(this)}setAt(e,t,n,r){let[i,a]=this.parentDimensions;[n,r]=this.screenToPageTranslation(n,r),this.x=(e+n)/i,this.y=(t+r)/a,this.fixAndSetPosition()}_moveAfterPaste(e,t){if(this.isClone){delete this.isClone;return}let[n,r]=this.parentDimensions;this.setAt(e*n,t*r,this.width*n,this.height*r),this._onTranslated()}#E([e,t],n,r){[n,r]=this.screenToPageTranslation(n,r),this.x+=n/e,this.y+=r/t,this._onTranslating(this.x,this.y),this.fixAndSetPosition()}translate(e,t){this.#E(this.parentDimensions,e,t)}translateInPage(e,t){this.#h||=[this.x,this.y,this.width,this.height],this.#E(this.pageDimensions,e,t),this.div.scrollIntoView({block:`nearest`})}translationDone(){this._onTranslated(this.x,this.y)}drag(e,t){this.#h||=[this.x,this.y,this.width,this.height];let{div:n,parentDimensions:[r,i]}=this;if(this.x+=e/r,this.y+=t/i,this.parent&&(this.x<0||this.x>1||this.y<0||this.y>1)){let{x:e,y:t}=this.div.getBoundingClientRect();this.parent.findNewParent(this,e,t)&&(this.x-=Math.floor(this.x),this.y-=Math.floor(this.y))}let{x:a,y:o}=this,[s,c]=this.getBaseTranslation();a+=s,o+=c;let{style:l}=n;l.left=`${(100*a).toFixed(2)}%`,l.top=`${(100*o).toFixed(2)}%`,this._onTranslating(a,o),n.scrollIntoView({block:`nearest`})}_onTranslating(e,t){}_onTranslated(e,t){}get _hasBeenMoved(){return!!this.#h&&(this.#h[0]!==this.x||this.#h[1]!==this.y)}get _hasBeenResized(){return!!this.#h&&(this.#h[2]!==this.width||this.#h[3]!==this.height)}getBaseTranslation(){let[t,n]=this.parentDimensions,{_borderLineWidth:r}=e,i=r/t,a=r/n;switch(this.rotation){case 90:return[-i,a];case 180:return[i,a];case 270:return[i,-a];default:return[-i,-a]}}get _mustFixPosition(){return!0}fixAndSetPosition(e=this.rotation){let{div:{style:t},pageDimensions:[n,r]}=this,{x:i,y:a,width:o,height:s}=this;if(o*=n,s*=r,i*=n,a*=r,this._mustFixPosition)switch(e){case 0:i=L(i,0,n-o),a=L(a,0,r-s);break;case 90:i=L(i,0,n-s),a=L(a,o,r);break;case 180:i=L(i,o,n),a=L(a,s,r);break;case 270:i=L(i,s,n),a=L(a,0,r-o)}this.x=i/=n,this.y=a/=r;let[c,l]=this.getBaseTranslation();i+=c,a+=l,t.left=`${(100*i).toFixed(2)}%`,t.top=`${(100*a).toFixed(2)}%`,this.moveInDOM()}static#D(e,t,n){switch(n){case 90:return[t,-e];case 180:return[-e,-t];case 270:return[-t,e];default:return[e,t]}}screenToPageTranslation(t,n){return e.#D(t,n,this.parentRotation)}pageTranslationToScreen(t,n){return e.#D(t,n,360-this.parentRotation)}#O(e){switch(e){case 90:{let[e,t]=this.pageDimensions;return[0,-e/t,t/e,0]}case 180:return[-1,0,0,-1];case 270:{let[e,t]=this.pageDimensions;return[0,e/t,-t/e,0]}default:return[1,0,0,1]}}get parentScale(){return this._uiManager.viewParameters.realScale}get parentRotation(){return(this._uiManager.viewParameters.rotation+this.pageRotation)%360}get parentDimensions(){let{parentScale:e,pageDimensions:[t,n]}=this;return[t*e,n*e]}setDims(){let{div:{style:e},width:t,height:n}=this;e.width=`${(100*t).toFixed(2)}%`,e.height=`${(100*n).toFixed(2)}%`}getInitialTranslation(){return[0,0]}#k(){if(this.#c)return;this.#c=document.createElement(`div`),this.#c.classList.add(`resizers`);let e=this._willKeepAspectRatio?[`topLeft`,`topRight`,`bottomRight`,`bottomLeft`]:[`topLeft`,`topMiddle`,`topRight`,`middleRight`,`bottomRight`,`bottomMiddle`,`bottomLeft`,`middleLeft`],t=this._uiManager._signal;for(let n of e){let e=document.createElement(`div`);this.#c.append(e),e.classList.add(`resizer`,n),e.setAttribute(`data-resizer-name`,n),e.addEventListener(`pointerdown`,this.#A.bind(this,n),{signal:t}),e.addEventListener(`contextmenu`,R,{signal:t}),e.tabIndex=-1}this.div.prepend(this.#c)}#A(e,t){t.preventDefault();let{isMac:n}=F.platform;if(t.button!==0||t.ctrlKey&&n)return;this.#n?.toggle(!1);let r=this._isDraggable;this._isDraggable=!1,this.#l=[t.screenX,t.screenY];let i=new AbortController,a=this._uiManager.combinedSignal(i);this.parent.togglePointerEvents(!1),window.addEventListener(`pointermove`,this.#N.bind(this,e),{passive:!0,capture:!0,signal:a}),window.addEventListener(`touchmove`,z,{passive:!1,signal:a}),window.addEventListener(`contextmenu`,R,{signal:a}),this.#u={savedX:this.x,savedY:this.y,savedWidth:this.width,savedHeight:this.height};let o=this.parent.div.style.cursor,s=this.div.style.cursor;this.div.style.cursor=this.parent.div.style.cursor=window.getComputedStyle(t.target).cursor;let c=()=>{i.abort(),this.parent.togglePointerEvents(!0),this.#n?.toggle(!0),this._isDraggable=r,this.parent.div.style.cursor=o,this.div.style.cursor=s,this.#M()};window.addEventListener(`pointerup`,c,{signal:a}),window.addEventListener(`blur`,c,{signal:a})}#j(e,t,n,r){this.width=n,this.height=r,this.x=e,this.y=t,this.setDims(),this.fixAndSetPosition(),this._onResized()}_onResized(){}#M(){if(!this.#u)return;let{savedX:e,savedY:t,savedWidth:n,savedHeight:r}=this.#u;this.#u=null;let i=this.x,a=this.y,o=this.width,s=this.height;(i!==e||a!==t||o!==n||s!==r)&&this.addCommands({cmd:this.#j.bind(this,i,a,o,s),undo:this.#j.bind(this,e,t,n,r),mustExec:!0})}static _round(e){return Math.round(e*1e4)/1e4}#N(t,n){let[r,i]=this.parentDimensions,a=this.x,o=this.y,s=this.width,c=this.height,l=e.MIN_SIZE/r,u=e.MIN_SIZE/i,d=this.#O(this.rotation),f=(e,t)=>[d[0]*e+d[2]*t,d[1]*e+d[3]*t],p=this.#O(360-this.rotation),m=(e,t)=>[p[0]*e+p[2]*t,p[1]*e+p[3]*t],h,g,_=!1,v=!1;switch(t){case`topLeft`:_=!0,h=(e,t)=>[0,0],g=(e,t)=>[e,t];break;case`topMiddle`:h=(e,t)=>[e/2,0],g=(e,t)=>[e/2,t];break;case`topRight`:_=!0,h=(e,t)=>[e,0],g=(e,t)=>[0,t];break;case`middleRight`:v=!0,h=(e,t)=>[e,t/2],g=(e,t)=>[0,t/2];break;case`bottomRight`:_=!0,h=(e,t)=>[e,t],g=(e,t)=>[0,0];break;case`bottomMiddle`:h=(e,t)=>[e/2,t],g=(e,t)=>[e/2,0];break;case`bottomLeft`:_=!0,h=(e,t)=>[0,t],g=(e,t)=>[e,0];break;case`middleLeft`:v=!0,h=(e,t)=>[0,t/2],g=(e,t)=>[e,t/2]}let y=h(s,c),b=g(s,c),x=f(...b),S=e._round(a+x[0]),C=e._round(o+x[1]),w=1,T=1,E,D;if(n.fromKeyboard)({deltaX:E,deltaY:D}=n);else{let{screenX:e,screenY:t}=n,[r,i]=this.#l;[E,D]=this.screenToPageTranslation(e-r,t-i),this.#l[0]=e,this.#l[1]=t}if([E,D]=m(E/r,D/i),_){let e=Math.hypot(s,c);w=T=Math.max(Math.min(Math.hypot(b[0]-y[0]-E,b[1]-y[1]-D)/e,1/s,1/c),l/s,u/c)}else v?w=L(Math.abs(b[0]-y[0]-E),l,1)/s:T=L(Math.abs(b[1]-y[1]-D),u,1)/c;let O=e._round(s*w),k=e._round(c*T);x=f(...g(O,k));let A=S-x[0],j=C-x[1];this.#h||=[this.x,this.y,this.width,this.height],this.width=O,this.height=k,this.x=A,this.y=j,this.setDims(),this.fixAndSetPosition(),this._onResizing()}_onResizing(){}altTextFinish(){this.#n?.finish()}get toolbarButtons(){return null}async addEditToolbar(){if(this._editToolbar||this.#_)return this._editToolbar;this._editToolbar=new Ye(this),this.div.append(this._editToolbar.render());let{toolbarButtons:e}=this;if(e)for(let[t,n]of e)await this._editToolbar.addButton(t,n);return this.hasComment||this._editToolbar.addButton(`comment`,this.addCommentButton()),this._editToolbar.addButton(`delete`),this._editToolbar}addCommentButtonInToolbar(){this._editToolbar?.addButtonBefore(`comment`,this.addCommentButton(),`.deleteButton`)}removeCommentButtonFromToolbar(){this._editToolbar?.removeButton(`comment`)}removeEditToolbar(){this._editToolbar?.remove(),this._editToolbar=null,this.#n?.destroy()}addContainer(e){let t=this._editToolbar?.div;t?t.before(e):this.div.append(e)}getClientDimensions(){return this.div.getBoundingClientRect()}createAltText(){return this.#n||(at.initialize(e._l10n),this.#n=new at(this),this.#e&&=(this.#n.data=this.#e,null)),this.#n}get altTextData(){return this.#n?.data}set altTextData(e){this.#n&&(this.#n.data=e)}get guessedAltText(){return this.#n?.guessedText}async setGuessedAltText(e){await this.#n?.setGuessedText(e)}serializeAltText(e){return this.#n?.serialize(e)}hasAltText(){return!!this.#n&&!this.#n.isEmpty()}hasAltTextData(){return this.#n?.hasData()??!1}focusCommentButton(){this.#r?.focusButton()}addCommentButton(){return this.canAddComment?this.#r||=new ot(this):null}addStandaloneCommentButton(){if(this._uiManager.hasCommentManager()){if(this.#i){this._uiManager.isEditingMode()&&this.#i.classList.remove(`hidden`);return}this.hasComment&&(this.#i=this.#r.renderForStandalone(),this.div.append(this.#i))}}removeStandaloneCommentButton(){this.#r.removeStandaloneCommentButton(),this.#i=null}hideStandaloneCommentButton(){this.#i?.classList.add(`hidden`)}get comment(){if(!this.#r)return null;let{data:{richText:e,text:t,date:n,deleted:r}}=this.#r;return{text:t,richText:e,date:n,deleted:r,color:this.getNonHCMColor(),opacity:this.opacity??1}}set comment(e){this.#r||=new ot(this),typeof e==`object`&&e?this.#r.restoreData(e):this.#r.data=e,this.hasComment?(this.removeCommentButtonFromToolbar(),this.addStandaloneCommentButton(),this._uiManager.updateComment(this)):(this.addCommentButtonInToolbar(),this.removeStandaloneCommentButton(),this._uiManager.removeComment(this))}setCommentData({comment:e,popupRef:t,richText:n}){if(!t||(this.#r||=new ot(this),this.#r.setInitialText(e,n),!this.annotationElementId))return;let r=this._uiManager.getAndRemoveDataFromAnnotationStorage(this.annotationElementId);r&&this.updateFromAnnotationLayer(r)}get hasEditedComment(){return this.#r?.hasBeenEdited()}get hasDeletedComment(){return this.#r?.isDeleted()}get hasComment(){return!!this.#r&&!this.#r.isEmpty()&&!this.#r.isDeleted()}async editComment(e){this.#r||=new ot(this),this.#r.edit(e)}toggleComment(e,t=void 0){this.hasComment&&this._uiManager.toggleComment(this,e,t)}setSelectedCommentButton(e){this.#r.setSelectedButton(e)}addComment(e){if(this.hasEditedComment){let[,,,t]=e.rect,[n]=this.pageDimensions,[r]=this.pageTranslation,i=r+n+1,a=t-100,o=i+180;e.popup={contents:this.comment.text,deleted:this.comment.deleted,rect:[i,a,o,t]}}}updateFromAnnotationLayer({popup:{contents:e,deleted:t}}){this.#r.data=t?null:e}get parentBoundingClientRect(){return this.parent.boundingClientRect}render(){let e=this.div=document.createElement(`div`);e.setAttribute(`data-editor-rotation`,(360-this.rotation)%360),e.className=this.name,e.setAttribute(`id`,this.id),e.tabIndex=this.#a?-1:0,e.setAttribute(`role`,`application`),this.defaultL10nId&&e.setAttribute(`data-l10n-id`,this.defaultL10nId),this._isVisible||e.classList.add(`hidden`),this.setInForeground(),this.#z();let[t,n]=this.parentDimensions;this.parentRotation%180!=0&&(e.style.maxWidth=`${(100*n/t).toFixed(2)}%`,e.style.maxHeight=`${(100*t/n).toFixed(2)}%`);let[r,i]=this.getInitialTranslation();return this.translate(r,i),Qe(this,e,[`keydown`,`pointerdown`,`dblclick`]),this.isResizable&&this._uiManager._supportsPinchToZoom&&(this.#C||=new st({container:e,isPinchingDisabled:()=>!this.isSelected,onPinchStart:this.#P.bind(this),onPinching:this.#F.bind(this),onPinchEnd:this.#I.bind(this),signal:this._uiManager._signal})),this.addStandaloneCommentButton(),this._uiManager._editorUndoBar?.hide(),e}#P(){this.#u={savedX:this.x,savedY:this.y,savedWidth:this.width,savedHeight:this.height},this.#n?.toggle(!1),this.parent.togglePointerEvents(!1)}#F(t,n,r){let i=.7,a=r/n*i+1-i;if(a===1)return;let o=this.#O(this.rotation),s=(e,t)=>[o[0]*e+o[2]*t,o[1]*e+o[3]*t],[c,l]=this.parentDimensions,u=this.x,d=this.y,f=this.width,p=this.height,m=e.MIN_SIZE/c,h=e.MIN_SIZE/l;a=Math.max(Math.min(a,1/f,1/p),m/f,h/p);let g=e._round(f*a),_=e._round(p*a);if(g===f&&_===p)return;this.#h||=[u,d,f,p];let v=s(f/2,p/2),y=e._round(u+v[0]),b=e._round(d+v[1]),x=s(g/2,_/2);this.x=y-x[0],this.y=b-x[1],this.width=g,this.height=_,this.setDims(),this.fixAndSetPosition(),this._onResizing()}#I(){this.#n?.toggle(!0),this.parent.togglePointerEvents(!0),this.#M()}pointerdown(e){let{isMac:t}=F.platform;if(e.button!==0||e.ctrlKey&&t){e.preventDefault();return}if(this.#m=!0,this._isDraggable){this.#R(e);return}this.#L(e)}#L(e){let{isMac:t}=F.platform;e.ctrlKey&&!t||e.shiftKey||e.metaKey&&t?this.parent.toggleSelected(this):this.parent.setSelected(this)}#R(e){let{isSelected:t}=this;this._uiManager.setUpDragSession();let n=!1,r=new AbortController,i=this._uiManager.combinedSignal(r),a={capture:!0,passive:!1,signal:i},o=e=>{r.abort(),this.#o=null,this.#m=!1,this._uiManager.endDragSession()||this.#L(e),n&&this._onStopDragging()};t&&(this.#b=e.clientX,this.#x=e.clientY,this.#o=e.pointerId,this.#s=e.pointerType,window.addEventListener(`pointermove`,e=>{n||(n=!0,this._uiManager.toggleComment(this,!0,!1),this._onStartDragging());let{clientX:t,clientY:r,pointerId:i}=e;if(i!==this.#o){z(e);return}let[a,o]=this.screenToPageTranslation(t-this.#b,r-this.#x);this.#b=t,this.#x=r,this._uiManager.dragSelectedEditors(a,o)},a),window.addEventListener(`touchmove`,z,a),window.addEventListener(`pointerdown`,e=>{e.pointerType===this.#s&&(this.#C||e.isPrimary)&&o(e),z(e)},a));let s=e=>{if(!this.#o||this.#o===e.pointerId){o(e);return}z(e)};window.addEventListener(`pointerup`,s,{signal:i}),window.addEventListener(`blur`,s,{signal:i})}_onStartDragging(){}_onStopDragging(){}moveInDOM(){this.#y&&clearTimeout(this.#y),this.#y=setTimeout(()=>{this.#y=null,this.parent?.moveEditorInDOM(this)},0)}_setParentAndPosition(e,t,n){e.changeParent(this),this.x=t,this.y=n,this.fixAndSetPosition(),this._onTranslated()}getRect(e,t,n=this.rotation){let r=this.parentScale,[i,a]=this.pageDimensions,[o,s]=this.pageTranslation,c=e/r,l=t/r,u=this.x*i,d=this.y*a,f=this.width*i,p=this.height*a;switch(n){case 0:return[u+c+o,a-d-l-p+s,u+c+f+o,a-d-l+s];case 90:return[u+l+o,a-d+c+s,u+l+p+o,a-d+c+f+s];case 180:return[u-c-f+o,a-d+l+s,u-c+o,a-d+l+p+s];case 270:return[u-l-p+o,a-d-c-f+s,u-l+o,a-d-c+s];default:throw Error(`Invalid rotation`)}}getRectInCurrentCoords(e,t){let[n,r,i,a]=e,o=i-n,s=a-r;switch(this.rotation){case 0:return[n,t-a,o,s];case 90:return[n,t-r,s,o];case 180:return[i,t-r,o,s];case 270:return[i,t-a,s,o];default:throw Error(`Invalid rotation`)}}getPDFRect(){return this.getRect(0,0)}getNonHCMColor(){return this.color&&e._colorManager.convert(this._uiManager.getNonHCMColor(this.color))}onUpdatedColor(){this.#r?.onUpdatedColor()}getData(){let{comment:{text:e,color:t,date:n,opacity:r,deleted:i,richText:a},uid:o,pageIndex:s,creationDate:c,modificationDate:l}=this;return{id:o,pageIndex:s,rect:this.getPDFRect(),richText:a,contentsObj:{str:e},creationDate:c,modificationDate:n||l,popupRef:!i,color:t,opacity:r}}onceAdded(e){}isEmpty(){return!1}enableEditMode(){return!this.isInEditMode()&&(this.parent.setEditingState(!1),this.#_=!0,!0)}disableEditMode(){return this.isInEditMode()?(this.parent.setEditingState(!0),this.#_=!1,!0):!1}isInEditMode(){return this.#_}shouldGetKeyboardEvents(){return this.#v}needsToBeRebuilt(){return this.div&&!this.isAttachedToDOM}get isOnScreen(){let{top:e,left:t,bottom:n,right:r}=this.getClientDimensions(),{innerHeight:i,innerWidth:a}=window;return t0&&e0}#z(){if(this.#f||!this.div)return;this.#f=new AbortController;let e=this._uiManager.combinedSignal(this.#f);this.div.addEventListener(`focusin`,this.focusin.bind(this),{signal:e}),this.div.addEventListener(`focusout`,this.focusout.bind(this),{signal:e})}rebuild(){this.#z()}rotate(e){}resize(){}serializeDeleted(){return{id:this.annotationElementId,deleted:!0,pageIndex:this.pageIndex,popupRef:this._initialData?.popupRef||``}}serialize(e=!1,t=null){return{annotationType:this.mode,pageIndex:this.pageIndex,rect:this.getPDFRect(),rotation:this.rotation,structTreeParentId:this._structTreeParentId,popupRef:this._initialData?.popupRef||``}}static async deserialize(e,t,n){let r=new this.prototype.constructor({parent:t,id:n.getId(),uiManager:n,annotationElementId:e.annotationElementId,creationDate:e.creationDate,modificationDate:e.modificationDate});r.rotation=e.rotation,r.#e=e.accessibilityData,r._isCopy=e.isCopy||!1;let[i,a]=r.pageDimensions,[o,s,c,l]=r.getRectInCurrentCoords(e.rect,a);return r.x=o/i,r.y=s/a,r.width=c/i,r.height=l/a,r}get hasBeenModified(){return!!this.annotationElementId&&(this.deleted||this.serialize()!==null)}remove(){if(this.#f?.abort(),this.#f=null,this.isEmpty()||this.commit(),this.parent?this.parent.remove(this):this._uiManager.removeEditor(this),this.hideCommentPopup(),this.#y&&=(clearTimeout(this.#y),null),this.#W(),this.removeEditToolbar(),this.#S){for(let e of this.#S.values())clearTimeout(e);this.#S=null}this.parent=null,this.#C?.destroy(),this.#C=null,this.#d?.remove(),this.#d=null}get isResizable(){return!1}makeResizable(){this.isResizable&&(this.#k(),this.#c.classList.remove(`hidden`))}get toolbarPosition(){return null}get commentButtonPosition(){return this._uiManager.direction===`ltr`?[1,0]:[0,0]}get commentButtonPositionInPage(){let{commentButtonPosition:[t,n]}=this,[r,i,a,o]=this.getPDFRect();return[e._round(r+(a-r)*t),e._round(i+(o-i)*(1-n))]}get commentButtonColor(){return this._uiManager.makeCommentColor(this.getNonHCMColor(),this.opacity)}get commentPopupPosition(){return this.#r.commentPopupPositionInLayer}set commentPopupPosition(e){this.#r.commentPopupPositionInLayer=e}hasDefaultPopupPosition(){return this.#r.hasDefaultPopupPosition()}get commentButtonWidth(){return this.#r.commentButtonWidth}get elementBeforePopup(){return this.div}setCommentButtonStates(e){this.#r?.setCommentButtonStates(e)}keydown(t){if(!this.isResizable||t.target!==this.div||t.key!==`Enter`)return;this._uiManager.setSelected(this),this.#u={savedX:this.x,savedY:this.y,savedWidth:this.width,savedHeight:this.height};let n=this.#c.children;if(!this.#t){this.#t=Array.from(n);let t=this.#B.bind(this),r=this.#V.bind(this),i=this._uiManager._signal;for(let n of this.#t){let a=n.getAttribute(`data-resizer-name`);n.setAttribute(`role`,`spinbutton`),n.addEventListener(`keydown`,t,{signal:i}),n.addEventListener(`blur`,r,{signal:i}),n.addEventListener(`focus`,this.#H.bind(this,a),{signal:i}),n.setAttribute(`data-l10n-id`,e._l10nResizer[a])}}let r=this.#t[0],i=0;for(let e of n){if(e===r)break;i++}let a=(360-this.rotation+this.parentRotation)%360/90*(this.#t.length/4);if(a!==i){if(ai)for(let e=0;e{this.div?.classList.contains(`selectedEditor`)&&this._editToolbar?.show()});return}this._editToolbar?.show(),this.#n?.toggleAltTextBadge(!1)}focus(){this.div&&!this.div.contains(document.activeElement)&&setTimeout(()=>this.div?.focus({preventScroll:!0}),0)}unselect(){this.isSelected&&(this.isSelected=!1,this.#c?.classList.add(`hidden`),this.div?.classList.remove(`selectedEditor`),this.div?.contains(document.activeElement)&&this._uiManager.currentLayer.div.focus({preventScroll:!0}),this._editToolbar?.hide(),this.#n?.toggleAltTextBadge(!0),this.hideCommentPopup())}hideCommentPopup(){this.hasComment&&this._uiManager.toggleComment(null)}updateParams(e,t){}disableEditing(){}enableEditing(){}get canChangeContent(){return!1}enterInEditMode(){this.canChangeContent&&(this.enableEditMode(),this.div.focus())}dblclick(e){e.target.nodeName!==`BUTTON`&&(this.enterInEditMode(),this.parent.updateToolbar({mode:this.constructor._editorType,editId:this.uid}))}getElementForAltText(){return this.div}get contentDiv(){return this.div}get isEditing(){return this.#g}set isEditing(e){this.#g=e,this.parent&&(e?(this.parent.setSelected(this),this.parent.setActiveEditor(this)):this.parent.setActiveEditor(null))}static get MIN_SIZE(){return 16}static canCreateNewEmptyEditor(){return!0}get telemetryInitialData(){return{action:`added`}}get telemetryFinalData(){return null}_reportTelemetry(t,n=!1){if(n){this.#S||=new Map;let{action:n}=t,r=this.#S.get(n);r&&clearTimeout(r),r=setTimeout(()=>{this._reportTelemetry(t),this.#S.delete(n),this.#S.size===0&&(this.#S=null)},e._telemetryTimeout),this.#S.set(n,r);return}t.type||=this.editorType,this._uiManager._eventBus.dispatch(`reporttelemetry`,{source:this,details:{type:`editing`,data:t}})}show(e=this._isVisible){this.div.classList.toggle(`hidden`,!e),this._isVisible=e}enable(){this.div&&(this.div.tabIndex=0),this.#a=!1}disable(){this.div&&(this.div.tabIndex=-1),this.#a=!0}updateFakeAnnotationElement(e){if(!this.#d&&!this.deleted){this.#d=e.addFakeAnnotation(this);return}if(this.deleted){this.#d.remove(),this.#d=null;return}(this.hasEditedComment||this._hasBeenMoved||this._hasBeenResized)&&this.#d.updateEdited({rect:this.getPDFRect(),popup:this.comment})}renderAnnotationElement(e){if(this.deleted)return e.hide(),null;let t=e.container.querySelector(`.annotationContent`);if(!t)t=document.createElement(`div`),t.classList.add(`annotationContent`,this.editorType),e.container.prepend(t);else if(t.nodeName===`CANVAS`){let e=t;t=document.createElement(`div`),t.classList.add(`annotationContent`,this.editorType),e.before(t)}return t}resetAnnotationElement(e){let{firstElementChild:t}=e.container;t?.nodeName===`DIV`&&t.classList.contains(`annotationContent`)&&t.remove()}},ct=class extends U{constructor(e){super(e),this.annotationElementId=e.annotationElementId,this.deleted=!0}serialize(){return this.serializeDeleted()}},lt=3285377520,W=4294901760,ut=65535,dt=class{constructor(e){this.h1=e?e&4294967295:lt,this.h2=e?e&4294967295:lt}update(e){let t,n;if(typeof e==`string`){t=new Uint8Array(e.length*2),n=0;for(let r=0,i=e.length;r>>8,t[n++]=i&255)}}else if(ArrayBuffer.isView(e))t=e.slice(),n=t.byteLength;else throw Error(`Invalid data format, must be a string or TypedArray.`);let r=n>>2,i=n-r*4,a=new Uint32Array(t.buffer,0,r),o=0,s=0,c=this.h1,l=this.h2,u=3432918353,d=461845907,f=11601,p=13715;for(let e=0;e>>17,o=o*d&W|o*p&ut,c^=o,c=c<<13|c>>>19,c=c*5+3864292196):(s=a[e],s=s*u&W|s*f&ut,s=s<<15|s>>>17,s=s*d&W|s*p&ut,l^=s,l=l<<13|l>>>19,l=l*5+3864292196);switch(o=0,i){case 3:o^=t[r*4+2]<<16;case 2:o^=t[r*4+1]<<8;case 1:o^=t[r*4],o=o*u&W|o*f&ut,o=o<<15|o>>>17,o=o*d&W|o*p&ut,r&1?c^=o:l^=o}this.h1=c,this.h2=l}hexdigest(){let e=this.h1,t=this.h2;return e^=t>>>1,e=e*3981806797&W|e*36045&ut,t=t*4283543511&W|((t<<16|e>>>16)*2950163797&W)>>>16,e^=t>>>1,e=e*444984403&W|e*60499&ut,t=t*3301882366&W|((t<<16|e>>>16)*3120437893&W)>>>16,e^=t>>>1,(e>>>0).toString(16).padStart(8,`0`)+(t>>>0).toString(16).padStart(8,`0`)}},ft=Object.freeze({map:null,hash:``,transfer:void 0}),pt=class{#e=!1;#t=null;#n=null;#r=new Map;onSetModified=null;onResetModified=null;onAnnotationEditor=null;getValue(e,t){let n=this.#r.get(e);return n===void 0?t:Object.assign(t,n)}getRawValue(e){return this.#r.get(e)}remove(e){let t=this.#r.get(e);t!==void 0&&(t instanceof U&&this.#n.delete(t.annotationElementId),this.#r.delete(e),this.#r.size===0&&this.resetModified(),!this.#r.values().some(e=>e instanceof U)&&this.onAnnotationEditor?.(null))}setValue(e,t){let n=this.#r.get(e),r=!1;if(n!==void 0)for(let[e,i]of Object.entries(t))n[e]!==i&&(r=!0,n[e]=i);else r=!0,this.#r.set(e,t);r&&this.#i(),t instanceof U&&((this.#n||=new Map).set(t.annotationElementId,t),this.onAnnotationEditor?.(t.constructor._type))}has(e){return this.#r.has(e)}get size(){return this.#r.size}#i(){this.#e||(this.#e=!0,this.onSetModified?.())}resetModified(){this.#e&&(this.#e=!1,this.onResetModified?.())}get print(){return new mt(this)}get serializable(){if(this.#r.size===0)return ft;let e=new Map,t=new dt,n=[],r=Object.create(null),i=!1;for(let[n,a]of this.#r){let o=a instanceof U?a.serialize(!1,r):a;a.page&&(a.pageIndex=a.page._pageIndex,delete a.page),o&&(e.set(n,o),t.update(`${n}:${JSON.stringify(o)}`),i||=!!o.bitmap)}if(i)for(let t of e.values())t.bitmap&&n.push(t.bitmap);return e.size>0?{map:e,hash:t.hexdigest(),transfer:n}:ft}get editorStats(){let e=null,t=new Map,n=0,r=0;for(let i of this.#r.values()){if(!(i instanceof U)){i.popup&&(i.popup.deleted?r+=1:n+=1);continue}i.isCommentDeleted?r+=1:i.hasEditedComment&&(n+=1);let a=i.telemetryFinalData;if(!a)continue;let{type:o}=a;t.getOrInsertComputed(o,()=>Object.getPrototypeOf(i).constructor),e||=Object.create(null);let s=e[o]||=new Map;for(let[e,t]of Object.entries(a)){if(e===`type`)continue;let n=s.getOrInsertComputed(e,me);n.set(t,(n.get(t)??0)+1)}}if((r>0||n>0)&&(e||=Object.create(null),e.comments={deleted:r,edited:n}),!e)return null;for(let[n,r]of t)e[n]=r.computeTelemetryFinalData(e[n]);return e}resetModifiedIds(){this.#t=null}updateEditor(e,t){let n=this.#n?.get(e);return n?(n.updateFromAnnotationLayer(t),!0):!1}getEditor(e){return this.#n?.get(e)||null}get modifiedIds(){if(this.#t)return this.#t;let e=[];if(this.#n)for(let t of this.#n.values())t.serialize()&&e.push(t.annotationElementId);let t=``;if(e.length){let n=new dt;n.update(e.join(`,`)),t=n.hexdigest()}return this.#t={ids:new Set(e),hash:t}}[Symbol.iterator](){return this.#r.entries()}},mt=class extends pt{#e=ft;constructor(e){super();let{serializable:t}=e;if(t===ft)return;let{map:n,hash:r,transfer:i}=t,a=structuredClone(n,i?{transfer:i}:null);this.#e={map:a,hash:r,transfer:[]}}get print(){E(`Should not call PrintAnnotationStorage.print`)}get serializable(){return this.#e}get modifiedIds(){return M(this,`modifiedIds`,{ids:new Set,hash:``})}},ht=`__forcedDependency`,{floor:gt,ceil:_t}=Math;function vt(e,t,n,r,i,a){e[t*4+0]=Math.min(e[t*4+0],n),e[t*4+1]=Math.min(e[t*4+1],r),e[t*4+2]=Math.max(e[t*4+2],i),e[t*4+3]=Math.max(e[t*4+3],a)}function yt(e,t,n,r,i){let a;e?(e<0&&(a=i[0],i[0]=i[2],i[2]=a),i[0]*=e,i[2]*=e,t<0&&(a=i[1],i[1]=i[3],i[3]=a),i[1]*=t,i[3]*=t):i.fill(0),i[0]+=n,i[1]+=r,i[2]+=n,i[3]+=r}var bt=new Uint32Array(new Uint8Array([255,255,0,0]).buffer)[0],xt=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}get length(){return this.#e.length}isEmpty(e){return this.#e[e]===bt}minX(e){return this.#t[e*4+0]/256}minY(e){return this.#t[e*4+1]/256}maxX(e){return(this.#t[e*4+2]+1)/256}maxY(e){return(this.#t[e*4+3]+1)/256}},St=(e,t)=>e?.getOrInsertComputed(t,()=>({dependencies:new Set,isRenderingOperation:!1})),Ct=class{#e=[[1,0,0,1,0,0]];#t=[-1/0,-1/0,1/0,1/0];#n=new Float64Array(n);_pendingBBoxIdx=-1;#r;#i;#a;#o;_savesStack=[];_markedContentStack=[];constructor(e,t){this.#r=e.width,this.#i=e.height,this.#s(t)}growOperationsCount(e){e>=this.#o.length&&this.#s(e,this.#o)}#s(e,t){let n=new ArrayBuffer(e*4);this.#a=new Uint8ClampedArray(n),this.#o=new Uint32Array(n),t&&t.length>0?(this.#o.set(t),this.#o.fill(bt,t.length)):this.#o.fill(bt)}get clipBox(){return this.#t}save(e){return this.#t={__proto__:this.#t},this._savesStack.push(e),this}restore(e,t){let n=Object.getPrototypeOf(this.#t);if(n===null)return this;this.#t=n;let r=this._savesStack.pop();return r!==void 0&&(t?.(r,e),this.#o[e]=this.#o[r]),this}recordOpenMarker(e){return this._savesStack.push(e),this}getOpenMarker(){return this._savesStack.length===0?null:this._savesStack.at(-1)}recordCloseMarker(e,t){let n=this._savesStack.pop();return n!==void 0&&(t?.(n,e),this.#o[e]=this.#o[n]),this}beginMarkedContent(e){return this._markedContentStack.push(e),this}endMarkedContent(e,t){let n=this._markedContentStack.pop();return n!==void 0&&(t?.(n,e),this.#o[e]=this.#o[n]),this}pushBaseTransform(e){return this.#e.push(I.multiplyByDOMMatrix(this.#e.at(-1),e.getTransform())),this}popBaseTransform(){return this.#e.length>1&&this.#e.pop(),this}resetBBox(e){return this._pendingBBoxIdx!==e&&(this._pendingBBoxIdx=e,this.#n.set(n,0)),this}recordClipBox(e,t,r,i,a,o){let s=I.multiplyByDOMMatrix(this.#e.at(-1),t.getTransform()),c=n.slice();I.axialAlignedBoundingBox([r,a,i,o],s,c);let l=I.intersect(this.#t,c);return l?(this.#t[0]=l[0],this.#t[1]=l[1],this.#t[2]=l[2],this.#t[3]=l[3]):(this.#t[0]=this.#t[1]=1/0,this.#t[2]=this.#t[3]=-1/0),this}recordBBox(e,t,r,i,a,o){let s=this.#t;if(s[0]===1/0)return this;let c=I.multiplyByDOMMatrix(this.#e.at(-1),t.getTransform());if(s[0]===-1/0)return I.axialAlignedBoundingBox([r,a,i,o],c,this.#n),this;let l=n.slice();return I.axialAlignedBoundingBox([r,a,i,o],c,l),this.#n[0]=L(l[0],s[0],this.#n[0]),this.#n[1]=L(l[1],s[1],this.#n[1]),this.#n[2]=L(l[2],this.#n[2],s[2]),this.#n[3]=L(l[3],this.#n[3],s[3]),this}recordFullPageBBox(e){return this.#n[0]=Math.max(0,this.#t[0]),this.#n[1]=Math.max(0,this.#t[1]),this.#n[2]=Math.min(this.#r,this.#t[2]),this.#n[3]=Math.min(this.#i,this.#t[3]),this}recordOperation(e,t=!1,n){if(this._pendingBBoxIdx!==e)return this;let r=gt(this.#n[0]*256/this.#r),i=gt(this.#n[1]*256/this.#i),a=_t(this.#n[2]*256/this.#r),o=_t(this.#n[3]*256/this.#i);if(vt(this.#a,e,r,i,a,o),n)for(let t of n)for(let n of t)n!==e&&vt(this.#a,n,r,i,a,o);return t||(this._pendingBBoxIdx=-1),this}bboxToClipBoxDropOperation(e){return this._pendingBBoxIdx===e&&(this._pendingBBoxIdx=-1,this.#t[0]=Math.max(this.#t[0],this.#n[0]),this.#t[1]=Math.max(this.#t[1],this.#n[1]),this.#t[2]=Math.min(this.#t[2],this.#n[2]),this.#t[3]=Math.min(this.#t[3],this.#n[3])),this}take(){return new xt(this.#o,this.#a)}takeDebugMetadata(){throw Error(`Unreachable`)}recordSimpleData(e,t){return this}recordIncrementalData(e,t){return this}resetIncrementalData(e,t){return this}recordNamedData(e,t){return this}recordSimpleDataFromNamed(e,t,n){return this}recordFutureForcedDependency(e,t){return this}inheritSimpleDataAsFutureForcedDependencies(e){return this}inheritPendingDependenciesAsFutureForcedDependencies(){return this}recordCharacterBBox(e,t,n,r=1,i=0,a=0,o){return this}getSimpleIndex(e){}recordDependencies(e,t){return this}recordNamedDependency(e,t){return this}recordShowTextOperation(e,t=!1){return this}},wt=class{#e={__proto__:null};#t={__proto__:null,transform:[],moveText:[],sameLineText:[],[ht]:[]};#n=new Map;#r=new Set;#i=new Map;#a;#o;#s;constructor(e,t=!1){this.#s=e,t&&(this.#a=new Map,this.#o=(e,t)=>{St(this.#a,t).dependencies.add(e)})}get clipBox(){return this.#s.clipBox}growOperationsCount(e){this.#s.growOperationsCount(e)}save(e){return this.#e={__proto__:this.#e},this.#t={__proto__:this.#t,transform:{__proto__:this.#t.transform},moveText:{__proto__:this.#t.moveText},sameLineText:{__proto__:this.#t.sameLineText},[ht]:{__proto__:this.#t[ht]}},this.#s.save(e),this}restore(e){this.#s.restore(e,this.#o);let t=Object.getPrototypeOf(this.#e);return t===null?this:(this.#e=t,this.#t=Object.getPrototypeOf(this.#t),this)}recordOpenMarker(e){return this.#s.recordOpenMarker(e,this.#o),this}getOpenMarker(){return this.#s.getOpenMarker()}recordCloseMarker(e){return this.#s.recordCloseMarker(e,this.#o),this}beginMarkedContent(e){return this.#s.beginMarkedContent(e),this}endMarkedContent(e){return this.#s.endMarkedContent(e,this.#o),this}pushBaseTransform(e){return this.#s.pushBaseTransform(e),this}popBaseTransform(){return this.#s.popBaseTransform(),this}recordSimpleData(e,t){return this.#e[e]=t,this}recordIncrementalData(e,t){return this.#t[e].push(t),this}resetIncrementalData(e,t){return this.#t[e].length=0,this}recordNamedData(e,t){return this.#n.set(e,t),this}recordSimpleDataFromNamed(e,t,n){this.#e[e]=this.#n.get(t)??n}recordFutureForcedDependency(e,t){return this.recordIncrementalData(ht,t),this}inheritSimpleDataAsFutureForcedDependencies(e){for(let t of e)t in this.#e&&this.recordFutureForcedDependency(t,this.#e[t]);return this}inheritPendingDependenciesAsFutureForcedDependencies(){for(let e of this.#r)this.recordFutureForcedDependency(ht,e);return this}resetBBox(e){return this.#s.resetBBox(e),this}recordClipBox(e,t,n,r,i,a){return this.#s.recordClipBox(e,t,n,r,i,a),this}recordBBox(e,t,n,r,i,a){return this.#s.recordBBox(e,t,n,r,i,a),this}recordCharacterBBox(e,t,n,r=1,i=0,a=0,o){let s=n.bbox,c,l;if(s&&(c=s[2]!==s[0]&&s[3]!==s[1]&&this.#i.get(n),c!==!1&&(l=[0,0,0,0],I.axialAlignedBoundingBox(s,n.fontMatrix,l),(r!==1||i!==0||a!==0)&&yt(r,-r,i,a,l),c)))return this.recordBBox(e,t,l[0],l[2],l[1],l[3]);if(!o)return this.recordFullPageBBox(e);let u=o();return s&&l&&c===void 0&&(c=l[0]<=i-u.actualBoundingBoxLeft&&l[2]>=i+u.actualBoundingBoxRight&&l[1]<=a-u.actualBoundingBoxAscent&&l[3]>=a+u.actualBoundingBoxDescent,this.#i.set(n,c),c)?this.recordBBox(e,t,l[0],l[2],l[1],l[3]):this.recordBBox(e,t,i-u.actualBoundingBoxLeft,i+u.actualBoundingBoxRight,a-u.actualBoundingBoxAscent,a+u.actualBoundingBoxDescent)}recordFullPageBBox(e){return this.#s.recordFullPageBBox(e),this}getSimpleIndex(e){return this.#e[e]}recordDependencies(e,t){let n=this.#r,r=this.#e,i=this.#t;for(let e of t)e in this.#e?n.add(r[e]):e in i&&i[e].forEach(n.add,n);return this}recordNamedDependency(e,t){return this.#n.has(t)&&this.#r.add(this.#n.get(t)),this}recordOperation(e,t=!1){if(this.recordDependencies(e,[ht]),this.#a){let t=St(this.#a,e),{dependencies:n}=t;this.#r.forEach(n.add,n),this.#s._savesStack.forEach(n.add,n),this.#s._markedContentStack.forEach(n.add,n),n.delete(e),t.isRenderingOperation=!0}let n=!t&&e===this.#s._pendingBBoxIdx;return this.#s.recordOperation(e,t,[this.#r,this.#s._savesStack,this.#s._markedContentStack]),n&&this.#r.clear(),this}recordShowTextOperation(e,t=!1){let n=Array.from(this.#r);this.recordOperation(e,t),this.recordIncrementalData(`sameLineText`,e);for(let e of n)this.recordIncrementalData(`sameLineText`,e);return this}bboxToClipBoxDropOperation(e,t=!1){let n=!t&&e===this.#s._pendingBBoxIdx;return this.#s.bboxToClipBoxDropOperation(e),n&&this.#r.clear(),this}take(){return this.#i.clear(),this.#s.take()}takeDebugMetadata(){return this.#a}},Tt=class e{#e;#t;#n;#r=0;#i=0;constructor(t,n,r){if(t instanceof e&&t.#n===!!r)return t;this.#e=t,this.#t=n,this.#n=!!r}get clipBox(){return this.#e.clipBox}growOperationsCount(){throw Error(`Unreachable`)}save(e){return this.#i++,this.#e.save(this.#t),this}restore(e){return this.#i>0&&(this.#e.restore(this.#t),this.#i--),this}recordOpenMarker(e){return this.#r++,this}getOpenMarker(){return this.#r>0?this.#t:this.#e.getOpenMarker()}recordCloseMarker(e){return this.#r--,this}beginMarkedContent(e){return this}endMarkedContent(e){return this}pushBaseTransform(e){return this.#e.pushBaseTransform(e),this}popBaseTransform(){return this.#e.popBaseTransform(),this}recordSimpleData(e,t){return this.#e.recordSimpleData(e,this.#t),this}recordIncrementalData(e,t){return this.#e.recordIncrementalData(e,this.#t),this}resetIncrementalData(e,t){return this.#e.resetIncrementalData(e,this.#t),this}recordNamedData(e,t){return this}recordSimpleDataFromNamed(e,t,n){return this.#e.recordSimpleDataFromNamed(e,t,this.#t),this}recordFutureForcedDependency(e,t){return this.#e.recordFutureForcedDependency(e,this.#t),this}inheritSimpleDataAsFutureForcedDependencies(e){return this.#e.inheritSimpleDataAsFutureForcedDependencies(e),this}inheritPendingDependenciesAsFutureForcedDependencies(){return this.#e.inheritPendingDependenciesAsFutureForcedDependencies(),this}resetBBox(e){return this.#n||this.#e.resetBBox(this.#t),this}recordClipBox(e,t,n,r,i,a){return this.#n||this.#e.recordClipBox(this.#t,t,n,r,i,a),this}recordBBox(e,t,n,r,i,a){return this.#n||this.#e.recordBBox(this.#t,t,n,r,i,a),this}recordCharacterBBox(e,t,n,r,i,a,o){return this.#n||this.#e.recordCharacterBBox(this.#t,t,n,r,i,a,o),this}recordFullPageBBox(e){return this.#n||this.#e.recordFullPageBBox(this.#t),this}getSimpleIndex(e){return this.#e.getSimpleIndex(e)}recordDependencies(e,t){return this.#e.recordDependencies(this.#t,t),this}recordNamedDependency(e,t){return this.#e.recordNamedDependency(this.#t,t),this}recordOperation(e){return this.#e.recordOperation(this.#t,!0),this}recordShowTextOperation(e){return this.#e.recordShowTextOperation(this.#t,!0),this}bboxToClipBoxDropOperation(e){return this.#n||this.#e.bboxToClipBoxDropOperation(this.#t,!0),this}take(){throw Error(`Unreachable`)}takeDebugMetadata(){throw Error(`Unreachable`)}},G={stroke:[`path`,`transform`,`filter`,`strokeColor`,`strokeAlpha`,`lineWidth`,`lineCap`,`lineJoin`,`miterLimit`,`dash`],fill:[`path`,`transform`,`filter`,`fillColor`,`fillAlpha`,`globalCompositeOperation`,`SMask`],imageXObject:[`transform`,`SMask`,`filter`,`fillAlpha`,`strokeAlpha`,`globalCompositeOperation`],rawFillPath:[`filter`,`fillColor`,`fillAlpha`],showText:[`transform`,`leading`,`charSpacing`,`wordSpacing`,`hScale`,`textRise`,`moveText`,`textMatrix`,`font`,`fontObj`,`filter`,`fillColor`,`textRenderingMode`,`SMask`,`fillAlpha`,`strokeAlpha`,`globalCompositeOperation`,`sameLineText`],transform:[`transform`],transformAndFill:[`transform`,`fillColor`]},Et=class e{#e;#t;#n=4;#r=0;#i=new e.#a(this.#n*6);static#a=F.isFloat16ArraySupported?Float16Array:Float32Array;constructor(e){this.#e=e.width,this.#t=e.height}record(t,r,i,a){if(this.#r===this.#n){this.#n*=2;let t=new e.#a(this.#n*6);t.set(this.#i),this.#i=t}let o=B(t),s;if(a[0]!==1/0){let e=n.slice();I.axialAlignedBoundingBox([0,-i,r,0],o,e);let t=I.intersect(a,e);if(!t)return;let[c,l,u,d]=t;if(c!==e[0]||l!==e[1]||u!==e[2]||d!==e[3]){let e=Math.atan2(o[1],o[0]),t=Math.abs(Math.sin(e)),n=Math.abs(Math.cos(e));if(t<1e-6||n<1e-6||Math.abs(t-n)<1e-6)s=[c,l,c,d,u,l];else{let e=u-c,r=d-l,i=t*t,a=n*n,o=n*t,f=a-i,p=(r*a-e*o)/f;s=[c+(r*o-e*i)/f,l,c,l+p,u,d-p]}}}s||(s=[0,-i,0,0,r,-i],I.applyTransform(s,o,0),I.applyTransform(s,o,2),I.applyTransform(s,o,4)),s[0]/=this.#e,s[1]/=this.#t,s[2]/=this.#e,s[3]/=this.#t,s[4]/=this.#e,s[5]/=this.#t,this.#i.set(s,this.#r*6),this.#r++}take(){return this.#i.subarray(0,this.#r*6)}},Dt=class{#e=new Set;#t=null;constructor({ownerDocument:e=globalThis.document,styleElement:t=null}){this._document=e,this.nativeFontFaces=new Set,this.styleElement=null,this.loadingRequests=[],this.loadTestFontId=0}addNativeFontFace(e){this.nativeFontFaces.add(e),this._document.fonts.add(e)}removeNativeFontFace(e){this.nativeFontFaces.delete(e),this._document.fonts.delete(e)}insertRule(e){let t=this.#n();t.insertRule(e,t.cssRules.length)}#n(){if(this.#t)return this.#t;let e=this._document.defaultView?.CSSStyleSheet||globalThis.CSSStyleSheet;if(!this.styleElement&&e){let{adoptedStyleSheets:t}=this._document;if(t){let n=new e;return t.push(n),this.#t=n}}return this.styleElement||(this.styleElement=this._document.createElement(`style`),this._document.documentElement.getElementsByTagName(`head`)[0].append(this.styleElement)),this.#t=this.styleElement.sheet}clear(){for(let e of this.nativeFontFaces)this._document.fonts.delete(e);if(this.nativeFontFaces.clear(),this.#e.clear(),this.#t){let{adoptedStyleSheets:e}=this._document;e?.includes(this.#t)&&(this._document.adoptedStyleSheets=e.filter(e=>e!==this.#t)),this.#t=null}this.styleElement&&=(this.styleElement.remove(),null)}async loadSystemFont({systemFontInfo:e,disableFontFace:t,_inspectFont:n}){if(!(!e||this.#e.has(e.loadedName))){if(D(!t,"loadSystemFont shouldn't be called when `disableFontFace` is set."),this.isFontLoadingAPISupported){let{loadedName:t,src:r,style:i}=e,a=new FontFace(t,r,i);this.addNativeFontFace(a);try{await a.load(),this.#e.add(t),n?.(e)}catch{T(`Cannot load system font: ${e.baseFontName}, installing it could help to improve PDF rendering.`),this.removeNativeFontFace(a)}return}E(`Not implemented: loadSystemFont without the Font Loading API.`)}}async bind(e){if(e.attached||e.missingFile&&!e.systemFontInfo)return;if(e.attached=!0,e.systemFontInfo){await this.loadSystemFont(e);return}if(this.isFontLoadingAPISupported){let t=e.createNativeFontFace();if(t){this.addNativeFontFace(t);try{await t.loaded}catch(n){throw T(`Failed to load font '${t.family}': '${n}'.`),e.disableFontFace=!0,n}}return}let t=e.createFontFaceRule();if(t){if(this.insertRule(t),this.isSyncFontLoadingSupported)return;await new Promise(t=>{let n=this._queueLoadingCallback(t);this._prepareFontLoadEvent(e,n)})}}get isFontLoadingAPISupported(){let e=!!this._document?.fonts;return M(this,`isFontLoadingAPISupported`,e)}get isSyncFontLoadingSupported(){return M(this,`isSyncFontLoadingSupported`,t||F.platform.isFirefox)}_queueLoadingCallback(e){function t(){for(D(!r.done,`completeRequest() cannot be called twice.`),r.done=!0;n.length>0&&n[0].done;){let e=n.shift();setTimeout(e.callback,0)}}let{loadingRequests:n}=this,r={done:!1,complete:t,callback:e};return n.push(r),r}get _loadTestFont(){let e=atob(`T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==`);return M(this,`_loadTestFont`,e)}_prepareFontLoadEvent(e,t){function n(e,t){return e.charCodeAt(t)<<24|e.charCodeAt(t+1)<<16|e.charCodeAt(t+2)<<8|e.charCodeAt(t+3)&255}function r(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,e&255)}function i(e,t,n,r){let i=e.substring(0,t),a=e.substring(t+n);return i+r+a}let a,o,s=this._document.createElement(`canvas`);s.width=1,s.height=1;let c=s.getContext(`2d`),l=0;function u(e,t){if(++l>30){T(`Load test font never loaded.`),t();return}if(c.font=`30px `+e,c.fillText(`.`,0,20),c.getImageData(0,0,1,1).data[3]>0){t();return}setTimeout(u.bind(null,e,t))}let d=`lt${Date.now()}${this.loadTestFontId++}`,f=this._loadTestFont;f=i(f,976,d.length,d);let p=1482184792,m=n(f,16);for(a=0,o=d.length-3;a{g.remove(),t.complete()})}},Ot=class{compiledGlyphs=Object.create(null);#e;constructor(e,t=null,n,r){this.#e=e,this._inspectFont=t,n&&(this.charProcOperatorList=n),r&&Object.assign(this,r)}createNativeFontFace(){if(!this.data||this.disableFontFace)return null;let e;if(!this.cssFontInfo)e=new FontFace(this.loadedName,this.data,{});else{let t={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(t.style=`oblique ${this.cssFontInfo.italicAngle}deg`),e=new FontFace(this.cssFontInfo.fontFamily,this.data,t)}return this._inspectFont?.(this),e}createFontFaceRule(){if(!this.data||this.disableFontFace)return null;let e=`url(data:${this.mimetype};base64,${this.data.toBase64()});`,t;if(!this.cssFontInfo)t=`@font-face {font-family:"${this.loadedName}";src:${e}}`;else{let n=`font-weight: ${this.cssFontInfo.fontWeight};`;this.cssFontInfo.italicAngle&&(n+=`font-style: oblique ${this.cssFontInfo.italicAngle}deg;`),t=`@font-face {font-family:"${this.cssFontInfo.fontFamily}";${n}src:${e}}`}return this._inspectFont?.(this,e),t}getPathGenerator(e,t){if(this.compiledGlyphs[t]!==void 0)return this.compiledGlyphs[t];let n=this.loadedName+`_path_`+t,r;try{r=e.get(n)}catch(e){T(`getPathGenerator - ignoring character: "${e}".`)}let i=Je(r?.path);return this.fontExtraProperties||e.delete(n),this.compiledGlyphs[t]=i}get black(){return this.#e.black}get bold(){return this.#e.bold}get disableFontFace(){return this.#e.disableFontFace}set disableFontFace(e){M(this,`disableFontFace`,!!e)}get fontExtraProperties(){return this.#e.fontExtraProperties}get isInvalidPDFjsFont(){return this.#e.isInvalidPDFjsFont}get isType3Font(){return this.#e.isType3Font}get italic(){return this.#e.italic}get missingFile(){return this.#e.missingFile}get remeasure(){return this.#e.remeasure}get vertical(){return this.#e.vertical}get ascent(){return this.#e.ascent}get defaultWidth(){return this.#e.defaultWidth}get descent(){return this.#e.descent}get bbox(){return this.#e.bbox}get fontMatrix(){return this.#e.fontMatrix}get fallbackName(){return this.#e.fallbackName}get loadedName(){return this.#e.loadedName}get mimetype(){return this.#e.mimetype}get name(){return this.#e.name}get data(){return this.#e.data}clearData(){this.#e.clearData()}get cssFontInfo(){return this.#e.cssFontInfo}get systemFontInfo(){return this.#e.systemFontInfo}get defaultVMetrics(){return this.#e.defaultVMetrics}},kt=class{static strings=[`fontFamily`,`fontWeight`,`italicAngle`]},At=class{static strings=[`css`,`loadedName`,`baseFontName`,`src`]},K=class{static bools=[`black`,`bold`,`disableFontFace`,`fontExtraProperties`,`isInvalidPDFjsFont`,`isType3Font`,`italic`,`missingFile`,`remeasure`,`vertical`];static numbers=[`ascent`,`defaultWidth`,`descent`];static strings=[`fallbackName`,`loadedName`,`mimetype`,`name`];static OFFSET_NUMBERS=Math.ceil(this.bools.length*2/8);static OFFSET_BBOX=this.OFFSET_NUMBERS+this.numbers.length*8;static OFFSET_FONT_MATRIX=this.OFFSET_BBOX+1+8;static OFFSET_DEFAULT_VMETRICS=this.OFFSET_FONT_MATRIX+1+48;static OFFSET_STRINGS=this.OFFSET_DEFAULT_VMETRICS+1+6},jt=class{static KIND=0;static HAS_BBOX=1;static HAS_BACKGROUND=2;static SHADING_TYPE=3;static N_COORD=4;static N_COLOR=8;static N_STOP=12;static N_FIGURES=16},Mt=class{#e;#t=new TextDecoder;#n;constructor(e){this.#e=e,this.#n=new DataView(e)}#r(e){D(e>n&3;return r===0?void 0:r===2}get black(){return this.#r(0)}get bold(){return this.#r(1)}get disableFontFace(){return this.#r(2)}get fontExtraProperties(){return this.#r(3)}get isInvalidPDFjsFont(){return this.#r(4)}get isType3Font(){return this.#r(5)}get italic(){return this.#r(6)}get missingFile(){return this.#r(7)}get remeasure(){return this.#r(8)}get vertical(){return this.#r(9)}#i(e){return D(e0){t=n.slice();for(let e=0,n=l.length;etypeof e==`object`&&Number.isInteger(e?.num)&&e.num>=0&&Number.isInteger(e?.gen)&&e.gen>=0,Vt=fe.bind(null,Bt,e=>typeof e==`object`&&typeof e?.name==`string`),Ht=class{#e=new Map;#t=Promise.resolve();postMessage(e,t){let n={data:structuredClone(e,t?{transfer:t}:null)};this.#t.then(()=>{for(let[e]of this.#e)e.call(this,n)})}addEventListener(e,t,n=null){let r=null;if(n?.signal instanceof AbortSignal){let{signal:i}=n;if(i.aborted){T("LoopbackPort - cannot use an `aborted` signal.");return}let a=()=>this.removeEventListener(e,t);r=()=>i.removeEventListener(`abort`,a),i.addEventListener(`abort`,a)}this.#e.set(t,r)}removeEventListener(e,t){this.#e.get(t)?.(),this.#e.delete(t)}terminate(){for(let[,e]of this.#e)e?.();this.#e.clear()}},Ut={DATA:1,ERROR:2},q={CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function Wt(){}function J(e){if(e instanceof P||e instanceof ne||e instanceof ee||e instanceof re||e instanceof te)return e;switch(e instanceof Error||typeof e==`object`&&e||E(`wrapReason: Expected "reason" to be a (possibly cloned) Error.`),e.name){case`AbortException`:return new P(e.message);case`InvalidPDFException`:return new ne(e.message);case`PasswordException`:return new ee(e.message,e.code);case`ResponseException`:return new re(e.message,e.status,e.missing);case`UnknownErrorException`:return new te(e.message,e.details)}return new te(e.message,e.toString())}var Gt=class{#e=new AbortController;constructor(e,t,n){this.sourceName=e,this.targetName=t,this.comObj=n,this.callbackId=1,this.streamId=1,this.streamSinks=Object.create(null),this.streamControllers=Object.create(null),this.callbackCapabilities=Object.create(null),this.actionHandler=Object.create(null),n.addEventListener(`message`,this.#t.bind(this),{signal:this.#e.signal})}#t({data:e}){if(e.targetName!==this.sourceName)return;if(e.stream){this.#r(e);return}if(e.callback){let t=e.callbackId,n=this.callbackCapabilities[t];if(!n)throw Error(`Cannot resolve callback ${t}`);if(delete this.callbackCapabilities[t],e.callback===Ut.DATA)n.resolve(e.data);else if(e.callback===Ut.ERROR)n.reject(J(e.reason));else throw Error(`Unexpected callback case`);return}let t=this.actionHandler[e.action];if(!t)throw Error(`Unknown action from worker: ${e.action}`);if(e.callbackId){let n=this.sourceName,r=e.sourceName,i=this.comObj;Promise.try(t,e.data).then(function(t){i.postMessage({sourceName:n,targetName:r,callback:Ut.DATA,callbackId:e.callbackId,data:t})},function(t){i.postMessage({sourceName:n,targetName:r,callback:Ut.ERROR,callbackId:e.callbackId,reason:J(t)})});return}if(e.streamId){this.#n(e);return}t(e.data)}on(e,t){let n=this.actionHandler;if(n[e])throw Error(`There is already an actionName called "${e}"`);n[e]=t}send(e,t,n){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,data:t},n)}sendWithPromise(e,t,n){let r=this.callbackId++,i=Promise.withResolvers();this.callbackCapabilities[r]=i;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,callbackId:r,data:t},n)}catch(e){i.reject(e)}return i.promise}sendWithStream(e,t,n,r){let i=this.streamId++,a=this.sourceName,o=this.targetName,s=this.comObj;return new ReadableStream({start:n=>{let c=Promise.withResolvers();return this.streamControllers[i]={controller:n,startCall:c,pullCall:null,cancelCall:null,isClosed:!1},s.postMessage({sourceName:a,targetName:o,action:e,streamId:i,data:t,desiredSize:n.desiredSize},r),c.promise},pull:e=>{let t=Promise.withResolvers();return this.streamControllers[i].pullCall=t,s.postMessage({sourceName:a,targetName:o,stream:q.PULL,streamId:i,desiredSize:e.desiredSize}),t.promise},cancel:e=>{D(e instanceof Error,`cancel must have a valid reason`);let t=Promise.withResolvers();return this.streamControllers[i].cancelCall=t,this.streamControllers[i].isClosed=!0,s.postMessage({sourceName:a,targetName:o,stream:q.CANCEL,streamId:i,reason:J(e)}),t.promise}},n)}#n(e){let t=e.streamId,n=this.sourceName,r=e.sourceName,i=this.comObj,a=this,o=this.actionHandler[e.action],s={enqueue(e,a=1,o){if(this.isCancelled)return;let s=this.desiredSize;this.desiredSize-=a,s>0&&this.desiredSize<=0&&(this.sinkCapability=Promise.withResolvers(),this.ready=this.sinkCapability.promise),i.postMessage({sourceName:n,targetName:r,stream:q.ENQUEUE,streamId:t,chunk:e},o)},close(){this.isCancelled||(this.isCancelled=!0,i.postMessage({sourceName:n,targetName:r,stream:q.CLOSE,streamId:t}),delete a.streamSinks[t])},error(e){D(e instanceof Error,`error must have a valid reason`),!this.isCancelled&&(this.isCancelled=!0,i.postMessage({sourceName:n,targetName:r,stream:q.ERROR,streamId:t,reason:J(e)}))},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};s.sinkCapability.resolve(),s.ready=s.sinkCapability.promise,this.streamSinks[t]=s,Promise.try(o,e.data,s).then(function(){i.postMessage({sourceName:n,targetName:r,stream:q.START_COMPLETE,streamId:t,success:!0})},function(e){i.postMessage({sourceName:n,targetName:r,stream:q.START_COMPLETE,streamId:t,reason:J(e)})})}#r(e){let t=e.streamId,n=this.sourceName,r=e.sourceName,i=this.comObj,a=this.streamControllers[t],o=this.streamSinks[t];switch(e.stream){case q.START_COMPLETE:e.success?a.startCall.resolve():a.startCall.reject(J(e.reason));break;case q.PULL_COMPLETE:e.success?a.pullCall.resolve():a.pullCall.reject(J(e.reason));break;case q.PULL:if(!o){i.postMessage({sourceName:n,targetName:r,stream:q.PULL_COMPLETE,streamId:t,success:!0});break}o.desiredSize<=0&&e.desiredSize>0&&o.sinkCapability.resolve(),o.desiredSize=e.desiredSize,Promise.try(o.onPull||Wt).then(function(){i.postMessage({sourceName:n,targetName:r,stream:q.PULL_COMPLETE,streamId:t,success:!0})},function(e){i.postMessage({sourceName:n,targetName:r,stream:q.PULL_COMPLETE,streamId:t,reason:J(e)})});break;case q.ENQUEUE:if(D(a,`enqueue should have stream controller`),a.isClosed)break;a.controller.enqueue(e.chunk);break;case q.CLOSE:if(D(a,`close should have stream controller`),a.isClosed)break;a.isClosed=!0,a.controller.close(),this.#i(a,t);break;case q.ERROR:D(a,`error should have stream controller`),a.controller.error(J(e.reason)),this.#i(a,t);break;case q.CANCEL_COMPLETE:e.success?a.cancelCall.resolve():a.cancelCall.reject(J(e.reason)),this.#i(a,t);break;case q.CANCEL:if(!o)break;let s=J(e.reason);Promise.try(o.onCancel||Wt,s).then(function(){i.postMessage({sourceName:n,targetName:r,stream:q.CANCEL_COMPLETE,streamId:t,success:!0})},function(e){i.postMessage({sourceName:n,targetName:r,stream:q.CANCEL_COMPLETE,streamId:t,reason:J(e)})}),o.sinkCapability.reject(s),o.isCancelled=!0,delete this.streamSinks[t];break;default:throw Error(`Unexpected stream case`)}}async#i(e,t){await Promise.allSettled([e.startCall?.promise,e.pullCall?.promise,e.cancelCall?.promise]),delete this.streamControllers[t]}destroy(){this.#e?.abort(),this.#e=null}},Kt=class{#e=Object.freeze({cMapUrl:`CMap`,standardFontDataUrl:`font`,wasmUrl:`wasm`});constructor({cMapUrl:e=null,standardFontDataUrl:t=null,wasmUrl:n=null}){this.cMapUrl=e,this.standardFontDataUrl=t,this.wasmUrl=n}async fetch({kind:e,filename:t}){switch(e){case`cMapUrl`:case`standardFontDataUrl`:case`wasmUrl`:break;default:E(`Not implemented: ${e}`)}let n=this[e];if(!n)throw Error(`Ensure that the \`${e}\` API parameter is provided.`);let r=`${n}${t}`;return this._fetch(r,e).catch(t=>{throw Error(`Unable to load ${this.#e[e]} data at: ${r}`)})}async _fetch(e,t){E("Abstract method `_fetch` called.")}},qt=class extends Kt{async _fetch(e,t){let n=await Ce(e,t===`cMapUrl`&&!e.endsWith(`.bcmap`)?`text`:`bytes`);return n instanceof Uint8Array?n:oe(n)}},Jt=class{#e=!1;constructor({enableHWA:e=!1}){this.#e=e}create(e,t){if(e<=0||t<=0)throw Error(`Invalid canvas size`);let n=this._createCanvas(e,t);return{canvas:n,context:n.getContext(`2d`,{willReadFrequently:!this.#e})}}reset({canvas:e},t,n){if(!e)throw Error(`Canvas is not specified`);if(t<=0||n<=0)throw Error(`Invalid canvas size`);e.width=t,e.height=n}destroy(e){let{canvas:t}=e;if(!t)throw Error(`Canvas is not specified`);t.width=t.height=0,e.canvas=null,e.context=null}_createCanvas(e,t){E("Abstract method `_createCanvas` called.")}},Yt=class extends Jt{constructor({ownerDocument:e=globalThis.document,enableHWA:t=!1}){super({enableHWA:t}),this._document=e}_createCanvas(e,t){let n=this._document.createElement(`canvas`);return n.width=e,n.height=t,n}},Xt=class{addFilter(e){return`none`}addHCMFilter(e,t){return`none`}addAlphaFilter(e){return`none`}addLuminosityFilter(e){return`none`}addKnockoutFilter(e=0){return`none`}addHighlightHCMFilter(e,t,n,r,i){return`none`}addSelectionHCMFilter(e,t){return`none`}addSelectionFilter(){return`none`}createSelectionStyle(e=null){return null}destroy(e=!1){}},Zt=class extends Xt{#e;#t;#n;#r;#i;#a;#o=0;constructor({docId:e,ownerDocument:t=globalThis.document}){super(),this.#r=e,this.#i=t}get#s(){return this.#t||=new Map}get#c(){return this.#a||=new Map}get#l(){if(!this.#n){let e=this.#i.createElement(`div`),{style:t}=e;t.colorScheme=`only light`,t.visibility=`hidden`,t.contain=`strict`,t.width=t.height=0,t.position=`absolute`,t.top=t.left=0,t.zIndex=-1;let n=this.#i.createElementNS(a,`svg`);n.setAttribute(`width`,0),n.setAttribute(`height`,0),this.#n=this.#i.createElementNS(a,`defs`),e.append(n),n.append(this.#n),this.#i.body.append(e)}return this.#n}#u(e){if(e.length===1){let t=e[0],n=Array(256);for(let e=0;e<256;e++)n[e]=t[e]/255;let r=n.join(`,`);return[r,r,r]}let[t,n,r]=e,i=Array(256),a=Array(256),o=Array(256);for(let e=0;e<256;e++)i[e]=t[e]/255,a[e]=n[e]/255,o[e]=r[e]/255;return[i.join(`,`),a.join(`,`),o.join(`,`)]}#d(e){if(this.#e===void 0){this.#e=``;let e=this.#i.URL;e!==this.#i.baseURI&&(Te(e)?T(`#createUrl: ignore "data:"-URL for performance reasons.`):this.#e=A(e,``))}return`url(${this.#e}#${e})`}addFilter(e){if(!e)return`none`;let t=this.#s.get(e);if(t)return t;let[n,r,i]=this.#u(e),a=e.length===1?n:`${n}${r}${i}`;if(t=this.#s.get(a),t)return this.#s.set(e,t),t;let o=`g_${this.#r}_transfer_map_${this.#o++}`,s=this.#d(o);this.#s.set(e,s),this.#s.set(a,s);let c=this.#m(o);return this.#g(n,r,i,c),s}addHCMFilter(e,t){let n=`${e}-${t}`,r=`base`,i=this.#c.get(r);if(i?.key===n||(i?(i.filter?.remove(),i.key=n,i.url=`none`,i.filter=null):(i={key:n,url:`none`,filter:null},this.#c.set(r,i)),!e||!t))return i.url;let a=this.#v(e);e=I.makeHexColor(...a);let o=this.#v(t);if(t=I.makeHexColor(...o),this.#b(),e===`#000000`&&t===`#ffffff`||e===t)return i.url;let s=Array(256);for(let e=0;e<=255;e++){let t=e/255;s[e]=t<=.03928?t/12.92:((t+.055)/1.055)**2.4}let c=s.join(`,`),l=`g_${this.#r}_hcm_filter`,u=i.filter=this.#m(l);this.#g(c,c,c,u),this.#p(u);let d=(e,t)=>{let n=a[e]/255,r=o[e]/255,i=Array(t+1);for(let e=0;e<=t;e++)i[e]=n+e/t*(r-n);return i.join(`,`)};return this.#g(d(0,5),d(1,5),d(2,5),u),i.url=this.#d(l),i.url}addSelectionHCMFilter(e,t){return this.addHighlightHCMFilter(`selection`,e,t,`HighlightText`,`Highlight`)}addSelectionFilter(){return this.addHighlightHCMFilter(`selection_default`,`black`,`white`,`HighlightText`,`Highlight`)}createSelectionStyle(e=null){let t=e?this.addSelectionHCMFilter(e.foreground,e.background):this.addSelectionFilter();return t===`none`||!F.platform.isFirefox?null:{"backdrop-filter":t,"background-color":`transparent`}}addAlphaFilter(e){let t=this.#s.get(e);if(t)return t;let[n]=this.#u([e]),r=`alpha_${n}`;if(t=this.#s.get(r),t)return this.#s.set(e,t),t;let i=`g_${this.#r}_alpha_map_${this.#o++}`,a=this.#d(i);this.#s.set(e,a),this.#s.set(r,a);let o=this.#m(i);return this.#_(n,o),a}addLuminosityFilter(e){let t=this.#s.get(e||`luminosity`);if(t)return t;let n,r;if(e?([n]=this.#u([e]),r=`luminosity_${n}`):r=`luminosity`,t=this.#s.get(r),t)return this.#s.set(e,t),t;let i=`g_${this.#r}_luminosity_map_${this.#o++}`,a=this.#d(i);this.#s.set(e,a),this.#s.set(r,a);let o=this.#m(i);return this.#f(o),e&&this.#_(n,o),a}addKnockoutFilter(e=0){let t=e>0?Math.min(1/e,1e6):1e6,n=`knockout_${t}`,r=this.#s.get(n);if(r)return r;let i=`g_${this.#r}_knockout_filter_${this.#o++}`,o=this.#d(i);this.#s.set(n,o);let s=this.#m(i),c=this.#i.createElementNS(a,`feComponentTransfer`);s.append(c);let l=this.#i.createElementNS(a,`feFuncA`);return l.setAttribute(`type`,`linear`),l.setAttribute(`slope`,`${t}`),l.setAttribute(`intercept`,`0`),c.append(l),o}addHighlightHCMFilter(e,t,n,r,i){let a=`${t}-${n}-${r}-${i}`,o=this.#c.get(e);if(o?.key===a||(o?(o.filter?.remove(),o.key=a,o.url=`none`,o.filter=null):(o={key:a,url:`none`,filter:null},this.#c.set(e,o)),!t||!n))return o.url;let[s,c]=[t,n].map(this.#v.bind(this)),l=Math.round(.2126*s[0]+.7152*s[1]+.0722*s[2]),u=Math.round(.2126*c[0]+.7152*c[1]+.0722*c[2]),[d,f]=[r,i].map(this.#x.bind(this));u{let r=Array(256),i=(u-l)/n,a=e/255,o=(t-e)/(255*n),s=0;for(let e=0;e<=n;e++){let t=Math.round(l+e*i),n=a+e*o;for(let e=s;e<=t;e++)r[e]=n;s=t+1}for(let e=s;e<256;e++)r[e]=r[s-1];return r.join(`,`)},m=`g_${this.#r}_hcm_${e}_filter`,h=o.filter=this.#m(m);return this.#p(h),this.#g(p(d[0],f[0],5),p(d[1],f[1],5),p(d[2],f[2],5),h),o.url=this.#d(m),o.url}destroy(e=!1){e&&this.#a?.size||(this.#n?.parentNode.parentNode.remove(),this.#n=null,this.#t?.clear(),this.#t=null,this.#a?.clear(),this.#a=null,this.#o=0)}#f(e){let t=this.#i.createElementNS(a,`feColorMatrix`);t.setAttribute(`type`,`matrix`),t.setAttribute(`values`,`0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0`),e.append(t)}#p(e){let t=this.#i.createElementNS(a,`feColorMatrix`);t.setAttribute(`type`,`matrix`),t.setAttribute(`values`,`0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0`),e.append(t)}#m(e){let t=this.#i.createElementNS(a,`filter`);return t.setAttribute(`color-interpolation-filters`,`sRGB`),t.setAttribute(`id`,e),this.#l.append(t),t}#h(e,t,n){let r=this.#i.createElementNS(a,t);r.setAttribute(`type`,`discrete`),r.setAttribute(`tableValues`,n),e.append(r)}#g(e,t,n,r){let i=this.#i.createElementNS(a,`feComponentTransfer`);r.append(i),this.#h(i,`feFuncR`,e),this.#h(i,`feFuncG`,t),this.#h(i,`feFuncB`,n)}#_(e,t){let n=this.#i.createElementNS(a,`feComponentTransfer`);t.append(n),this.#h(n,`feFuncA`,e)}#v(e){return this.#l.style.color=`CanvasText`,this.#l.style.backgroundColor=e,Ne(getComputedStyle(this.#l).getPropertyValue(`background-color`))}#y(e){return this.#l.style.color=`CanvasText`,this.#l.style.backgroundColor=e,Me(getComputedStyle(this.#l).getPropertyValue(`background-color`))}#b(){this.#l.style.color=``,this.#l.style.backgroundColor=``}#x(e){let[t,n,r,i]=this.#y(e);if(i===1)return[t,n,r];let[a,o,s]=this.#v(`Canvas`);return[Qt(t,a,i),Qt(n,o,i),Qt(r,s,i)]}};function Qt(e,t,n){return Math.round(n*e+(1-n)*t)}t&&T("Please use the `legacy` build in Node.js environments.");async function $t(e){let t=await process.getBuiltinModule(`fs/promises`).readFile(e);return new Uint8Array(t)}var en=class extends Xt{},tn=class extends Jt{_createCanvas(e,t){return process.getBuiltinModule(`module`).createRequire(import.meta.url)(`@napi-rs/canvas`).createCanvas(e,t)}},nn=class extends Kt{async _fetch(e,t){return $t(e)}};function rn({src:e,srcPos:t=0,dest:n,width:r,height:i,nonBlackColor:a=4294967295,inverseDecode:o=!1}){let s=F.isLittleEndian?4278190080:255,[c,l]=o?[a,s]:[s,a],u=r>>3,d=r&7,f=c^l,p=e.length;n=new Uint32Array(n.buffer);let m=0;for(let r=0;r>7&1)&f,n[m+1]=c^-(r>>6&1)&f,n[m+2]=c^-(r>>5&1)&f,n[m+3]=c^-(r>>4&1)&f,n[m+4]=c^-(r>>3&1)&f,n[m+5]=c^-(r>>2&1)&f,n[m+6]=c^-(r>>1&1)&f,n[m+7]=c^-(r&1)&f}if(d===0)continue;let r=t>7-e&1)&f}return{srcPos:t,destPos:m}}function an({src:e,srcPos:t=0,dest:n,destPos:r=0,width:i,height:a}){let o=0,s=i*a*3,c=s>>2,l=new Uint32Array(e.buffer,t,c),u=F.isLittleEndian?4278190080:255;if(F.isLittleEndian){for(;o>>24|t<<8|u,n[r+2]=t>>>16|i<<16|u,n[r+3]=i>>>8|u}for(let i=o*4,a=t+s;i>>8|u,n[r+2]=t<<16|i>>>16|u,n[r+3]=i<<8|u}for(let i=o*4,a=t+s;i - + diff --git a/tests/agent_cli/test_claude_prompt_delivery.py b/tests/agent_cli/test_claude_prompt_delivery.py index d9c1f150..4c1e8a64 100644 --- a/tests/agent_cli/test_claude_prompt_delivery.py +++ b/tests/agent_cli/test_claude_prompt_delivery.py @@ -48,6 +48,23 @@ def test_claude_bare_prompt_uses_stream_json_stdin() -> None: assert cleanup_path is None +def test_windows_claude_wrapper_receives_prompt_on_stdin() -> None: + runner = AgentCliRunner(agent_bin="claude.cmd", backend=BACKEND_CLAUDE) + + command, stdin_prompt, cleanup_path = runner._prepare_prompt_delivery( + [r"C:\Users\operator\AppData\Roaming\npm\claude.cmd", "-p", "--verbose"], + "classify this message", + ) + + assert command == [ + r"C:\Users\operator\AppData\Roaming\npm\claude.cmd", + "-p", + "--verbose", + ] + assert stdin_prompt == "classify this message" + assert cleanup_path is None + + def test_claude_rejects_oversized_positional_prompt() -> None: runner = AgentCliRunner(agent_bin="claude", backend=BACKEND_CLAUDE) diff --git a/tests/apps/test_cli_parser.py b/tests/apps/test_cli_parser.py index 864dd010..55935f8d 100644 --- a/tests/apps/test_cli_parser.py +++ b/tests/apps/test_cli_parser.py @@ -48,10 +48,13 @@ def test_debug_help_still_exposes_internal_flags(monkeypatch: pytest.MonkeyPatch def test_parser_exposes_doctor_and_repair_subcommands() -> None: - doctor = build_parser().parse_args(["doctor", "--json", "--deep"]) + doctor = build_parser().parse_args( + ["doctor", "--json", "--deep", "--advisor", "claude"] + ) assert doctor.command == "doctor" assert doctor.json is True assert doctor.deep is True + assert doctor.advisor == "claude" repair = build_parser().parse_args(["repair", "--safe", "--json"]) assert repair.command == "repair" diff --git a/tests/apps/test_cli_session_workdir.py b/tests/apps/test_cli_session_workdir.py index 29eb731c..af88e24b 100644 --- a/tests/apps/test_cli_session_workdir.py +++ b/tests/apps/test_cli_session_workdir.py @@ -52,6 +52,59 @@ def test_cli_resume_uses_persisted_workdir_not_shell_cwd( assert config.life_dir == state_dir +def test_cli_explicit_provider_backend_uses_native_model_default( + monkeypatch, + tmp_path, +) -> None: + args = _args() + args.backend = "claude" + monkeypatch.setattr( + _core, + "_resolve_project_bundle", + lambda _args: SimpleNamespace( + project=SimpleNamespace( + root=tmp_path, + fingerprint="test-project", + label="test", + ), + global_root=tmp_path, + project_worktree=tmp_path, + ), + ) + monkeypatch.delenv("ARGUS_SKILL_MODEL", raising=False) + monkeypatch.delenv("ARGUS_SKILL_ENGINEER_MODEL", raising=False) + monkeypatch.delenv("ARGUS_SKILL_REVIEWER_MODEL", raising=False) + + config = _core._build_worker_config(args) + + assert config.engineer_model == "" + assert config.reviewer_model == "" + + +def test_cli_models_follow_role_specific_backends(monkeypatch, tmp_path) -> None: + args = _args() + args.backend = "codex" + monkeypatch.setenv("ARGUS_SKILL_REVIEWER_BACKEND", "claude") + monkeypatch.setattr( + _core, + "_resolve_project_bundle", + lambda _args: SimpleNamespace( + project=SimpleNamespace( + root=tmp_path, + fingerprint="test-project", + label="test", + ), + global_root=tmp_path, + project_worktree=tmp_path, + ), + ) + + config = _core._build_worker_config(args) + + assert config.engineer_model == "gpt-5.5" + assert config.reviewer_model == "" + + def test_cli_management_auto_selects_newest_session_for_shell_workdir( tmp_path, monkeypatch, diff --git a/tests/core/test_agent_probe.py b/tests/core/test_agent_probe.py new file mode 100644 index 00000000..db10b19d --- /dev/null +++ b/tests/core/test_agent_probe.py @@ -0,0 +1,202 @@ +from __future__ import annotations + +import json +from types import SimpleNamespace + +import pytest + +from argus_skill.core.agent_probe import run_read_only_agent_prompt + + +def test_agent_probe_runs_read_only_without_mutating_safe_mode( + monkeypatch, +) -> None: + calls: dict[str, object] = {} + + class Runner: + def __init__(self, *, backend: str, runner_bin: str, **kwargs) -> None: + calls["executable"] = runner_bin + calls["backend"] = backend + calls["runner_defaults"] = kwargs + + def run_exec(self, **kwargs): + calls.update(kwargs) + assert kwargs["options"].sandbox_mode == "read-only" + assert kwargs["options"].force_safe_mode is True + assert kwargs["options"].disable_tools is False + assert kwargs["options"].model is None + return SimpleNamespace( + exit_code=0, + last_agent_message="ARGUS_SETUP_OK", + agent_messages=["ARGUS_SETUP_OK"], + fatal_error="", + stderr_lines=[], + ) + + monkeypatch.setattr( + "argus_skill.adapters.agent_cli_backend.AgentCliBackend", + Runner, + ) + monkeypatch.setenv("ARGUS_SKILL_SAFE_MODE", "0") + + result = run_read_only_agent_prompt( + backend="claude", + executable="/usr/bin/claude", + prompt="reply exactly", + run_label="setup-smoke", + ) + + assert result.ok is True + assert result.output == "ARGUS_SETUP_OK" + assert calls["backend"] == "claude" + assert calls["run_label"] == "setup-smoke" + assert __import__("os").environ["ARGUS_SKILL_SAFE_MODE"] == "0" + + +def test_agent_probe_surfaces_runner_failure(monkeypatch) -> None: + class Runner: + def __init__(self, **_kwargs) -> None: + pass + + def run_exec(self, **_kwargs): + return SimpleNamespace( + exit_code=1, + turn_completed=False, + last_agent_message="", + agent_messages=[], + fatal_error="authentication required", + stderr_lines=[], + ) + + monkeypatch.setattr( + "argus_skill.adapters.agent_cli_backend.AgentCliBackend", + Runner, + ) + + result = run_read_only_agent_prompt( + backend="claude", + executable="/usr/bin/claude", + prompt="reply exactly", + run_label="setup-smoke", + ) + + assert result.ok is False + assert result.error == "authentication required" + + +def test_agent_probe_surfaces_spawn_error_without_traceback(monkeypatch) -> None: + class Runner: + def __init__(self, **_kwargs) -> None: + pass + + def run_exec(self, **_kwargs): + raise OSError("executable could not start") + + monkeypatch.setattr( + "argus_skill.adapters.agent_cli_backend.AgentCliBackend", + Runner, + ) + + result = run_read_only_agent_prompt( + backend="claude", + executable="/usr/bin/claude", + prompt="reply exactly", + run_label="setup-smoke", + ) + + assert result.ok is False + assert result.error == "OSError: executable could not start" + + +def test_agent_probe_rejects_tool_activity(monkeypatch) -> None: + class Runner: + def __init__(self, **_kwargs) -> None: + pass + + def run_exec(self, **_kwargs): + return SimpleNamespace( + exit_code=0, + turn_completed=True, + tool_activity_observed=True, + last_agent_message="ARGUS_SETUP_OK", + agent_messages=["ARGUS_SETUP_OK"], + fatal_error="", + stderr_lines=[], + ) + + monkeypatch.setattr( + "argus_skill.adapters.agent_cli_backend.AgentCliBackend", + Runner, + ) + + result = run_read_only_agent_prompt( + backend="claude", + executable="/usr/bin/claude", + prompt="reply exactly", + run_label="setup-smoke", + ) + + assert result.ok is False + assert result.error == "Agent used a tool during the tool-free verification turn" + + +def test_agent_probe_fails_closed_for_tool_free_codex() -> None: + result = run_read_only_agent_prompt( + backend="codex", + executable="/usr/bin/codex", + prompt="analyze diagnostics", + run_label="doctor-advisor", + disable_tools=True, + ) + + assert result.ok is False + assert "does not expose a tool-free prompt mode" in result.error + + +@pytest.mark.parametrize( + ("backend", "expected"), + [ + ("claude", ("--tools", "")), + ("copilot", ("--available-tools=", "--deny-tool=*")), + ("opencode", ("--agent", "argus-no-tools")), + ("pi", ("--no-tools",)), + ("grok", ("--tools", "")), + ], +) +def test_supported_doctor_backends_disable_all_tools( + backend: str, + expected: tuple[str, ...], +) -> None: + from argus_skill.agent_cli.agent_cli_runner import AgentCliRunner, RunnerOptions + from argus_skill.agent_cli.runner_backend import normalize_runner_backend + + command = AgentCliRunner( + backend, + backend=normalize_runner_backend(backend), + )._build_command( + resume_thread_id=None, + options=RunnerOptions( + sandbox_mode="read-only", + force_safe_mode=True, + disable_tools=True, + ), + ) + + for item in expected: + assert item in command + + +def test_opencode_tool_free_agent_denies_every_tool() -> None: + from argus_skill.agent_cli.agent_cli_runner import AgentCliRunner, RunnerOptions + from argus_skill.agent_cli.runner_backend import BACKEND_OPENCODE + + runner = AgentCliRunner("opencode", backend=BACKEND_OPENCODE) + env = runner._child_env(RunnerOptions( + sandbox_mode="read-only", + force_safe_mode=True, + disable_tools=True, + )) + assert env is not None + config = json.loads(env["OPENCODE_CONFIG_CONTENT"]) + + assert config["agent"]["argus-no-tools"]["permission"] == {"*": "deny"} diff --git a/tests/core/test_backend_readiness.py b/tests/core/test_backend_readiness.py index 1cb7f841..0be3f7d0 100644 --- a/tests/core/test_backend_readiness.py +++ b/tests/core/test_backend_readiness.py @@ -35,6 +35,17 @@ def run(command, *, timeout_s, input_text=None): monkeypatch.setattr(readiness, "_run_text", run) +def test_windows_install_commands_are_powershell_safe() -> None: + assert readiness.backend_install_command( + "copilot", + platform_name="nt", + ) == "npm.cmd install -g @github/copilot" + assert "curl" not in readiness.backend_install_command( + "opencode", + platform_name="nt", + ) + + def test_default_timeout_allows_slow_cli_cold_start(monkeypatch) -> None: seen_timeouts = [] monkeypatch.setattr(readiness, "resolve_runner_bin", lambda *_args: "/bin/copilot") diff --git a/tests/core/test_cheap_route_models.py b/tests/core/test_cheap_route_models.py index 3991797e..13f69b26 100644 --- a/tests/core/test_cheap_route_models.py +++ b/tests/core/test_cheap_route_models.py @@ -19,7 +19,7 @@ import pytest -from argus_skill.core.knobs import resolve_cheap_route_model +from argus_skill.core.knobs import resolve_cheap_route_model, resolve_role_model @pytest.fixture(autouse=True) @@ -32,6 +32,85 @@ def _env(backend: str, **extra: str) -> dict[str, str]: return {"ARGUS_SKILL_LIFE_BACKEND": backend, **extra} +@pytest.mark.parametrize("backend", ["pi", "claude", "opencode", "grok"]) +def test_provider_backend_without_model_uses_its_native_default(backend: str) -> None: + assert ( + resolve_role_model( + "manager", + role_env="ARGUS_SKILL_MANAGER_MODEL", + env=_env(backend), + ) + == "" + ) + + +@pytest.mark.parametrize("backend", ["codex", "copilot"]) +def test_openai_backend_without_model_keeps_argus_default(backend: str) -> None: + assert ( + resolve_role_model( + "manager", + role_env="ARGUS_SKILL_MANAGER_MODEL", + env=_env(backend), + ) + == "gpt-5.5" + ) + + +def test_auto_model_override_uses_backend_default() -> None: + assert ( + resolve_role_model( + "manager", + role_env="ARGUS_SKILL_MANAGER_MODEL", + env=_env("claude", ARGUS_SKILL_MANAGER_MODEL="auto"), + ) + == "" + ) + + +def test_role_model_can_use_the_actual_fallback_backend() -> None: + assert ( + resolve_role_model( + "manager", + role_env="ARGUS_SKILL_MANAGER_MODEL", + backend="claude", + env=_env("codex"), + ) + == "" + ) + + +def test_manager_routes_use_the_actual_runtime_backend() -> None: + from argus_skill.core.knobs import ( + resolve_manager_classify_model, + resolve_manager_reply_model, + ) + + env = _env("codex") + assert resolve_manager_classify_model(backend="claude", env=env) == "" + assert resolve_manager_reply_model(backend="claude", env=env) == "" + + +def test_claude_command_omits_openai_model_when_unconfigured() -> None: + from argus_skill.agent_cli.agent_cli_runner import AgentCliRunner, RunnerOptions + from argus_skill.agent_cli.runner_backend import BACKEND_CLAUDE + + model = resolve_role_model( + "manager", + role_env="ARGUS_SKILL_MANAGER_MODEL", + env=_env("claude"), + ) + command = AgentCliRunner( + "claude", + backend=BACKEND_CLAUDE, + )._build_command( + resume_thread_id=None, + options=RunnerOptions(model=model), + ) + + assert "--model" not in command + assert "gpt-5.5" not in command + + @pytest.mark.parametrize("backend", ["codex", "copilot"]) def test_openai_catalog_backends_keep_the_cheap_openai_id(backend: str) -> None: assert ( diff --git a/tests/daemon/test_life_worker.py b/tests/daemon/test_life_worker.py index a0e57946..dd9c0334 100644 --- a/tests/daemon/test_life_worker.py +++ b/tests/daemon/test_life_worker.py @@ -1251,6 +1251,22 @@ def test_handoff_config_payload_round_trips(tmp_path: Path) -> None: assert restored.continuous_open_ended is False +def test_handoff_config_preserves_native_backend_model_sentinels( + tmp_path: Path, +) -> None: + cfg = LifeWorkerConfig( + life_dir=tmp_path / "project", + backend="claude", + engineer_model="", + reviewer_model="", + ) + + restored = _config_from_payload(_config_payload(cfg)) + + assert restored.engineer_model == "" + assert restored.reviewer_model == "" + + def test_handoff_config_preserves_explicit_zero_global_budget_cap(tmp_path: Path) -> None: cfg = LifeWorkerConfig( life_dir=tmp_path / "project", diff --git a/tests/life/test_chat_fast_path.py b/tests/life/test_chat_fast_path.py index fc3dd479..f7958fb8 100644 --- a/tests/life/test_chat_fast_path.py +++ b/tests/life/test_chat_fast_path.py @@ -221,7 +221,7 @@ def test_execute_dispatches_to_manager_self_path_on_greeting(monkeypatch) -> Non monkeypatch.delenv("ARGUS_SKILL_SELF_REASONING_EFFORT", raising=False) monkeypatch.setattr( "argus_skill.apps._self_reply.resolve_manager_reply_model", - lambda: "best-manager", + lambda **_kwargs: "best-manager", ) backend = _FakeBackend(response_message="Hi! How can I help?") runner = _make_runner(backend) @@ -245,7 +245,7 @@ def test_execute_dispatches_to_manager_self_path_on_greeting(monkeypatch) -> Non def test_message_only_self_reply_uses_lean_low_cost_route(monkeypatch) -> None: monkeypatch.setattr( "argus_skill.apps._self_reply.resolve_manager_classify_model", - lambda: "cheap-manager", + lambda **_kwargs: "cheap-manager", ) backend = _FakeBackend(response_message="exact reply") runner = _make_runner(backend) diff --git a/tests/maintenance/test_doctor_advisor.py b/tests/maintenance/test_doctor_advisor.py new file mode 100644 index 00000000..ba59e2fa --- /dev/null +++ b/tests/maintenance/test_doctor_advisor.py @@ -0,0 +1,137 @@ +from __future__ import annotations + +from types import SimpleNamespace + +from argus_skill.maintenance import advisor +from argus_skill.maintenance.models import DoctorFinding, DoctorReport + + +def _report(detail: str = "codex was not found") -> DoctorReport: + return DoctorReport( + schema_version=1, + target_fingerprint="target", + generated_at="2026-08-14T00:00:00Z", + findings=( + DoctorFinding( + code="ARGUS-BACKEND-001", + scope="backend", + severity="error", + ok=False, + status="not_ready", + detail=detail, + recommendation="install or authenticate the selected Agent CLI", + ), + ), + ) + + +def test_doctor_advisor_uses_installed_configured_agent(monkeypatch) -> None: + monkeypatch.setattr( + advisor, + "_resolve_advisor", + lambda _requested: ("claude", "/usr/bin/claude"), + ) + monkeypatch.setattr( + "argus_skill.core.knobs.resolve_role_model", + lambda *_args, **_kwargs: "", + ) + captured: dict[str, object] = {} + + def probe(**kwargs): + captured.update(kwargs) + return SimpleNamespace(ok=True, output="Install Claude, then rerun setup.", error="") + + monkeypatch.setattr( + "argus_skill.core.agent_probe.run_read_only_agent_prompt", + probe, + ) + + result = advisor.run_doctor_advisor(_report(), requested="auto") + + assert result["status"] == "completed" + assert result["backend"] == "claude" + assert captured["model"] == "" + assert captured["run_label"] == "doctor-advisor" + assert captured["disable_tools"] is True + assert "ARGUS-BACKEND-001" in str(captured["prompt"]) + + +def test_doctor_advisor_uses_configured_manager_executable(monkeypatch) -> None: + monkeypatch.setattr( + "argus_skill.core.knobs.resolve_role_backend", + lambda _role: "claude", + ) + monkeypatch.setattr( + "argus_skill.core.knobs.resolve_runner_bin_setting", + lambda _role: "/opt/agents/claude-custom", + ) + calls: list[tuple[str, str | None]] = [] + + def resolve(backend: str, requested: str | None = None): + calls.append((backend, requested)) + return requested + + monkeypatch.setattr( + "argus_skill.agent_cli.runner_backend.resolve_runner_bin", + resolve, + ) + + assert advisor._resolve_advisor("auto") == ( + "claude", + "/opt/agents/claude-custom", + ) + assert calls == [("claude", "/opt/agents/claude-custom")] + + +def test_doctor_advisor_skips_codex_for_automatic_tool_free_analysis( + monkeypatch, +) -> None: + monkeypatch.setattr( + "argus_skill.core.knobs.resolve_role_backend", + lambda _role: "codex", + ) + monkeypatch.setattr( + "argus_skill.core.knobs.resolve_runner_bin_setting", + lambda _role: "", + ) + monkeypatch.setattr( + "argus_skill.agent_cli.runner_backend.resolve_runner_bin", + lambda backend, _configured=None: ( + "/usr/bin/pi" + if backend == "pi" + else "/usr/bin/codex" + if backend == "codex" + else None + ), + ) + + assert advisor._resolve_advisor("auto") == ("pi", "/usr/bin/pi") + + +def test_doctor_advisor_redacts_known_secrets(monkeypatch) -> None: + secret = "sk-example-secret-value-123456" + monkeypatch.setenv("OPENAI_API_KEY", secret) + + prompt = advisor._advisor_prompt(_report(f"backend rejected {secret}")) + + assert secret not in prompt + assert " None: + argus_home = tmp_path / "operator-state" + monkeypatch.setenv("ARGUS_SKILL_HOME", str(argus_home)) + + prompt = advisor._advisor_prompt(_report(f"missing {argus_home / 'repairs/path-memory.json'}")) + + assert str(argus_home) not in prompt + assert "/repairs/path-memory.json" in prompt + + +def test_doctor_advisor_reports_missing_agent(monkeypatch) -> None: + monkeypatch.setattr(advisor, "_resolve_advisor", lambda _requested: None) + + result = advisor.run_doctor_advisor(_report(), requested="auto") + + assert result["status"] == "unavailable" + assert "no supported Agent CLI" in result["error"] diff --git a/tests/maintenance/test_repair_pipeline.py b/tests/maintenance/test_repair_pipeline.py index 6f4da06b..a158ba02 100644 --- a/tests/maintenance/test_repair_pipeline.py +++ b/tests/maintenance/test_repair_pipeline.py @@ -96,6 +96,7 @@ def test_doctor_classifies_missing_desktop_runtime_as_repairable(tmp_path: Path) finding = next(item for item in report.findings if item.code == "ARGUS-DESKTOP-001") assert finding.status == "electron_binary_missing" + assert finding.severity == "warning" assert finding.repair_action_ids == ("install_electron_binary",) diff --git a/tests/manager/test_front_door_classify_fresh.py b/tests/manager/test_front_door_classify_fresh.py index 717bf3ad..ce56d235 100644 --- a/tests/manager/test_front_door_classify_fresh.py +++ b/tests/manager/test_front_door_classify_fresh.py @@ -44,7 +44,7 @@ def test_front_door_runs_fresh_low_effort(tmp_path, monkeypatch) -> None: monkeypatch.delenv("ARGUS_SKILL_FRONTDOOR_CLASSIFY_EFFORT", raising=False) monkeypatch.setattr( "argus_skill.core.knobs.resolve_manager_classify_model", - lambda: "fast-manager", + lambda **_kwargs: "fast-manager", ) mgr, backend = _manager( "CONFIG: NONE\nCONTROL: NONE\nROUTE: SELF", diff --git a/tests/manager/test_front_door_workspace.py b/tests/manager/test_front_door_workspace.py index af160596..44cbdef2 100644 --- a/tests/manager/test_front_door_workspace.py +++ b/tests/manager/test_front_door_workspace.py @@ -40,6 +40,7 @@ def test_manager_runner_uses_persisted_workdir_without_moving_state_root( ) captured = {} sentinel = object() + monkeypatch.setenv("ARGUS_SKILL_REVIEWER_BACKEND", "claude") def build(args): captured["args"] = args @@ -64,6 +65,8 @@ def build(args): assert args.global_root == str(root) assert args.skills_dir == str(root / "skills") assert args.operator_workspace == str(workspace.resolve()) + assert args.engineer_model == "gpt-5.5" + assert args.reviewer_model == "" assert args.skills_dir == str(root / "skills") assert args.manager_memory is memory diff --git a/tests/test_agent_cli_backend.py b/tests/test_agent_cli_backend.py index 5a73a6e4..fddfe038 100644 --- a/tests/test_agent_cli_backend.py +++ b/tests/test_agent_cli_backend.py @@ -49,6 +49,8 @@ class FakeCliRunnerOptions: full_auto: bool = False skip_git_repo_check: bool = False sandbox_mode: str | None = None + force_safe_mode: bool = False + disable_tools: bool = False extra_args: list[str] | None = None working_dir: str | None = None external_interrupt_reason_provider: Any | None = None @@ -223,6 +225,8 @@ def fake_run_exec( extra_args=["-c", "config_profile=tb"], full_auto=True, sandbox_mode="read-only", + force_safe_mode=True, + disable_tools=True, skip_git_repo_check=True, dangerous_yolo=False, ) @@ -241,6 +245,8 @@ def fake_run_exec( assert forwarded.extra_args == ["-c", "config_profile=tb"] assert forwarded.full_auto is True assert forwarded.sandbox_mode == "read-only" + assert forwarded.force_safe_mode is True + assert forwarded.disable_tools is True assert forwarded.skip_git_repo_check is True assert forwarded.dangerous_yolo is False assert captured["resume_thread_id"] == "thr-prev" diff --git a/tests/test_doctor.py b/tests/test_doctor.py index 997bbf9f..8cc83511 100644 --- a/tests/test_doctor.py +++ b/tests/test_doctor.py @@ -75,6 +75,21 @@ def test_doctor_json_uses_stable_codes() -> None: assert payload["checks"][0]["code"] == "ARGUS-STATE-001" +def test_frozen_doctor_does_not_require_system_node(tmp_path) -> None: + from argus_skill.maintenance.doctor import DoctorContext, _runtime_findings + + findings = _runtime_findings(DoctorContext( + global_root=tmp_path, + project_root=tmp_path, + python_executable=Path(sys.executable), + install_mode="frozen", + )) + node = next(item for item in findings if item.code == "ARGUS-NODE-001") + + assert node.ok is True + assert node.status == "bundled_runtime" + + def test_safe_repair_removes_only_a_verified_stale_daemon_pid( tmp_path, monkeypatch, diff --git a/tests/test_engineer_sandbox.py b/tests/test_engineer_sandbox.py index 8e3c0265..4b59b9e4 100644 --- a/tests/test_engineer_sandbox.py +++ b/tests/test_engineer_sandbox.py @@ -199,6 +199,19 @@ def test_chokepoint_noop_when_gate_off(gate_off): assert o.dangerous_yolo is True and o.sandbox_mode is None +def test_chokepoint_allows_per_invocation_safe_mode(gate_off): + o = _codex_runner()._apply_sandbox_policy( + RunnerOptions( + dangerous_yolo=True, + sandbox_mode="read-only", + force_safe_mode=True, + working_dir="/wd", + ) + ) + assert o.dangerous_yolo is True + assert o.sandbox_mode == "read-only" + + def test_chokepoint_converts_builder_when_gate_on(gate_on): o = _codex_runner()._apply_sandbox_policy(RunnerOptions(dangerous_yolo=True, working_dir="/wd")) assert o.sandbox_mode == "workspace-write" diff --git a/tests/test_install_documentation.py b/tests/test_install_documentation.py new file mode 100644 index 00000000..4610b444 --- /dev/null +++ b/tests/test_install_documentation.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] + + +def _section(text: str, start: str, end: str) -> str: + return text.split(start, 1)[1].split(end, 1)[0] + + +def test_readme_has_distinct_platform_install_contracts() -> None: + text = (ROOT / "README.md").read_text(encoding="utf-8") + windows = _section(text, "### Windows 10/11", "### macOS") + macos = _section(text, "### macOS", "### Linux") + linux = _section(text, "### Linux", "### Agent-assisted installation") + + assert "pip install --upgrade" in windows + assert "py -m pip install --upgrade" in windows + assert "--force-reinstall" in windows + assert "py -3.11" not in windows + assert "-m venv" not in windows + assert "argus --setup" in windows + assert "uv tool install" in macos + assert "uv venv" not in macos + assert "python3 -m venv .venv" in linux + assert ".venv/bin/argus --setup" in linux + + +def test_chinese_readme_matches_platform_install_contracts() -> None: + text = (ROOT / "README.zh-CN.md").read_text(encoding="utf-8") + windows = _section(text, "### Windows 10/11", "### macOS") + macos = _section(text, "### macOS", "### Linux") + linux = _section(text, "### Linux", "### Agent 一键接入") + + assert "pip install --upgrade" in windows + assert "py -m pip install --upgrade" in windows + assert "--force-reinstall" in windows + assert "py -3.11" not in windows + assert "不创建虚拟环境" in windows + assert "uv tool install" in macos + assert "python3 -m venv .venv" in linux + + +def test_agent_install_uses_os_specific_executables() -> None: + text = (ROOT / "docs" / "agent-install.md").read_text(encoding="utf-8") + windows = _section(text, "## Windows 10/11", "## macOS") + macos = _section(text, "## macOS", "## Linux") + linux = _section(text, "## Linux", "## OpenAI-compatible endpoint") + + assert "pip install --upgrade" in windows + assert "py -m pip install --upgrade" in windows + assert "--force-reinstall" in windows + assert "py -3.11" not in windows + assert "-m venv" not in windows + assert "uv tool install" in macos + assert "uv tool install --force" in macos + assert ".venv/bin/argus doctor --deep --advisor auto" in linux + assert "real Agent-turn smoke" in text diff --git a/tests/tools/test_setup_readiness.py b/tests/tools/test_setup_readiness.py index a454a034..f10f9d97 100644 --- a/tests/tools/test_setup_readiness.py +++ b/tests/tools/test_setup_readiness.py @@ -71,10 +71,16 @@ def test_noninteractive_setup_validates_then_persists_without_global_mutation( "10-house-rules.md", "Keep operator-authored policy unchanged.\n", ) + def check(*_args, **kwargs): + assert kwargs["runner_bin"] == "/usr/bin/copilot" + calls.append("check") + return report + + monkeypatch.setattr(setup, "check_backend_readiness", check) monkeypatch.setattr( setup, - "check_backend_readiness", - lambda *_args, **_kwargs: calls.append("check") or report, + "_verify_setup_smoke", + lambda backend, **_kwargs: calls.append(f"smoke:{backend}") or True, ) monkeypatch.setattr( setup, @@ -83,7 +89,7 @@ def test_noninteractive_setup_validates_then_persists_without_global_mutation( ) monkeypatch.setattr( "argus_skill.agent_cli.runner_backend.resolve_runner_bin", - lambda name: "/usr/bin/copilot" if name == "copilot" else None, + lambda name, _configured=None: "/usr/bin/copilot" if name == "copilot" else None, ) monkeypatch.setattr( setup, @@ -107,7 +113,7 @@ def test_noninteractive_setup_validates_then_persists_without_global_mutation( ) assert rc == 0 - assert calls == ["check", "persist"] + assert calls == ["check", "smoke:copilot", "persist"] assert existing_house_rules.read_text(encoding="utf-8") == ( "Keep operator-authored policy unchanged.\n" ) @@ -117,7 +123,7 @@ def test_noninteractive_setup_validates_then_persists_without_global_mutation( def test_missing_pi_is_installed_automatically(monkeypatch) -> None: installed = False - def resolve(name: str): + def resolve(name: str, _configured: str | None = None): return "/usr/bin/pi" if name == "pi" and installed else None def install() -> bool: @@ -134,6 +140,46 @@ def install() -> bool: assert setup._configure_runner_backend("pi") == "pi" +def test_setup_uses_explicit_custom_runner_path(monkeypatch) -> None: + custom = "/opt/agents/claude-custom" + monkeypatch.setenv("ARGUS_SKILL_RUNNER_BIN", custom) + monkeypatch.setattr( + "argus_skill.core.knob_store.read_persisted_knobs", + lambda: { + "ARGUS_SKILL_RUNNER_BACKEND": "codex", + "ARGUS_SKILL_RUNNER_BIN": "/opt/agents/codex-old", + }, + ) + calls: list[tuple[str, str | None]] = [] + + def resolve(name: str, configured: str | None = None): + calls.append((name, configured)) + return configured + + monkeypatch.setattr( + "argus_skill.agent_cli.runner_backend.resolve_runner_bin", + resolve, + ) + + assert setup._resolve_setup_runner_bin( + "claude", + explicit_selection=True, + ) == custom + assert calls == [("claude", custom)] + + +def test_windows_backend_install_hints_are_powershell_safe() -> None: + assert setup._backend_install_hint( + "copilot", + platform_name="nt", + ) == "npm.cmd install -g @github/copilot" + assert "curl" not in setup._backend_install_hint("opencode", platform_name="nt") + assert "https://opencode.ai/docs/#windows" in setup._backend_install_hint( + "opencode", + platform_name="nt", + ) + + def test_noninteractive_api_url_configures_pi_without_backend_flag( tmp_path: Path, monkeypatch, @@ -154,6 +200,7 @@ def test_noninteractive_api_url_configures_pi_without_backend_flag( monkeypatch.setattr(setup, "_pi_models_path", lambda: models_path) monkeypatch.setattr(setup, "_configure_runner_backend", lambda backend: backend) monkeypatch.setattr(setup, "check_backend_readiness", lambda *_a, **_k: report) + monkeypatch.setattr(setup, "_verify_setup_smoke", lambda *_a, **_k: True) monkeypatch.setattr( setup, "persist_validated_profile", lambda _report, **_kwargs: True ) @@ -185,6 +232,64 @@ def test_noninteractive_api_url_configures_pi_without_backend_flag( assert persisted == ["model-x"] +def test_setup_smoke_uses_real_agent_turn(monkeypatch, capsys) -> None: + monkeypatch.setattr( + "argus_skill.agent_cli.runner_backend.resolve_runner_bin", + lambda backend, _configured=None: ( + "/usr/bin/claude" if backend == "claude" else None + ), + ) + captured: dict[str, object] = {} + + def probe(**kwargs): + captured.update(kwargs) + return SimpleNamespace(ok=True, output="ARGUS_SETUP_OK", error="") + + monkeypatch.setattr( + "argus_skill.core.agent_probe.run_read_only_agent_prompt", + probe, + ) + + assert setup._verify_setup_smoke("claude") is True + assert captured["backend"] == "claude" + assert captured["model"] == "" + assert captured["run_label"] == "setup-smoke" + assert "Real Agent turn completed" in capsys.readouterr().out + + +def test_setup_smoke_uses_effective_backend_model(monkeypatch) -> None: + monkeypatch.setenv("ARGUS_SKILL_MANAGER_MODEL", "claude-sonnet-current") + + assert setup._setup_smoke_model("claude", None) == "claude-sonnet-current" + assert setup._setup_smoke_model( + "pi", + ("api-model", Path("/tmp/models.json")), + ) == "api-model" + + +def test_setup_smoke_failure_is_actionable(monkeypatch, capsys) -> None: + monkeypatch.setattr( + "argus_skill.agent_cli.runner_backend.resolve_runner_bin", + lambda backend, _configured=None: ( + "/usr/bin/claude" if backend == "claude" else None + ), + ) + monkeypatch.setattr( + "argus_skill.core.agent_probe.run_read_only_agent_prompt", + lambda **_kwargs: SimpleNamespace( + ok=False, + output="", + error="not authenticated", + ), + ) + + assert setup._verify_setup_smoke("claude") is False + output = capsys.readouterr().out + assert "Step 2" in output + assert "not authenticated" in output + assert "argus doctor --deep --advisor auto" in output + + def test_pi_provider_rejects_non_http_url(tmp_path: Path, monkeypatch) -> None: monkeypatch.setattr( setup,