diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 961eed2..c955470 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: - windows-latest - ubuntu-latest node-version: - - "16" + - "16.20.2" - "24" steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a8b0da..2158331 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,32 @@ 本文件记录面向用户和集成方的重要变化。完整的发布叙事、升级说明和下载入口见对应版本的中文发布说明;实现证据和测试门禁见技术发布说明。 +## [0.5.0] - 2026-08-09 + +### 新增 + +- Web UI 改为零输入自动配对:短时一次性 fragment 换取持久设备凭证,服务端只保存凭证哈希。 +- 新增服务端存储配置,浏览器写操作仅提交 `profileId`;支持命名配置、`--reset-access` 和“忘记此浏览器”。 +- 新增 `--no-open`、SSH 隧道和无桌面环境说明;已有 Web UI 实例会被复用。 + +### 变更 + +- 最低 Node.js 版本明确为 16.20.2,CI 同时覆盖 16.20.2 和当前 LTS。 +- npm 包和所有发布型 .NET 项目统一为 0.5.0。 + +### 修复 + +- 服务固定监听 `127.0.0.1`,并按实际回环 Host/端口校验浏览器 Origin。 +- History 搜索增加 300ms 防抖、Enter 立即搜索、旧请求取消和最新响应守卫;切换会话时显示加载状态。 +- 浏览器打开器不可用或端口已被占用时给出可操作结果,不再以未处理错误退出。 + +### 安全 + +- 匿名首页不再下发写凭证;未配对浏览器不能调用 API 写接口。 +- 一次性配对凭证不可重用,且不进入查询参数、HTML 或服务活动日志。 + +[中文发布说明](docs/release-notes/v0.5.0-zh.md) · [技术发布说明](docs/RELEASE_NOTES_V0.5.0.md) + ## [0.4.1] - 2026-08-08 ### 新增 diff --git a/README.md b/README.md index 5c740c0..c5ccc49 100644 --- a/README.md +++ b/README.md @@ -2,187 +2,197 @@ # codex-provider-sync -### 切换 Provider 后,让 Codex 历史会话重新可见 +### Keep Codex history visible after switching Providers [![CI](https://github.com/Dailin521/codex-provider-sync/actions/workflows/ci.yml/badge.svg)](https://github.com/Dailin521/codex-provider-sync/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/Dailin521/codex-provider-sync)](https://github.com/Dailin521/codex-provider-sync/releases/latest) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) -[![Community](https://img.shields.io/badge/community-LINUX%20DO-2ea043.svg)](https://linux.do/) -[下载 Windows GUI](https://github.com/Dailin521/codex-provider-sync/releases/latest) · 中文 · [English](docs/README_EN.md) +[中文](docs/README_ZH.md) · [日本語](docs/README_JA.md) · [한국어](docs/README_KO.md) · [Web UI guide](docs/README_WEB_UI_ZH.md) -## 什么时候需要它 +## What it is -Codex 切换 `model_provider` 后,旧会话可能从 Desktop 或 `/resume` 中消失。会话通常没有丢失,而是 rollout、SQLite 和项目可见性 metadata 仍指向原 Provider。 +`codex-provider-sync` is a local metadata-consistency tool for Codex. After changing the root `model_provider`, older sessions may still be on disk while rollout files, the SQLite thread index, or project metadata still points to the previous Provider. Codex can then hide those sessions from its list, project view, or `/resume`. -适合使用本工具: +The primary interface is a browser-based Web UI running on localhost. It reuses the same Node.js core service as the CLI and does not reimplement synchronization in the browser. -- 在官方订阅(内部 Provider 为 `openai`)和自定义中转之间切换。 -- 多个配置必须使用不同的 `model_provider`,切换后旧会话不可见。 -- rollout 与 SQLite 中的 Provider 或 model 信息不一致。 -- 希望在配置或 SQLite/WAL 变化后自动重新同步。 +The tool does not sign you in, manage `auth.json`, switch accounts, or modify message bodies. +![alt text](images/README/2026-08-05T03:53:48.708Z.png) +## Quick start: Web UI -如果所有中转都能稳定复用同一个 `model_provider`,并且历史会话始终可见,那么统一 Provider ID 是更简单的方案,不需要额外同步。本工具主要用于无法统一 Provider ID,或需要在官方订阅与自定义 Provider 之间切换的场景。 +Requires Node.js 16.20.2 or newer. -本工具不负责登录、认证或切换账号;请先用原有方式完成 Provider 切换,再执行同步。 +From the repository: -## 它与 Provider 切换工具的关系 +```bash +npm install +npm run web:build +npm run web:start +``` -包括 cc-switch 在内的 Provider 管理工具,主要负责账号、API Key、`auth.json` 或 `config.toml` 的切换,有些工具也提供自己的历史会话处理能力。codex-provider-sync 刻意不接管认证,它专注于切换之后的会话可见性元数据、rollout、SQLite、备份和恢复。 +Or install the CLI globally: -如果你正在使用的切换工具已经能让全部历史会话保持可见,就不需要重复同步。以下情况仍适合使用本工具: +```bash +npm install -g git+https://github.com/Dailin521/codex-provider-sync.git +codex-provider web +``` -- 使用多个切换工具,或先切换后才发现旧会话已经按 Provider 分开。 -- 需要同时核对并修复 rollout、SQLite 和项目可见性,而不只修改配置文件。 -- SQLite Home 与 Codex Home 分开存放,特别是 Windows Codex Home + WSL SQLite Home。 -- 需要可恢复的批量同步、明确的备份记录和事务回滚保护。 +The default address is: -## 它会处理什么 +```text +http://127.0.0.1:8791 +``` -- 同步 `~/.codex/sessions` 和 `~/.codex/archived_sessions` 中的 rollout metadata。 -- 同步 Codex SQLite 线程记录,并支持 SQLite 与 `Codex Home` 分开存放。 -- 修复项目可见性相关路径信息,并在需要时同步相关 model metadata。 -- 每次同步前自动备份,支持恢复和清理旧备份。 -- 大型 rollout 文件在满足条件时原地更新,否则自动使用完整安全重写。 -- CLI `watch` 可监听 `config.toml`、SQLite 及 WAL 变化并自动同步。 +Options: -## 快速使用 +```bash +codex-provider web --no-open # do not open a browser automatically +codex-provider web --port 8792 # use another localhost port +codex-provider web --reset-access # invalidate previously paired browsers +``` -### Windows GUI +The server binds only to `127.0.0.1`. Startup opens a short-lived one-time pairing URL; the browser exchanges it for a persistent device credential, while the server stores only its hash. API writes validate the actual loopback Host/Origin and serialize `sync`, `switch`, `restore`, and `prune`. Storage paths are resolved from server-managed profiles instead of being accepted on every write request. -普通 Windows 用户只需从 [Releases](https://github.com/Dailin521/codex-provider-sync/releases/latest) 下载单文件 GUI: +For a headless server, forward the loopback port and print the one-time pairing link instead of launching a desktop browser: -| 使用场景 | Release 资产 | 更新方式 | -| --- | --- | --- | -| 只需要 Windows GUI | `CodexProviderSync.exe` | 支持软件内自动更新 | -| 脚本、CI 或 AI Agent | `codex-provider-sync-v<版本>-automation-win-x64.zip` | 手动下载更新 | -| GUI 与自动化接口都需要 | `codex-provider-sync-v<版本>-win-x64.zip` | 手动下载更新 | +```bash +ssh -L 8791:127.0.0.1:8791 user@server +codex-provider web --no-open +``` -1. 打开 `CodexProviderSync.exe` -2. 点击“刷新” -3. 选择目标 Provider -4. 点击“立即同步” +The browser opener is best-effort and never terminates the service if `xdg-open` or a desktop session is unavailable. Do not expose this service directly to a LAN or the public Internet. -GUI 会保留备份并显示同步结果。每天首次启动会在后台检查一次稳定版更新,网络查询最多等待 10 秒;也可以随时手动检查。执行日志保存在 `%AppData%\codex-provider-sync\logs`。 +## Web UI features -Windows GUI 支持为每个 Codex Home 单独指定 Windows 文件系统中的 SQLite Home。`\\wsl.localhost\...` 和 `\\wsl$\...` 一类 WSL UNC 路径仅用于安全诊断;GUI 会显示诊断信息并禁用同步和恢复。Windows Codex Home + WSL SQLite Home 场景应在 WSL 内运行 CLI。 +### Overview -项目目前未做 Windows 代码签名,从浏览器下载后可能出现 SmartScreen 提示。请从本项目 Release 下载,并按需核对同版本 SHA-256。 +- Current root Provider and model. +- Rollout distribution under `sessions` and `archived_sessions`. +- SQLite `threads` distribution. +- Rollout/SQLite alignment status. +- Project visibility diagnostics: CWD matches, ranks, and the first-page 50-session limit. +- Warnings for locked rollouts, `encrypted_content`, SQLite repairs, malformed databases, and WSL UNC safety boundaries. -Windows 完整说明见 [README_GUI_ZH.md](docs/README_GUI_ZH.md)。macOS 用户可自行构建 Avalonia 桌面版,分别参见 [中文说明](docs/README_MAC_GUI_ZH.md)和[英文说明](docs/README_MAC_GUI_EN.md)。 +### Chat history -### CLI +The Chat History page reads rollout JSONL files read-only and never changes local data. -CLI 支持 Node.js `16+`: +- Browse sessions and open user/agent messages. +- Search titles, project paths, Providers, and message text. +- Filter by Provider, project, and active/archived state. +- Server-side pagination, 50 sessions per page by default. +- Session details show the most recent 200 readable messages. +- Safe, restricted Markdown rendering with code-block support. +- Raw JSONL, tokens, tool-call arguments, and `encrypted_content` are not returned to the browser. -```bash -npm install -g git+https://github.com/Dailin521/codex-provider-sync.git -codex-provider status -codex-provider sync -``` +### Sync and switch -常用命令: +- **Sync metadata only**: use the current root Provider without changing `config.toml`. +- **Switch Provider and sync**: update the root `model_provider`, then synchronize history. +- Model policy: follow the Provider section, keep the current root model, or set a custom model. +- An explicit confirmation dialog reminds you to close Codex CLI, Codex App, and app-server first. -| 命令 | 用途 | -| --- | --- | -| `codex-provider status` | 检查当前 Provider、rollout、SQLite 和项目可见性 | -| `codex-provider sync` | 将历史会话同步到当前 Provider,不修改登录状态 | -| `codex-provider switch ` | 修改根级 `model_provider` 后执行同步 | -| `codex-provider restore ` | 从指定备份恢复 | -| `codex-provider prune-backups --keep 5` | 只保留最近 5 份托管备份 | -| `codex-provider watch` | 监听配置、SQLite 和 WAL 变化并自动同步 | -| `codex-provider watch --once` | 第一次变化并成功同步后退出 | +### Backups and restore -`switch` 支持 `--model ` 显式设置根级 model,或使用 `--keep-root-model` 只切换 Provider。所有主要命令都支持 `--codex-home ` 和 `--sqlite-home `。 +- Create a metadata v2 backup before every `sync` or `switch`. +- Keep the newest five managed backups by default. +- Restore `config.toml`, SQLite, and rollout metadata independently. +- Show source and target when SQLite Homes differ. +- Require an extra confirmation for SQLite Home relocation and prevent unsafe config/database combinations. -SQLite Home 按以下顺序解析:命令行 override → `config.toml` 根级 `sqlite_home` → `CODEX_SQLITE_HOME` → `/sqlite`。只有最后一种默认布局会继续检查旧路径 `/state_5.sqlite`;一旦显式指定 SQLite Home,就不会回退到 Codex Home 中的旧数据库。 +## CLI for automation and WSL -例如 Codex App 使用 Windows 配置、app-server 与 SQLite 位于 WSL 时,可在 WSL CLI 中直接传入: +The CLI and Web UI call the same `src/service.js` core logic. + +```bash +codex-provider status +codex-provider sync +codex-provider sync --keep 5 +codex-provider sync --provider openai +codex-provider switch apigather +codex-provider switch apigather --model "MiniMax-M3" +codex-provider switch apigather --keep-root-model +codex-provider prune-backups --keep 5 +codex-provider restore C:\Users\you\.codex\backups_state\provider-sync\20260319T042708906Z +codex-provider watch +codex-provider watch --once +``` + +All main commands accept `--codex-home ` and `--sqlite-home `. For a Windows Codex Home with app-server and SQLite in WSL, run the CLI inside WSL: ```bash codex-provider status --codex-home /mnt/c/Users/you/.codex --sqlite-home /home/you/.codex/sqlite codex-provider sync --codex-home /mnt/c/Users/you/.codex --sqlite-home /home/you/.codex/sqlite ``` -`status` 会显示 effective SQLite Home 和来源。显式路径缺少 `state_5.sqlite` 时,状态查询只报告诊断,`sync`、`switch` 和数据库恢复不会偷偷回退到其它位置。默认布局中的数据库被删除时,`restore` 可以根据备份 metadata 在原默认位置重建数据库。 +The v0.4 Windows release also includes an experimental one-shot automation package for scripts and AI agents. Its write operations are dry-run by default and require an explicit plan, digest, and `--apply` before changing data. See [the automation quickstart](docs/AUTOMATION_QUICKSTART_ZH.md) and [the protocol design](docs/ADR-0001-v0.4-automation-architecture.md). + +## Storage and SQLite resolution -### 自动化接口(v0.4 实验性) +SQLite Home precedence is: -Release 提供独立的 Windows 自动化接口包,内含 `CodexProviderSync.Automation.exe`、`automation-protocol-v0.4.schema.json` 和中文快速说明;Windows 完整包也包含这些文件。这个一次性进程接口与 Windows GUI 共用同一套 Application 用例;每次调用只在 stdout 输出一份协议 `0.4` JSON,诊断信息写入 stderr。普通桌面用户不需要下载自动化接口包。 +1. CLI or GUI override. +2. Root-level `sqlite_home` in `config.toml`. +3. `CODEX_SQLITE_HOME`. +4. `/sqlite`. -| 命令 | 用途 | -| --- | --- | -| `describe` | 描述协议能力和安全要求 | -| `status` | 读取状态和诊断 | -| `plan --operation sync\|switch\|restore\|prune` | 为指定写操作创建计划 | -| `sync` | 规划或显式执行同步 | -| `switch` | 规划或显式执行 Provider/model 切换与同步 | -| `restore` | 规划或显式执行备份恢复 | -| `prune` | 规划或显式清理托管备份 | +Only the default layout may check the legacy `/state_5.sqlite`. An explicit, configured, or environment-provided SQLite Home never falls back to another database. -所有写命令默认都是 dry-run,只返回计划,不会修改目标。实际写入必须同时提供 `--apply`、只包含 `plan` 响应中 `data` 对象的计划文件,以及该对象的精确小写 SHA-256 `digest`: +## Safety and limitations -```powershell -.\CodexProviderSync.Automation.exe describe -.\CodexProviderSync.Automation.exe status --codex-home C:\isolated\.codex -.\CodexProviderSync.Automation.exe sync --codex-home C:\isolated\.codex --provider openai -$planResponse = .\CodexProviderSync.Automation.exe plan --operation sync --codex-home C:\isolated\.codex --provider openai | ConvertFrom-Json -$planResponse.data | ConvertTo-Json -Depth 100 -Compress | Set-Content -LiteralPath C:\isolated\sync-plan.json -Encoding utf8NoBOM -$planDigest = $planResponse.data.digest -.\CodexProviderSync.Automation.exe sync --codex-home C:\isolated\.codex --provider openai --apply --plan C:\isolated\sync-plan.json --plan-digest $planDigest +Before each `sync` or `switch`, a backup is created under: + +```text +~/.codex/backups_state/provider-sync/ ``` -计划有有效期、绑定规范化输入和目标状态,并由持久化 ledger 保证只能使用一次;默认 ledger 位于 `\tmp\provider-sync-automation-ledger`。所有路径参数必须是绝对路径,不能穿过符号链接或 reparse point,Automation 也拒绝直接指向或访问 `auth.json`。协议仍处于 pre-1.0 实验阶段,`0.4` 之外不承诺兼容。 +- Messages, titles, authentication, `auth.json`, and `updated_at` are not modified. +- The tool repairs metadata only within the selected Codex Home; it does not copy sessions between devices. +- If SQLite is locked, close Codex CLI, Codex App, and app-server and retry. +- Locked live rollout files are skipped and can be synchronized after the active session ends. +- Sessions containing `encrypted_content` may become visible but still fail to continue or compact across Providers/accounts. +- Windows processes cannot safely operate on SQLite through `\\wsl.localhost\...` or `\\wsl$\...`; use the corresponding Linux path inside WSL. -中文分步示例见 [自动化接口快速开始](docs/AUTOMATION_QUICKSTART_ZH.md)。 +## Desktop GUI status -## 安全与限制 +The Desktop GUI is deprecated and is no longer the recommended or primary interface. Existing Windows/macOS builds remain available for compatibility, but new features—especially Chat History—are implemented in the Web UI first. -每次 `sync` / `switch` 前都会备份到: +Legacy GUI references: -```text -~/.codex/backups_state/provider-sync/ -``` +- [Windows GUI guide](docs/README_GUI_ZH.md) +- [macOS GUI guide](docs/README_MAC_GUI_EN.md) + +## Documentation + +- [中文说明](docs/README_ZH.md) +- [日本語](docs/README_JA.md) +- [한국어](docs/README_KO.md) +- [Web UI guide](docs/README_WEB_UI_ZH.md) +- [Working principle](docs/WORKING_PRINCIPLE_ZH.md) +- [AI / Agent guide](AGENTS.md) +- [Contributing guide](CONTRIBUTING.md) -- 不修改消息历史、会话标题、认证信息、`auth.json` 或 `updated_at`。 -- 不在多台设备之间复制配置或会话文件;它只修复当前 Codex Home 的 metadata。 -- SQLite 被占用时,需要先关闭 Codex、Codex App 和 app-server 后重试。 -- Windows 进程检测到 WSL UNC SQLite Home 时会立即显示专用安全诊断并停止操作。后续操作应进入对应 WSL 发行版,并使用 `/home/...` 形式的 Linux 路径运行 CLI。 -- 新备份使用 metadata v2 记录独立 SQLite Home;恢复到其它 SQLite Home 默认拒绝。CLI 需要同时传入 `--sqlite-home`、`--allow-sqlite-home-relocation` 和 `--no-config`,避免恢复后的 `config.toml` 重新指向原 SQLite Home。 -- 活跃会话锁住 rollout 文件时,工具会跳过该文件并继续处理其它会话;结束活跃会话后可再次同步。 -- 含 `encrypted_content` 的会话跨 Provider/account 后,可能只能恢复列表可见性,继续对话或 compact 仍可能报 `invalid_encrypted_content`。 -- Codex Desktop 首屏目前只显示最近 50 条会话。若 `/resume` 可见但项目侧仍不显示,请查看状态中的 `first page` / `ranks` 诊断;本工具不会修改时间戳来绕过此限制。 - -## 文档 - -- [Windows GUI 说明](docs/README_GUI_ZH.md) -- macOS GUI 说明:[中文](docs/README_MAC_GUI_ZH.md) · [English](docs/README_MAC_GUI_EN.md) -- [v0.4.1 中文发布说明](docs/release-notes/v0.4.1-zh.md) -- [v0.4.0 中文发布说明](docs/release-notes/v0.4.0-zh.md) -- [v0.4.0 技术发布说明](docs/RELEASE_NOTES_V0.4.0.md) -- [更新日志](CHANGELOG.md) -- [自动化接口快速开始](docs/AUTOMATION_QUICKSTART_ZH.md) -- [v0.4 Automation 执行计划](docs/V0.4_AUTOMATION_PLAN.md) -- [English documentation](docs/README_EN.md) -- [AI / Agent 操作指南](AGENTS.md) -- [贡献指南](CONTRIBUTING.md) - -## 开发 +## Development and tests ```bash git clone https://github.com/Dailin521/codex-provider-sync.git cd codex-provider-sync +npm install +npm run web:build npm test -dotnet test desktop/CodexProviderSync.Core.Tests/CodexProviderSync.Core.Tests.csproj -./scripts/test-wsl-unc-safety.sh -pwsh ./scripts/publish-gui.ps1 -pwsh ./scripts/run-windows-gui-e2e.ps1 -./scripts/publish-gui-macos.sh +git diff --check +``` + +To publish the npm package after authenticating with npm: + +```bash +npm run publish:npm -- --dry-run +npm run publish:npm -- --otp 123456 ``` -`test-wsl-unc-safety.sh` 需要从 WSL 运行,并调用 Windows `dotnet.exe` 验证真实 WSL ext4 SQLite 的安全阻断。`run-windows-gui-e2e.ps1` 必须在可见、可交互的 Windows 桌面中运行。v0.4 的实现提交 `7545b5d` 已通过该 gate:40/40 manifest 入口覆盖、53/53 必需场景通过、0 error、0 blocker,且发布 EXE 哈希、真实控件事件、原生对话框、文件/SQLite 差异、重启持久化和 GUI → Application trace 均由证据门禁核验。后续若修改相关实现必须重新运行;隐藏、跳过或直接调用 Application 不能替代真实 GUI PASS。 +The publish script checks the npm login, rebuilds the Web UI, runs tests, previews the package contents, and then publishes the current version. Use `NPM_OTP=123456 npm run publish:npm` when preferred. The OTP is never written to repository files. ## License diff --git a/desktop/CodexProviderSync.App/CodexProviderSync.App.csproj b/desktop/CodexProviderSync.App/CodexProviderSync.App.csproj index 4c9f712..523285c 100644 --- a/desktop/CodexProviderSync.App/CodexProviderSync.App.csproj +++ b/desktop/CodexProviderSync.App/CodexProviderSync.App.csproj @@ -24,9 +24,9 @@ CodexProviderSync Codex Provider Sync Dailin521 - 0.4.1 - 0.4.1.0 - 0.4.1.0 + 0.5.0 + 0.5.0.0 + 0.5.0.0 diff --git a/desktop/CodexProviderSync.Application/CodexProviderSync.Application.csproj b/desktop/CodexProviderSync.Application/CodexProviderSync.Application.csproj index fc42569..446ef02 100644 --- a/desktop/CodexProviderSync.Application/CodexProviderSync.Application.csproj +++ b/desktop/CodexProviderSync.Application/CodexProviderSync.Application.csproj @@ -5,9 +5,9 @@ enable enable false - 0.4.1 - 0.4.1.0 - 0.4.1.0 + 0.5.0 + 0.5.0.0 + 0.5.0.0 diff --git a/desktop/CodexProviderSync.Automation/CodexProviderSync.Automation.csproj b/desktop/CodexProviderSync.Automation/CodexProviderSync.Automation.csproj index aaaa3de..bbdbc8e 100644 --- a/desktop/CodexProviderSync.Automation/CodexProviderSync.Automation.csproj +++ b/desktop/CodexProviderSync.Automation/CodexProviderSync.Automation.csproj @@ -7,9 +7,9 @@ enable CodexProviderSync.Automation CodexProviderSync.Automation - 0.4.1 - 0.4.1.0 - 0.4.1.0 + 0.5.0 + 0.5.0.0 + 0.5.0.0 diff --git a/desktop/CodexProviderSync.Core/CodexProviderSync.Core.csproj b/desktop/CodexProviderSync.Core/CodexProviderSync.Core.csproj index 424e3c2..2c51005 100644 --- a/desktop/CodexProviderSync.Core/CodexProviderSync.Core.csproj +++ b/desktop/CodexProviderSync.Core/CodexProviderSync.Core.csproj @@ -4,9 +4,9 @@ net10.0 enable enable - 0.4.1 - 0.4.1.0 - 0.4.1.0 + 0.5.0 + 0.5.0.0 + 0.5.0.0 diff --git a/desktop/CodexProviderSync.GuiE2E.Tests/ApplicationAndDialogContractTests.cs b/desktop/CodexProviderSync.GuiE2E.Tests/ApplicationAndDialogContractTests.cs index c114784..eba44b7 100644 --- a/desktop/CodexProviderSync.GuiE2E.Tests/ApplicationAndDialogContractTests.cs +++ b/desktop/CodexProviderSync.GuiE2E.Tests/ApplicationAndDialogContractTests.cs @@ -100,7 +100,7 @@ public void Verify_AcceptsExpectedConfirmationAndNoUpdateDialogs() "update-no-update", "#32770", "Codex Provider Sync", - ["当前已是最新版本(v0.4.0)。", "确定"]); + ["当前已是最新版本(v0.5.0)。", "确定"]); Assert.True(sync.Passed, sync.Error); Assert.True(noUpdate.Passed, noUpdate.Error); diff --git a/desktop/CodexProviderSync.GuiE2E/CodexProviderSync.GuiE2E.csproj b/desktop/CodexProviderSync.GuiE2E/CodexProviderSync.GuiE2E.csproj index 4c62f6d..c008ca0 100644 --- a/desktop/CodexProviderSync.GuiE2E/CodexProviderSync.GuiE2E.csproj +++ b/desktop/CodexProviderSync.GuiE2E/CodexProviderSync.GuiE2E.csproj @@ -7,9 +7,9 @@ enable true CodexProviderSync.GuiE2E - 0.4.1 - 0.4.1.0 - 0.4.1.0 + 0.5.0 + 0.5.0.0 + 0.5.0.0 diff --git a/desktop/CodexProviderSync.Mac/CodexProviderSync.Mac.csproj b/desktop/CodexProviderSync.Mac/CodexProviderSync.Mac.csproj index 9c39121..ec3b6aa 100644 --- a/desktop/CodexProviderSync.Mac/CodexProviderSync.Mac.csproj +++ b/desktop/CodexProviderSync.Mac/CodexProviderSync.Mac.csproj @@ -17,9 +17,9 @@ CodexProviderSync Codex Provider Sync Dailin521 - 0.4.1 - 0.4.1.0 - 0.4.1.0 + 0.5.0 + 0.5.0.0 + 0.5.0.0 true diff --git a/docs/README_EN.md b/docs/README_EN.md index 19bc604..02a9fc1 100644 --- a/docs/README_EN.md +++ b/docs/README_EN.md @@ -9,10 +9,12 @@ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](../LICENSE) [![Community](https://img.shields.io/badge/community-LINUX%20DO-2ea043.svg)](https://linux.do/) -[Download Windows GUI](https://github.com/Dailin521/codex-provider-sync/releases/latest) · [Build macOS GUI](README_MAC_GUI_EN.md) · [中文](../README.md) · English +[Web UI](../README.md) · [中文](README_ZH.md) · [日本語](README_JA.md) · [한국어](README_KO.md) · English +> The repository root [README](../README.md) is the canonical English documentation and now focuses on the Web UI. This file is retained as a longer legacy reference. + ## When You Need It After switching `model_provider`, older Codex sessions may disappear from Desktop or `/resume`. The sessions are usually still present, but their rollout, SQLite, or project-visibility metadata still points to the previous Provider. @@ -45,7 +47,9 @@ If your current switcher already keeps all history visible, you do not need to r ## Quick Start -### Windows GUI +### Desktop GUI (deprecated) + +The Desktop GUI is deprecated and is not the recommended interface. Use the local Web UI described in the root README instead. For normal Windows use, download the standalone GUI from [Releases](https://github.com/Dailin521/codex-provider-sync/releases/latest): @@ -70,7 +74,7 @@ See [README_GUI_ZH.md](README_GUI_ZH.md) for the full Windows guide. A self-buil ### CLI -The CLI requires Node.js `16+`: +The CLI requires Node.js `>=16.20.2`: ```bash npm install -g git+https://github.com/Dailin521/codex-provider-sync.git diff --git a/docs/README_JA.md b/docs/README_JA.md new file mode 100644 index 0000000..0530586 --- /dev/null +++ b/docs/README_JA.md @@ -0,0 +1,98 @@ +# codex-provider-sync 日本語ガイド + +`codex-provider-sync` は、Provider の切り替え後に Codex の過去セッションを再び表示できるようにする、ローカル実行のメタデータ整合性ツールです。セッション本体が削除されたのではなく、rollout、SQLite のスレッド索引、プロジェクト metadata が以前の Provider を参照している場合に使用します。 + +現在の推奨インターフェースは localhost Web UI です。CLI は自動化と WSL 環境向けに利用できます。Desktop GUI は非推奨で、互換性のための旧版資料のみ残しています。 + +## クイックスタート:Web UI + +Node.js 16.20.2 以降が必要です。 + +```bash +npm install +npm run web:build +npm run web:start +``` + +またはグローバルにインストールします。 + +```bash +npm install -g git+https://github.com/Dailin521/codex-provider-sync.git +codex-provider web +``` + +既定のアドレス:`http://127.0.0.1:8791` + +```bash +codex-provider web --no-open +codex-provider web --port 8792 +``` + +サービスは `127.0.0.1` のみに bind します。プロセスごとにランダムな API セッショントークンを発行し、Origin を検証します。sync、switch、restore、prune などの書き込み操作は同時に一つだけ実行されます。 + +## Web UI の機能 + +- Overview:現在の Provider、rollout/SQLite 分布、整合性、プロジェクト可視性を確認。 +- Chat History:rollout JSONL を読み取り専用で解析し、ユーザーと agent のメッセージを表示。 +- タイトル、プロジェクト、Provider、メッセージ本文の検索と、active/archived フィルター。 +- 1 ページ 50 セッションのサーバーサイドページング。 +- 詳細画面では最新 200 件の読み取り可能なメッセージを表示し、安全な限定 Markdown とコードブロックをサポート。 +- Sync / Switch:config を変更しない同期、Provider 切り替え後の同期、model 方針の選択。 +- Backups:metadata v2 バックアップの確認、内容別の復元、古いバックアップの削除。 + +Chat History は raw JSONL、token、ツール呼び出し引数、`encrypted_content` をブラウザーへ返しません。 + +## CLI:自動化と WSL + +CLI と Web UI は同じ `src/service.js` コアロジックを使用します。 + +```bash +codex-provider status +codex-provider sync +codex-provider switch apigather +codex-provider switch apigather --model "MiniMax-M3" +codex-provider restore +codex-provider prune-backups --keep 5 +codex-provider watch +``` + +すべての主要コマンドで `--codex-home ` と `--sqlite-home ` を指定できます。Windows の Codex Home と WSL の SQLite を組み合わせる場合は、WSL 内で Linux パスを使って CLI を実行してください。 + +```bash +codex-provider sync \ + --codex-home /mnt/c/Users/you/.codex \ + --sqlite-home /home/you/.codex/sqlite +``` + +## SQLite Home の解決 + +優先順位は CLI/GUI override → `config.toml` の root `sqlite_home` → `CODEX_SQLITE_HOME` → `/sqlite` です。明示的に指定された SQLite Home が存在しない場合、別のデータベースへフォールバックしません。旧 `/state_5.sqlite` を確認できるのは既定レイアウトだけです。 + +## 安全性と制限 + +- sync / switch の前に `~/.codex/backups_state/provider-sync/` へバックアップを作成します。 +- メッセージ本文、タイトル、認証情報、`auth.json`、`updated_at` は変更しません。 +- SQLite がロックされている場合は Codex CLI、Codex App、app-server を終了してから再実行してください。 +- ロック中の rollout はスキップされ、セッション終了後に再同期できます。 +- `encrypted_content` を含む履歴は一覧に表示できても、Provider/account をまたぐと再開や compact に失敗する場合があります。 + +## Desktop GUI の状態 + +Desktop GUI は非推奨です。既存の Windows/macOS 版は互換性のために残っていますが、新機能は Web UI を優先します。 + +- [Web UI 使用説明(中国語)](README_WEB_UI_ZH.md) +- [English README](../README.md) +- [旧 Windows GUI 説明](README_GUI_ZH.md) + +## 開発とテスト + +```bash +npm install +npm run web:build +npm test +git diff --check +``` + +## License + +MIT diff --git a/docs/README_KO.md b/docs/README_KO.md new file mode 100644 index 0000000..28307ef --- /dev/null +++ b/docs/README_KO.md @@ -0,0 +1,98 @@ +# codex-provider-sync 한국어 안내 + +`codex-provider-sync`는 Provider를 변경한 뒤 Codex의 이전 세션을 다시 표시할 수 있도록 돕는 로컬 메타데이터 정합성 도구입니다. 세션 파일이 삭제된 것이 아니라 rollout, SQLite 스레드 인덱스 또는 프로젝트 metadata가 이전 Provider를 가리킬 때 사용합니다. + +현재 권장 인터페이스는 localhost Web UI입니다. CLI는 자동화와 WSL 환경에서 사용합니다. Desktop GUI는 더 이상 권장하지 않으며 호환성을 위한 이전 문서만 유지합니다. + +## 빠른 시작: Web UI + +Node.js 16.20.2 이상이 필요합니다. + +```bash +npm install +npm run web:build +npm run web:start +``` + +또는 전역 설치: + +```bash +npm install -g git+https://github.com/Dailin521/codex-provider-sync.git +codex-provider web +``` + +기본 주소: `http://127.0.0.1:8791` + +```bash +codex-provider web --no-open +codex-provider web --port 8792 +``` + +서비스는 `127.0.0.1`에만 바인딩됩니다. 프로세스마다 임의의 API 세션 토큰을 만들고 Origin을 검증합니다. sync, switch, restore, prune 같은 쓰기 작업은 동시에 하나만 실행됩니다. + +## Web UI 기능 + +- Overview: 현재 Provider, rollout/SQLite 분포, 정합성, 프로젝트 가시성 진단. +- Chat History: rollout JSONL을 읽기 전용으로 분석해 사용자와 agent 메시지를 표시. +- 제목, 프로젝트 경로, Provider, 메시지 본문 검색 및 active/archived 필터. +- 페이지당 기본 50개 세션의 서버 측 페이지네이션. +- 상세 화면에서 최근 200개의 읽을 수 있는 메시지를 표시하고 제한된 안전 Markdown과 코드 블록을 지원. +- Sync / Switch: 설정을 바꾸지 않는 동기화, Provider 전환 후 동기화, model 정책 선택. +- Backups: metadata v2 백업 조회, 내용별 복원, 오래된 백업 정리. + +Chat History는 raw JSONL, token, 도구 호출 인자, `encrypted_content`를 브라우저에 반환하지 않습니다. + +## CLI: 자동화 및 WSL + +CLI와 Web UI는 동일한 `src/service.js` 핵심 로직을 사용합니다. + +```bash +codex-provider status +codex-provider sync +codex-provider switch apigather +codex-provider switch apigather --model "MiniMax-M3" +codex-provider restore +codex-provider prune-backups --keep 5 +codex-provider watch +``` + +주요 명령은 `--codex-home ` 및 `--sqlite-home `를 지원합니다. Windows Codex Home과 WSL SQLite를 함께 사용할 때는 WSL 안에서 Linux 경로로 CLI를 실행하세요. + +```bash +codex-provider sync \ + --codex-home /mnt/c/Users/you/.codex \ + --sqlite-home /home/you/.codex/sqlite +``` + +## SQLite Home 해석 + +우선순위는 CLI/GUI override → `config.toml`의 root `sqlite_home` → `CODEX_SQLITE_HOME` → `/sqlite`입니다. 명시적으로 지정한 SQLite Home이 없으면 다른 데이터베이스로 조용히 fallback하지 않습니다. 기존 `/state_5.sqlite`를 확인하는 것은 기본 레이아웃에서만 허용됩니다. + +## 안전성과 제한 + +- sync / switch 전에 `~/.codex/backups_state/provider-sync/`에 백업을 생성합니다. +- 메시지 본문, 제목, 인증 정보, `auth.json`, `updated_at`은 변경하지 않습니다. +- SQLite가 잠겨 있으면 Codex CLI, Codex App, app-server를 종료한 뒤 다시 실행하세요. +- 잠긴 rollout 파일은 건너뛰며 활성 세션이 끝난 후 다시 동기화할 수 있습니다. +- `encrypted_content`가 포함된 기록은 목록에는 보일 수 있지만 Provider/account를 넘나들면 재개나 compact가 실패할 수 있습니다. + +## Desktop GUI 상태 + +Desktop GUI는 더 이상 권장하지 않습니다. 기존 Windows/macOS 버전은 호환성을 위해 남아 있지만 새 기능은 Web UI를 우선합니다. + +- [Web UI 사용 설명(중국어)](README_WEB_UI_ZH.md) +- [English README](../README.md) +- [기존 Windows GUI 설명](README_GUI_ZH.md) + +## 개발 및 테스트 + +```bash +npm install +npm run web:build +npm test +git diff --check +``` + +## License + +MIT diff --git a/docs/README_WEB_UI_ZH.md b/docs/README_WEB_UI_ZH.md new file mode 100644 index 0000000..27cfd47 --- /dev/null +++ b/docs/README_WEB_UI_ZH.md @@ -0,0 +1,93 @@ +# Web UI 使用说明 + +Web UI 是现有 CLI 和 Desktop GUI 的浏览器界面。它不会在浏览器中重新实现同步算法,而是通过只监听本机回环地址的 Node 服务调用 `src/service.js` 中的同一套核心逻辑。 + +## 启动 + +安装依赖时会自动构建 Web 资源。之后运行: + +```bash +codex-provider web +``` + +默认地址: + +```text +http://127.0.0.1:8791 +``` + +默认会打开系统浏览器。可使用: + +```bash +codex-provider web --port 8792 +codex-provider web --no-open +codex-provider web --reset-access +codex-provider web --codex-home /path/to/.codex --sqlite-home /path/to/sqlite +``` + +从仓库开发时也可以运行: + +```bash +npm install +npm run web:build +npm run web:start +``` + +## 页面功能 + +- 概览:显示当前 Provider、rollout/SQLite 分布、修复项和项目可见性。 +- 聊天记录:从 rollout 文件只读读取会话列表和用户/助手消息,支持搜索、Provider/项目/归档筛选、分页和会话详情。 +- 执行同步:区分“仅同步元数据”和“切换 Provider 并同步”。 +- 切换模型:支持跟随 Provider section、保留根级 model 或显式指定 model。 +- 备份:查看当前 Codex Home 下由本工具管理的备份,并按内容恢复。 +- 恢复保护:SQLite Home 不同时显示来源与目标;迁移数据库时禁止同时恢复旧配置。 +- 活动:显示当前 Web UI 进程中的同步阶段和操作结果。 +- 清理:按保留数量删除较旧的托管备份。 + +## 本地安全边界 + +- 服务只监听 `127.0.0.1`,不会绑定局域网地址。 +- 首页和静态资源不包含 API token。启动时生成高熵、短时、一次性的 `#pair=...` 配对链接;配对后立即清除 fragment。 +- 浏览器把长期设备凭证保存在 `localStorage`,服务端只持久化 SHA-256 哈希。刷新页面和重启服务后仍保持授权;“忘记此浏览器”或 `--reset-access` 会使对应凭证失效。 +- 浏览器写请求必须携带设备凭证,并按实际回环 Host/端口校验 `Origin`;支持 `localhost`、自定义端口和 SSH 隧道两端端口不同的情况。 +- `codexHome` 和 `sqliteHome` 由服务端存储配置管理。普通 API 只提交 `profileId`;新增配置时服务端规范化和验证路径。 +- 写操作串行执行,同一时间只允许一个 sync、switch、restore 或 prune。 +- 恢复只能选择后端枚举出的当前 Codex Home 托管备份,不能提交任意目录路径。 +- Web UI 不能绕过核心层的锁、SQLite Home、WSL UNC、备份和恢复限制。 + +## SSH、无桌面和远程浏览器 + +服务不能直接暴露到公网或局域网。远程机器上使用时,只转发回环端口: + +```bash +ssh -L 8791:127.0.0.1:8791 user@server +``` + +在远程 shell 中启动: + +```bash +codex-provider web --no-open +``` + +命令会输出可点击的一次性配对链接。无桌面或纯 SSH 环境不会强制调用 `xdg-open`;即使浏览器打开失败,服务也会继续运行并输出配对链接。 + +## 与旧版 Desktop GUI 的对应关系 + +Desktop GUI 已弃用。下表仅用于帮助旧用户理解 Web UI 与原操作名称的对应关系: + +| Desktop GUI | Web UI | +| --- | --- | +| Refresh | 读取状态/刷新 | +| Execute,不修改配置 | 仅同步元数据 | +| Execute,同时修改配置 | 切换 Provider 并同步 | +| Model 自动/保留/自定义 | 根级 model 三种策略 | +| Restore Backup | 备份页中的恢复 | +| Clean Old Backups | 清理旧备份 | +| 状态文本框 | 结构化概览、分布和项目表格 | +| 执行日志 | 活动日志页 | + +## 注意事项 + +Web UI 不能替代操作系统级关闭 Codex 的要求。执行同步或恢复前仍应关闭 Codex CLI、Codex App、app-server 和相关终端。 + +如果输出报告锁定的 rollout,操作属于部分成功;会话结束后再次执行同步即可。如果 SQLite 正在使用,核心服务会在修改 rollout 前停止。 diff --git a/docs/README_ZH.md b/docs/README_ZH.md index 0353ed9..41f70a1 100644 --- a/docs/README_ZH.md +++ b/docs/README_ZH.md @@ -1,7 +1,156 @@ -# 中文文档 +# codex-provider-sync 中文说明 -中文项目说明已统一维护在[主 README](../README.md),避免多份文档内容不同步。 +`codex-provider-sync` 是一个本机运行的 Codex 元数据一致性工具。切换根级 `model_provider` 后,历史会话通常仍在磁盘中,但 rollout、SQLite 线程索引或项目路径 metadata 可能仍指向旧 Provider,导致会话从 Codex 列表、项目视图或 `/resume` 中消失。 -- [Windows GUI 说明](README_GUI_ZH.md) -- [macOS GUI 说明](README_MAC_GUI_ZH.md) -- [English documentation](README_EN.md) +项目现在以本地 Web UI 为主要入口,CLI 用于自动化和 WSL 场景。Desktop GUI 已弃用,仅保留兼容性参考。 + +## 快速开始:Web UI + +需要 Node.js 16.20.2 或更高版本。 + +```bash +npm install +npm run web:build +npm run web:start +``` + +或者全局安装: + +```bash +npm install -g git+https://github.com/Dailin521/codex-provider-sync.git +codex-provider web +``` + +默认地址:`http://127.0.0.1:8791` + +```bash +codex-provider web --no-open +codex-provider web --port 8792 +codex-provider web --reset-access +``` + +服务只监听 `127.0.0.1`。启动命令通过短时一次性链接自动配对浏览器,浏览器保存设备凭证,服务端只保存哈希;写操作按实际回环 Host 校验 Origin,并从服务端存储配置解析路径。同步、切换、恢复和清理等写操作会串行执行。 + +## Web UI 功能 + +### 概览 + +- 当前 Provider 和 model。 +- `sessions`、`archived_sessions` rollout 分布。 +- SQLite `threads` 分布和 rollout/SQLite 对齐状态。 +- 项目可见性、CWD 匹配、ranks 和首屏 50 条诊断。 +- locked rollout、`encrypted_content`、SQLite repair、数据库损坏和 WSL UNC 安全提示。 + +### 聊天记录 + +聊天记录页面只读扫描 rollout JSONL,不修改本地数据: + +- 查看会话列表和用户/agent 消息。 +- 搜索标题、项目路径、Provider 和消息正文。 +- 按 Provider、项目、活跃/归档状态筛选。 +- 服务端分页,默认每页 50 个会话。 +- 详情默认显示最近 200 条可读消息。 +- 支持安全的受限 Markdown 和代码块。 +- 不向浏览器返回原始 JSONL、token、工具调用参数或 `encrypted_content`。 + +### 同步与切换 + +- **仅同步元数据**:使用当前根级 Provider,不修改 `config.toml`。 +- **切换 Provider 并同步**:更新根级 `model_provider` 后同步历史元数据。 +- model 策略:跟随 Provider 配置、保留当前根级 model 或自定义 model。 +- 执行前确认关闭 Codex CLI、Codex App 和 app-server。 + +### 备份与恢复 + +- 每次 sync / switch 前创建 metadata v2 备份。 +- 默认保留最近 5 份托管备份。 +- 可分别恢复 config、SQLite 和 rollout metadata。 +- SQLite Home 不同时显示来源与目标。 +- SQLite Home relocation 需要额外确认,并禁止不安全的 config/database 组合。 + +## CLI:自动化和 WSL + +CLI 与 Web UI 复用相同的 `src/service.js` 核心逻辑: + +```bash +codex-provider status +codex-provider sync +codex-provider sync --keep 5 +codex-provider sync --provider openai +codex-provider switch apigather +codex-provider switch apigather --model "MiniMax-M3" +codex-provider switch apigather --keep-root-model +codex-provider prune-backups --keep 5 +codex-provider restore C:\Users\you\.codex\backups_state\provider-sync\20260319T042708906Z +codex-provider watch +codex-provider watch --once +``` + +指定 Codex Home 或 SQLite Home: + +```bash +codex-provider status --codex-home C:\Users\you\.codex +codex-provider sync --codex-home C:\Users\you\.codex --sqlite-home C:\Users\you\.codex\sqlite +``` + +Windows Codex Home + WSL SQLite 时,在 WSL 内执行: + +```bash +codex-provider status --codex-home /mnt/c/Users/you/.codex --sqlite-home /home/you/.codex/sqlite +codex-provider sync --codex-home /mnt/c/Users/you/.codex --sqlite-home /home/you/.codex/sqlite +``` + +## SQLite Home 解析 + +优先级为:CLI/GUI override → `config.toml` 根级 `sqlite_home` → `CODEX_SQLITE_HOME` → `/sqlite`。 + +只有默认布局允许检查旧路径 `/state_5.sqlite`。显式、配置或环境变量指定的 SQLite Home 缺少数据库时,不会回退到其它路径。 + +## 安全与限制 + +同步和切换前的备份位置: + +```text +~/.codex/backups_state/provider-sync/ +``` + +- 不修改消息正文、会话标题、认证信息、`auth.json` 或 `updated_at`。 +- 只修复当前 Codex Home 的 metadata,不在设备之间复制会话。 +- SQLite 被占用时先关闭 Codex CLI、Codex App 和 app-server。 +- locked rollout 会跳过,活动会话结束后可重新同步。 +- `encrypted_content` 会话可能恢复列表可见性,但跨 Provider/account 后继续对话或 compact 仍可能失败。 +- Windows 不能安全通过 `\\wsl.localhost\...` 或 `\\wsl$\...` 操作 SQLite,应在 WSL 内使用 Linux 路径。 + +## Desktop GUI 状态 + +Desktop GUI 已弃用,不再作为推荐入口。现有 Windows/macOS 版本仅保留兼容性参考;新功能优先在 Web UI 中实现。 + +- [Windows GUI 旧版说明](README_GUI_ZH.md) +- [macOS GUI 旧版说明](README_MAC_GUI_ZH.md) +- [Web UI 使用说明](README_WEB_UI_ZH.md) +- [工作原理与落盘机制](WORKING_PRINCIPLE_ZH.md) +- [English README](../README.md) + +## 开发与测试 + +```bash +npm install +npm run web:build +npm test +git diff --check +``` + +### 发布 npm package + +登录 npm 后,可以使用仓库自带的跨平台发布脚本: + +```bash +npm run publish:npm -- --dry-run +npm run publish:npm -- --otp 123456 +``` + +脚本会依次检查 npm 登录、构建 Web UI、运行测试、预览包内容,然后发布当前版本。也可以使用 `NPM_OTP=123456 npm run publish:npm` 传入一次性验证码;OTP 不会写入仓库文件。 + +## License + +MIT diff --git a/docs/RELEASE_NOTES_V0.5.0.md b/docs/RELEASE_NOTES_V0.5.0.md new file mode 100644 index 0000000..3319db2 --- /dev/null +++ b/docs/RELEASE_NOTES_V0.5.0.md @@ -0,0 +1,11 @@ +# v0.5.0 Technical Release Notes + +v0.5.0 hardens the localhost Web UI introduced in PR #73. The browser now pairs through a high-entropy, short-lived, single-use URL fragment and receives a persistent device credential. The service persists only credential hashes and resolves all operational storage paths from server-managed profiles. + +The HTTP listener remains restricted to `127.0.0.1`. Browser writes require a paired device credential and an Origin matching the request's actual loopback Host and port, including `localhost`, custom ports, and SSH-forwarded ports. The service is not intended for LAN or public exposure. + +History search now waits 300ms after typing, searches immediately on Enter, aborts superseded list/detail requests, and allows only the latest response to update the view. No SQLite or full-text History index is introduced. + +The supported runtime floor is Node.js 16.20.2. CI covers 16.20.2 and the current LTS, including dependency installation, Web build, and the full Node test suite. npm and all shipped .NET projects use version 0.5.0. + +Validation covers anonymous-page isolation, device authorization, one-time pairing, credential persistence/reset, dynamic loopback Origin checks, loopback-only binding, server-managed profiles, request supersession, Web build, Node tests, and release-version consistency. diff --git a/docs/WORKING_PRINCIPLE_ZH.md b/docs/WORKING_PRINCIPLE_ZH.md new file mode 100644 index 0000000..3133193 --- /dev/null +++ b/docs/WORKING_PRINCIPLE_ZH.md @@ -0,0 +1,737 @@ +# codex-provider-sync 工作原理与落盘机制 + +## 1. 项目定位 + +`codex-provider-sync` 不是用于恢复已经被删除的聊天内容,也不负责登录、认证或切换账号。它是一个 Codex 会话元数据一致性修复工具。 + +当用户切换根级 `model_provider` 后,历史会话的消息内容通常仍保存在磁盘中,但 rollout 文件、SQLite 线程索引或 Desktop 项目路径元数据仍然指向旧 Provider。Codex 在构建会话列表、执行 `/resume` 或按项目筛选会话时,可能因此不再展示这些历史会话。 + +本项目通过同时修复以下数据,使历史会话重新满足当前 Codex 配置的可见性条件: + +- `~/.codex/config.toml` +- `~/.codex/sessions/**/rollout-*.jsonl` +- `~/.codex/archived_sessions/**/rollout-*.jsonl` +- Codex `state_5.sqlite` 中的 `threads` 表 +- `~/.codex/.codex-global-state.json` + +可以把它概括为: + +```text +保留原始会话内容 + + +重新对齐 Provider 和 model 元数据 + + +修复 SQLite 索引与项目路径 + + +通过备份、事务和补偿恢复降低写入风险 +``` + +## 2. 历史会话为什么会不可见 + +一条 Codex 会话的信息并不只存在于一个文件中,而是分散在多个存储层: + +| 数据位置 | 主要用途 | 本项目关注的字段 | +| --- | --- | --- | +| `config.toml` | 当前 Codex Provider 和模型配置 | 根级 `model_provider`、`model`、`sqlite_home` | +| `sessions` | 活跃会话的 rollout 事件历史 | `session_meta.payload.model_provider`、`turn_context.payload.model` | +| `archived_sessions` | 已归档会话的 rollout 事件历史 | 同上 | +| `state_5.sqlite` | 会话列表、索引和筛选依据 | `threads.model_provider`、`model`、`has_user_event`、`cwd` | +| `.codex-global-state.json` | Desktop 的项目和工作区状态 | workspace roots、项目顺序、路径映射 | + +例如当前配置已经切换为: + +```toml +model_provider = "openai" +``` + +但旧 rollout 首行仍然是: + +```json +{"type":"session_meta","payload":{"id":"thread-id","model_provider":"apigather"}} +``` + +同时 SQLite 中仍然保存: + +```text +threads.model_provider = "apigather" +``` + +这时消息正文虽然还在,Codex 的 Provider 过滤、会话索引或项目路径匹配仍可能排除这条记录。项目所做的不是重建消息,而是将这些元数据重新对齐。 + +## 3. 核心数据来源 + +### 3.1 Codex Home + +默认 Codex Home 是: + +```text +~/.codex +``` + +也可以通过以下方式覆盖: + +- CLI 的 `--codex-home` +- 环境变量 `CODEX_HOME` + +### 3.2 当前 Provider + +`sync` 从 `config.toml` 根级读取 `model_provider`。如果根级字段不存在,则使用内置默认值 `openai`。 + +工具只读取第一个 TOML section 之前的根级字段,不会把下面这种 Provider section 内的配置误认为当前根级配置: + +```toml +model_provider = "apigather" +model = "MiniMax-M3" + +[model_providers.apigather] +model = "provider-default-model" +base_url = "https://example.com" +``` + +相关实现位于 [`src/config-file.js`](../src/config-file.js)。 + +### 3.3 SQLite Home 和数据库选择 + +SQLite Home 按以下优先级解析: + +1. CLI 或 GUI 显式覆盖 +2. `config.toml` 根级 `sqlite_home` +3. `CODEX_SQLITE_HOME` +4. `/sqlite` + +只有第 4 种默认布局允许继续检查旧位置: + +```text +/state_5.sqlite +``` + +如果 SQLite Home 来自显式参数、配置或环境变量,而指定位置缺少 `state_5.sqlite`,工具会报错或显示诊断,不会回退到另一个数据库。这样可以避免修改与当前 Codex 实例无关的状态库。 + +默认布局下如果新旧两个数据库都存在,工具会综合比较: + +- 数据库 thread 数量与 rollout 文件数量的距离 +- thread 总数 +- 最新 thread 时间戳 +- 数据库文件修改时间 +- 候选路径优先级 + +然后选择最可能对应当前 Codex 状态的数据库。相关实现位于 [`src/storage-layout.js`](../src/storage-layout.js) 和 [`src/sqlite-state.js`](../src/sqlite-state.js)。 + +### 3.4 Windows 与 WSL SQLite + +Windows 进程不能安全地通过以下 WSL UNC 路径直接操作 SQLite: + +```text +\\wsl.localhost\... +\\wsl$\... +``` + +这些路径在 Windows GUI 和 CLI 中只用于安全诊断。实际 SQLite 操作需要进入对应 WSL 发行版,使用 Linux 路径运行 CLI,例如: + +```bash +codex-provider sync \ + --codex-home /mnt/c/Users/you/.codex \ + --sqlite-home /home/you/.codex/sqlite +``` + +## 4. 一次同步的完整流程 + +一次 `codex-provider sync` 可以概括为: + +```text +读取 config.toml + │ + ├─确定目标 model_provider + ├─读取根级 model + └─解析 SQLite Home + │ + ▼ +扫描 sessions 和 archived_sessions + │ + ├─统计 rollout Provider 分布 + ├─生成需要修改的文件清单 + ├─提取 thread id、cwd 和用户消息标记 + ├─检查 turn_context.model + └─检测 locked 文件和 encrypted_content + │ + ▼ +检查 rollout 文件锁和 SQLite 可写性 + │ + ▼ +创建同步前备份 + │ + ▼ +BEGIN IMMEDIATE + │ + ├─更新 SQLite threads 元数据 + ├─重写可写的 rollout 元数据 + ├─修复 Desktop workspace roots + └─COMMIT + │ + ▼ +清理旧的托管备份,默认保留最近 5 份 +``` + +主编排逻辑位于 [`src/service.js`](../src/service.js)。 + +## 5. Rollout 扫描与修复 + +### 5.1 扫描范围 + +工具递归扫描: + +```text +~/.codex/sessions/**/rollout-*.jsonl +~/.codex/archived_sessions/**/rollout-*.jsonl +``` + +每个 rollout 是一个 JSON Lines 文件。首行通常是 `session_meta`: + +```json +{ + "type": "session_meta", + "payload": { + "id": "thread-id", + "cwd": "D:\\project", + "model_provider": "apigather" + } +} +``` + +工具只有在首行能够解析为合法 `session_meta` 时才处理该文件。 + +### 5.2 扫描时收集的信息 + +工具会从 rollout 中收集: + +- 当前 `model_provider` +- thread ID +- 会话工作目录 `cwd` +- 是否出现用户消息 +- 是否包含 `encrypted_content` +- 所有 `turn_context` 事件中的模型字段 +- 文件大小、mtime、换行格式和首行偏移 + +这些信息用于生成内存中的变更计划,扫描阶段本身不会修改文件。 + +### 5.3 Provider 元数据修复 + +如果 rollout 中的 Provider 与目标 Provider 不一致,工具会把首行: + +```json +"model_provider": "apigather" +``` + +改成: + +```json +"model_provider": "openai" +``` + +只修改 `session_meta` 元数据,不修改后续消息、工具调用、标题或时间戳。 + +### 5.4 model 元数据修复 + +如果当前根级 `model` 存在,工具还会检查并重写所有 `turn_context` 事件中的 `model` 字段,包括嵌套的协作模式模型字段: + +```json +{ + "type": "turn_context", + "payload": { + "model": "MiniMax-M3", + "collaboration_mode": { + "settings": { + "model": "MiniMax-M3" + } + } + } +} +``` + +即使 Provider 已经正确,只要 `turn_context.model` 与目标模型不一致,也会产生一次“仅模型变更”。这是为了让旧会话在 Codex UI 中显示当前有效模型。 + +### 5.5 大文件处理 + +rollout 可能达到数十 MB,单条 `turn_context` 也可能因 `developer_instructions` 等内容超过 64 KB。因此工具采用流式扫描和流式重写,不会为了修改一个字段而把整个文件加载到内存或完整执行 `JSON.parse`/`JSON.stringify`。 + +这样可以降低以下风险: + +- 大文件占用过多内存 +- 重新序列化改变大量无关字节 +- 复杂转义字符串被意外改写 +- 工具输出或 opaque payload 被破坏 + +## 6. Rollout 的落盘策略 + +Rollout 的 Provider 修改有两种落盘方式。 + +### 6.1 等长原地覆盖 + +如果旧 Provider 和新 Provider 的 JSON 编码后 UTF-8 字节长度相同,工具会: + +1. 以读写方式打开原 rollout +2. 再次验证文件大小和 mtime +3. 定位首行 `model_provider` 的字节偏移 +4. 直接覆盖对应字节 +5. 调用文件同步操作 + +这种方式不需要复制大型文件。 + +如果原地覆盖过程中失败,工具会尝试把原字节写回,避免留下部分覆盖结果。 + +### 6.2 临时文件安全重写 + +如果 Provider 字节长度不同,或者不满足原地覆盖条件,工具会: + +1. 创建同目录临时文件 +2. 写入更新后的首行 +3. 保留原始 LF 或 CRLF 分隔符 +4. 从原文件首行之后的位置开始流式复制剩余内容 +5. 再次验证原文件在处理期间没有变化 +6. 将临时文件重命名为原文件 + +### 6.3 `turn_context.model` 重写 + +模型字段通过另一遍逐行流式处理完成。只修改 `type = "turn_context"` 的行,并替换该行内所有符合条件的 `model` 字段。 + +工具会保留: + +- 原有 LF/CRLF +- 原有末尾换行状态 +- 原始文件 mtime +- 非 `turn_context` 行的内容 + +### 6.4 并发变更检测 + +扫描阶段会记录文件大小和 mtime。正式写入前和替换临时文件前都会重新检查。 + +如果 Codex 在此期间追加了新内容,快照会失配,工具会跳过该 rollout,而不是覆盖最新内容。活跃会话锁住文件时,该文件也会被列入 `Skipped locked rollout files`。 + +相关实现位于 [`src/session-files.js`](../src/session-files.js)。 + +## 7. SQLite 修复与落盘 + +### 7.1 写入前检查 + +在备份和修改 rollout 之前,工具先尝试: + +```sql +BEGIN IMMEDIATE; +ROLLBACK; +``` + +这用于验证目标数据库是否可写,以及是否能取得写锁。 + +如果出现 `state_5.sqlite is currently in use`,同步在修改 rollout 之前停止。用户需要关闭 Codex、Codex App 和 app-server,再重新执行相同命令。 + +### 7.2 更新 Provider 和模型 + +实际同步使用 SQLite 事务: + +```sql +BEGIN IMMEDIATE; + +UPDATE threads +SET model_provider = :target_provider +WHERE COALESCE(model_provider, '') <> :target_provider; + +COMMIT; +``` + +如果指定了目标模型,且当前 schema 存在 `model` 列,则相当于: + +```sql +UPDATE threads +SET model_provider = :target_provider, + model = :target_model +WHERE COALESCE(model_provider, '') <> :target_provider + OR COALESCE(model, '') <> :target_model; +``` + +### 7.3 修复 `has_user_event` + +扫描 rollout 时,如果工具确认某个 thread 存在用户消息,而 SQLite 中存在 `has_user_event` 列,则执行等价更新: + +```sql +UPDATE threads +SET has_user_event = 1 +WHERE id = :thread_id + AND COALESCE(has_user_event, 0) <> 1; +``` + +这可以修复由于标记不正确造成的会话可见性问题。 + +### 7.4 修复 `cwd` + +工具以 rollout 首行的 `session_meta.payload.cwd` 为依据,修复对应 SQLite thread 的 `cwd`: + +```sql +UPDATE threads +SET cwd = :rollout_cwd +WHERE id = :thread_id + AND COALESCE(cwd, '') <> :rollout_cwd; +``` + +Windows 扩展路径会规范为 Desktop 更容易匹配的形式,例如: + +```text +\\?\D:\project +``` + +规范为: + +```text +D:\project +``` + +### 7.5 SQLite 真正写入磁盘的位置 + +工具提交事务后,SQLite 自己负责持久化。根据数据库日志模式,修改可能先进入: + +```text +state_5.sqlite-wal +``` + +之后再由 SQLite checkpoint 合并到: + +```text +state_5.sqlite +``` + +因此备份时工具会同时复制主数据库、`-wal` 和 `-shm` 文件(如果存在),不能只复制主数据库。 + +相关实现位于 [`src/sqlite-state.js`](../src/sqlite-state.js) 和 [`src/sqlite.js`](../src/sqlite.js)。 + +## 8. Desktop 项目可见性修复 + +有些会话可以通过 `/resume` 找到,但在 Desktop 的某个项目下不显示。这通常不是 Provider 的唯一问题,还可能是以下路径表示不一致: + +```text +\\?\D:\GitHubProject\demo +``` + +与: + +```text +D:\GitHubProject\demo +``` + +工具读取 SQLite 中 thread 的 `cwd` 分布,并规范化 `.codex-global-state.json` 中的: + +- `electron-saved-workspace-roots` +- `project-order` +- `active-workspace-roots` +- `electron-workspace-root-labels` +- `open-in-target-preferences.perPath` + +更新时会同时写入: + +```text +~/.codex/.codex-global-state.json +~/.codex/.codex-global-state.json.bak +``` + +`status` 还会计算每个项目的会话数量、全局排序 rank、前 50 条首屏命中数和路径精确匹配情况。工具不会修改 `updated_at` 将旧会话强行顶到首屏。 + +相关实现位于 [`src/workspace-roots.js`](../src/workspace-roots.js)。 + +## 9. 备份的落盘内容 + +每次 `sync` 或 `switch` 在正式修改前都会创建备份: + +```text +~/.codex/backups_state/provider-sync// +``` + +典型内容如下: + +```text +/ +├── metadata.json +├── config.toml +├── session-meta-backup.json +├── .codex-global-state.json +├── .codex-global-state.json.bak +└── db/ + └── sqlite-home/ + ├── state_5.sqlite + ├── state_5.sqlite-wal + └── state_5.sqlite-shm +``` + +### 9.1 `metadata.json` + +记录: + +- metadata 版本 +- 备份命名空间 +- Codex Home +- SQLite Home +- 目标 Provider +- 创建时间 +- 已复制的 SQLite 文件 +- 计划或实际修改的 rollout 数量 + +### 9.2 `session-meta-backup.json` + +Rollout 通常不会整文件复制。工具只记录恢复所需的元数据: + +- rollout 的绝对路径 +- 原始首行 +- 原始换行分隔符 +- 原始 mtime +- 原始 `turn_context.model` 值及其行位置 +- 是否属于仅模型变更 + +这样做的好处是:恢复时只撤销工具改过的 metadata,不会把同步之后新追加的聊天消息一并删除。 + +### 9.3 自动保留策略 + +默认只保留最近 5 份由本工具创建的托管备份。可以使用: + +```bash +codex-provider sync --keep 10 +codex-provider prune-backups --keep 5 +``` + +备份清理只处理 `backups_state/provider-sync` 下带有正确 metadata 命名空间的目录,不会删除其它备份。 + +相关实现位于 [`src/backup.js`](../src/backup.js)。 + +## 10. 原子性、事务和失败恢复 + +这个工具同时修改 SQLite 和普通文件系统文件。二者无法加入同一个真正的跨存储原子事务,因此项目使用以下组合: + +```text +进程级互斥锁 + + +修改前备份 + + +SQLite 事务 + + +rollout 并发快照检查 + + +失败后的补偿式文件恢复 +``` + +### 10.1 进程级互斥锁 + +执行 `sync`、`switch`、`restore` 或备份清理时,工具会在 Codex Home 的 `tmp` 目录下创建锁目录,并写入: + +- 当前 PID +- 启动时间 +- 操作名称 +- 当前工作目录 + +这可以防止两个本工具实例同时修改同一份 Codex 状态。实现位于 [`src/locking.js`](../src/locking.js)。 + +### 10.2 正常提交路径 + +正常情况下的写入顺序是: + +```text +1. 扫描并生成内存变更计划 +2. 检查 rollout 锁定状态 +3. 验证 SQLite 可写 +4. 将原状态备份落盘 +5. 打开 SQLite BEGIN IMMEDIATE 事务 +6. 更新 SQLite threads +7. 重写可写 rollout +8. 更新 global state +9. COMMIT SQLite +10. 清理旧备份 +``` + +### 10.3 失败路径 + +如果事务打开后的某一步失败: + +1. SQLite 执行 `ROLLBACK` +2. 已经修改的 rollout 根据备份 manifest 恢复 +3. 已经修改的 global state 从备份恢复 +4. `switch` 如果已经修改 `config.toml`,还会恢复原配置 +5. 如果补偿恢复本身失败,错误信息会同时报告原始错误和恢复错误 + +因此它不是一个理论上的全局原子事务,而是“SQLite 原子事务 + 普通文件补偿恢复”。 + +## 11. `sync`、`switch`、`restore` 和 `watch` + +### 11.1 `status` + +```bash +codex-provider status +``` + +只读检查: + +- 当前 Provider +- rollout Provider 分布 +- SQLite Provider 分布 +- SQLite 实际路径和来源 +- 待修复的 `has_user_event`、`cwd` +- 锁定 rollout +- `encrypted_content` +- 项目会话 rank 和首屏可见性 +- 备份数量和空间占用 + +### 11.2 `sync` + +```bash +codex-provider sync +``` + +使用当前根级 `model_provider` 和 `model` 对齐历史会话。它不修改登录状态,也不管理 `auth.json`。 + +### 11.3 `switch` + +```bash +codex-provider switch apigather +``` + +在 Provider 已存在于 `config.toml` 的前提下: + +1. 计算新的根级 Provider/model 配置 +2. 完成同步前备份 +3. 修改 `config.toml` +4. 执行与 `sync` 相同的元数据修复流程 +5. 失败时恢复原配置 + +模型选择规则: + +- `--model `:显式设置根级 model +- `--keep-root-model`:只切换 Provider,不改根级 model +- 默认:尝试采用目标 Provider section 中的 `model` + +### 11.4 `restore` + +```bash +codex-provider restore +``` + +可以恢复: + +- `config.toml` +- SQLite 数据库及 sidecar 文件 +- rollout metadata +- global state + +也可以通过 `--no-config`、`--no-db` 或 `--no-sessions` 排除部分内容。 + +metadata v2 备份会记录原 SQLite Home。恢复到不同 SQLite Home 默认被拒绝;CLI 必须显式提供目标 SQLite Home、允许 relocation,并禁止同时恢复旧配置,以免旧配置再次指向原数据库。 + +### 11.5 `watch` + +```bash +codex-provider watch +``` + +监听以下变化: + +- `config.toml` +- `state_5.sqlite` +- `state_5.sqlite-wal` +- `state_5.sqlite-shm` + +事件经过默认 750ms 防抖后触发同步。SQLite 临时忙碌会跳过本次并等待后续事件;连续出现非 busy 错误时,watcher 会在达到阈值后退出,避免无限刷错误日志。 + +实现位于 [`src/watch.js`](../src/watch.js)。 + +## 12. GUI 与 CLI 架构 + +仓库包含两套用户入口: + +- Node.js CLI +- Windows/macOS 桌面 GUI + +CLI 入口是 [`src/cli.js`](../src/cli.js),主要业务逻辑位于 [`src/service.js`](../src/service.js)。 + +桌面 GUI 不是简单启动 Node CLI,而是在 `desktop/CodexProviderSync.Core` 中用 C# 实现了相同的核心流程,包括: + +- 配置读取和 Provider 发现 +- SQLite Home 解析 +- rollout 扫描与重写 +- SQLite 事务 +- global state 修复 +- 备份和恢复 +- 锁定文件与 WSL UNC 安全检查 + +C# 主编排逻辑位于 [`desktop/CodexProviderSync.Core/CodexSyncService.cs`](../desktop/CodexProviderSync.Core/CodexSyncService.cs)。 + +## 13. 明确不会修改的内容 + +正常同步不会修改: + +- 用户消息正文 +- assistant 消息正文 +- 工具调用内容 +- 会话标题 +- `updated_at` +- 登录状态 +- `auth.json` +- Provider 凭据 +- 账号认证信息 + +它也不会在不同设备之间复制会话文件,只修复当前 Codex Home 中已有数据的元信息。 + +## 14. 限制与边界情况 + +### 14.1 锁定的 rollout + +活跃会话可能正在持有 rollout 文件。工具会跳过该文件并继续同步其它可写文件及 SQLite,因此结果可能是部分成功。 + +会话结束后再次运行: + +```bash +codex-provider sync +``` + +即可尝试完成剩余重写。 + +### 14.2 锁定的 SQLite + +SQLite 无法取得写锁时,同步会在修改 rollout 之前停止。关闭 Codex、Codex App 和 app-server 后重试。 + +### 14.3 `encrypted_content` + +含有 `encrypted_content` 的历史会话可能与原 Provider、账号或密钥上下文绑定。 + +本工具能够修复列表可见性元数据,但不能重新加密或解密这些内容。跨 Provider/account 后,继续会话或执行 compact 仍可能出现: + +```text +invalid_encrypted_content +``` + +### 14.4 Desktop 首屏限制 + +Codex Desktop 当前可能只加载最近 50 条会话。即使 Provider 和路径都已修复,较旧的会话也可能不在首屏。`status` 会提供 rank 诊断,但工具不会篡改时间戳绕过该限制。 + +## 15. 最终总结 + +这个仓库的核心不是“复制聊天记录”,而是让 Codex 对同一条会话的多个数据视图重新一致: + +```text +config.toml 当前 Provider/model + │ + ▼ +rollout session_meta 与 turn_context + │ + ▼ +SQLite threads 索引 + │ + ▼ +Desktop workspace/project metadata +``` + +落盘层面,它采用: + +```text +先扫描 + → 先验证写锁 + → 先备份 + → SQLite 事务 + → rollout/global state 文件写入 + → 事务提交 + → 失败时补偿恢复 +``` + +因此,它是一套针对 Codex 会话 Provider 可见性问题的、有备份和回滚能力的元数据同步机制。 diff --git a/docs/release-notes/v0.5.0-zh.md b/docs/release-notes/v0.5.0-zh.md new file mode 100644 index 0000000..b899e1b --- /dev/null +++ b/docs/release-notes/v0.5.0-zh.md @@ -0,0 +1,32 @@ + + +> v0.5.0 集中修复 Web UI 的本地认证、路径边界和 History 请求竞态:浏览器零输入自动配对,服务端只保存设备凭证哈希,所有写路径通过命名配置解析。 + +## 📦 下载 + +发布后可从 GitHub Releases 下载单文件 GUI、自动化接口包或完整 Windows 包。Windows 可执行文件仍可能触发 SmartScreen;请只从项目 Release 下载,并核对随包提供的 SHA-256。 + +## ⬆️ 升级说明 + +Node CLI 的最低版本现在是 Node.js 16.20.2。升级不需要迁移 Codex rollout、SQLite 或备份;首次运行 `codex-provider web` 会自动打开一次性配对链接。需要撤销旧浏览器授权时运行 `codex-provider web --reset-access`。 + +## 🛡 安全保障 + +- 首页不再包含 API token,一次性配对材料只出现在 URL fragment,不进入查询参数、HTML 或服务活动日志。 +- 服务只监听 `127.0.0.1`,浏览器写请求同时校验设备凭证和实际回环 Origin。 +- 浏览器保存设备凭证,服务端只持久化 SHA-256 哈希;存储路径由服务端 profile 管理。 +- 工具仍不读取或修改 `auth.json`,写入前的备份、事务和回滚机制保持不变。 + +## ⚠️ 重要说明 + +- 不要把 Web UI 直接暴露到公网或局域网;远程使用请通过 SSH 回环隧道。 +- 工具不会修改线程 `updated_at`,也不会改变历史排序。 +- 跨账号或 Provider 的 `encrypted_content` 仍可能无法继续解密或对话。 +- Windows 下的 WSL UNC SQLite Home 仍是诊断边界;写操作应在 WSL 内使用 Linux 路径执行。 + +## 🔍 验证结果 + +- Node.js 16.20.2 和当前 LTS:依赖安装、Web 构建和完整 Node 测试。 +- 认证:匿名首页、无设备凭证、一次性凭证重用、刷新/重启保持授权、reset 失效。 +- 网络:非法 Origin、localhost/自定义端口/SSH 转发 Host、只监听回环地址。 +- 行为:History 300ms 防抖、取消旧请求、只接收最新响应,以及 0.5.0 版本一致性。 diff --git a/images/README/2026-08-05T03:53:48.708Z.png b/images/README/2026-08-05T03:53:48.708Z.png new file mode 100644 index 0000000..511cf82 Binary files /dev/null and b/images/README/2026-08-05T03:53:48.708Z.png differ diff --git a/package-lock.json b/package-lock.json index ce490d8..3f26e9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,822 @@ { "name": "codex-provider-sync", - "version": "0.4.1", + "version": "0.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codex-provider-sync", - "version": "0.4.1", + "version": "0.5.0", "license": "MIT", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, "bin": { "codex-provider": "src/cli.js" }, + "devDependencies": { + "@vitejs/plugin-react": "^4.3.4", + "vite": "^4.5.14" + }, "engines": { - "node": ">=16.0.0" + "node": ">=16.20.2" }, "optionalDependencies": { "better-sqlite3": "8.7.0" } }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", + "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.0", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -38,6 +837,19 @@ ], "optional": true }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.12", + "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.12.tgz", + "integrity": "sha512-r7WnVImvVCeFpf2DOXfy41aPWzeNg3H/A2X4dKmy1QL0MSyyk/e7z8ihJ3N6Nn2PsdhkVlqnEfnUE4a05P2aTA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/better-sqlite3": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.7.0.tgz", @@ -69,6 +881,47 @@ "readable-stream": "^3.4.0" } }, + "node_modules/browserslist": { + "version": "4.28.7", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.28.7.tgz", + "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.44", + "caniuse-lite": "^1.0.30001806", + "electron-to-chromium": "^1.5.393", + "node-releases": "^2.0.51", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/browserslist/node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -93,12 +946,58 @@ "ieee754": "^1.1.13" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001806", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", + "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "optional": true }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -132,6 +1031,13 @@ "node": ">=8" } }, + "node_modules/electron-to-chromium": { + "version": "1.5.400", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.400.tgz", + "integrity": "sha512-96EWDNjM59SYflgeV5Ylsf4EMiq1a25YjCnJH7cxn/AF2H3pILRweaUnoLax0yKHWdpOzY6JKEu45e8irqZIHA==", + "dev": true, + "license": "ISC" + }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -141,6 +1047,54 @@ "once": "^1.4.0" } }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -162,6 +1116,31 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "optional": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -200,6 +1179,60 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "optional": true }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -227,6 +1260,32 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "optional": true }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.17", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.17.tgz", + "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/napi-build-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", @@ -254,6 +1313,42 @@ "wrappy": "1" } }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.25", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.25.tgz", + "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/prebuild-install": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", @@ -306,6 +1401,41 @@ "rc": "cli.js" } }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -320,6 +1450,23 @@ "node": ">= 6" } }, + "node_modules/rollup": { + "version": "3.30.0", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.30.0.tgz", + "integrity": "sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -340,6 +1487,15 @@ ], "optional": true }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/semver": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", @@ -397,6 +1553,16 @@ "simple-concat": "^1.0.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -455,17 +1621,111 @@ "node": "*" } }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "optional": true }, + "node_modules/vite": { + "version": "4.5.14", + "resolved": "https://registry.npmmirror.com/vite/-/vite-4.5.14.tgz", + "integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "optional": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" } } } diff --git a/package.json b/package.json index 64d9367..66391d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "codex-provider-sync", - "version": "0.4.1", + "version": "0.5.0", "description": "Synchronize Codex session provider metadata across rollout files and SQLite state.", "type": "module", "files": [ @@ -8,16 +8,21 @@ "CHANGELOG.md", "AGENTS.md", "docs", - "src" + "src", + "web/dist" ], "bin": { - "codex-provider": "./src/cli.js" + "codex-provider": "src/cli.js" }, "scripts": { - "test": "node --test" + "test": "node --test", + "web:build": "vite build --config web/vite.config.js", + "web:start": "node src/cli.js web", + "publish:npm": "node scripts/publish-npm.js", + "prepare": "npm run web:build" }, "engines": { - "node": ">=16.0.0" + "node": ">=16.20.2" }, "keywords": [ "codex", @@ -28,5 +33,16 @@ "license": "MIT", "optionalDependencies": { "better-sqlite3": "8.7.0" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.3.4", + "vite": "^4.5.14" + }, + "overrides": { + "node-releases": "2.0.18" } } diff --git a/scripts/publish-npm.js b/scripts/publish-npm.js new file mode 100755 index 0000000..fc5913b --- /dev/null +++ b/scripts/publish-npm.js @@ -0,0 +1,89 @@ +#!/usr/bin/env node + +import fs from "node:fs"; +import path from "node:path"; +import { spawnSync } from "node:child_process"; +import { fileURLToPath } from "node:url"; + +const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); + +function usage() { + console.log(`Usage: npm run publish:npm -- [options] + +Options: + --dry-run Build, test, and preview the package without publishing. + --skip-tests Skip npm test (the Web UI build still runs). + --otp CODE Pass a one-time npm 2FA code without storing it. + --tag TAG Publish with an npm dist-tag (default: latest). + --registry URL npm registry (default: https://registry.npmjs.org/). +`); +} + +function parseArgs(argv) { + const options = { dryRun: false, skipTests: false, otp: process.env.NPM_OTP ?? "", tag: "latest", registry: "https://registry.npmjs.org/" }; + for (let index = 0; index < argv.length; index += 1) { + const argument = argv[index]; + if (argument === "--help" || argument === "-h") { usage(); process.exit(0); } + if (argument === "--dry-run") { options.dryRun = true; continue; } + if (argument === "--skip-tests") { options.skipTests = true; continue; } + if (argument === "--otp" || argument === "--tag" || argument === "--registry") { + const value = argv[++index]; + if (!value) throw new Error(`${argument} requires a value.`); + if (argument === "--otp") options.otp = value; + if (argument === "--tag") options.tag = value; + if (argument === "--registry") options.registry = value; + continue; + } + throw new Error(`Unknown option: ${argument}`); + } + return options; +} + +function npmCommand() { + return process.platform === "win32" ? "npm.cmd" : "npm"; +} + +function runNpm(args, { env = process.env } = {}) { + console.log(`\n$ npm ${args.map((value) => value === env.NPM_OTP ? "--otp ******" : value).join(" ")}`); + const result = spawnSync(npmCommand(), args, { cwd: rootDir, env, stdio: "inherit" }); + if (result.error) throw result.error; + if (result.status !== 0) throw new Error(`npm ${args[0]} failed with exit code ${result.status}.`); +} + +function packageInfo() { + const packagePath = path.join(rootDir, "package.json"); + const manifest = JSON.parse(fs.readFileSync(packagePath, "utf8")); + if (!manifest.name || !manifest.version) throw new Error("package.json must define name and version."); + if (!manifest.bin?.["codex-provider"]) throw new Error("package.json must expose the codex-provider bin entry."); + const binPath = path.resolve(rootDir, manifest.bin["codex-provider"]); + if (!fs.existsSync(binPath)) throw new Error(`npm bin entry does not exist: ${binPath}`); + return manifest; +} + +function main() { + const options = parseArgs(process.argv.slice(2)); + const manifest = packageInfo(); + console.log(`Preparing ${manifest.name}@${manifest.version} for npm.`); + + const registryArgs = ["--registry", options.registry]; + runNpm(["whoami", ...registryArgs]); + runNpm(["run", "web:build"]); + if (!options.skipTests) runNpm(["test"]); + runNpm(["pack", "--dry-run", "--json", ...registryArgs]); + + const publishArgs = ["publish", "--access", "public", "--tag", options.tag, ...registryArgs]; + if (options.otp) publishArgs.push("--otp", options.otp); + if (options.dryRun) { + console.log("npm dry-run completed; nothing was published."); + return; + } + runNpm(publishArgs, { env: { ...process.env, ...(options.otp ? { NPM_OTP: options.otp } : {}) } }); + console.log(`${manifest.name}@${manifest.version} published successfully.`); +} + +try { + main(); +} catch (error) { + console.error(`\nPublish failed: ${error instanceof Error ? error.message : String(error)}`); + process.exitCode = 1; +} diff --git a/src/backup.js b/src/backup.js index 2fa3606..fbbc20e 100644 --- a/src/backup.js +++ b/src/backup.js @@ -403,6 +403,25 @@ export async function getBackupSummary(codexHome) { }; } +export async function listBackups(codexHome) { + const backupRoot = defaultBackupRoot(codexHome); + const backupDirs = await listManagedBackupDirectories(backupRoot); + const backups = []; + + for (const entry of backupDirs) { + const metadataPath = path.join(entry.fullPath, "metadata.json"); + const metadata = JSON.parse(await fs.readFile(metadataPath, "utf8")); + backups.push({ + id: entry.name, + path: entry.fullPath, + sizeBytes: await getDirectorySize(entry.fullPath), + metadata + }); + } + + return { backupRoot, backups }; +} + export async function pruneBackups(codexHome, keepCount = DEFAULT_BACKUP_RETENTION_COUNT) { if (!Number.isInteger(keepCount) || keepCount < 0) { throw new Error(`Invalid keep count: ${keepCount}. Expected a non-negative integer.`); diff --git a/src/cli.js b/src/cli.js old mode 100644 new mode 100755 index 8052edb..271b28d --- a/src/cli.js +++ b/src/cli.js @@ -19,6 +19,7 @@ Usage: codex-provider sync [--provider ID] [--keep N] [--codex-home PATH] [--sqlite-home PATH] codex-provider switch [--model NAME] [--keep-root-model] [--keep N] [--codex-home PATH] [--sqlite-home PATH] codex-provider watch [--codex-home PATH] [--sqlite-home PATH] [--debounce-ms N] [--once] [--no-state-db] + codex-provider web [--port N] [--no-open] [--reset-access] [--codex-home PATH] [--sqlite-home PATH] codex-provider prune-backups [--keep N] [--codex-home PATH] codex-provider restore [--no-config] [--no-db] [--no-sessions] [--allow-sqlite-home-relocation] [--codex-home PATH] [--sqlite-home PATH] codex-provider install-windows-launcher [--dir PATH] [--codex-home PATH] [--sqlite-home PATH] @@ -33,6 +34,13 @@ watch flags: --debounce-ms N wait N milliseconds after a change before syncing (default 750) --once exit after the first successful sync --no-state-db only watch config.toml, ignore SQLite state events + +web flags: + --port N bind the local Web UI to 127.0.0.1:N (default 8791) + --no-open do not open the system browser automatically + --reset-access invalidate all paired browsers before creating a new pairing + --codex-home PATH set the default server-managed storage profile + --sqlite-home PATH set the default profile SQLite Home override `); } @@ -196,6 +204,8 @@ async function main() { return; } + assertSupportedNodeVersion(); + if (command === "status") { const { getStatus, renderStatus } = await loadService(); const status = await getStatus({ @@ -313,6 +323,41 @@ async function main() { return; } + if (command === "web") { + const { startWebUi } = await import("./web-server.js"); + const port = flags.port === undefined ? 8791 : parseKeepCount(flags.port, { allowZero: true }); + const handle = await startWebUi({ + port, + openBrowser: !flags["no-open"], + resetAccess: Boolean(flags["reset-access"]), + codexHome: flags["codex-home"], + sqliteHome: flags["sqlite-home"] + }); + console.log(`Codex Provider Sync Web UI: ${handle.url}`); + if (flags["no-open"] || !handle.browserOpened) { + console.log(`One-time pairing link: ${handle.pairingUrl}`); + } + if (handle.reused) { + console.log("Opened the existing Codex Provider Sync Web UI instance."); + return; + } + console.log("The server only listens on 127.0.0.1. Press Ctrl+C to stop it."); + await new Promise((resolve) => { + let closing = false; + const close = async () => { + if (closing) { + return; + } + closing = true; + await handle.close().catch(() => {}); + resolve(); + }; + process.once("SIGINT", close); + process.once("SIGTERM", close); + }); + return; + } + if (command === "restore") { const { runRestore } = await loadService(); const backupDir = positionals[1] ?? flags.backup; diff --git a/src/history.js b/src/history.js new file mode 100644 index 0000000..7e13706 --- /dev/null +++ b/src/history.js @@ -0,0 +1,184 @@ +import fs from "node:fs/promises"; +import fsSync from "node:fs"; +import path from "node:path"; +import readline from "node:readline"; + +import { SESSION_DIRS } from "./constants.js"; + +const DEFAULT_PAGE_SIZE = 50; +const MAX_PAGE_SIZE = 100; +const DEFAULT_MESSAGE_LIMIT = 200; + +function normalizeText(value) { + if (typeof value !== "string") return ""; + return value.replace(/\r\n/g, "\n").trim(); +} + +function firstText(...values) { + for (const value of values) { + const text = normalizeText(value); + if (text) return text; + } + return ""; +} + +function contentText(value) { + if (typeof value === "string") return normalizeText(value); + if (!Array.isArray(value)) return ""; + return value + .filter((item) => item && typeof item === "object" && (item.type === "output_text" || item.type === "text" || item.type === "input_text")) + .map((item) => normalizeText(item.text)) + .filter(Boolean) + .join("\n"); +} + +function messageFromRecord(record) { + if (!record || typeof record !== "object") return null; + const timestamp = record.timestamp ?? record.payload?.timestamp ?? null; + const eventType = record.payload?.type; + if (record.type === "event_msg" && (eventType === "user_message" || eventType === "assistant_message")) { + const role = eventType === "user_message" ? "user" : "assistant"; + const text = firstText(record.payload?.message, record.payload?.text); + return text ? { role, text, timestamp } : null; + } + + for (const key of ["payload", "item", "msg"]) { + const value = record[key]; + if (!value || typeof value !== "object" || !["user", "assistant"].includes(value.role)) continue; + const text = firstText(contentText(value.content), value.message, value.text); + return text ? { role: value.role, text, timestamp } : null; + } + if (record.type === "user_message" || record.type === "assistant_message") { + const text = firstText(record.message, record.text, record.payload?.message, record.payload?.text); + return text ? { role: record.type === "user_message" ? "user" : "assistant", text, timestamp } : null; + } + return null; +} + +async function listRolloutFiles(root) { + const result = []; + async function walk(directory) { + let entries; + try { + entries = await fs.readdir(directory, { withFileTypes: true }); + } catch (error) { + if (error?.code === "ENOENT") return; + throw error; + } + for (const entry of entries) { + const fullPath = path.join(directory, entry.name); + if (entry.isDirectory()) await walk(fullPath); + else if (entry.isFile() && entry.name.startsWith("rollout-") && entry.name.endsWith(".jsonl")) result.push(fullPath); + } + } + await walk(root); + return result; +} + +async function readRollout(filePath, archived) { + const stat = await fs.stat(filePath); + const stream = fsSync.createReadStream(filePath, { encoding: "utf8" }); + const lines = readline.createInterface({ input: stream, crlfDelay: Infinity }); + let meta = null; + const messages = []; + let sequence = 0; + try { + for await (const line of lines) { + if (!line.trim()) continue; + let record; + try { record = JSON.parse(line); } catch { continue; } + if (!meta && record.type === "session_meta" && record.payload && typeof record.payload === "object") { + const payload = record.payload; + meta = { + id: typeof payload.id === "string" ? payload.id : null, + title: firstText(payload.title, payload.name), + cwd: firstText(payload.cwd), + provider: firstText(payload.model_provider) || "(missing)", + model: firstText(payload.model), + createdAt: record.timestamp ?? payload.timestamp ?? null + }; + } + const message = messageFromRecord(record); + if (message) messages.push({ ...message, sequence: ++sequence }); + } + } finally { + lines.close(); + stream.destroy(); + } + if (!meta?.id) return null; + const updatedAt = messages.at(-1)?.timestamp ?? stat.mtime.toISOString(); + return { ...meta, updatedAt, archived, messages, messageCount: messages.length, filePath, mtimeMs: stat.mtimeMs }; +} + +async function collectHistory(codexHome) { + const sessions = []; + for (const dirName of SESSION_DIRS) { + const files = await listRolloutFiles(path.join(codexHome, dirName)); + for (const filePath of files) { + const session = await readRollout(filePath, dirName === "archived_sessions"); + if (session) sessions.push(session); + } + } + const byId = new Map(); + for (const session of sessions) { + const existing = byId.get(session.id); + if (!existing || session.mtimeMs >= existing.mtimeMs) byId.set(session.id, session); + } + return [...byId.values()].sort((a, b) => Date.parse(b.updatedAt || 0) - Date.parse(a.updatedAt || 0) || b.mtimeMs - a.mtimeMs); +} + +function publicSession(session) { + const firstUserMessage = session.messages.find((message) => message.role === "user")?.text ?? ""; + return { + id: session.id, + title: session.title || firstUserMessage.slice(0, 80) || "未命名会话", + cwd: session.cwd, + provider: session.provider, + model: session.model, + archived: session.archived, + createdAt: session.createdAt, + updatedAt: session.updatedAt, + messageCount: session.messageCount, + firstUserMessage: firstUserMessage.slice(0, 240) + }; +} + +export function validateHistoryPage(pageValue, pageSizeValue = DEFAULT_PAGE_SIZE) { + const page = pageValue === undefined ? 1 : Number(pageValue); + const pageSize = pageSizeValue === undefined ? DEFAULT_PAGE_SIZE : Number(pageSizeValue); + if (!Number.isInteger(page) || page < 1) throw new Error("page must be a positive integer."); + if (!Number.isInteger(pageSize) || pageSize < 10 || pageSize > MAX_PAGE_SIZE) throw new Error(`pageSize must be an integer between 10 and ${MAX_PAGE_SIZE}.`); + return { page, pageSize }; +} + +export async function listHistory(codexHome, options = {}) { + const { page, pageSize } = validateHistoryPage(options.page, options.pageSize ?? DEFAULT_PAGE_SIZE); + const query = normalizeText(options.query).toLowerCase(); + const project = normalizeText(options.project).toLowerCase(); + const provider = normalizeText(options.provider); + const archived = options.archived ?? "all"; + if (!["all", "active", "archived"].includes(archived)) throw new Error("archived must be all, active, or archived."); + const sessions = await collectHistory(codexHome); + const filtered = sessions.filter((session) => { + if (provider && session.provider !== provider) return false; + if (archived !== "all" && session.archived !== (archived === "archived")) return false; + if (project && !session.cwd.toLowerCase().includes(project)) return false; + if (query) { + const haystack = [session.title, session.cwd, session.provider, session.messages[0]?.text, ...session.messages.map((message) => message.text)].join("\n").toLowerCase(); + if (!haystack.includes(query)) return false; + } + return true; + }); + const start = (page - 1) * pageSize; + return { page, pageSize, total: filtered.length, hasNextPage: start + pageSize < filtered.length, sessions: filtered.slice(start, start + pageSize).map(publicSession) }; +} + +export async function getHistorySession(codexHome, sessionId, { messageLimit = DEFAULT_MESSAGE_LIMIT } = {}) { + if (typeof sessionId !== "string" || !sessionId.trim()) throw new Error("sessionId is required."); + const sessions = await collectHistory(codexHome); + const session = sessions.find((item) => item.id === sessionId); + if (!session) throw new Error("The selected session was not found in this Codex Home."); + const safeLimit = Number.isInteger(messageLimit) && messageLimit > 0 ? Math.min(messageLimit, DEFAULT_MESSAGE_LIMIT) : DEFAULT_MESSAGE_LIMIT; + const messages = session.messages.slice(-safeLimit); + return { session: publicSession(session), messages, truncated: messages.length < session.messages.length, returnedMessageCount: messages.length }; +} diff --git a/src/node-version.js b/src/node-version.js index e317efd..05c18de 100644 --- a/src/node-version.js +++ b/src/node-version.js @@ -1,13 +1,27 @@ -export const MINIMUM_NODE_MAJOR_VERSION = 16; +export const MINIMUM_NODE_VERSION = "16.20.2"; + +function parseVersion(value) { + const match = String(value).replace(/^v/, "").match(/^(\d+)\.(\d+)\.(\d+)/); + return match ? match.slice(1).map((part) => Number.parseInt(part, 10)) : null; +} + +function versionAtLeast(current, minimum) { + for (let index = 0; index < minimum.length; index += 1) { + if (current[index] > minimum[index]) return true; + if (current[index] < minimum[index]) return false; + } + return true; +} export function getUnsupportedNodeVersionMessage(nodeVersion = process.versions.node) { - const majorVersion = Number.parseInt(String(nodeVersion).split(".")[0] ?? "", 10); - if (Number.isInteger(majorVersion) && majorVersion >= MINIMUM_NODE_MAJOR_VERSION) { + const current = parseVersion(nodeVersion); + const minimum = parseVersion(MINIMUM_NODE_VERSION); + if (current && minimum && versionAtLeast(current, minimum)) { return null; } const displayVersion = String(nodeVersion).startsWith("v") ? String(nodeVersion) : `v${nodeVersion}`; - return `codex-provider-sync requires Node.js ${MINIMUM_NODE_MAJOR_VERSION}+. ` + return `codex-provider-sync requires Node.js ${MINIMUM_NODE_VERSION} or newer. ` + `Current Node.js version: ${displayVersion}. ` + "Please upgrade Node.js, then reinstall or rerun codex-provider."; } diff --git a/src/web-server.js b/src/web-server.js new file mode 100644 index 0000000..e9d9b7a --- /dev/null +++ b/src/web-server.js @@ -0,0 +1,705 @@ +import crypto from "node:crypto"; +import fs from "node:fs/promises"; +import http from "node:http"; +import path from "node:path"; +import { spawn } from "node:child_process"; +import { fileURLToPath } from "node:url"; + +import { listBackups } from "./backup.js"; +import { readConfigText, readRootModelFromConfigText } from "./config-file.js"; +import { defaultCodexHome } from "./constants.js"; +import { getHistorySession, listHistory } from "./history.js"; +import { getStatus, runPruneBackups, runRestore, runSwitch, runSync } from "./service.js"; +import { createMemoryWebUiState, WebUiStateStore } from "./web-state.js"; + +const DEFAULT_PORT = 8791; +const MAX_REQUEST_BYTES = 64 * 1024; +const ACTIVITY_LIMIT = 250; +const PAIRING_TTL_MS = 5 * 60 * 1000; +const DEVICE_SECRET_BYTES = 32; +const STATE_FILENAME = "provider-sync-web.json"; +const RUNTIME_FILENAME = "provider-sync-web.runtime.json"; +const WEB_ROOT = fileURLToPath(new URL("../web/dist/", import.meta.url)); +const MIME_TYPES = new Map([ + [".css", "text/css; charset=utf-8"], + [".html", "text/html; charset=utf-8"], + [".ico", "image/x-icon"], + [".js", "text/javascript; charset=utf-8"], + [".json", "application/json; charset=utf-8"], + [".map", "application/json; charset=utf-8"], + [".png", "image/png"], + [".svg", "image/svg+xml"], + [".webp", "image/webp"] +]); + +function sendJson(response, statusCode, value) { + const body = JSON.stringify(value); + response.writeHead(statusCode, { + "Cache-Control": "no-store", + "Content-Type": "application/json; charset=utf-8", + "Content-Length": Buffer.byteLength(body), + "X-Content-Type-Options": "nosniff" + }); + response.end(body); +} + +function sendError(response, statusCode, error, code) { + const message = error instanceof Error ? error.message : String(error); + sendJson(response, statusCode, { error: message, ...(code ? { code } : {}) }); +} + +async function readJsonBody(request) { + const chunks = []; + let received = 0; + for await (const chunk of request) { + received += chunk.length; + if (received > MAX_REQUEST_BYTES) { + throw new Error(`Request body exceeds ${MAX_REQUEST_BYTES} bytes.`); + } + chunks.push(chunk); + } + if (chunks.length === 0) { + return {}; + } + try { + return JSON.parse(Buffer.concat(chunks).toString("utf8")); + } catch { + throw new Error("Request body must be valid JSON."); + } +} + +function requireString(value, label, { optional = false, maxLength = 4096 } = {}) { + if (value === undefined || value === null || value === "") { + if (optional) { + return undefined; + } + throw new Error(`${label} is required.`); + } + if (typeof value !== "string" || !value.trim()) { + throw new Error(`${label} must be a non-empty string.`); + } + const normalized = value.trim(); + if (normalized.length > maxLength) { + throw new Error(`${label} is too long.`); + } + return normalized; +} + +function requireProvider(value) { + const provider = requireString(value, "provider", { maxLength: 200 }); + if (!/^[A-Za-z0-9_.-]+$/.test(provider)) { + throw new Error("provider may only contain letters, numbers, dots, underscores, and hyphens."); + } + return provider; +} + +function requireKeepCount(value, { allowZero = false } = {}) { + const minimum = allowZero ? 0 : 1; + if (!Number.isInteger(value) || value < minimum || value > 100000) { + throw new Error(`keepCount must be an integer between ${minimum} and 100000.`); + } + return value; +} + +function resolveStorageProfile(input, stateStore) { + if (Object.hasOwn(input ?? {}, "codexHome") || Object.hasOwn(input ?? {}, "sqliteHome")) { + throw new Error("Storage paths must be selected through a server-managed profileId."); + } + const profileId = requireString(input?.profileId ?? "default", "profileId", { maxLength: 80 }); + const profile = stateStore.getProfile(profileId); + return { + profileId: profile.id, + codexHome: profile.codexHome, + ...(profile.sqliteHome ? { sqliteHome: profile.sqliteHome } : {}) + }; +} + +function serializeStatus(status) { + const rollout = status.rolloutCounts ?? { sessions: {}, archived_sessions: {} }; + const sqlite = status.sqliteCounts; + const normalizeCounts = (counts) => Object.fromEntries( + Object.entries(counts ?? {}).sort(([left], [right]) => left.localeCompare(right)) + ); + const normalizeDistribution = (distribution) => ({ + sessions: normalizeCounts(distribution?.sessions), + archived_sessions: normalizeCounts(distribution?.archived_sessions) + }); + const rolloutJson = JSON.stringify(normalizeDistribution(rollout)); + const sqliteComparable = sqlite && !sqlite.unreadable + ? JSON.stringify(normalizeDistribution(sqlite)) + : null; + return { + ...status, + alignment: { + aligned: Boolean(sqliteComparable && rolloutJson === sqliteComparable), + sqliteReadable: Boolean(sqlite && !sqlite.unreadable), + targetProvider: status.currentProvider + } + }; +} + +function stageMessage(event) { + const messages = { + scan_rollout_files: "Scanning rollout files", + check_locked_rollout_files: "Checking locked rollout files", + create_backup: "Creating backup", + update_config: "Updating config.toml", + update_sqlite: "Updating SQLite metadata", + rewrite_rollout_files: "Rewriting rollout metadata", + clean_backups: "Cleaning old backups" + }; + const base = messages[event?.stage] ?? event?.stage ?? "Operation progress"; + return event?.status === "complete" ? `${base} complete` : base; +} + +function openLocalUrl(url, platform = process.platform) { + let command; + let args; + if (platform === "win32") { + command = "cmd"; + args = ["/d", "/s", "/c", "start", "", url]; + } else if (platform === "darwin") { + command = "open"; + args = [url]; + } else { + command = "xdg-open"; + args = [url]; + } + return new Promise((resolve) => { + let settled = false; + const finish = (opened) => { + if (settled) return; + settled = true; + clearTimeout(timeout); + resolve(opened); + }; + const child = spawn(command, args, { stdio: "ignore" }); + const timeout = setTimeout(() => { + child.unref(); + finish(true); + }, 3000); + child.once("error", () => finish(false)); + child.once("exit", (code) => finish(code === 0)); + }); +} + +function canOpenLocalUrl(platform = process.platform, environment = process.env) { + if (platform !== "linux") return true; + return Boolean(environment.DISPLAY || environment.WAYLAND_DISPLAY); +} + +async function serveStatic(response, pathname, webRoot) { + let relativePath = pathname === "/" ? "index.html" : pathname.slice(1); + try { + relativePath = decodeURIComponent(relativePath); + } catch { + sendError(response, 400, "Invalid URL encoding."); + return; + } + + const root = path.resolve(webRoot); + let filePath = path.resolve(root, relativePath); + if (filePath !== root && !filePath.startsWith(`${root}${path.sep}`)) { + sendError(response, 403, "Static path is outside the Web UI root."); + return; + } + + let file; + try { + file = await fs.readFile(filePath); + } catch (error) { + if (error?.code !== "ENOENT" || path.extname(relativePath)) { + sendError(response, error?.code === "ENOENT" ? 404 : 500, error); + return; + } + filePath = path.join(root, "index.html"); + file = await fs.readFile(filePath); + } + + const extension = path.extname(filePath).toLowerCase(); + if (extension === ".html") { + file = Buffer.from(file.toString("utf8").replace("__CODEX_PROVIDER_SYNC_BOOTSTRAP__", "{}"), "utf8"); + } + response.writeHead(200, { + "Cache-Control": extension === ".html" ? "no-store" : "public, max-age=3600", + "Content-Type": MIME_TYPES.get(extension) ?? "application/octet-stream", + "Content-Length": file.length, + "Referrer-Policy": "no-referrer", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "DENY", + "Content-Security-Policy": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'none'; form-action 'self'" + }); + response.end(file); +} + +function randomSecret() { + return crypto.randomBytes(DEVICE_SECRET_BYTES).toString("base64url"); +} + +function secretDigest(secret) { + return crypto.createHash("sha256").update(String(secret), "utf8").digest(); +} + +function secretsMatch(secret, expectedDigest) { + if (typeof secret !== "string" || !expectedDigest) return false; + const candidate = secretDigest(secret); + return candidate.length === expectedDigest.length && crypto.timingSafeEqual(candidate, expectedDigest); +} + +function isLoopbackHostname(hostname) { + const normalized = String(hostname).toLowerCase().replace(/^\[|\]$/g, ""); + return normalized === "127.0.0.1" || normalized === "localhost" || normalized === "::1"; +} + +function validBrowserOrigin(request, { required = false } = {}) { + const value = request.headers.origin; + if (!value) return !required; + const host = request.headers.host; + if (!host) return false; + try { + const originUrl = new URL(value); + const hostUrl = new URL(`http://${host}`); + return originUrl.protocol === "http:" + && isLoopbackHostname(originUrl.hostname) + && isLoopbackHostname(hostUrl.hostname) + && originUrl.host.toLowerCase() === hostUrl.host.toLowerCase(); + } catch { + return false; + } +} + +export function createWebUiServer({ + webRoot = WEB_ROOT, + services = {}, + stateStore = createMemoryWebUiState({ codexHome: defaultCodexHome() }), + internalSecret = randomSecret(), + pairingTtlMs = PAIRING_TTL_MS, + now = () => Date.now() +} = {}) { + const api = { + getStatus: services.getStatus ?? getStatus, + listBackups: services.listBackups ?? listBackups, + runSync: services.runSync ?? runSync, + runSwitch: services.runSwitch ?? runSwitch, + runRestore: services.runRestore ?? runRestore, + runPruneBackups: services.runPruneBackups ?? runPruneBackups, + readConfigText: services.readConfigText ?? readConfigText, + readRootModelFromConfigText: services.readRootModelFromConfigText ?? readRootModelFromConfigText, + listHistory: services.listHistory ?? listHistory, + getHistorySession: services.getHistorySession ?? getHistorySession + }; + const activity = []; + let activityId = 0; + let activeOperation = null; + let baseUrl = null; + let pairing = null; + + const record = (level, message, detail = null, operation = activeOperation?.kind ?? null) => { + activityId += 1; + activity.push({ id: activityId, timestamp: new Date().toISOString(), level, message, detail, operation }); + if (activity.length > ACTIVITY_LIMIT) { + activity.splice(0, activity.length - ACTIVITY_LIMIT); + } + }; + + const issuePairing = () => { + const secret = randomSecret(); + pairing = { + digest: secretDigest(secret), + expiresAt: now() + pairingTtlMs + }; + return secret; + }; + + const authorize = (request) => { + return stateStore.hasCredential(request.headers["x-codex-provider-device"]); + }; + + const requireAuthorizedBrowser = (request, response, { originRequired = request.method !== "GET" } = {}) => { + if (!validBrowserOrigin(request, { required: originRequired })) { + sendError(response, 403, "Invalid browser Origin for this loopback request.", "INVALID_ORIGIN"); + return false; + } + if (!authorize(request)) { + sendError(response, 403, "This browser is not paired with the Web UI.", "PAIRING_REQUIRED"); + return false; + } + return true; + }; + + const withOperation = async (kind, response, operation) => { + if (activeOperation) { + sendJson(response, 409, { error: `Another operation is already running: ${activeOperation.kind}.` }); + return; + } + activeOperation = { kind, startedAt: new Date().toISOString() }; + record("info", `${kind} started`); + try { + const result = await operation(); + record("success", `${kind} completed`); + sendJson(response, 200, { result }); + } catch (error) { + record("error", `${kind} failed`, error instanceof Error ? error.message : String(error)); + sendError(response, 400, error); + } finally { + activeOperation = null; + } + }; + + const server = http.createServer(async (request, response) => { + const requestUrl = new URL(request.url ?? "/", baseUrl ?? "http://127.0.0.1"); + const pathname = requestUrl.pathname; + + try { + if (request.method === "POST" && pathname === "/api/pair") { + if (!validBrowserOrigin(request, { required: true })) { + sendError(response, 403, "Invalid browser Origin for pairing.", "INVALID_ORIGIN"); + return; + } + const supplied = request.headers["x-codex-provider-pairing"]; + if (!pairing || pairing.expiresAt < now() || !secretsMatch(supplied, pairing.digest)) { + sendError(response, 403, "The pairing link is invalid, expired, or already used.", "PAIRING_REQUIRED"); + return; + } + pairing = null; + const deviceCredential = randomSecret(); + await stateStore.addCredential(deviceCredential); + sendJson(response, 200, { deviceCredential }); + return; + } + + if (request.method === "POST" && pathname === "/api/internal/new-pairing") { + if (!secretsMatch(request.headers["x-codex-provider-internal"], secretDigest(internalSecret))) { + sendError(response, 403, "Invalid Web UI instance secret."); + return; + } + const body = await readJsonBody(request); + if (body.resetAccess) await stateStore.resetCredentials(); + sendJson(response, 200, { pairingToken: issuePairing() }); + return; + } + + if (request.method === "GET" && pathname === "/api/health") { + sendJson(response, 200, { ok: true, service: "codex-provider-sync", activeOperation }); + return; + } + + if (pathname.startsWith("/api/")) { + if (!requireAuthorizedBrowser(request, response)) { + return; + } + + if (request.method === "GET" && pathname === "/api/profiles") { + sendJson(response, 200, { profiles: stateStore.listProfiles() }); + return; + } + + if (request.method === "GET" && pathname === "/api/activity") { + const after = Number.parseInt(requestUrl.searchParams.get("after") ?? "0", 10) || 0; + sendJson(response, 200, { activity: activity.filter((entry) => entry.id > after), activeOperation }); + return; + } + + if (request.method !== "POST") { + sendError(response, 405, "API endpoint requires POST."); + return; + } + + const body = await readJsonBody(request); + if (pathname === "/api/profiles/save") { + const profile = await stateStore.saveProfile({ + id: requireString(body.profileId, "profileId", { maxLength: 80 }), + name: requireString(body.name, "name", { maxLength: 120 }), + codexHome: requireString(body.codexHome, "codexHome"), + sqliteHome: requireString(body.sqliteHome, "sqliteHome", { optional: true }) + }); + sendJson(response, 200, { profile }); + return; + } + + if (pathname === "/api/profiles/delete") { + await stateStore.deleteProfile(requireString(body.profileId, "profileId", { maxLength: 80 })); + sendJson(response, 200, { ok: true }); + return; + } + + if (pathname === "/api/access/forget") { + await stateStore.removeCredential(request.headers["x-codex-provider-device"]); + sendJson(response, 200, { ok: true }); + return; + } + + if (pathname === "/api/status") { + const storage = resolveStorageProfile(body, stateStore); + const status = serializeStatus(await api.getStatus(storage)); + status.profileId = storage.profileId; + record("info", "Status refreshed", status.codexHome, null); + sendJson(response, 200, { status }); + return; + } + + if (pathname === "/api/backups") { + const { codexHome } = resolveStorageProfile(body, stateStore); + sendJson(response, 200, await api.listBackups(codexHome)); + return; + } + + if (pathname === "/api/history") { + const storage = resolveStorageProfile(body, stateStore); + const history = await api.listHistory(storage.codexHome, body); + sendJson(response, 200, { history }); + return; + } + + if (pathname === "/api/history/session") { + const storage = resolveStorageProfile(body, stateStore); + const sessionId = requireString(body.sessionId, "sessionId", { maxLength: 300 }); + const history = await api.getHistorySession(storage.codexHome, sessionId); + sendJson(response, 200, { history }); + return; + } + + if (pathname === "/api/sync") { + await withOperation("sync", response, async () => { + const storage = resolveStorageProfile(body, stateStore); + const provider = requireProvider(body.provider); + const keepCount = requireKeepCount(body.keepCount); + const configText = await api.readConfigText(path.join(storage.codexHome, "config.toml")); + const model = api.readRootModelFromConfigText(configText); + return api.runSync({ + ...storage, + provider, + keepCount, + model, + onProgress: (event) => record("progress", stageMessage(event), event) + }); + }); + return; + } + + if (pathname === "/api/switch") { + await withOperation("switch", response, async () => { + const storage = resolveStorageProfile(body, stateStore); + const provider = requireProvider(body.provider); + const keepCount = requireKeepCount(body.keepCount); + const model = requireString(body.model, "model", { optional: true, maxLength: 500 }); + return api.runSwitch({ + ...storage, + provider, + keepCount, + model, + keepRootModel: Boolean(body.keepRootModel), + onProgress: (event) => record("progress", stageMessage(event), event) + }); + }); + return; + } + + if (pathname === "/api/restore") { + await withOperation("restore", response, async () => { + const storage = resolveStorageProfile(body, stateStore); + const backupId = requireString(body.backupId, "backupId", { maxLength: 300 }); + const listed = await api.listBackups(storage.codexHome); + const backup = listed.backups.find((entry) => entry.id === backupId); + if (!backup) { + throw new Error("The selected backup is not a managed backup for this Codex Home."); + } + const restoreConfig = Boolean(body.restoreConfig); + const restoreDatabase = Boolean(body.restoreDatabase); + const restoreSessions = Boolean(body.restoreSessions); + if (!restoreConfig && !restoreDatabase && !restoreSessions) { + throw new Error("Select at least one backup content type to restore."); + } + return api.runRestore({ + ...storage, + backupDir: backup.path, + restoreConfig, + restoreDatabase, + restoreSessions, + allowSqliteHomeRelocation: Boolean(body.allowSqliteHomeRelocation) + }); + }); + return; + } + + if (pathname === "/api/prune") { + await withOperation("prune backups", response, async () => { + const { codexHome } = resolveStorageProfile(body, stateStore); + return api.runPruneBackups({ codexHome, keepCount: requireKeepCount(body.keepCount, { allowZero: true }) }); + }); + return; + } + + sendError(response, 404, "Unknown API endpoint."); + return; + } + + if (request.method !== "GET" && request.method !== "HEAD") { + sendError(response, 405, "Method not allowed."); + return; + } + await serveStatic(response, pathname, webRoot); + } catch (error) { + sendError(response, 500, error); + } + }); + + return { + server, + internalSecret, + issuePairing, + setBaseUrl(value) { + baseUrl = value; + }, + getActivity() { + return [...activity]; + } + }; +} + +function requestExistingPairing({ port, internalSecret, resetAccess }) { + return new Promise((resolve, reject) => { + const body = JSON.stringify({ resetAccess }); + const request = http.request({ + hostname: "127.0.0.1", + port, + path: "/api/internal/new-pairing", + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.byteLength(body), + "X-Codex-Provider-Internal": internalSecret + }, + timeout: 1500 + }, (response) => { + const chunks = []; + response.on("data", (chunk) => chunks.push(chunk)); + response.on("end", () => { + try { + const payload = JSON.parse(Buffer.concat(chunks).toString("utf8")); + if (response.statusCode !== 200 || typeof payload.pairingToken !== "string") { + reject(new Error("The existing listener is not a compatible Codex Provider Sync Web UI.")); + return; + } + resolve(payload.pairingToken); + } catch (error) { + reject(error); + } + }); + }); + request.once("timeout", () => request.destroy(new Error("Timed out contacting the existing Web UI."))); + request.once("error", reject); + request.end(body); + }); +} + +async function readRuntimeDescriptor(runtimeFile) { + try { + const value = JSON.parse(await fs.readFile(runtimeFile, "utf8")); + if (Number.isInteger(value?.port) && value.port > 0 && typeof value?.internalSecret === "string") { + return value; + } + } catch { + // A missing, stale, or malformed descriptor is treated as no live instance. + } + return null; +} + +async function removeOwnedRuntimeDescriptor(runtimeFile, internalSecret) { + const current = await readRuntimeDescriptor(runtimeFile); + if (current?.internalSecret === internalSecret) { + await fs.rm(runtimeFile, { force: true }).catch(() => {}); + } +} + +export async function startWebUi({ + port = DEFAULT_PORT, + openBrowser = true, + resetAccess = false, + codexHome, + sqliteHome, + stateFile, + runtimeFile, + webRoot = WEB_ROOT, + services, + platform = process.platform, + environment = process.env, + openUrl = openLocalUrl +} = {}) { + if (!Number.isInteger(port) || port < 0 || port > 65535) { + throw new Error(`Invalid Web UI port: ${port}.`); + } + await fs.access(path.join(webRoot, "index.html")).catch(() => { + throw new Error(`Web UI build not found at ${webRoot}. Run \"npm run web:build\" first.`); + }); + + const controlCodexHome = path.resolve(codexHome ?? process.env.CODEX_HOME ?? defaultCodexHome()); + const resolvedStateFile = path.resolve(stateFile ?? path.join(controlCodexHome, STATE_FILENAME)); + const resolvedRuntimeFile = path.resolve(runtimeFile ?? path.join(controlCodexHome, RUNTIME_FILENAME)); + const existing = await readRuntimeDescriptor(resolvedRuntimeFile); + if (existing) { + try { + const pairingToken = await requestExistingPairing({ + port: existing.port, + internalSecret: existing.internalSecret, + resetAccess + }); + const url = `http://127.0.0.1:${existing.port}`; + const pairingUrl = `${url}/#pair=${encodeURIComponent(pairingToken)}`; + const browserOpened = openBrowser && canOpenLocalUrl(platform, environment) + ? await openUrl(pairingUrl, platform) + : false; + return { + reused: true, + url, + pairingUrl, + browserOpened, + close: async () => {} + }; + } catch { + await fs.rm(resolvedRuntimeFile, { force: true }).catch(() => {}); + } + } + + const stateStore = new WebUiStateStore({ + filePath: resolvedStateFile, + defaultProfile: { codexHome: controlCodexHome, sqliteHome } + }); + await stateStore.initialize({ resetAccess }); + const internalSecret = randomSecret(); + const handle = createWebUiServer({ webRoot, services, stateStore, internalSecret }); + try { + await new Promise((resolve, reject) => { + handle.server.once("error", reject); + handle.server.listen(port, "127.0.0.1", resolve); + }); + } catch (error) { + if (error?.code === "EADDRINUSE") { + throw new Error(`Web UI port ${port} is already in use by another program. Stop that program or choose --port .`, { cause: error }); + } + throw error; + } + const address = handle.server.address(); + const actualPort = typeof address === "object" && address ? address.port : port; + const url = `http://127.0.0.1:${actualPort}`; + handle.setBaseUrl(url); + const pairingUrl = `${url}/#pair=${encodeURIComponent(handle.issuePairing())}`; + await fs.mkdir(path.dirname(resolvedRuntimeFile), { recursive: true }); + await fs.writeFile(resolvedRuntimeFile, `${JSON.stringify({ port: actualPort, internalSecret, pid: process.pid })}\n`, { encoding: "utf8", mode: 0o600 }); + await fs.chmod(resolvedRuntimeFile, 0o600).catch(() => {}); + const browserOpened = openBrowser && canOpenLocalUrl(platform, environment) + ? await openUrl(pairingUrl, platform) + : false; + return { + ...handle, + reused: false, + url, + pairingUrl, + browserOpened, + stateFile: resolvedStateFile, + close: async () => { + await new Promise((resolve, reject) => handle.server.close((error) => error ? reject(error) : resolve())); + await removeOwnedRuntimeDescriptor(resolvedRuntimeFile, internalSecret); + } + }; +} diff --git a/src/web-state.js b/src/web-state.js new file mode 100644 index 0000000..98cacc2 --- /dev/null +++ b/src/web-state.js @@ -0,0 +1,240 @@ +import crypto from "node:crypto"; +import fs from "node:fs/promises"; +import path from "node:path"; + +const STATE_VERSION = 1; +const DEFAULT_PROFILE_ID = "default"; + +function hashSecret(secret) { + return crypto.createHash("sha256").update(String(secret), "utf8").digest("hex"); +} + +function normalizeOptionalPath(value) { + if (value === undefined || value === null || String(value).trim() === "") { + return null; + } + return path.resolve(String(value).trim()); +} + +function normalizeProfile({ id, name, codexHome, sqliteHome }) { + const normalizedId = String(id ?? "").trim(); + const normalizedName = String(name ?? "").trim(); + if (!/^[A-Za-z0-9_.-]{1,80}$/.test(normalizedId)) { + throw new Error("profileId may only contain letters, numbers, dots, underscores, and hyphens."); + } + if (!normalizedName || normalizedName.length > 120) { + throw new Error("Profile name must be between 1 and 120 characters."); + } + if (typeof codexHome !== "string" || !codexHome.trim()) { + throw new Error("Codex Home is required for a storage profile."); + } + if (codexHome.includes("\0") || String(sqliteHome ?? "").includes("\0")) { + throw new Error("Storage paths may not contain NUL characters."); + } + return { + id: normalizedId, + name: normalizedName, + codexHome: path.resolve(codexHome.trim()), + sqliteHome: normalizeOptionalPath(sqliteHome) + }; +} + +async function assertDirectoryWhenPresent(value, label) { + if (!value) { + return; + } + try { + const stats = await fs.stat(value); + if (!stats.isDirectory()) { + throw new Error(`${label} must refer to a directory: ${value}`); + } + } catch (error) { + if (error?.code !== "ENOENT") { + throw error; + } + } +} + +function emptyState(defaultProfile) { + return { + version: STATE_VERSION, + credentialHashes: [], + profiles: [defaultProfile] + }; +} + +export class WebUiStateStore { + constructor({ filePath, defaultProfile }) { + if (!filePath) { + throw new Error("Web UI state file path is required."); + } + this.filePath = path.resolve(filePath); + this.defaultProfile = normalizeProfile({ + id: DEFAULT_PROFILE_ID, + name: "Default", + ...defaultProfile + }); + this.state = emptyState(this.defaultProfile); + this.writeQueue = Promise.resolve(); + } + + async initialize({ resetAccess = false } = {}) { + try { + const parsed = JSON.parse(await fs.readFile(this.filePath, "utf8")); + if (parsed?.version === STATE_VERSION && Array.isArray(parsed.profiles) && Array.isArray(parsed.credentialHashes)) { + const namedProfiles = parsed.profiles + .filter((profile) => profile?.id !== DEFAULT_PROFILE_ID) + .map((profile) => normalizeProfile(profile)); + this.state = { + version: STATE_VERSION, + credentialHashes: parsed.credentialHashes.filter((value) => typeof value === "string" && /^[a-f0-9]{64}$/.test(value)), + profiles: [this.defaultProfile, ...namedProfiles] + }; + } + } catch (error) { + if (error?.code !== "ENOENT") { + throw new Error(`Unable to read Web UI state at ${this.filePath}: ${error.message}`, { cause: error }); + } + } + if (resetAccess) { + this.state.credentialHashes = []; + } + await this.persist(); + return this.snapshot(); + } + + snapshot() { + return { + version: this.state.version, + credentialHashes: [...this.state.credentialHashes], + profiles: this.state.profiles.map((profile) => ({ ...profile })) + }; + } + + listProfiles() { + return this.state.profiles.map((profile) => ({ ...profile })); + } + + getProfile(profileId = DEFAULT_PROFILE_ID) { + const profile = this.state.profiles.find((entry) => entry.id === profileId); + if (!profile) { + throw new Error(`Unknown storage profile: ${profileId}`); + } + return { ...profile }; + } + + async saveProfile(input) { + const profile = normalizeProfile(input); + if (profile.id === DEFAULT_PROFILE_ID) { + throw new Error("The default storage profile is controlled by Web UI startup flags."); + } + await assertDirectoryWhenPresent(profile.codexHome, "Codex Home"); + await assertDirectoryWhenPresent(profile.sqliteHome, "SQLite Home"); + const index = this.state.profiles.findIndex((entry) => entry.id === profile.id); + if (index >= 0) { + this.state.profiles[index] = profile; + } else { + this.state.profiles.push(profile); + } + await this.persist(); + return { ...profile }; + } + + async deleteProfile(profileId) { + if (profileId === DEFAULT_PROFILE_ID) { + throw new Error("The default storage profile cannot be deleted."); + } + const before = this.state.profiles.length; + this.state.profiles = this.state.profiles.filter((entry) => entry.id !== profileId); + if (this.state.profiles.length === before) { + throw new Error(`Unknown storage profile: ${profileId}`); + } + await this.persist(); + } + + hasCredential(secret) { + if (typeof secret !== "string" || secret.length < 32) { + return false; + } + const candidate = Buffer.from(hashSecret(secret), "hex"); + return this.state.credentialHashes.some((stored) => { + const expected = Buffer.from(stored, "hex"); + return expected.length === candidate.length && crypto.timingSafeEqual(expected, candidate); + }); + } + + async addCredential(secret) { + const digest = hashSecret(secret); + if (!this.state.credentialHashes.includes(digest)) { + this.state.credentialHashes.push(digest); + await this.persist(); + } + } + + async removeCredential(secret) { + const digest = hashSecret(secret); + this.state.credentialHashes = this.state.credentialHashes.filter((stored) => stored !== digest); + await this.persist(); + } + + async resetCredentials() { + this.state.credentialHashes = []; + await this.persist(); + } + + async persist() { + const serialized = `${JSON.stringify(this.state, null, 2)}\n`; + const target = this.filePath; + this.writeQueue = this.writeQueue.then(async () => { + await fs.mkdir(path.dirname(target), { recursive: true }); + const temporary = `${target}.tmp-${process.pid}-${crypto.randomBytes(6).toString("hex")}`; + await fs.writeFile(temporary, serialized, { encoding: "utf8", mode: 0o600 }); + await fs.rename(temporary, target); + await fs.chmod(target, 0o600).catch(() => {}); + }); + return this.writeQueue; + } +} + +export function createMemoryWebUiState(defaultProfile) { + const normalizedDefault = normalizeProfile({ id: DEFAULT_PROFILE_ID, name: "Default", ...defaultProfile }); + let credentialHashes = []; + let profiles = [normalizedDefault]; + return { + listProfiles: () => profiles.map((profile) => ({ ...profile })), + getProfile(profileId = DEFAULT_PROFILE_ID) { + const profile = profiles.find((entry) => entry.id === profileId); + if (!profile) throw new Error(`Unknown storage profile: ${profileId}`); + return { ...profile }; + }, + async saveProfile(input) { + const profile = normalizeProfile(input); + if (profile.id === DEFAULT_PROFILE_ID) throw new Error("The default storage profile is controlled by Web UI startup flags."); + const index = profiles.findIndex((entry) => entry.id === profile.id); + if (index >= 0) profiles[index] = profile; + else profiles.push(profile); + return { ...profile }; + }, + async deleteProfile(profileId) { + if (profileId === DEFAULT_PROFILE_ID) throw new Error("The default storage profile cannot be deleted."); + profiles = profiles.filter((entry) => entry.id !== profileId); + }, + hasCredential(secret) { + return credentialHashes.includes(hashSecret(secret)); + }, + async addCredential(secret) { + const digest = hashSecret(secret); + if (!credentialHashes.includes(digest)) credentialHashes.push(digest); + }, + async removeCredential(secret) { + const digest = hashSecret(secret); + credentialHashes = credentialHashes.filter((stored) => stored !== digest); + }, + async resetCredentials() { + credentialHashes = []; + }, + credentialHashes: () => [...credentialHashes] + }; +} + +export { DEFAULT_PROFILE_ID, hashSecret }; diff --git a/test/history-requests.test.js b/test/history-requests.test.js new file mode 100644 index 0000000..dcf1713 --- /dev/null +++ b/test/history-requests.test.js @@ -0,0 +1,26 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { createLatestRequestGate, scheduleDebounced } from "../web/src/history-requests.js"; + +test("starting a newer History request aborts the older request and rejects its response", () => { + const gate = createLatestRequestGate(); + const first = gate.begin(); + const second = gate.begin(); + + assert.equal(first.signal.aborted, true); + assert.equal(second.signal.aborted, false); + assert.equal(gate.isLatest(first.sequence), false); + assert.equal(gate.isLatest(second.sequence), true); +}); + +test("History query debounce uses a 300ms delay and can be cancelled", () => { + const calls = []; + const timers = { + setTimeout(callback, delay) { calls.push(["set", delay, callback]); return 17; }, + clearTimeout(id) { calls.push(["clear", id]); } + }; + const cancel = scheduleDebounced(() => {}, 300, timers); + cancel(); + assert.deepEqual(calls.slice(0, 2).map((call) => call.slice(0, 2)), [["set", 300], ["clear", 17]]); +}); diff --git a/test/history.test.js b/test/history.test.js new file mode 100644 index 0000000..4f69e08 --- /dev/null +++ b/test/history.test.js @@ -0,0 +1,49 @@ +import assert from "node:assert/strict"; +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; + +import { getHistorySession, listHistory } from "../src/history.js"; + +async function fixture() { + const home = await fs.mkdtemp(path.join(os.tmpdir(), "codex-history-")); + const file = path.join(home, "sessions", "2026", "08", "04", "rollout-one.jsonl"); + await fs.mkdir(path.dirname(file), { recursive: true }); + const lines = [ + { type: "session_meta", timestamp: "2026-08-04T08:00:00.000Z", payload: { id: "thread-one", title: "测试会话", cwd: "/work/demo", model_provider: "openai", model: "gpt-5" } }, + { type: "event_msg", timestamp: "2026-08-04T08:01:00.000Z", payload: { type: "user_message", message: "请总结这个项目" } }, + { type: "event_msg", timestamp: "2026-08-04T08:02:00.000Z", payload: { type: "assistant_message", message: "这是项目总结。" } }, + { type: "response_item", timestamp: "2026-08-04T08:03:00.000Z", payload: { type: "message", role: "assistant", content: [{ type: "output_text", text: "Agent 的详细回答。" }] } }, + { type: "event_msg", payload: { type: "tool_call", arguments: "secret" } }, + { type: "event_msg", payload: { encrypted_content: "gAAA" } } + ]; + await fs.writeFile(file, lines.map((line) => JSON.stringify(line)).join("\n") + "\n", "utf8"); + return { home, file }; +} + +test("history lists readable sessions and filters message text", async () => { + const { home } = await fixture(); + try { + const result = await listHistory(home, { page: 1, pageSize: 50, query: "总结" }); + assert.equal(result.total, 1); + assert.equal(result.sessions[0].id, "thread-one"); + assert.equal(result.sessions[0].messageCount, 3); + } finally { + await fs.rm(home, { recursive: true, force: true }); + } +}); + +test("history detail returns only safe messages with a limit", async () => { + const { home } = await fixture(); + try { + const result = await getHistorySession(home, "thread-one", { messageLimit: 1 }); + assert.equal(result.returnedMessageCount, 1); + assert.equal(result.truncated, true); + assert.equal(result.messages[0].role, "assistant"); + assert.equal(result.messages[0].text, "Agent 的详细回答。"); + assert.doesNotMatch(JSON.stringify(result), /encrypted_content|tool_call|secret/); + } finally { + await fs.rm(home, { recursive: true, force: true }); + } +}); diff --git a/test/release-metadata.test.js b/test/release-metadata.test.js index a70ad5d..cfbf62b 100644 --- a/test/release-metadata.test.js +++ b/test/release-metadata.test.js @@ -53,10 +53,10 @@ test("reads the current repository Chinese release metadata", () => { const testDirectory = path.dirname(fileURLToPath(import.meta.url)); const rootDir = path.resolve(testDirectory, ".."); - const result = readReleaseMetadata({ rootDir, tag: "v0.4.0" }); + const result = readReleaseMetadata({ rootDir, tag: "v0.5.0" }); - assert.equal(result.title, "v0.4.0 - 更安全的事务化同步与自动化支持"); - assert.equal(result.relativeBodyPath, "docs/release-notes/v0.4.0-zh.md"); + assert.equal(result.title, "v0.5.0 - Web UI 自动配对与本地访问边界加固"); + assert.equal(result.relativeBodyPath, "docs/release-notes/v0.5.0-zh.md"); }); test("reads one validated release title and body path", () => diff --git a/test/sync-service.test.js b/test/sync-service.test.js index d69163a..b64794a 100644 --- a/test/sync-service.test.js +++ b/test/sync-service.test.js @@ -3852,11 +3852,13 @@ test("cli rejects non-integer keep values", async () => { assert.match(result.stderr, /Invalid --keep value: 1\.5/); }); -test("node version guard allows Node 16 and rejects older releases", () => { - assert.equal(getUnsupportedNodeVersionMessage("16.0.0"), null); +test("node version guard requires Node 16.20.2 or newer", () => { + assert.equal(getUnsupportedNodeVersionMessage("16.20.2"), null); + assert.equal(getUnsupportedNodeVersionMessage("18.0.0"), null); + assert.match(getUnsupportedNodeVersionMessage("16.20.1"), /requires Node\.js 16\.20\.2/); assert.match( getUnsupportedNodeVersionMessage("14.21.3"), - /requires Node\.js 16\+/ + /requires Node\.js 16\.20\.2/ ); }); diff --git a/test/web-server.test.js b/test/web-server.test.js new file mode 100644 index 0000000..ca0c852 --- /dev/null +++ b/test/web-server.test.js @@ -0,0 +1,379 @@ +import assert from "node:assert/strict"; +import fs from "node:fs/promises"; +import http from "node:http"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; + +import { createWebUiServer, startWebUi } from "../src/web-server.js"; +import { createMemoryWebUiState, WebUiStateStore } from "../src/web-state.js"; + +function request({ origin, pathname = "/", method = "GET", body, headers = {}, hostHeader }) { + return new Promise((resolve, reject) => { + const target = new URL(origin); + const serialized = body === undefined ? null : JSON.stringify(body); + const client = http.request({ + hostname: target.hostname, + port: target.port, + path: pathname, + method, + headers: { + ...(hostHeader ? { Host: hostHeader } : {}), + ...(serialized ? { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(serialized) } : {}), + ...headers + } + }, (response) => { + const chunks = []; + response.on("data", (chunk) => chunks.push(chunk)); + response.on("end", () => { + const text = Buffer.concat(chunks).toString("utf8"); + let payload = null; + try { payload = JSON.parse(text); } catch {} + resolve({ status: response.statusCode, text, payload, headers: response.headers }); + }); + }); + client.once("error", reject); + if (serialized) client.write(serialized); + client.end(); + }); +} + +async function startFixture(services = {}, options = {}) { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "codex-provider-sync-web-")); + await fs.writeFile( + path.join(root, "index.html"), + 'fixture', + "utf8" + ); + const stateStore = options.stateStore ?? createMemoryWebUiState({ codexHome: "/tmp/.codex" }); + const handle = createWebUiServer({ webRoot: root, services, stateStore, now: options.now, pairingTtlMs: options.pairingTtlMs }); + await new Promise((resolve, reject) => { + handle.server.once("error", reject); + handle.server.listen(0, "127.0.0.1", resolve); + }); + const address = handle.server.address(); + const origin = `http://127.0.0.1:${address.port}`; + handle.setBaseUrl(origin); + return { + ...handle, + stateStore, + root, + origin, + async pair(pairingToken = handle.issuePairing(), { originHeader = origin, hostHeader } = {}) { + const response = await request({ + origin, + pathname: "/api/pair", + method: "POST", + headers: { Origin: originHeader, "X-Codex-Provider-Pairing": pairingToken }, + hostHeader + }); + return { response, credential: response.payload?.deviceCredential }; + }, + close: async () => { + await new Promise((resolve, reject) => handle.server.close((error) => error ? reject(error) : resolve())); + await fs.rm(root, { recursive: true, force: true }); + } + }; +} + +async function api(handle, pathname, body = {}, credential, { originHeader = handle.origin, hostHeader } = {}) { + return request({ + origin: handle.origin, + pathname, + method: "POST", + body, + hostHeader, + headers: { + Origin: originHeader, + "X-Codex-Provider-Device": credential ?? "" + } + }); +} + +function statusFixture(overrides = {}) { + return { + codexHome: "/tmp/.codex", + sqliteHome: "/tmp/.codex/sqlite", + sqliteHomeSource: "default", + sqliteAccess: { supported: true, reason: null, message: null }, + checkedStateDbPaths: ["/tmp/.codex/sqlite/state_5.sqlite"], + currentProvider: "openai", + currentProviderImplicit: false, + configuredProviders: ["openai", "relay"], + rolloutCounts: { sessions: { relay: 2, openai: 3 }, archived_sessions: { openai: 1 } }, + lockedRolloutFiles: [], + encryptedContentCounts: { sessions: {}, archived_sessions: {} }, + encryptedContentWarning: null, + sqliteCounts: { sessions: { openai: 3, relay: 2 }, archived_sessions: { openai: 1 } }, + stateDbLocation: { path: "/tmp/.codex/sqlite/state_5.sqlite", source: "sqlite-dir" }, + sqliteRepairStats: { userEventRowsNeedingRepair: 0, cwdRowsNeedingRepair: 0 }, + projectThreadVisibility: [], + backupRoot: "/tmp/.codex/backups_state/provider-sync", + backupSummary: { count: 0, totalBytes: 0 }, + ...overrides + }; +} + +test("anonymous HTML contains no API or pairing credential and write APIs require pairing", async () => { + const handle = await startFixture({ getStatus: async () => statusFixture() }); + try { + const pairingToken = handle.issuePairing(); + const page = await request({ origin: handle.origin }); + assert.equal(page.status, 200); + assert.doesNotMatch(page.text, new RegExp(pairingToken)); + assert.doesNotMatch(page.text, /apiToken|X-Codex-Provider-Token/); + assert.doesNotMatch(page.text, /__CODEX_PROVIDER_SYNC_BOOTSTRAP__/); + assert.match(page.headers["content-security-policy"], /script-src 'self';/); + + const denied = await api(handle, "/api/status", { profileId: "default" }, "wrong-token"); + assert.equal(denied.status, 403); + assert.equal(denied.payload.code, "PAIRING_REQUIRED"); + + const paired = await handle.pair(pairingToken); + assert.equal(paired.response.status, 200); + assert.ok(paired.credential.length >= 32); + const replay = await handle.pair(pairingToken); + assert.equal(replay.response.status, 403); + + const allowed = await api(handle, "/api/status", { profileId: "default" }, paired.credential); + assert.equal(allowed.status, 200); + } finally { + await handle.close(); + } +}); + +test("pairing credentials expire and pairing material is never recorded as activity", async () => { + let currentTime = 1000; + const handle = await startFixture({}, { now: () => currentTime, pairingTtlMs: 300 }); + try { + const pairingToken = handle.issuePairing(); + currentTime += 301; + const expired = await handle.pair(pairingToken); + assert.equal(expired.response.status, 403); + assert.doesNotMatch(JSON.stringify(handle.getActivity()), new RegExp(pairingToken)); + } finally { + await handle.close(); + } +}); + +test("Origin validation uses the actual loopback Host and supports forwarded ports", async () => { + const handle = await startFixture({ getStatus: async () => statusFixture() }); + try { + const { credential } = await handle.pair(); + const invalid = await api(handle, "/api/status", { profileId: "default" }, credential, { originHeader: "http://evil.example" }); + assert.equal(invalid.status, 403); + assert.equal(invalid.payload.code, "INVALID_ORIGIN"); + + const forwardedHost = "localhost:19091"; + const forwarded = await api(handle, "/api/status", { profileId: "default" }, credential, { + originHeader: `http://${forwardedHost}`, + hostHeader: forwardedHost + }); + assert.equal(forwarded.status, 200); + } finally { + await handle.close(); + } +}); + +test("server-managed profiles reject per-operation paths and resolve profileId", async () => { + const calls = []; + const handle = await startFixture({ getStatus: async (storage) => { calls.push(storage); return statusFixture({ codexHome: storage.codexHome }); } }); + try { + const { credential } = await handle.pair(); + const rawPath = await api(handle, "/api/status", { codexHome: "/tmp/other" }, credential); + assert.equal(rawPath.status, 500); + assert.match(rawPath.payload.error, /server-managed profileId/); + + const saved = await api(handle, "/api/profiles/save", { + profileId: "work", + name: "Work", + codexHome: "/tmp/work-codex", + sqliteHome: "/tmp/work-sqlite" + }, credential); + assert.equal(saved.status, 200); + + const response = await api(handle, "/api/status", { profileId: "work" }, credential); + assert.equal(response.status, 200); + assert.equal(calls.at(-1).codexHome, path.resolve("/tmp/work-codex")); + assert.equal(calls.at(-1).sqliteHome, path.resolve("/tmp/work-sqlite")); + } finally { + await handle.close(); + } +}); + +test("Web UI sync delegates only server-resolved storage to the shared service", async () => { + const calls = []; + const handle = await startFixture({ + readConfigText: async () => 'model_provider = "openai"\nmodel = "gpt-5"\n', + readRootModelFromConfigText: () => "gpt-5", + runSync: async (options) => { calls.push(options); options.onProgress({ stage: "create_backup", status: "start" }); return { targetProvider: options.provider, backupDir: "/tmp/backup" }; } + }); + try { + const { credential } = await handle.pair(); + const invalid = await api(handle, "/api/sync", { profileId: "default", provider: "bad provider", keepCount: 5 }, credential); + assert.equal(invalid.status, 400); + const response = await api(handle, "/api/sync", { profileId: "default", provider: "openai", keepCount: 5 }, credential); + assert.equal(response.status, 200); + assert.equal(calls.length, 1); + assert.equal(calls[0].codexHome, path.resolve("/tmp/.codex")); + assert.equal(calls[0].model, "gpt-5"); + assert.ok(handle.getActivity().some((entry) => entry.message === "Creating backup")); + } finally { + await handle.close(); + } +}); + +test("Web UI restore only accepts managed backups for the selected profile", async () => { + let restored = false; + const handle = await startFixture({ + listBackups: async () => ({ backupRoot: "/tmp/.codex/backups_state/provider-sync", backups: [{ id: "known", path: "/tmp/.codex/backups_state/provider-sync/known", metadata: {} }] }), + runRestore: async () => { restored = true; return { targetProvider: "openai" }; } + }); + try { + const { credential } = await handle.pair(); + const response = await api(handle, "/api/restore", { profileId: "default", backupId: "../../outside", restoreDatabase: true, restoreSessions: true }, credential); + assert.equal(response.status, 400); + assert.equal(restored, false); + } finally { + await handle.close(); + } +}); + +test("Web UI history endpoints delegate through the selected profile", async () => { + const calls = []; + const handle = await startFixture({ + listHistory: async (codexHome, options) => { calls.push(["list", codexHome, options]); return { page: 1, pageSize: 50, total: 1, hasNextPage: false, sessions: [{ id: "thread", title: "safe" }] }; }, + getHistorySession: async (codexHome, sessionId) => { calls.push(["detail", codexHome, sessionId]); return { session: { id: sessionId }, messages: [], truncated: false, returnedMessageCount: 0 }; } + }); + try { + const { credential } = await handle.pair(); + assert.equal((await api(handle, "/api/history", { profileId: "default", query: "safe" }, credential)).status, 200); + assert.equal((await api(handle, "/api/history/session", { profileId: "default", sessionId: "thread" }, credential)).status, 200); + assert.deepEqual(calls.map((call) => call[0]), ["list", "detail"]); + } finally { + await handle.close(); + } +}); + +test("device credentials persist only as hashes and reset invalidates them", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "codex-provider-sync-state-")); + const filePath = path.join(root, "web-state.json"); + const credential = "device-secret-that-must-not-be-persisted-verbatim"; + try { + const first = new WebUiStateStore({ filePath, defaultProfile: { codexHome: root } }); + await first.initialize(); + await first.addCredential(credential); + const serialized = await fs.readFile(filePath, "utf8"); + assert.doesNotMatch(serialized, new RegExp(credential)); + + const restarted = new WebUiStateStore({ filePath, defaultProfile: { codexHome: root } }); + await restarted.initialize(); + assert.equal(restarted.hasCredential(credential), true); + await restarted.resetCredentials(); + assert.equal(restarted.hasCredential(credential), false); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } +}); + +test("startWebUi listens only on IPv4 loopback and reuses its existing instance", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "codex-provider-sync-start-")); + const webRoot = path.join(root, "web"); + const stateFile = path.join(root, "state.json"); + const runtimeFile = path.join(root, "runtime.json"); + await fs.mkdir(webRoot); + await fs.writeFile(path.join(webRoot, "index.html"), "fixture"); + let first; + try { + first = await startWebUi({ port: 0, openBrowser: false, codexHome: root, stateFile, runtimeFile, webRoot }); + assert.equal(first.server.address().address, "127.0.0.1"); + const initialToken = new URL(first.pairingUrl).hash.slice("#pair=".length); + const paired = await request({ + origin: first.url, + pathname: "/api/pair", + method: "POST", + headers: { Origin: first.url, "X-Codex-Provider-Pairing": initialToken } + }); + const originalCredential = paired.payload.deviceCredential; + const second = await startWebUi({ port: 0, openBrowser: false, resetAccess: true, codexHome: root, stateFile, runtimeFile, webRoot }); + assert.equal(second.reused, true); + assert.equal(second.url, first.url); + assert.match(second.pairingUrl, /#pair=/); + const invalidated = await request({ + origin: first.url, + pathname: "/api/status", + method: "POST", + body: { profileId: "default" }, + headers: { Origin: first.url, "X-Codex-Provider-Device": originalCredential } + }); + assert.equal(invalidated.status, 403); + } finally { + await first?.close(); + await fs.rm(root, { recursive: true, force: true }); + } +}); + +test("startWebUi reports occupied ports clearly and handles unavailable or headless browser openers", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "codex-provider-sync-port-")); + const webRoot = path.join(root, "web"); + await fs.mkdir(webRoot); + await fs.writeFile(path.join(webRoot, "index.html"), "fixture"); + const occupied = http.createServer(); + await new Promise((resolve, reject) => { + occupied.once("error", reject); + occupied.listen(0, "127.0.0.1", resolve); + }); + let handle; + try { + const occupiedPort = occupied.address().port; + await assert.rejects( + startWebUi({ + port: occupiedPort, + openBrowser: false, + codexHome: root, + stateFile: path.join(root, "occupied-state.json"), + runtimeFile: path.join(root, "occupied-runtime.json"), + webRoot + }), + /port .* already in use by another program/ + ); + handle = await startWebUi({ + port: 0, + openBrowser: true, + platform: "linux", + environment: { DISPLAY: ":0" }, + openUrl: async () => false, + codexHome: root, + stateFile: path.join(root, "headless-state.json"), + runtimeFile: path.join(root, "headless-runtime.json"), + webRoot + }); + assert.equal(handle.browserOpened, false); + assert.match(handle.pairingUrl, /#pair=/); + await handle.close(); + handle = null; + + let openAttempts = 0; + handle = await startWebUi({ + port: 0, + openBrowser: true, + platform: "linux", + environment: {}, + openUrl: async () => { + openAttempts += 1; + return true; + }, + codexHome: root, + stateFile: path.join(root, "no-display-state.json"), + runtimeFile: path.join(root, "no-display-runtime.json"), + webRoot + }); + assert.equal(openAttempts, 0); + assert.equal(handle.browserOpened, false); + assert.match(handle.pairingUrl, /#pair=/); + } finally { + await handle?.close(); + await new Promise((resolve) => occupied.close(resolve)); + await fs.rm(root, { recursive: true, force: true }); + } +}); diff --git a/web/dist/assets/index-00e598c3.css b/web/dist/assets/index-00e598c3.css new file mode 100644 index 0000000..0efc5e7 --- /dev/null +++ b/web/dist/assets/index-00e598c3.css @@ -0,0 +1 @@ +:root{color:#172033;background:#f5f7fa;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;--accent: #2463eb;--accent-strong: #174fc8;--accent-soft: #edf3ff;--success: #11865b;--success-soft: #eaf8f2;--warning: #b36309;--warning-soft: #fff7e6;--danger: #c43c45;--danger-soft: #fff0f0;--text: #172033;--muted: #687388;--subtle: #8a94a7;--border: #dfe4ec;--border-strong: #cdd4df;--surface: #ffffff;--sidebar: #fbfcfe;--mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:#f5f7fa}button,input,select{font:inherit}button{color:inherit}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid rgba(36,99,235,.18);outline-offset:1px}.app-shell{min-height:100vh;display:grid;grid-template-columns:198px minmax(0,1fr);grid-template-rows:68px minmax(0,1fr)}.app-header{grid-column:1 / -1;display:flex;align-items:center;justify-content:space-between;padding:0 24px;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:30}.brand,.header-actions,.service-state,.brand-mark,.nav-item,.sidebar-provider-value,.path-input-wrap,.button,.alignment-state,.column-label,.warning-row,.execution-head,.backup-assurance,.text-button,.backup-row,.backup-root-line,.live-operation,.modal-callout,.restore-summary,.toast>div{display:flex;align-items:center}.brand{gap:11px}.brand-mark{width:36px;height:36px;justify-content:center;color:#fff;background:#202a3d;border-radius:9px;box-shadow:0 5px 13px #17203329}.brand-name{font-size:15px;font-weight:720;letter-spacing:-.01em}.brand-subtitle{margin-top:2px;color:var(--muted);font-size:11px}.header-actions{gap:16px}.service-state{gap:8px;color:#4f5b70;font-size:12px}.status-dot{width:7px;height:7px;border-radius:50%;background:#9aa4b5;box-shadow:0 0 0 3px #9aa4b51f;flex:0 0 auto}.status-dot--success{background:var(--success);box-shadow:0 0 0 3px #11865b1f}.status-dot--warning{background:#db820d;box-shadow:0 0 0 3px #db820d1f}.status-dot--danger{background:var(--danger);box-shadow:0 0 0 3px #c43c451f}.sidebar{grid-column:1;grid-row:2;position:sticky;top:68px;height:calc(100vh - 68px);display:flex;flex-direction:column;padding:19px 12px 16px;background:var(--sidebar);border-right:1px solid var(--border)}.navigation{display:grid;gap:4px}.nav-item{width:100%;gap:10px;border:0;border-radius:7px;background:transparent;padding:10px 12px;color:#657087;font-size:13px;text-align:left;cursor:pointer}.nav-item:hover{background:#f0f3f8;color:#354157}.nav-item--active{background:var(--accent-soft);color:#174fc8;font-weight:650;box-shadow:inset 2px 0 0 var(--accent)}.sidebar-foot{margin-top:auto;padding:14px 10px 0;border-top:1px solid var(--border)}.sidebar-provider-label{color:var(--subtle);font-size:10px;text-transform:uppercase;letter-spacing:.08em}.sidebar-provider-value{gap:8px;margin-top:8px;font-family:var(--mono);font-size:12px;font-weight:700}.sidebar-version{margin-top:12px;color:#a0a8b6;font-size:10px}.main-area{grid-column:2;grid-row:2;min-width:0}.storage-bar{min-height:88px;display:grid;grid-template-columns:minmax(220px,.8fr) minmax(260px,1.2fr) auto auto auto;gap:10px;align-items:end;padding:15px 26px 16px;background:rgba(255,255,255,.92);border-bottom:1px solid var(--border);position:sticky;top:68px;z-index:20;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.path-field{display:grid;gap:6px;min-width:0;color:#455168;font-size:11px;font-weight:650}.path-field span small{color:var(--subtle);font-weight:450}.path-input-wrap{height:36px;gap:8px;padding:0 10px;border:1px solid var(--border-strong);background:#fff;border-radius:7px;color:#8791a3}.path-input-wrap:focus-within{border-color:#8eaff6;box-shadow:0 0 0 3px #2463eb17}.path-input-wrap input,.path-input-wrap select{min-width:0;width:100%;border:0;outline:0;color:#273247;font-family:var(--mono);font-size:11px;background:transparent}.storage-refresh{height:36px}.view-content{max-width:1480px;margin:0 auto;padding:24px 26px 42px}.history-view{height:calc(100dvh - 156px);min-height:0;display:flex;flex-direction:column;overflow:hidden}h1,h2,p{margin-top:0}h1{margin-bottom:6px;font-size:25px;letter-spacing:-.025em}h2{margin-bottom:5px;font-size:16px;letter-spacing:-.014em}.section-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.section-title-row p,.execution-head p,.page-intro p{margin-bottom:0;color:var(--muted);font-size:12px;line-height:1.55}.section-title-row--compact{align-items:center}.button{min-height:36px;justify-content:center;gap:7px;padding:0 13px;border:1px solid transparent;border-radius:7px;font-size:12px;font-weight:650;cursor:pointer;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease,transform .15s ease}.button:hover:not(:disabled){transform:translateY(-1px)}.button:disabled{opacity:.48;cursor:not-allowed}.button--primary{color:#fff;background:var(--accent);border-color:var(--accent);box-shadow:0 5px 12px #2463eb2e}.button--primary:hover:not(:disabled){background:var(--accent-strong)}.button--secondary{color:#3d4960;background:#fff;border-color:var(--border-strong);box-shadow:0 1px 2px #1720330a}.button--secondary:hover:not(:disabled){background:#f8faff;border-color:#b7c2d2}.button--quiet{background:#f5f7fa;border-color:#edf0f5;color:#3e4b62}.button--danger{color:#fff;background:var(--danger);border-color:var(--danger)}.button--compact{min-height:31px;padding:0 10px;font-size:11px}.text-button{gap:3px;border:0;background:transparent;color:var(--accent);font-size:11px;font-weight:650;cursor:pointer}.icon-button{width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:6px;background:transparent;cursor:pointer;color:var(--muted)}.icon-button:hover{background:#f1f3f7}.status-panel,.data-section,.recent-backups,.backup-list-section,.activity-console{background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:0 1px 2px #17203306}.status-panel{padding:20px 22px 21px}.alignment-state{gap:7px;min-height:30px;padding:0 10px;border:1px solid var(--border);border-radius:6px;font-size:11px;font-weight:650}.alignment-state--success{color:var(--success);border-color:#bfe4d4;background:var(--success-soft)}.alignment-state--warning{color:var(--warning);border-color:#ead2a4;background:var(--warning-soft)}.summary-strip{display:grid;grid-template-columns:repeat(4,1fr);margin-top:20px;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.summary-item{min-width:0;padding:15px 18px;border-right:1px solid var(--border)}.summary-item:first-child{padding-left:0}.summary-item:last-child{border-right:0}.summary-item>span{display:block;color:var(--muted);font-size:10px}.summary-item strong{display:block;margin-top:5px;font-size:19px;letter-spacing:-.025em;overflow:hidden;text-overflow:ellipsis}.summary-item small{display:block;margin-top:3px;color:var(--subtle);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.distribution-grid{display:grid;grid-template-columns:minmax(0,1fr) 1px minmax(0,1fr);gap:22px;padding-top:19px}.distribution-divider{background:var(--border)}.column-label{gap:7px;margin-bottom:14px;color:#3f4a5f;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.distribution-block+.distribution-block{margin-top:16px}.distribution-heading,.distribution-meta{display:flex;justify-content:space-between;gap:12px}.distribution-heading{margin-bottom:8px;color:var(--muted);font-size:11px}.distribution-heading strong{color:#3c485e}.distribution-list{display:grid;gap:8px}.distribution-meta{margin-bottom:5px;color:var(--muted);font-family:var(--mono);font-size:10px}.provider-name{color:#303b50}.bar-track{height:5px;overflow:hidden;background:#edf0f5;border-radius:99px}.bar-fill{display:block;height:100%;background:#9eabc0;border-radius:inherit}.bar-fill--current{background:var(--accent)}.empty-inline{color:var(--subtle);font-size:11px}.warning-stack{margin-top:12px;display:grid;gap:7px}.warning-row{align-items:flex-start;gap:10px;padding:10px 13px;border:1px solid;border-radius:7px;font-size:11px}.warning-row svg{margin-top:1px;flex:0 0 auto}.warning-row div{display:grid;gap:2px}.warning-row span{color:#6e5d47;line-height:1.5;word-break:break-word}.warning-row--warning{background:var(--warning-soft);border-color:#ebd7ae;color:var(--warning)}.warning-row--danger{background:var(--danger-soft);border-color:#efc2c4;color:var(--danger)}.warning-row--info{background:#eef6ff;border-color:#c9def8;color:#2463a7}.warning-row--info span{color:#4f6a89}.overview-lower-grid{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:18px;align-items:start;margin-top:18px}.overview-main-column{min-width:0;width:100%;display:grid;grid-template-columns:minmax(0,1fr);gap:18px}.data-section,.recent-backups{min-width:0;padding:18px 20px}.table-scroll{overflow-x:auto;margin-top:15px}.data-table{width:100%;border-collapse:collapse;font-size:11px}.data-table th{padding:9px 10px;color:var(--muted);background:#f8fafc;border-top:1px solid var(--border);border-bottom:1px solid var(--border);font-weight:650;text-align:left;white-space:nowrap}.data-table td{padding:11px 10px;border-bottom:1px solid #edf0f4;color:#465268;vertical-align:top}.data-table tbody tr:last-child td{border-bottom:0}.path-cell{max-width:260px;font-family:var(--mono);color:#263249!important;word-break:break-all}.table-empty{color:var(--subtle)!important;text-align:center;padding:25px!important}.execution-panel{position:sticky;top:174px;padding:19px;background:#fff;border:1px solid #cdd8e9;border-radius:10px;box-shadow:0 9px 24px #26375312}.execution-head{align-items:flex-start;justify-content:space-between;gap:14px}.execution-head>svg{color:var(--accent);margin-top:2px}.segmented{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-top:17px;padding:4px;background:#f1f4f8;border-radius:8px}.segmented-option{min-width:0;display:grid;gap:3px;padding:9px 8px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--muted);cursor:pointer;text-align:left}.segmented-option span{font-size:11px;font-weight:700}.segmented-option small{color:var(--subtle);font-size:9px}.segmented-option--active{background:#fff;color:#263249;border-color:#dce3ee;box-shadow:0 2px 5px #17203312}.form-grid{display:grid;grid-template-columns:minmax(0,1fr) 100px;gap:12px;margin-top:15px}.form-field{display:grid;align-content:start;gap:6px;color:#4c586d;font-size:10px;font-weight:650}.form-field select,.form-field input,.custom-model-option input[type=text]{width:100%;height:35px;padding:0 9px;color:#273247;background:#fff;border:1px solid var(--border-strong);border-radius:6px;font-size:11px}.form-field small{color:var(--subtle);font-weight:450;line-height:1.35}.form-field .field-error{color:var(--danger)}.manual-provider-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px;align-items:center;margin-top:9px}.manual-provider-row input{min-width:0;height:32px;padding:0 9px;color:#273247;background:#fff;border:1px solid var(--border-strong);border-radius:6px;font-family:var(--mono);font-size:10px}.manual-remove{grid-column:1 / -1;justify-self:start;padding:0;border:0;background:transparent;color:var(--danger);font-size:9px;cursor:pointer}.model-options,.restore-options{margin:16px 0 0;padding:13px;border:1px solid var(--border);border-radius:7px}.model-options legend,.restore-options legend{padding:0 5px;color:#566176;font-size:10px;font-weight:700}.model-options>label,.restore-options>label{display:flex;align-items:flex-start;gap:8px;padding:7px 0;color:#364258;font-size:11px;cursor:pointer}.model-options input[type=radio],.restore-options input[type=checkbox]{margin:2px 0 0;accent-color:var(--accent)}.model-options label>span,.restore-options label>span{min-width:0;display:grid;gap:2px;flex:1}.model-options small,.restore-options small{color:var(--muted);font-size:9px;font-weight:450;line-height:1.4}.custom-model-option input[type=text]{margin-top:5px}.backup-assurance{gap:7px;margin-top:14px;color:var(--success);font-size:10px}.execute-button{width:100%;height:40px;margin-top:14px}.backup-rows{margin-top:13px;border-top:1px solid var(--border)}.backup-row{min-width:0;gap:11px;padding:11px 0;border-bottom:1px solid #edf0f4}.backup-row:last-child{border-bottom:0}.backup-icon{width:30px;height:30px;display:grid;place-items:center;color:#5e6a80;background:#f1f4f8;border-radius:7px;flex:0 0 auto}.backup-main{min-width:0;display:grid;gap:2px;flex:1}.backup-main strong{font-size:11px}.backup-main span,.backup-size{color:var(--muted);font-size:10px}.empty-state{padding:25px 0 12px;color:var(--subtle);font-size:11px;text-align:center}.page-intro{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:4px 2px 20px}.prune-control{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:11px}.prune-control input{width:64px;height:34px;border:1px solid var(--border-strong);border-radius:6px;text-align:center}.backup-list-section{overflow:hidden}.backup-root-line{gap:8px;padding:13px 17px;background:#f8fafc;border-bottom:1px solid var(--border);color:#59657a;font-size:10px}.backup-root-line span{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;font-family:var(--mono);white-space:nowrap}.backup-root-line strong{color:#465168;font-size:10px}.full-backup-row{display:grid;grid-template-columns:190px 230px minmax(220px,1fr) auto;gap:22px;align-items:center;padding:16px 18px;border-bottom:1px solid var(--border)}.full-backup-row:last-child{border-bottom:0}.backup-date,.backup-source{min-width:0;display:grid;gap:5px}.backup-date strong{font-size:12px}.backup-date span,.backup-source span{color:var(--subtle);font-size:9px}.backup-facts{display:flex;gap:15px;color:var(--muted);font-size:10px}.backup-facts span{display:grid;gap:3px}.backup-facts strong{color:#344057}.backup-source code{overflow:hidden;color:#445169;font-family:var(--mono);font-size:9px;text-overflow:ellipsis;white-space:nowrap}.backup-row-actions{display:flex;align-items:center;justify-content:flex-end;gap:12px;color:var(--muted);font-size:10px}.large-empty{display:grid;justify-items:center;gap:7px;padding:70px 20px;color:var(--subtle)}.large-empty strong{color:#59657a;font-size:13px}.large-empty span{font-size:11px}.live-operation{gap:7px;color:var(--warning);font-size:11px}.activity-console{overflow:hidden}.console-head{display:flex;justify-content:space-between;padding:12px 15px;color:#b6c2d4;background:#202a3b;border-bottom:1px solid #354156;font-family:var(--mono);font-size:10px}.console-body{min-height:440px;max-height:calc(100vh - 250px);overflow:auto;padding:7px 0;background:#17202f;content-visibility:auto}.console-row{display:grid;grid-template-columns:150px 70px minmax(220px,1fr) minmax(0,1.2fr);gap:12px;padding:8px 15px;border-bottom:1px solid rgba(255,255,255,.035);color:#d7deea;font-family:var(--mono);font-size:10px;line-height:1.45}.console-row time,.console-detail{color:#7e8ca3}.console-level{color:#8fa3c1;text-transform:uppercase}.console-row--success .console-level{color:#54d19f}.console-row--error .console-level{color:#ff8790}.console-row--progress .console-level{color:#79a8ff}.console-empty{padding:30px 15px;color:#708098;font-family:var(--mono);font-size:11px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:grid;place-items:center;padding:20px;background:rgba(20,28,43,.46);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.modal{width:min(600px,100%);max-height:calc(100vh - 40px);overflow:auto;background:#fff;border:1px solid #cfd6e1;border-radius:12px;box-shadow:0 24px 70px #0e172840;animation:modal-in .16s ease-out}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:17px 19px;border-bottom:1px solid var(--border)}.modal-head h2{margin:0;font-size:16px}.modal-body{padding:18px 19px}.modal-actions{display:flex;justify-content:flex-end;gap:9px;padding:13px 19px;background:#f8fafc;border-top:1px solid var(--border)}.modal-callout{align-items:flex-start;gap:10px;padding:11px 12px;color:#9a5909;background:var(--warning-soft);border:1px solid #ead4aa;border-radius:7px}.modal-callout>svg{margin-top:1px;flex:0 0 auto}.modal-callout div{display:grid;gap:3px}.modal-callout span{color:#735f43;font-size:10px;line-height:1.55;word-break:break-word}.modal-callout--danger{color:var(--danger);background:var(--danger-soft);border-color:#efc1c4}.modal-callout--warning{margin-top:14px}.operation-scope{margin:16px 0 0;border-top:1px solid var(--border)}.operation-scope>div{display:grid;grid-template-columns:130px minmax(0,1fr);gap:14px;padding:9px 0;border-bottom:1px solid #edf0f4;font-size:11px}.operation-scope dt{color:var(--muted)}.operation-scope dd{margin:0;color:#2d394f;font-family:var(--mono);word-break:break-word}.operation-scope small{color:var(--subtle)}.restore-summary{align-items:flex-start;gap:10px;padding-bottom:13px;border-bottom:1px solid var(--border)}.restore-summary div{min-width:0;display:grid;gap:4px}.restore-summary strong{font-size:12px}.restore-summary code{color:var(--muted);font-family:var(--mono);font-size:9px;word-break:break-all}.restore-options{margin-bottom:14px}.profile-form{display:grid;gap:12px}.profile-form label{display:grid;gap:6px;color:#4c586d;font-size:10px;font-weight:650}.profile-form input{width:100%;height:36px;padding:0 10px;color:#273247;border:1px solid var(--border-strong);border-radius:6px;font:11px var(--mono)}.access-gate{min-height:100vh;display:grid;place-content:center;justify-items:center;gap:12px;padding:24px;color:#344057;background:#f5f7fb;text-align:center}.access-gate svg{color:var(--accent)}.access-gate h1{margin:0;font-size:22px}.access-gate p{max-width:520px;margin:0;color:var(--muted);line-height:1.6}.access-gate code{padding:8px 12px;color:#273247;background:#fff;border:1px solid var(--border);border-radius:6px}.toast{position:fixed;right:22px;bottom:22px;z-index:120;width:min(390px,calc(100vw - 44px));display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:13px 14px;background:#fff;border:1px solid var(--border-strong);border-left:3px solid var(--accent);border-radius:8px;box-shadow:0 15px 40px #161f302e;animation:toast-in .2s ease-out}.toast>div{align-items:flex-start;gap:9px}.toast span{display:grid;gap:3px}.toast strong{font-size:12px}.toast small{color:var(--muted);font-size:10px;line-height:1.4;word-break:break-word}.toast button{border:0;background:transparent;color:var(--muted);cursor:pointer}.toast--success{border-left-color:var(--success)}.toast--success>div>svg{color:var(--success)}.toast--error{border-left-color:var(--danger)}.toast--error>div>svg{color:var(--danger)}.spin{animation:spin 1s linear infinite}.history-toolbar{display:grid;grid-template-columns:minmax(220px,1.7fr) repeat(3,minmax(130px,1fr));gap:9px;margin-bottom:14px}.history-toolbar input,.history-toolbar select{width:100%;min-width:0;padding:10px 11px;border:1px solid var(--border-strong);border-radius:7px;background:#fff;color:var(--text);font:inherit}.history-error{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding:10px 12px;color:var(--danger);background:#fff5f3;border:1px solid #f2c9c2;border-radius:7px;font-size:12px}.history-layout{display:grid;grid-template-columns:minmax(300px,.8fr) minmax(0,1.4fr);flex:1 1 auto;min-height:0;height:100%;border:1px solid var(--border);border-radius:9px;overflow:hidden;background:#fff}.history-list-panel{display:flex;min-width:0;min-height:0;flex-direction:column;overflow:hidden;border-right:1px solid var(--border);background:#fbfcfe}.history-list-head{display:flex;justify-content:space-between;padding:13px 15px;color:var(--muted);border-bottom:1px solid var(--border);font-size:11px}.history-list{flex:1 1 auto;min-height:0;height:0;overflow-y:auto;overscroll-behavior:contain}.history-session-row{display:block;width:100%;padding:13px 15px;text-align:left;border:0;border-bottom:1px solid var(--border);background:transparent;color:var(--text);cursor:pointer}.history-session-row:hover,.history-session-row--selected{background:#eef5ff}.history-session-top{display:flex;justify-content:space-between;gap:9px}.history-session-top strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.history-session-top time{flex:none;color:var(--subtle);font-size:10px}.history-session-row p{display:-webkit-box;margin:7px 0;overflow:hidden;color:var(--muted);font-size:11px;line-height:1.45;-webkit-box-orient:vertical;-webkit-line-clamp:2}.history-session-meta{display:flex;flex-wrap:wrap;gap:7px;color:var(--subtle);font-size:10px}.history-session-meta span:first-child{color:var(--accent)}.history-pagination{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-top:1px solid var(--border)}.history-pagination span{color:var(--muted);font-size:11px}.history-detail-panel{min-width:0;min-height:0;overflow-y:auto;overscroll-behavior:contain;background:#fff}.history-detail-head{display:flex;justify-content:space-between;gap:12px;padding:20px 22px 15px;border-bottom:1px solid var(--border)}.history-detail-head h2{margin:0 0 6px;font-size:17px}.history-detail-head p{margin:0;color:var(--muted);font:10px/1.4 var(--mono);word-break:break-word}.history-detail-head>span{flex:none;height:fit-content;padding:4px 7px;color:var(--accent);background:#edf4ff;border-radius:4px;font-size:10px}.history-truncated{display:flex;align-items:center;gap:7px;margin:14px 22px 0;padding:9px 10px;color:#8b631c;background:#fff8e7;border:1px solid #f0dfae;border-radius:6px;font-size:11px}.message-stream{display:grid;gap:14px;padding:20px 22px 28px}.chat-message{max-width:88%}.chat-message--user{justify-self:end}.chat-message--assistant{justify-self:start}.chat-message-label{display:flex;justify-content:space-between;gap:12px;margin-bottom:5px;color:var(--muted);font-size:10px}.chat-message--user .chat-message-label{color:var(--accent)}.chat-message-label time{color:var(--subtle);font:9px var(--mono)}.chat-message-body{padding:11px 13px;white-space:pre-wrap;word-break:break-word;color:var(--text);background:#f5f7fb;border:1px solid var(--border);border-radius:8px;font-size:12px;line-height:1.6}.chat-message--user .chat-message-body{background:#edf4ff;border-color:#d5e4fb}.chat-message-body code{padding:1px 4px;background:rgba(45,57,79,.08);border-radius:3px;font:11px var(--mono)}.chat-message-body pre{margin:8px 0 0;padding:10px;overflow:auto;background:#1f2937;color:#f7f9fc;border-radius:5px;white-space:pre}.chat-message-body pre code{padding:0;background:transparent;color:inherit}@keyframes spin{to{transform:rotate(360deg)}}@keyframes modal-in{0%{opacity:0;transform:translateY(8px) scale(.99)}}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}}@media (max-width: 1120px){.app-shell{grid-template-columns:168px minmax(0,1fr)}.overview-lower-grid{grid-template-columns:1fr}.execution-panel{position:static}.full-backup-row{grid-template-columns:170px 1fr auto}.backup-source{grid-column:1 / 3;grid-row:2}.backup-row-actions{grid-column:3;grid-row:1 / 3}}@media (max-width: 820px){.app-shell{display:block}.app-header{height:62px;padding:0 14px}.brand-subtitle,.service-state{display:none}.sidebar{position:sticky;top:62px;z-index:25;width:100%;height:auto;display:block;padding:7px 10px;border-right:0;border-bottom:1px solid var(--border)}.navigation{display:grid;grid-template-columns:repeat(4,1fr)}.nav-item{justify-content:center;padding:8px}.nav-item--active{box-shadow:inset 0 -2px 0 var(--accent)}.sidebar-foot{display:none}.storage-bar{position:static;grid-template-columns:1fr;padding:14px}.view-content{padding:18px 14px 32px}.summary-strip{grid-template-columns:1fr 1fr}.summary-item{border-bottom:1px solid var(--border)}.summary-item:nth-child(2){border-right:0}.summary-item:nth-child(3),.summary-item:nth-child(4){border-bottom:0}.summary-item:nth-child(3){padding-left:0}.distribution-grid{grid-template-columns:1fr}.distribution-divider{height:1px}.page-intro{align-items:flex-start;flex-direction:column}.full-backup-row{grid-template-columns:1fr auto;gap:12px}.backup-facts,.backup-source{grid-column:1 / -1}.backup-row-actions{grid-column:2;grid-row:1}.console-row{grid-template-columns:115px 62px minmax(180px,1fr)}.console-detail{grid-column:3}.history-toolbar{grid-template-columns:1fr 1fr}.history-toolbar input{grid-column:1 / -1}.history-view{height:calc(100dvh - 270px);min-height:520px}.history-layout{grid-template-columns:1fr;min-height:0}.history-list-panel{min-height:0;max-height:40%;border-right:0;border-bottom:1px solid var(--border)}.history-detail-panel{min-height:0}}@media (max-width: 560px){.header-actions .button span{display:none}.brand-name{font-size:13px}.status-panel,.data-section,.recent-backups{padding:16px}.section-title-row{align-items:flex-start;flex-direction:column}.summary-strip{grid-template-columns:1fr}.summary-item{padding-left:0;border-right:0;border-bottom:1px solid var(--border)!important}.summary-item:last-child{border-bottom:0!important}.form-grid,.segmented{grid-template-columns:1fr}.backup-size{display:none}.prune-control{width:100%;justify-content:space-between}.operation-scope>div{grid-template-columns:1fr;gap:4px}.modal{max-height:calc(100vh - 20px)}.modal-backdrop{padding:10px}.history-toolbar{grid-template-columns:1fr}.history-toolbar input{grid-column:auto}.history-view{height:calc(100dvh - 300px);min-height:500px}.history-detail-head,.message-stream{padding-left:15px;padding-right:15px}.chat-message{max-width:96%}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}} diff --git a/web/dist/assets/index-33db301d.js b/web/dist/assets/index-33db301d.js new file mode 100644 index 0000000..d95fe84 --- /dev/null +++ b/web/dist/assets/index-33db301d.js @@ -0,0 +1,42 @@ +(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const i of l)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function t(l){const i={};return l.integrity&&(i.integrity=l.integrity),l.referrerPolicy&&(i.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?i.credentials="include":l.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(l){if(l.ep)return;l.ep=!0;const i=t(l);fetch(l.href,i)}})();function Rc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var yu={exports:{}},jl={},gu={exports:{}},F={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var hr=Symbol.for("react.element"),Mc=Symbol.for("react.portal"),Ic=Symbol.for("react.fragment"),Oc=Symbol.for("react.strict_mode"),Dc=Symbol.for("react.profiler"),Fc=Symbol.for("react.provider"),$c=Symbol.for("react.context"),Ac=Symbol.for("react.forward_ref"),Uc=Symbol.for("react.suspense"),Hc=Symbol.for("react.memo"),Bc=Symbol.for("react.lazy"),ss=Symbol.iterator;function Vc(e){return e===null||typeof e!="object"?null:(e=ss&&e[ss]||e["@@iterator"],typeof e=="function"?e:null)}var xu={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},wu=Object.assign,ju={};function Ct(e,n,t){this.props=e,this.context=n,this.refs=ju,this.updater=t||xu}Ct.prototype.isReactComponent={};Ct.prototype.setState=function(e,n){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,n,"setState")};Ct.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function ku(){}ku.prototype=Ct.prototype;function oo(e,n,t){this.props=e,this.context=n,this.refs=ju,this.updater=t||xu}var so=oo.prototype=new ku;so.constructor=oo;wu(so,Ct.prototype);so.isPureReactComponent=!0;var us=Array.isArray,Su=Object.prototype.hasOwnProperty,uo={current:null},Cu={key:!0,ref:!0,__self:!0,__source:!0};function Nu(e,n,t){var r,l={},i=null,s=null;if(n!=null)for(r in n.ref!==void 0&&(s=n.ref),n.key!==void 0&&(i=""+n.key),n)Su.call(n,r)&&!Cu.hasOwnProperty(r)&&(l[r]=n[r]);var u=arguments.length-2;if(u===1)l.children=t;else if(1>>1,b=S[H];if(0>>1;Hl(Pt,M))Zel(L,Pt)?(S[H]=L,S[Ze]=M,H=Ze):(S[H]=Pt,S[Ge]=M,H=Ge);else if(Zel(L,M))S[H]=L,S[Ze]=M,H=Ze;else break e}}return T}function l(S,T){var M=S.sortIndex-T.sortIndex;return M!==0?M:S.id-T.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var s=Date,u=s.now();e.unstable_now=function(){return s.now()-u}}var a=[],d=[],v=1,m=null,h=3,g=!1,w=!1,C=!1,I=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,c=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function p(S){for(var T=t(d);T!==null;){if(T.callback===null)r(d);else if(T.startTime<=S)r(d),T.sortIndex=T.expirationTime,n(a,T);else break;T=t(d)}}function y(S){if(C=!1,p(S),!w)if(t(a)!==null)w=!0,z(N);else{var T=t(d);T!==null&&J(y,T.startTime-S)}}function N(S,T){w=!1,C&&(C=!1,f(E),E=-1),g=!0;var M=h;try{for(p(T),m=t(a);m!==null&&(!(m.expirationTime>T)||S&&!G());){var H=m.callback;if(typeof H=="function"){m.callback=null,h=m.priorityLevel;var b=H(m.expirationTime<=T);T=e.unstable_now(),typeof b=="function"?m.callback=b:m===t(a)&&r(a),p(T)}else r(a);m=t(a)}if(m!==null)var Xn=!0;else{var Ge=t(d);Ge!==null&&J(y,Ge.startTime-T),Xn=!1}return Xn}finally{m=null,h=M,g=!1}}var j=!1,k=null,E=-1,D=5,R=-1;function G(){return!(e.unstable_now()-RS||125H?(S.sortIndex=M,n(d,S),t(a)===null&&S===t(d)&&(C?(f(E),E=-1):C=!0,J(y,M-H))):(S.sortIndex=b,n(a,S),w||g||(w=!0,z(N))),S},e.unstable_shouldYield=G,e.unstable_wrapCallback=function(S){var T=h;return function(){var M=h;h=T;try{return S.apply(this,arguments)}finally{h=M}}}})(Lu);zu.exports=Lu;var ed=zu.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var nd=_,Ce=ed;function x(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),fi=Object.prototype.hasOwnProperty,td=/^[: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]*$/,cs={},ds={};function rd(e){return fi.call(ds,e)?!0:fi.call(cs,e)?!1:td.test(e)?ds[e]=!0:(cs[e]=!0,!1)}function ld(e,n,t,r){if(t!==null&&t.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return r?!1:t!==null?!t.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function id(e,n,t,r){if(n===null||typeof n>"u"||ld(e,n,t,r))return!0;if(r)return!1;if(t!==null)switch(t.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function me(e,n,t,r,l,i,s){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=t,this.propertyName=e,this.type=n,this.sanitizeURL=i,this.removeEmptyString=s}var se={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){se[e]=new me(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];se[n]=new me(n,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){se[e]=new me(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){se[e]=new me(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){se[e]=new me(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){se[e]=new me(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){se[e]=new me(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){se[e]=new me(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){se[e]=new me(e,5,!1,e.toLowerCase(),null,!1,!1)});var fo=/[\-:]([a-z])/g;function po(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 n=e.replace(fo,po);se[n]=new me(n,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(fo,po);se[n]=new me(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(fo,po);se[n]=new me(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){se[e]=new me(e,1,!1,e.toLowerCase(),null,!1,!1)});se.xlinkHref=new me("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){se[e]=new me(e,1,!1,e.toLowerCase(),null,!0,!0)});function ho(e,n,t,r){var l=se.hasOwnProperty(n)?se[n]:null;(l!==null?l.type!==0:r||!(2u||l[s]!==i[u]){var a=` +`+l[s].replace(" at new "," at ");return e.displayName&&a.includes("")&&(a=a.replace("",e.displayName)),a}while(1<=s&&0<=u);break}}}finally{Bl=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?Dt(e):""}function od(e){switch(e.tag){case 5:return Dt(e.type);case 16:return Dt("Lazy");case 13:return Dt("Suspense");case 19:return Dt("SuspenseList");case 0:case 2:case 15:return e=Vl(e.type,!1),e;case 11:return e=Vl(e.type.render,!1),e;case 1:return e=Vl(e.type,!0),e;default:return""}}function vi(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 Jn:return"Fragment";case Zn:return"Portal";case pi:return"Profiler";case mo:return"StrictMode";case hi:return"Suspense";case mi:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Mu:return(e.displayName||"Context")+".Consumer";case Ru:return(e._context.displayName||"Context")+".Provider";case vo:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case yo:return n=e.displayName||null,n!==null?n:vi(e.type)||"Memo";case pn:n=e._payload,e=e._init;try{return vi(e(n))}catch{}}return null}function sd(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return vi(n);case 8:return n===mo?"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 n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function Pn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Ou(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function ud(e){var n=Ou(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),r=""+e[n];if(!e.hasOwnProperty(n)&&typeof t<"u"&&typeof t.get=="function"&&typeof t.set=="function"){var l=t.get,i=t.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return l.call(this)},set:function(s){r=""+s,i.call(this,s)}}),Object.defineProperty(e,n,{enumerable:t.enumerable}),{getValue:function(){return r},setValue:function(s){r=""+s},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function kr(e){e._valueTracker||(e._valueTracker=ud(e))}function Du(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),r="";return e&&(r=Ou(e)?e.checked?"true":"false":e.value),e=r,e!==t?(n.setValue(e),!0):!1}function Gr(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function yi(e,n){var t=n.checked;return q({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:t??e._wrapperState.initialChecked})}function ps(e,n){var t=n.defaultValue==null?"":n.defaultValue,r=n.checked!=null?n.checked:n.defaultChecked;t=Pn(n.value!=null?n.value:t),e._wrapperState={initialChecked:r,initialValue:t,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Fu(e,n){n=n.checked,n!=null&&ho(e,"checked",n,!1)}function gi(e,n){Fu(e,n);var t=Pn(n.value),r=n.type;if(t!=null)r==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?xi(e,n.type,t):n.hasOwnProperty("defaultValue")&&xi(e,n.type,Pn(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function hs(e,n,t){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var r=n.type;if(!(r!=="submit"&&r!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}t=e.name,t!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,t!==""&&(e.name=t)}function xi(e,n,t){(n!=="number"||Gr(e.ownerDocument)!==e)&&(t==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}var Ft=Array.isArray;function ct(e,n,t,r){if(e=e.options,n){n={};for(var l=0;l"+n.valueOf().toString()+"",n=Sr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Zt(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&t.nodeType===3){t.nodeValue=n;return}}e.textContent=n}var Ut={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},ad=["Webkit","ms","Moz","O"];Object.keys(Ut).forEach(function(e){ad.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),Ut[n]=Ut[e]})});function Hu(e,n,t){return n==null||typeof n=="boolean"||n===""?"":t||typeof n!="number"||n===0||Ut.hasOwnProperty(e)&&Ut[e]?(""+n).trim():n+"px"}function Bu(e,n){e=e.style;for(var t in n)if(n.hasOwnProperty(t)){var r=t.indexOf("--")===0,l=Hu(t,n[t],r);t==="float"&&(t="cssFloat"),r?e.setProperty(t,l):e[t]=l}}var cd=q({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 ki(e,n){if(n){if(cd[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(x(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(x(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(x(61))}if(n.style!=null&&typeof n.style!="object")throw Error(x(62))}}function Si(e,n){if(e.indexOf("-")===-1)return typeof n.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 Ci=null;function go(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Ni=null,dt=null,ft=null;function ys(e){if(e=yr(e)){if(typeof Ni!="function")throw Error(x(280));var n=e.stateNode;n&&(n=El(n),Ni(e.stateNode,e.type,n))}}function Vu(e){dt?ft?ft.push(e):ft=[e]:dt=e}function Qu(){if(dt){var e=dt,n=ft;if(ft=dt=null,ys(e),n)for(e=0;e>>=0,e===0?32:31-(jd(e)/kd|0)|0}var Cr=64,Nr=4194304;function $t(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 el(e,n){var t=e.pendingLanes;if(t===0)return 0;var r=0,l=e.suspendedLanes,i=e.pingedLanes,s=t&268435455;if(s!==0){var u=s&~l;u!==0?r=$t(u):(i&=s,i!==0&&(r=$t(i)))}else s=t&~l,s!==0?r=$t(s):i!==0&&(r=$t(i));if(r===0)return 0;if(n!==0&&n!==r&&!(n&l)&&(l=r&-r,i=n&-n,l>=i||l===16&&(i&4194240)!==0))return n;if(r&4&&(r|=t&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function mr(e,n,t){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-$e(n),e[n]=t}function Ed(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Bt),Es=String.fromCharCode(32),Ps=!1;function ca(e,n){switch(e){case"keyup":return ef.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function da(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var bn=!1;function tf(e,n){switch(e){case"compositionend":return da(n);case"keypress":return n.which!==32?null:(Ps=!0,Es);case"textInput":return e=n.data,e===Es&&Ps?null:e;default:return null}}function rf(e,n){if(bn)return e==="compositionend"||!Eo&&ca(e,n)?(e=ua(),Hr=So=yn=null,bn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:t,offset:n-e};e=r}e:{for(;t;){if(t.nextSibling){t=t.nextSibling;break e}t=t.parentNode}t=void 0}t=Ts(t)}}function ma(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?ma(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function va(){for(var e=window,n=Gr();n instanceof e.HTMLIFrameElement;){try{var t=typeof n.contentWindow.location.href=="string"}catch{t=!1}if(t)e=n.contentWindow;else break;n=Gr(e.document)}return n}function Po(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}function pf(e){var n=va(),t=e.focusedElem,r=e.selectionRange;if(n!==t&&t&&t.ownerDocument&&ma(t.ownerDocument.documentElement,t)){if(r!==null&&Po(t)){if(n=r.start,e=r.end,e===void 0&&(e=n),"selectionStart"in t)t.selectionStart=n,t.selectionEnd=Math.min(e,t.value.length);else if(e=(n=t.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var l=t.textContent.length,i=Math.min(r.start,l);r=r.end===void 0?i:Math.min(r.end,l),!e.extend&&i>r&&(l=r,r=i,i=l),l=Rs(t,i);var s=Rs(t,r);l&&s&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(n=n.createRange(),n.setStart(l.node,l.offset),e.removeAllRanges(),i>r?(e.addRange(n),e.extend(s.node,s.offset)):(n.setEnd(s.node,s.offset),e.addRange(n)))}}for(n=[],e=t;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof t.focus=="function"&&t.focus(),t=0;t=document.documentMode,et=null,Ti=null,Qt=null,Ri=!1;function Ms(e,n,t){var r=t.window===t?t.document:t.nodeType===9?t:t.ownerDocument;Ri||et==null||et!==Gr(r)||(r=et,"selectionStart"in r&&Po(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}),Qt&&rr(Qt,r)||(Qt=r,r=rl(Ti,"onSelect"),0rt||(e.current=$i[rt],$i[rt]=null,rt--)}function U(e,n){rt++,$i[rt]=e.current,e.current=n}var _n={},de=Ln(_n),ge=Ln(!1),Un=_n;function yt(e,n){var t=e.type.contextTypes;if(!t)return _n;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l={},i;for(i in t)l[i]=n[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=l),l}function xe(e){return e=e.childContextTypes,e!=null}function il(){V(ge),V(de)}function Us(e,n,t){if(de.current!==_n)throw Error(x(168));U(de,n),U(ge,t)}function Na(e,n,t){var r=e.stateNode;if(n=n.childContextTypes,typeof r.getChildContext!="function")return t;r=r.getChildContext();for(var l in r)if(!(l in n))throw Error(x(108,sd(e)||"Unknown",l));return q({},t,r)}function ol(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||_n,Un=de.current,U(de,e),U(ge,ge.current),!0}function Hs(e,n,t){var r=e.stateNode;if(!r)throw Error(x(169));t?(e=Na(e,n,Un),r.__reactInternalMemoizedMergedChildContext=e,V(ge),V(de),U(de,e)):V(ge),U(ge,t)}var en=null,Pl=!1,ri=!1;function Ea(e){en===null?en=[e]:en.push(e)}function Nf(e){Pl=!0,Ea(e)}function Tn(){if(!ri&&en!==null){ri=!0;var e=0,n=A;try{var t=en;for(A=1;e>=s,l-=s,nn=1<<32-$e(n)+l|t<E?(D=k,k=null):D=k.sibling;var R=h(f,k,p[E],y);if(R===null){k===null&&(k=D);break}e&&k&&R.alternate===null&&n(f,k),c=i(R,c,E),j===null?N=R:j.sibling=R,j=R,k=D}if(E===p.length)return t(f,k),Q&&Rn(f,E),N;if(k===null){for(;EE?(D=k,k=null):D=k.sibling;var G=h(f,k,R.value,y);if(G===null){k===null&&(k=D);break}e&&k&&G.alternate===null&&n(f,k),c=i(G,c,E),j===null?N=G:j.sibling=G,j=G,k=D}if(R.done)return t(f,k),Q&&Rn(f,E),N;if(k===null){for(;!R.done;E++,R=p.next())R=m(f,R.value,y),R!==null&&(c=i(R,c,E),j===null?N=R:j.sibling=R,j=R);return Q&&Rn(f,E),N}for(k=r(f,k);!R.done;E++,R=p.next())R=g(k,f,E,R.value,y),R!==null&&(e&&R.alternate!==null&&k.delete(R.key===null?E:R.key),c=i(R,c,E),j===null?N=R:j.sibling=R,j=R);return e&&k.forEach(function(Be){return n(f,Be)}),Q&&Rn(f,E),N}function I(f,c,p,y){if(typeof p=="object"&&p!==null&&p.type===Jn&&p.key===null&&(p=p.props.children),typeof p=="object"&&p!==null){switch(p.$$typeof){case jr:e:{for(var N=p.key,j=c;j!==null;){if(j.key===N){if(N=p.type,N===Jn){if(j.tag===7){t(f,j.sibling),c=l(j,p.props.children),c.return=f,f=c;break e}}else if(j.elementType===N||typeof N=="object"&&N!==null&&N.$$typeof===pn&&Qs(N)===j.type){t(f,j.sibling),c=l(j,p.props),c.ref=Mt(f,j,p),c.return=f,f=c;break e}t(f,j);break}else n(f,j);j=j.sibling}p.type===Jn?(c=An(p.props.children,f.mode,y,p.key),c.return=f,f=c):(y=Xr(p.type,p.key,p.props,null,f.mode,y),y.ref=Mt(f,c,p),y.return=f,f=y)}return s(f);case Zn:e:{for(j=p.key;c!==null;){if(c.key===j)if(c.tag===4&&c.stateNode.containerInfo===p.containerInfo&&c.stateNode.implementation===p.implementation){t(f,c.sibling),c=l(c,p.children||[]),c.return=f,f=c;break e}else{t(f,c);break}else n(f,c);c=c.sibling}c=di(p,f.mode,y),c.return=f,f=c}return s(f);case pn:return j=p._init,I(f,c,j(p._payload),y)}if(Ft(p))return w(f,c,p,y);if(_t(p))return C(f,c,p,y);Rr(f,p)}return typeof p=="string"&&p!==""||typeof p=="number"?(p=""+p,c!==null&&c.tag===6?(t(f,c.sibling),c=l(c,p),c.return=f,f=c):(t(f,c),c=ci(p,f.mode,y),c.return=f,f=c),s(f)):t(f,c)}return I}var xt=La(!0),Ta=La(!1),al=Ln(null),cl=null,ot=null,To=null;function Ro(){To=ot=cl=null}function Mo(e){var n=al.current;V(al),e._currentValue=n}function Hi(e,n,t){for(;e!==null;){var r=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,r!==null&&(r.childLanes|=n)):r!==null&&(r.childLanes&n)!==n&&(r.childLanes|=n),e===t)break;e=e.return}}function ht(e,n){cl=e,To=ot=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&n&&(ye=!0),e.firstContext=null)}function Te(e){var n=e._currentValue;if(To!==e)if(e={context:e,memoizedValue:n,next:null},ot===null){if(cl===null)throw Error(x(308));ot=e,cl.dependencies={lanes:0,firstContext:e}}else ot=ot.next=e;return n}var On=null;function Io(e){On===null?On=[e]:On.push(e)}function Ra(e,n,t,r){var l=n.interleaved;return l===null?(t.next=t,Io(n)):(t.next=l.next,l.next=t),n.interleaved=t,sn(e,r)}function sn(e,n){e.lanes|=n;var t=e.alternate;for(t!==null&&(t.lanes|=n),t=e,e=e.return;e!==null;)e.childLanes|=n,t=e.alternate,t!==null&&(t.childLanes|=n),t=e,e=e.return;return t.tag===3?t.stateNode:null}var hn=!1;function Oo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ma(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function rn(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function Sn(e,n,t){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,$&2){var l=r.pending;return l===null?n.next=n:(n.next=l.next,l.next=n),r.pending=n,sn(e,t)}return l=r.interleaved,l===null?(n.next=n,Io(r)):(n.next=l.next,l.next=n),r.interleaved=n,sn(e,t)}function Vr(e,n,t){if(n=n.updateQueue,n!==null&&(n=n.shared,(t&4194240)!==0)){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,wo(e,t)}}function Ws(e,n){var t=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,t===r)){var l=null,i=null;if(t=t.firstBaseUpdate,t!==null){do{var s={eventTime:t.eventTime,lane:t.lane,tag:t.tag,payload:t.payload,callback:t.callback,next:null};i===null?l=i=s:i=i.next=s,t=t.next}while(t!==null);i===null?l=i=n:i=i.next=n}else l=i=n;t={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=t;return}e=t.lastBaseUpdate,e===null?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}function dl(e,n,t,r){var l=e.updateQueue;hn=!1;var i=l.firstBaseUpdate,s=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var a=u,d=a.next;a.next=null,s===null?i=d:s.next=d,s=a;var v=e.alternate;v!==null&&(v=v.updateQueue,u=v.lastBaseUpdate,u!==s&&(u===null?v.firstBaseUpdate=d:u.next=d,v.lastBaseUpdate=a))}if(i!==null){var m=l.baseState;s=0,v=d=a=null,u=i;do{var h=u.lane,g=u.eventTime;if((r&h)===h){v!==null&&(v=v.next={eventTime:g,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var w=e,C=u;switch(h=n,g=t,C.tag){case 1:if(w=C.payload,typeof w=="function"){m=w.call(g,m,h);break e}m=w;break e;case 3:w.flags=w.flags&-65537|128;case 0:if(w=C.payload,h=typeof w=="function"?w.call(g,m,h):w,h==null)break e;m=q({},m,h);break e;case 2:hn=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,h=l.effects,h===null?l.effects=[u]:h.push(u))}else g={eventTime:g,lane:h,tag:u.tag,payload:u.payload,callback:u.callback,next:null},v===null?(d=v=g,a=m):v=v.next=g,s|=h;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;h=u,u=h.next,h.next=null,l.lastBaseUpdate=h,l.shared.pending=null}}while(1);if(v===null&&(a=m),l.baseState=a,l.firstBaseUpdate=d,l.lastBaseUpdate=v,n=l.shared.interleaved,n!==null){l=n;do s|=l.lane,l=l.next;while(l!==n)}else i===null&&(l.shared.lanes=0);Vn|=s,e.lanes=s,e.memoizedState=m}}function Ks(e,n,t){if(e=n.effects,n.effects=null,e!==null)for(n=0;nt?t:4,e(!0);var r=ii.transition;ii.transition={};try{e(!1),n()}finally{A=t,ii.transition=r}}function Ga(){return Re().memoizedState}function zf(e,n,t){var r=Nn(e);if(t={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null},Za(e))Ja(n,t);else if(t=Ra(e,n,t,r),t!==null){var l=pe();Ae(t,e,r,l),ba(t,n,r)}}function Lf(e,n,t){var r=Nn(e),l={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null};if(Za(e))Ja(n,l);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=n.lastRenderedReducer,i!==null))try{var s=n.lastRenderedState,u=i(s,t);if(l.hasEagerState=!0,l.eagerState=u,Ue(u,s)){var a=n.interleaved;a===null?(l.next=l,Io(n)):(l.next=a.next,a.next=l),n.interleaved=l;return}}catch{}finally{}t=Ra(e,n,l,r),t!==null&&(l=pe(),Ae(t,e,r,l),ba(t,n,r))}}function Za(e){var n=e.alternate;return e===K||n!==null&&n===K}function Ja(e,n){Wt=pl=!0;var t=e.pending;t===null?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function ba(e,n,t){if(t&4194240){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,wo(e,t)}}var hl={readContext:Te,useCallback:ue,useContext:ue,useEffect:ue,useImperativeHandle:ue,useInsertionEffect:ue,useLayoutEffect:ue,useMemo:ue,useReducer:ue,useRef:ue,useState:ue,useDebugValue:ue,useDeferredValue:ue,useTransition:ue,useMutableSource:ue,useSyncExternalStore:ue,useId:ue,unstable_isNewReconciler:!1},Tf={readContext:Te,useCallback:function(e,n){return Qe().memoizedState=[e,n===void 0?null:n],e},useContext:Te,useEffect:Ys,useImperativeHandle:function(e,n,t){return t=t!=null?t.concat([e]):null,Wr(4194308,4,Wa.bind(null,n,e),t)},useLayoutEffect:function(e,n){return Wr(4194308,4,e,n)},useInsertionEffect:function(e,n){return Wr(4,2,e,n)},useMemo:function(e,n){var t=Qe();return n=n===void 0?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=Qe();return n=t!==void 0?t(n):n,r.memoizedState=r.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},r.queue=e,e=e.dispatch=zf.bind(null,K,e),[r.memoizedState,e]},useRef:function(e){var n=Qe();return e={current:e},n.memoizedState=e},useState:qs,useDebugValue:Vo,useDeferredValue:function(e){return Qe().memoizedState=e},useTransition:function(){var e=qs(!1),n=e[0];return e=_f.bind(null,e[1]),Qe().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,t){var r=K,l=Qe();if(Q){if(t===void 0)throw Error(x(407));t=t()}else{if(t=n(),le===null)throw Error(x(349));Bn&30||Fa(r,n,t)}l.memoizedState=t;var i={value:t,getSnapshot:n};return l.queue=i,Ys(Aa.bind(null,r,i,e),[e]),r.flags|=2048,dr(9,$a.bind(null,r,i,t,n),void 0,null),t},useId:function(){var e=Qe(),n=le.identifierPrefix;if(Q){var t=tn,r=nn;t=(r&~(1<<32-$e(r)-1)).toString(32)+t,n=":"+n+"R"+t,t=ar++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=s.createElement(t,{is:r.is}):(e=s.createElement(t),t==="select"&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,t),e[We]=n,e[or]=r,ac(e,n,!1,!1),n.stateNode=e;e:{switch(s=Si(t,r),t){case"dialog":B("cancel",e),B("close",e),l=r;break;case"iframe":case"object":case"embed":B("load",e),l=r;break;case"video":case"audio":for(l=0;lkt&&(n.flags|=128,r=!0,It(i,!1),n.lanes=4194304)}else{if(!r)if(e=fl(s),e!==null){if(n.flags|=128,r=!0,t=e.updateQueue,t!==null&&(n.updateQueue=t,n.flags|=4),It(i,!0),i.tail===null&&i.tailMode==="hidden"&&!s.alternate&&!Q)return ae(n),null}else 2*Z()-i.renderingStartTime>kt&&t!==1073741824&&(n.flags|=128,r=!0,It(i,!1),n.lanes=4194304);i.isBackwards?(s.sibling=n.child,n.child=s):(t=i.last,t!==null?t.sibling=s:n.child=s,i.last=s)}return i.tail!==null?(n=i.tail,i.rendering=n,i.tail=n.sibling,i.renderingStartTime=Z(),n.sibling=null,t=W.current,U(W,r?t&1|2:t&1),n):(ae(n),null);case 22:case 23:return Xo(),r=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(n.flags|=8192),r&&n.mode&1?je&1073741824&&(ae(n),n.subtreeFlags&6&&(n.flags|=8192)):ae(n),null;case 24:return null;case 25:return null}throw Error(x(156,n.tag))}function Af(e,n){switch(zo(n),n.tag){case 1:return xe(n.type)&&il(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return wt(),V(ge),V(de),$o(),e=n.flags,e&65536&&!(e&128)?(n.flags=e&-65537|128,n):null;case 5:return Fo(n),null;case 13:if(V(W),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(x(340));gt()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return V(W),null;case 4:return wt(),null;case 10:return Mo(n.type._context),null;case 22:case 23:return Xo(),null;case 24:return null;default:return null}}var Ir=!1,ce=!1,Uf=typeof WeakSet=="function"?WeakSet:Set,P=null;function st(e,n){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(r){X(e,n,r)}else t.current=null}function Gi(e,n,t){try{t()}catch(r){X(e,n,r)}}var iu=!1;function Hf(e,n){if(Mi=nl,e=va(),Po(e)){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{t=(t=e.ownerDocument)&&t.defaultView||window;var r=t.getSelection&&t.getSelection();if(r&&r.rangeCount!==0){t=r.anchorNode;var l=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{t.nodeType,i.nodeType}catch{t=null;break e}var s=0,u=-1,a=-1,d=0,v=0,m=e,h=null;n:for(;;){for(var g;m!==t||l!==0&&m.nodeType!==3||(u=s+l),m!==i||r!==0&&m.nodeType!==3||(a=s+r),m.nodeType===3&&(s+=m.nodeValue.length),(g=m.firstChild)!==null;)h=m,m=g;for(;;){if(m===e)break n;if(h===t&&++d===l&&(u=s),h===i&&++v===r&&(a=s),(g=m.nextSibling)!==null)break;m=h,h=m.parentNode}m=g}t=u===-1||a===-1?null:{start:u,end:a}}else t=null}t=t||{start:0,end:0}}else t=null;for(Ii={focusedElem:e,selectionRange:t},nl=!1,P=n;P!==null;)if(n=P,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,P=e;else for(;P!==null;){n=P;try{var w=n.alternate;if(n.flags&1024)switch(n.tag){case 0:case 11:case 15:break;case 1:if(w!==null){var C=w.memoizedProps,I=w.memoizedState,f=n.stateNode,c=f.getSnapshotBeforeUpdate(n.elementType===n.type?C:Ie(n.type,C),I);f.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var p=n.stateNode.containerInfo;p.nodeType===1?p.textContent="":p.nodeType===9&&p.documentElement&&p.removeChild(p.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(x(163))}}catch(y){X(n,n.return,y)}if(e=n.sibling,e!==null){e.return=n.return,P=e;break}P=n.return}return w=iu,iu=!1,w}function Kt(e,n,t){var r=n.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var i=l.destroy;l.destroy=void 0,i!==void 0&&Gi(n,t,i)}l=l.next}while(l!==r)}}function Ll(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function Zi(e){var n=e.ref;if(n!==null){var t=e.stateNode;switch(e.tag){case 5:e=t;break;default:e=t}typeof n=="function"?n(e):n.current=e}}function fc(e){var n=e.alternate;n!==null&&(e.alternate=null,fc(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[We],delete n[or],delete n[Fi],delete n[Sf],delete n[Cf])),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 pc(e){return e.tag===5||e.tag===3||e.tag===4}function ou(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||pc(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 e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Ji(e,n,t){var r=e.tag;if(r===5||r===6)e=e.stateNode,n?t.nodeType===8?t.parentNode.insertBefore(e,n):t.insertBefore(e,n):(t.nodeType===8?(n=t.parentNode,n.insertBefore(e,t)):(n=t,n.appendChild(e)),t=t._reactRootContainer,t!=null||n.onclick!==null||(n.onclick=ll));else if(r!==4&&(e=e.child,e!==null))for(Ji(e,n,t),e=e.sibling;e!==null;)Ji(e,n,t),e=e.sibling}function bi(e,n,t){var r=e.tag;if(r===5||r===6)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(bi(e,n,t),e=e.sibling;e!==null;)bi(e,n,t),e=e.sibling}var ie=null,De=!1;function fn(e,n,t){for(t=t.child;t!==null;)hc(e,n,t),t=t.sibling}function hc(e,n,t){if(Ke&&typeof Ke.onCommitFiberUnmount=="function")try{Ke.onCommitFiberUnmount(kl,t)}catch{}switch(t.tag){case 5:ce||st(t,n);case 6:var r=ie,l=De;ie=null,fn(e,n,t),ie=r,De=l,ie!==null&&(De?(e=ie,t=t.stateNode,e.nodeType===8?e.parentNode.removeChild(t):e.removeChild(t)):ie.removeChild(t.stateNode));break;case 18:ie!==null&&(De?(e=ie,t=t.stateNode,e.nodeType===8?ti(e.parentNode,t):e.nodeType===1&&ti(e,t),nr(e)):ti(ie,t.stateNode));break;case 4:r=ie,l=De,ie=t.stateNode.containerInfo,De=!0,fn(e,n,t),ie=r,De=l;break;case 0:case 11:case 14:case 15:if(!ce&&(r=t.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var i=l,s=i.destroy;i=i.tag,s!==void 0&&(i&2||i&4)&&Gi(t,n,s),l=l.next}while(l!==r)}fn(e,n,t);break;case 1:if(!ce&&(st(t,n),r=t.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=t.memoizedProps,r.state=t.memoizedState,r.componentWillUnmount()}catch(u){X(t,n,u)}fn(e,n,t);break;case 21:fn(e,n,t);break;case 22:t.mode&1?(ce=(r=ce)||t.memoizedState!==null,fn(e,n,t),ce=r):fn(e,n,t);break;default:fn(e,n,t)}}function su(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var t=e.stateNode;t===null&&(t=e.stateNode=new Uf),n.forEach(function(r){var l=Gf.bind(null,e,r);t.has(r)||(t.add(r),r.then(l,l))})}}function Me(e,n){var t=n.deletions;if(t!==null)for(var r=0;rl&&(l=s),r&=~i}if(r=l,r=Z()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Vf(r/1960))-r,10e?16:e,gn===null)var r=!1;else{if(e=gn,gn=null,yl=0,$&6)throw Error(x(331));var l=$;for($|=4,P=e.current;P!==null;){var i=P,s=i.child;if(P.flags&16){var u=i.deletions;if(u!==null){for(var a=0;aZ()-qo?$n(e,0):Ko|=t),we(e,n)}function kc(e,n){n===0&&(e.mode&1?(n=Nr,Nr<<=1,!(Nr&130023424)&&(Nr=4194304)):n=1);var t=pe();e=sn(e,n),e!==null&&(mr(e,n,t),we(e,t))}function Xf(e){var n=e.memoizedState,t=0;n!==null&&(t=n.retryLane),kc(e,t)}function Gf(e,n){var t=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(t=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(x(314))}r!==null&&r.delete(n),kc(e,t)}var Sc;Sc=function(e,n,t){if(e!==null)if(e.memoizedProps!==n.pendingProps||ge.current)ye=!0;else{if(!(e.lanes&t)&&!(n.flags&128))return ye=!1,Ff(e,n,t);ye=!!(e.flags&131072)}else ye=!1,Q&&n.flags&1048576&&Pa(n,ul,n.index);switch(n.lanes=0,n.tag){case 2:var r=n.type;Kr(e,n),e=n.pendingProps;var l=yt(n,de.current);ht(n,t),l=Uo(null,n,r,e,l,t);var i=Ho();return n.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,xe(r)?(i=!0,ol(n)):i=!1,n.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Oo(n),l.updater=zl,n.stateNode=l,l._reactInternals=n,Vi(n,r,e,t),n=Ki(null,n,r,!0,i,t)):(n.tag=0,Q&&i&&_o(n),fe(null,n,l,t),n=n.child),n;case 16:r=n.elementType;e:{switch(Kr(e,n),e=n.pendingProps,l=r._init,r=l(r._payload),n.type=r,l=n.tag=Jf(r),e=Ie(r,e),l){case 0:n=Wi(null,n,r,e,t);break e;case 1:n=tu(null,n,r,e,t);break e;case 11:n=eu(null,n,r,e,t);break e;case 14:n=nu(null,n,r,Ie(r.type,e),t);break e}throw Error(x(306,r,""))}return n;case 0:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:Ie(r,l),Wi(e,n,r,l,t);case 1:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:Ie(r,l),tu(e,n,r,l,t);case 3:e:{if(oc(n),e===null)throw Error(x(387));r=n.pendingProps,i=n.memoizedState,l=i.element,Ma(e,n),dl(n,r,null,t);var s=n.memoizedState;if(r=s.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},n.updateQueue.baseState=i,n.memoizedState=i,n.flags&256){l=jt(Error(x(423)),n),n=ru(e,n,r,t,l);break e}else if(r!==l){l=jt(Error(x(424)),n),n=ru(e,n,r,t,l);break e}else for(ke=kn(n.stateNode.containerInfo.firstChild),Se=n,Q=!0,Fe=null,t=Ta(n,null,r,t),n.child=t;t;)t.flags=t.flags&-3|4096,t=t.sibling;else{if(gt(),r===l){n=un(e,n,t);break e}fe(e,n,r,t)}n=n.child}return n;case 5:return Ia(n),e===null&&Ui(n),r=n.type,l=n.pendingProps,i=e!==null?e.memoizedProps:null,s=l.children,Oi(r,l)?s=null:i!==null&&Oi(r,i)&&(n.flags|=32),ic(e,n),fe(e,n,s,t),n.child;case 6:return e===null&&Ui(n),null;case 13:return sc(e,n,t);case 4:return Do(n,n.stateNode.containerInfo),r=n.pendingProps,e===null?n.child=xt(n,null,r,t):fe(e,n,r,t),n.child;case 11:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:Ie(r,l),eu(e,n,r,l,t);case 7:return fe(e,n,n.pendingProps,t),n.child;case 8:return fe(e,n,n.pendingProps.children,t),n.child;case 12:return fe(e,n,n.pendingProps.children,t),n.child;case 10:e:{if(r=n.type._context,l=n.pendingProps,i=n.memoizedProps,s=l.value,U(al,r._currentValue),r._currentValue=s,i!==null)if(Ue(i.value,s)){if(i.children===l.children&&!ge.current){n=un(e,n,t);break e}}else for(i=n.child,i!==null&&(i.return=n);i!==null;){var u=i.dependencies;if(u!==null){s=i.child;for(var a=u.firstContext;a!==null;){if(a.context===r){if(i.tag===1){a=rn(-1,t&-t),a.tag=2;var d=i.updateQueue;if(d!==null){d=d.shared;var v=d.pending;v===null?a.next=a:(a.next=v.next,v.next=a),d.pending=a}}i.lanes|=t,a=i.alternate,a!==null&&(a.lanes|=t),Hi(i.return,t,n),u.lanes|=t;break}a=a.next}}else if(i.tag===10)s=i.type===n.type?null:i.child;else if(i.tag===18){if(s=i.return,s===null)throw Error(x(341));s.lanes|=t,u=s.alternate,u!==null&&(u.lanes|=t),Hi(s,t,n),s=i.sibling}else s=i.child;if(s!==null)s.return=i;else for(s=i;s!==null;){if(s===n){s=null;break}if(i=s.sibling,i!==null){i.return=s.return,s=i;break}s=s.return}i=s}fe(e,n,l.children,t),n=n.child}return n;case 9:return l=n.type,r=n.pendingProps.children,ht(n,t),l=Te(l),r=r(l),n.flags|=1,fe(e,n,r,t),n.child;case 14:return r=n.type,l=Ie(r,n.pendingProps),l=Ie(r.type,l),nu(e,n,r,l,t);case 15:return rc(e,n,n.type,n.pendingProps,t);case 17:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:Ie(r,l),Kr(e,n),n.tag=1,xe(r)?(e=!0,ol(n)):e=!1,ht(n,t),ec(n,r,l),Vi(n,r,l,t),Ki(null,n,r,!0,e,t);case 19:return uc(e,n,t);case 22:return lc(e,n,t)}throw Error(x(156,n.tag))};function Cc(e,n){return Zu(e,n)}function Zf(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,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 ze(e,n,t,r){return new Zf(e,n,t,r)}function Zo(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Jf(e){if(typeof e=="function")return Zo(e)?1:0;if(e!=null){if(e=e.$$typeof,e===vo)return 11;if(e===yo)return 14}return 2}function En(e,n){var t=e.alternate;return t===null?(t=ze(e.tag,n,e.key,e.mode),t.elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=e.flags&14680064,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Xr(e,n,t,r,l,i){var s=2;if(r=e,typeof e=="function")Zo(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Jn:return An(t.children,l,i,n);case mo:s=8,l|=8;break;case pi:return e=ze(12,t,n,l|2),e.elementType=pi,e.lanes=i,e;case hi:return e=ze(13,t,n,l),e.elementType=hi,e.lanes=i,e;case mi:return e=ze(19,t,n,l),e.elementType=mi,e.lanes=i,e;case Iu:return Rl(t,l,i,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Ru:s=10;break e;case Mu:s=9;break e;case vo:s=11;break e;case yo:s=14;break e;case pn:s=16,r=null;break e}throw Error(x(130,e==null?e:typeof e,""))}return n=ze(s,t,n,l),n.elementType=e,n.type=r,n.lanes=i,n}function An(e,n,t,r){return e=ze(7,e,r,n),e.lanes=t,e}function Rl(e,n,t,r){return e=ze(22,e,r,n),e.elementType=Iu,e.lanes=t,e.stateNode={isHidden:!1},e}function ci(e,n,t){return e=ze(6,e,null,n),e.lanes=t,e}function di(e,n,t){return n=ze(4,e.children!==null?e.children:[],e.key,n),n.lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function bf(e,n,t,r,l){this.tag=n,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=Wl(0),this.expirationTimes=Wl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Wl(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Jo(e,n,t,r,l,i,s,u,a){return e=new bf(e,n,t,u,a),n===1?(n=1,i===!0&&(n|=8)):n=0,i=ze(3,null,null,n),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},Oo(i),e}function ep(e,n,t){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(_c)}catch(e){console.error(e)}}_c(),_u.exports=Ne;var ip=_u.exports,zc,mu=ip;zc=mu.createRoot,mu.hydrateRoot;const Fl="cps.web.deviceCredential";class wl extends Error{constructor(n="此浏览器需要重新配对。请重新运行 codex-provider web。"){super(n),this.name="PairingRequiredError"}}function op(){return!!window.localStorage.getItem(Fl)}async function sp(){const n=new URLSearchParams(window.location.hash.replace(/^#/,"")).get("pair");if(!n)return op();const t=await fetch("/api/pair",{method:"POST",headers:{"X-Codex-Provider-Pairing":n}}),r=await t.json().catch(()=>({}));if(!t.ok||!r.deviceCredential)throw new wl(r.error??"配对链接无效、已过期或已被使用。请重新运行 codex-provider web。");return window.localStorage.setItem(Fl,r.deviceCredential),window.history.replaceState(null,"",`${window.location.pathname}${window.location.search}`),!0}function ts(){return{"X-Codex-Provider-Device":window.localStorage.getItem(Fl)??""}}async function rs(e,n){const t=await e.json().catch(()=>({}));if(!e.ok)throw t.code==="PAIRING_REQUIRED"?(window.dispatchEvent(new CustomEvent("cps:pairing-required",{detail:t.error})),new wl(t.error)):new Error(t.error??n);return t}async function Oe(e,n={},{signal:t}={}){const r=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",...ts()},body:JSON.stringify(n),signal:t});return rs(r,`Request failed with HTTP ${r.status}.`)}async function up(e=0){const n=await fetch(`/api/activity?after=${e}`,{headers:ts()});return rs(n,`Activity request failed with HTTP ${n.status}.`)}async function ap(){const e=await fetch("/api/profiles",{headers:ts()});return rs(e,`Profile request failed with HTTP ${e.status}.`)}async function cp(){try{await Oe("/api/access/forget")}finally{window.localStorage.removeItem(Fl)}}async function dp(e={},n={}){return Oe("/api/history",e,n)}async function fp(e={},n={}){return Oe("/api/history/session",e,n)}function Fn(e,n){const[t,r]=_.useState(()=>{try{const l=window.localStorage.getItem(e);return l?JSON.parse(l):n}catch{return n}});return _.useEffect(()=>{window.localStorage.setItem(e,JSON.stringify(t))},[e,t]),[t,r]}function vu(){let e=0,n=null;return{begin(){return n==null||n.abort(),n=new AbortController,e+=1,{sequence:e,controller:n,signal:n.signal}},isLatest(t){return t===e},cancel(){n==null||n.abort(),e+=1}}}function pp(e,n=300,t=globalThis){const r=t.setTimeout(e,n);return()=>t.clearTimeout(r)}function He({children:e,size:n=18,className:t=""}){return o.jsx("svg",{className:t,width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:e})}const Wn=e=>o.jsxs(He,{...e,children:[o.jsx("path",{d:"M20 6v5h-5"}),o.jsx("path",{d:"M4 18v-5h5"}),o.jsx("path",{d:"M18.3 9A7 7 0 0 0 6.7 6.7L4 11"}),o.jsx("path",{d:"M5.7 15A7 7 0 0 0 17.3 17.3L20 13"})]}),ls=e=>o.jsxs(He,{...e,children:[o.jsx("ellipse",{cx:"12",cy:"5",rx:"8",ry:"3"}),o.jsx("path",{d:"M4 5v6c0 1.7 3.6 3 8 3s8-1.3 8-3V5"}),o.jsx("path",{d:"M4 11v6c0 1.7 3.6 3 8 3s8-1.3 8-3v-6"})]}),Kn=e=>o.jsxs(He,{...e,children:[o.jsx("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),o.jsx("path",{d:"M3 3v5h5"}),o.jsx("path",{d:"M12 7v5l3 2"})]}),hp=e=>o.jsx(He,{...e,children:o.jsx("path",{d:"M3 12h4l2-7 4 14 2-7h6"})}),mp=e=>o.jsxs(He,{...e,children:[o.jsx("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1"}),o.jsx("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1"}),o.jsx("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1"}),o.jsx("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1"})]}),lo=e=>o.jsxs(He,{...e,children:[o.jsx("path",{d:"M12 3 4.5 6v5.3c0 4.6 3.2 8 7.5 9.7 4.3-1.7 7.5-5.1 7.5-9.7V6L12 3Z"}),o.jsx("path",{d:"m9 12 2 2 4-4"})]}),vp=e=>o.jsx(He,{...e,children:o.jsx("path",{d:"m9 18 6-6-6-6"})}),Lc=e=>o.jsx(He,{...e,children:o.jsx("path",{d:"m6 6 12 12M18 6 6 18"})}),is=e=>o.jsx(He,{...e,children:o.jsx("path",{d:"m5 12 4 4L19 6"})}),an=e=>o.jsxs(He,{...e,children:[o.jsx("path",{d:"M12 3 2.8 19h18.4L12 3Z"}),o.jsx("path",{d:"M12 9v4M12 17h.01"})]}),os=e=>o.jsx(He,{...e,children:o.jsx("path",{d:"M3 6.5h6l2 2h10v9.5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6.5Z"})}),yp=[{id:"overview",label:"概览",icon:mp},{id:"history",label:"聊天记录",icon:Kn},{id:"backups",label:"备份",icon:Kn},{id:"activity",label:"活动",icon:hp}],gp={backupRoot:"",backups:[]};function Xt(e){return new Intl.NumberFormat("zh-CN").format(Number(e)||0)}function pr(e){const n=["B","KB","MB","GB","TB"];let t=Number(e)||0,r=0;for(;t>=1024&&r=10?1:2).replace(/\.0$/,"")} ${n[r]}`}function St(e){return e?new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(new Date(e)):"未知时间"}function xp(e,n){return e.split(/(`[^`]+`|\*\*[^*]+\*\*|\*[^*]+\*)/g).map((r,l)=>r.startsWith("`")&&r.endsWith("`")?o.jsx("code",{children:r.slice(1,-1)},`${n}-code-${l}`):r.startsWith("**")&&r.endsWith("**")?o.jsx("strong",{children:r.slice(2,-2)},`${n}-strong-${l}`):r.startsWith("*")&&r.endsWith("*")?o.jsx("em",{children:r.slice(1,-1)},`${n}-em-${l}`):o.jsx(co.Fragment,{children:r},`${n}-text-${l}`))}function wp({text:e}){return String(e??"").split(/(```[^\n]*\n[\s\S]*?```)/g).map((t,r)=>{if(t.startsWith("```")&&t.endsWith("```")){const l=t.slice(3,-3).replace(/^\w*\n/,"");return o.jsx("pre",{children:o.jsx("code",{children:l})},`block-${r}`)}return t.split(` +`).map((l,i,s)=>o.jsxs(co.Fragment,{children:[xp(l,`${r}-${i}`),ir.replace(/[\\/]+$/,"").replaceAll("\\","/").toLowerCase();return t(e)===t(n)}function io(e){var r,l,i,s;if(!e)return[];const n=new Map,t=(u,a)=>{for(const d of u??[]){if(!d||d==="(missing)")continue;const v=n.get(d)??new Set;v.add(a),n.set(d,v)}};return t(e.configuredProviders,"config"),t(Object.keys(((r=e.rolloutCounts)==null?void 0:r.sessions)??{}),"rollout"),t(Object.keys(((l=e.rolloutCounts)==null?void 0:l.archived_sessions)??{}),"rollout"),t(Object.keys(((i=e.sqliteCounts)==null?void 0:i.sessions)??{}),"sqlite"),t(Object.keys(((s=e.sqliteCounts)==null?void 0:s.archived_sessions)??{}),"sqlite"),t([e.currentProvider],"config"),[...n.entries()].map(([u,a])=>{var d;return{id:u,sources:[...a],configured:(d=e.configuredProviders)==null?void 0:d.includes(u),current:u===e.currentProvider}}).sort((u,a)=>Number(a.current)-Number(u.current)||u.id.localeCompare(a.id))}function Tc({tone:e="neutral"}){return o.jsx("span",{className:`status-dot status-dot--${e}`,"aria-hidden":"true"})}function Sp({status:e,busy:n,onRefresh:t}){var l,i;const r=((l=e==null?void 0:e.sqliteAccess)==null?void 0:l.supported)!==!1&&!((i=e==null?void 0:e.sqliteCounts)!=null&&i.unreadable);return o.jsxs("header",{className:"app-header",children:[o.jsxs("div",{className:"brand",children:[o.jsx("div",{className:"brand-mark",children:o.jsx(ls,{size:19})}),o.jsxs("div",{children:[o.jsx("div",{className:"brand-name",children:"Codex Provider Sync"}),o.jsx("div",{className:"brand-subtitle",children:"本机元数据一致性工具"})]})]}),o.jsxs("div",{className:"header-actions",children:[o.jsxs("div",{className:"service-state",children:[o.jsx(Tc,{tone:n?"warning":r?"success":"danger"}),o.jsx("span",{children:n?"操作执行中":r?"本地服务就绪":"需要检查"})]}),o.jsxs("button",{className:"button button--secondary button--compact",type:"button",onClick:t,disabled:n,children:[o.jsx(Wn,{size:16}),"刷新"]})]})]})}function Cp({view:e,setView:n,status:t,onForgetBrowser:r}){return o.jsxs("aside",{className:"sidebar",children:[o.jsx("nav",{className:"navigation","aria-label":"主导航",children:yp.map(l=>{const i=l.icon;return o.jsxs("button",{className:`nav-item ${e===l.id?"nav-item--active":""}`,type:"button",onClick:()=>n(l.id),children:[o.jsx(i,{size:17}),o.jsx("span",{children:l.label})]},l.id)})}),o.jsxs("div",{className:"sidebar-foot",children:[o.jsx("div",{className:"sidebar-provider-label",children:"当前 Provider"}),o.jsxs("div",{className:"sidebar-provider-value",children:[o.jsx(Tc,{tone:"success"}),o.jsx("span",{children:(t==null?void 0:t.currentProvider)??"未读取"})]}),o.jsx("div",{className:"sidebar-version",children:"Web UI · localhost only"}),o.jsx("button",{className:"button button--quiet button--compact",type:"button",onClick:r,children:"忘记此浏览器"})]})]})}function Np({profiles:e,profileId:n,setProfileId:t,status:r,onAddProfile:l,onDeleteProfile:i,onRefresh:s,loading:u}){return o.jsxs("section",{className:"storage-bar","aria-label":"存储位置",children:[o.jsxs("label",{className:"path-field path-field--wide",children:[o.jsx("span",{children:"存储配置"}),o.jsxs("div",{className:"path-input-wrap",children:[o.jsx(os,{size:16}),o.jsx("select",{value:n,onChange:a=>t(a.target.value),children:e.map(a=>o.jsx("option",{value:a.id,children:a.name},a.id))})]})]}),o.jsxs("label",{className:"path-field",children:[o.jsxs("span",{children:["当前路径 ",o.jsx("small",{children:"由服务端解析"})]}),o.jsxs("div",{className:"path-input-wrap",children:[o.jsx(ls,{size:16}),o.jsx("input",{value:(r==null?void 0:r.codexHome)??"",readOnly:!0,placeholder:"读取状态后显示"})]})]}),o.jsx("button",{className:"button button--secondary storage-refresh",type:"button",onClick:l,children:"新增配置"}),n!=="default"?o.jsx("button",{className:"button button--quiet storage-refresh",type:"button",onClick:i,children:"删除配置"}):null,o.jsxs("button",{className:"button button--secondary storage-refresh",type:"button",onClick:s,disabled:u,children:[o.jsx(Wn,{size:16,className:u?"spin":""}),"读取状态"]})]})}function Fr({title:e,counts:n,currentProvider:t}){const r=Object.entries(n??{}).sort((i,s)=>s[1]-i[1]),l=r.reduce((i,[,s])=>i+s,0);return o.jsxs("div",{className:"distribution-block",children:[o.jsxs("div",{className:"distribution-heading",children:[o.jsx("span",{children:e}),o.jsx("strong",{children:Xt(l)})]}),o.jsx("div",{className:"distribution-list",children:r.length===0?o.jsx("div",{className:"empty-inline",children:"无记录"}):r.map(([i,s])=>o.jsxs("div",{className:"distribution-row",children:[o.jsxs("div",{className:"distribution-meta",children:[o.jsx("span",{className:"provider-name",children:i}),o.jsx("span",{children:Xt(s)})]}),o.jsx("div",{className:"bar-track",children:o.jsx("span",{className:i===t?"bar-fill bar-fill--current":"bar-fill",style:{width:`${Math.max(5,l?s/l*100:0)}%`}})})]},i))})]})}function Ep({status:e,loading:n}){var i,s,u,a,d,v,m,h,g,w,C,I,f;const t=Object.values(((i=e==null?void 0:e.rolloutCounts)==null?void 0:i.sessions)??{}).reduce((c,p)=>c+p,0)+Object.values(((s=e==null?void 0:e.rolloutCounts)==null?void 0:s.archived_sessions)??{}).reduce((c,p)=>c+p,0),r=Object.values(((u=e==null?void 0:e.sqliteCounts)==null?void 0:u.sessions)??{}).reduce((c,p)=>c+p,0)+Object.values(((a=e==null?void 0:e.sqliteCounts)==null?void 0:a.archived_sessions)??{}).reduce((c,p)=>c+p,0),l=(d=e==null?void 0:e.alignment)==null?void 0:d.aligned;return o.jsxs("section",{className:"status-panel",children:[o.jsxs("div",{className:"section-title-row",children:[o.jsxs("div",{children:[o.jsx("h2",{children:"状态总览"}),o.jsx("p",{children:"比较 rollout 文件、SQLite 线程索引和当前 Provider。"})]}),o.jsxs("div",{className:`alignment-state ${l?"alignment-state--success":"alignment-state--warning"}`,children:[n?o.jsx(Wn,{size:16,className:"spin"}):l?o.jsx(is,{size:16}):o.jsx(an,{size:16}),o.jsx("span",{children:n?"正在检查":l?"元数据已对齐":"发现不一致"})]})]}),o.jsxs("div",{className:"summary-strip",children:[o.jsxs("div",{className:"summary-item",children:[o.jsx("span",{children:"当前 Provider"}),o.jsx("strong",{children:(e==null?void 0:e.currentProvider)??"—"}),o.jsx("small",{children:e!=null&&e.currentProviderImplicit?"隐式默认":"config.toml 根级配置"})]}),o.jsxs("div",{className:"summary-item",children:[o.jsx("span",{children:"Rollout 文件"}),o.jsx("strong",{children:Xt(t)}),o.jsx("small",{children:"sessions + archived"})]}),o.jsxs("div",{className:"summary-item",children:[o.jsx("span",{children:"SQLite threads"}),o.jsx("strong",{children:(v=e==null?void 0:e.sqliteCounts)!=null&&v.unreadable?"不可读":Xt(r)}),o.jsx("small",{children:((m=e==null?void 0:e.stateDbLocation)==null?void 0:m.source)??"未定位数据库"})]}),o.jsxs("div",{className:"summary-item",children:[o.jsx("span",{children:"托管备份"}),o.jsx("strong",{children:Xt((h=e==null?void 0:e.backupSummary)==null?void 0:h.count)}),o.jsx("small",{children:pr((g=e==null?void 0:e.backupSummary)==null?void 0:g.totalBytes)})]})]}),o.jsxs("div",{className:"distribution-grid",children:[o.jsxs("div",{className:"distribution-column",children:[o.jsxs("div",{className:"column-label",children:[o.jsx(os,{size:16})," Rollout files"]}),o.jsx(Fr,{title:"sessions",counts:(w=e==null?void 0:e.rolloutCounts)==null?void 0:w.sessions,currentProvider:e==null?void 0:e.currentProvider}),o.jsx(Fr,{title:"archived_sessions",counts:(C=e==null?void 0:e.rolloutCounts)==null?void 0:C.archived_sessions,currentProvider:e==null?void 0:e.currentProvider})]}),o.jsx("div",{className:"distribution-divider"}),o.jsxs("div",{className:"distribution-column",children:[o.jsxs("div",{className:"column-label",children:[o.jsx(ls,{size:16})," SQLite state"]}),o.jsx(Fr,{title:"sessions",counts:(I=e==null?void 0:e.sqliteCounts)==null?void 0:I.sessions,currentProvider:e==null?void 0:e.currentProvider}),o.jsx(Fr,{title:"archived_sessions",counts:(f=e==null?void 0:e.sqliteCounts)==null?void 0:f.archived_sessions,currentProvider:e==null?void 0:e.currentProvider})]})]})]})}function Pp({status:e}){var r,l,i;const n=[];((r=e==null?void 0:e.sqliteAccess)==null?void 0:r.supported)===!1&&n.push({tone:"danger",title:"SQLite 路径不可安全访问",detail:e.sqliteAccess.message}),(l=e==null?void 0:e.sqliteCounts)!=null&&l.unreadable&&n.push({tone:"danger",title:"SQLite 当前不可读",detail:e.sqliteCounts.error}),(i=e==null?void 0:e.lockedRolloutFiles)!=null&&i.length&&n.push({tone:"warning",title:`${e.lockedRolloutFiles.length} 个 rollout 文件正在使用`,detail:"同步会跳过这些活跃文件;会话结束后可再次执行。"}),e!=null&&e.encryptedContentWarning&&n.push({tone:"warning",title:"检测到 encrypted_content",detail:e.encryptedContentWarning});const t=e==null?void 0:e.sqliteRepairStats;return(t!=null&&t.userEventRowsNeedingRepair||t!=null&&t.cwdRowsNeedingRepair)&&n.push({tone:"info",title:"SQLite 有待修复字段",detail:`user-event ${t.userEventRowsNeedingRepair??0},cwd ${t.cwdRowsNeedingRepair??0}`}),n.length===0?null:o.jsx("section",{className:"warning-stack","aria-label":"诊断信息",children:n.map((s,u)=>o.jsxs("div",{className:`warning-row warning-row--${s.tone}`,children:[o.jsx(an,{size:17}),o.jsxs("div",{children:[o.jsx("strong",{children:s.title}),o.jsx("span",{children:s.detail})]})]},`${s.title}-${u}`))})}function _p({projects:e=[]}){return o.jsxs("section",{className:"data-section",children:[o.jsx("div",{className:"section-title-row section-title-row--compact",children:o.jsxs("div",{children:[o.jsx("h2",{children:"项目可见性"}),o.jsx("p",{children:"检查 Desktop 项目路径、全局排序和首屏 50 条命中。"})]})}),o.jsx("div",{className:"table-scroll",children:o.jsxs("table",{className:"data-table",children:[o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{children:"项目根目录"}),o.jsx("th",{children:"交互会话"}),o.jsx("th",{children:"首屏"}),o.jsx("th",{children:"Ranks"}),o.jsx("th",{children:"CWD 精确匹配"}),o.jsx("th",{children:"Provider"})]})}),o.jsx("tbody",{children:e.length===0?o.jsx("tr",{children:o.jsx("td",{colSpan:"6",className:"table-empty",children:"没有可显示的项目诊断。"})}):e.map(n=>o.jsxs("tr",{children:[o.jsx("td",{className:"path-cell",children:n.root}),o.jsx("td",{children:n.interactiveThreads}),o.jsxs("td",{children:[n.firstPageThreads,"/50"]}),o.jsx("td",{children:n.rankPreview||"—"}),o.jsxs("td",{children:[n.exactCwdMatches,"/",n.interactiveThreads]}),o.jsx("td",{children:Object.entries(n.providerCounts??{}).map(([t,r])=>`${t} ${r}`).join(" · ")||"—"})]},n.root))})]})})]})}function zp({value:e,onChange:n,disabled:t}){return o.jsxs("div",{className:"segmented",role:"radiogroup","aria-label":"执行模式",children:[o.jsxs("button",{type:"button",className:e==="sync"?"segmented-option segmented-option--active":"segmented-option",onClick:()=>n("sync"),disabled:t,children:[o.jsx("span",{children:"仅同步元数据"}),o.jsx("small",{children:"不修改 config.toml"})]}),o.jsxs("button",{type:"button",className:e==="switch"?"segmented-option segmented-option--active":"segmented-option",onClick:()=>n("switch"),disabled:t,children:[o.jsx("span",{children:"切换 Provider 并同步"}),o.jsx("small",{children:"更新根级配置"})]})]})}function Lp({status:e,providers:n,selectedProvider:t,setSelectedProvider:r,onAddManualProvider:l,onRemoveManualProvider:i,onRequestExecute:s,busy:u}){var j,k;const[a,d]=Fn("cps.web.mode","sync"),[v,m]=Fn("cps.web.modelMode","auto"),[h,g]=Fn("cps.web.customModel",""),[w,C]=Fn("cps.web.keepCount",5),[I,f]=_.useState(""),c=n.find(E=>E.id===t),p=c==null?void 0:c.configured,y=/^[A-Za-z0-9_.-]+$/.test(I.trim()),N=u||!t||((j=e==null?void 0:e.sqliteAccess)==null?void 0:j.supported)===!1||((k=e==null?void 0:e.sqliteCounts)==null?void 0:k.unreadable);return o.jsxs("section",{className:"execution-panel",children:[o.jsxs("div",{className:"execution-head",children:[o.jsxs("div",{children:[o.jsx("h2",{children:"执行同步"}),o.jsx("p",{children:"所有写操作都会先创建备份。执行前请关闭 Codex CLI、App 和 app-server。"})]}),o.jsx(lo,{size:22})]}),o.jsx(zp,{value:a,onChange:d,disabled:u}),o.jsxs("div",{className:"form-grid",children:[o.jsxs("label",{className:"form-field",children:[o.jsx("span",{children:"目标 Provider"}),o.jsx("select",{value:t,onChange:E=>r(E.target.value),disabled:u,children:n.map(E=>o.jsxs("option",{value:E.id,children:[E.id,E.current?"(当前)":""]},E.id))}),a==="switch"&&!p?o.jsx("small",{className:"field-error",children:"切换模式要求该 Provider 已定义在 config.toml。"}):null]}),o.jsxs("label",{className:"form-field form-field--short",children:[o.jsx("span",{children:"保留备份数"}),o.jsx("input",{type:"number",min:"1",max:"100000",value:w,onChange:E=>C(Number(E.target.value)),disabled:u}),o.jsx("small",{children:"同步后自动清理"})]})]}),o.jsxs("div",{className:"manual-provider-row",children:[o.jsx("input",{type:"text",value:I,onChange:E=>f(E.target.value),placeholder:"手动添加 Provider ID",spellCheck:"false",disabled:u}),o.jsx("button",{className:"button button--quiet button--compact",type:"button",disabled:u||!y,onClick:()=>{l(I.trim()),f("")},children:"添加"}),c!=null&&c.manual?o.jsx("button",{className:"manual-remove",type:"button",onClick:()=>i(t),disabled:u,children:"删除当前手动项"}):null]}),a==="switch"?o.jsxs("fieldset",{className:"model-options",disabled:u,children:[o.jsx("legend",{children:"根级 model"}),o.jsxs("label",{children:[o.jsx("input",{type:"radio",name:"model-mode",checked:v==="auto",onChange:()=>m("auto")}),o.jsxs("span",{children:[o.jsx("strong",{children:"跟随 Provider 配置"}),o.jsxs("small",{children:["采用 `[model_providers.",t,"]` 中的 model"]})]})]}),o.jsxs("label",{children:[o.jsx("input",{type:"radio",name:"model-mode",checked:v==="keep",onChange:()=>m("keep")}),o.jsxs("span",{children:[o.jsx("strong",{children:"保留当前根级 model"}),o.jsx("small",{children:"只切换 model_provider"})]})]}),o.jsxs("label",{className:"custom-model-option",children:[o.jsx("input",{type:"radio",name:"model-mode",checked:v==="custom",onChange:()=>m("custom")}),o.jsxs("span",{children:[o.jsx("strong",{children:"自定义 model"}),o.jsx("input",{type:"text",value:h,onFocus:()=>m("custom"),onChange:E=>g(E.target.value),placeholder:"例如 MiniMax-M3"})]})]})]}):null,o.jsxs("div",{className:"backup-assurance",children:[o.jsx(is,{size:16}),o.jsx("span",{children:"修改前创建 metadata v2 备份,并记录 SQLite Home"})]}),o.jsxs("button",{className:"button button--primary execute-button",type:"button",disabled:N||a==="switch"&&!p||a==="switch"&&v==="custom"&&!h.trim(),onClick:()=>s({mode:a,modelMode:v,model:h.trim(),keepCount:w}),children:[u?o.jsx(Wn,{size:17,className:"spin"}):o.jsx(lo,{size:17}),u?"正在执行…":a==="switch"?"切换并同步":"执行同步"]})]})}function Tp({backups:e,onViewAll:n,onRestore:t}){return o.jsxs("section",{className:"recent-backups",children:[o.jsxs("div",{className:"section-title-row section-title-row--compact",children:[o.jsxs("div",{children:[o.jsx("h2",{children:"最近备份"}),o.jsx("p",{children:e.backupRoot||"同步后将在 Codex Home 下创建备份"})]}),o.jsxs("button",{type:"button",className:"text-button",onClick:n,children:["查看全部 ",o.jsx(vp,{size:14})]})]}),o.jsx("div",{className:"backup-rows",children:e.backups.length===0?o.jsx("div",{className:"empty-state",children:"尚无由本工具创建的备份。"}):e.backups.slice(0,3).map(r=>o.jsxs("div",{className:"backup-row",children:[o.jsx("div",{className:"backup-icon",children:o.jsx(Kn,{size:17})}),o.jsxs("div",{className:"backup-main",children:[o.jsx("strong",{children:St(r.metadata.createdAt)}),o.jsxs("span",{children:[r.metadata.targetProvider," · ",r.metadata.changedSessionFiles??0," 个 rollout"]})]}),o.jsx("div",{className:"backup-size",children:pr(r.sizeBytes)}),o.jsx("button",{className:"button button--quiet button--compact",type:"button",onClick:()=>t(r),children:"恢复"})]},r.id))})]})}function Rp({status:e,backups:n,providers:t,selectedProvider:r,setSelectedProvider:l,onAddManualProvider:i,onRemoveManualProvider:s,onExecute:u,onRestore:a,setView:d,busy:v,loading:m}){return o.jsxs("div",{className:"view-content",children:[o.jsx(Ep,{status:e,loading:m}),o.jsx(Pp,{status:e}),o.jsxs("div",{className:"overview-lower-grid",children:[o.jsxs("div",{className:"overview-main-column",children:[o.jsx(_p,{projects:(e==null?void 0:e.projectThreadVisibility)??[]}),o.jsx(Tp,{backups:n,onViewAll:()=>d("backups"),onRestore:a})]}),o.jsx(Lp,{status:e,providers:t,selectedProvider:r,setSelectedProvider:l,onAddManualProvider:i,onRemoveManualProvider:s,onRequestExecute:u,busy:v})]})]})}function Mp({backups:e,status:n,busy:t,onRestore:r,onPrune:l}){const[i,s]=Fn("cps.web.keepCount",5);return o.jsxs("div",{className:"view-content",children:[o.jsxs("section",{className:"page-intro",children:[o.jsxs("div",{children:[o.jsx("h1",{children:"备份"}),o.jsx("p",{children:"管理当前 Codex Home 下由本工具创建的 metadata v2 备份。"})]}),o.jsxs("div",{className:"prune-control",children:[o.jsxs("label",{children:["保留最近 ",o.jsx("input",{type:"number",min:"0",max:"100000",value:i,onChange:u=>s(Number(u.target.value))})," 份"]}),o.jsx("button",{className:"button button--secondary",type:"button",disabled:t,onClick:()=>l(i),children:"清理旧备份"})]})]}),o.jsxs("section",{className:"backup-list-section",children:[o.jsxs("div",{className:"backup-root-line",children:[o.jsx(os,{size:16}),o.jsx("span",{children:e.backupRoot||(n==null?void 0:n.backupRoot)||"—"}),o.jsxs("strong",{children:[e.backups.length," 份 · ",pr(e.backups.reduce((u,a)=>u+a.sizeBytes,0))]})]}),o.jsx("div",{className:"full-backup-list",children:e.backups.length===0?o.jsxs("div",{className:"large-empty",children:[o.jsx(Kn,{size:26}),o.jsx("strong",{children:"还没有备份"}),o.jsx("span",{children:"执行一次同步或切换后,备份会显示在这里。"})]}):e.backups.map(u=>{var a;return o.jsxs("article",{className:"full-backup-row",children:[o.jsxs("div",{className:"backup-date",children:[o.jsx("strong",{children:St(u.metadata.createdAt)}),o.jsx("span",{children:u.id})]}),o.jsxs("div",{className:"backup-facts",children:[o.jsxs("span",{children:["Provider ",o.jsx("strong",{children:u.metadata.targetProvider})]}),o.jsxs("span",{children:["Rollout ",o.jsx("strong",{children:u.metadata.changedSessionFiles??0})]}),o.jsxs("span",{children:["SQLite ",o.jsx("strong",{children:(a=u.metadata.sqliteDbFiles)!=null&&a.length?"已包含":"未包含"})]})]}),o.jsxs("div",{className:"backup-source",children:[o.jsx("span",{children:"SQLite Home"}),o.jsx("code",{children:u.metadata.sqliteHome??"旧版 metadata 未记录"})]}),o.jsxs("div",{className:"backup-row-actions",children:[o.jsx("span",{children:pr(u.sizeBytes)}),o.jsx("button",{className:"button button--secondary button--compact",type:"button",disabled:t,onClick:()=>r(u),children:"恢复"})]})]},u.id)})})]})]})}function Ip({activity:e,activeOperation:n}){return o.jsxs("div",{className:"view-content",children:[o.jsxs("section",{className:"page-intro",children:[o.jsxs("div",{children:[o.jsx("h1",{children:"活动日志"}),o.jsx("p",{children:"当前 Web UI 会话中的状态刷新、同步阶段和操作结果。"})]}),n?o.jsxs("div",{className:"live-operation",children:[o.jsx(Wn,{size:16,className:"spin"})," ",n.kind]}):null]}),o.jsxs("section",{className:"activity-console",children:[o.jsxs("div",{className:"console-head",children:[o.jsx("span",{children:"Activity log"}),o.jsxs("span",{children:[e.length," entries"]})]}),o.jsx("div",{className:"console-body",children:e.length===0?o.jsx("div",{className:"console-empty",children:"等待操作…"}):e.map(t=>o.jsxs("div",{className:`console-row console-row--${t.level}`,children:[o.jsx("time",{children:St(t.timestamp)}),o.jsx("span",{className:"console-level",children:t.level}),o.jsx("span",{className:"console-message",children:t.message}),typeof t.detail=="string"?o.jsx("span",{className:"console-detail",children:t.detail}):null]},t.id))})]})]})}function Op({profileId:e,status:n}){const[t,r]=_.useState(""),[l,i]=_.useState(""),[s,u]=_.useState(""),[a,d]=_.useState(""),[v,m]=_.useState("all"),[h,g]=_.useState(1),[w,C]=_.useState({sessions:[],total:0,pageSize:50,hasNextPage:!1}),[I,f]=_.useState(""),[c,p]=_.useState(null),[y,N]=_.useState(!1),[j,k]=_.useState(!1),[E,D]=_.useState(""),R=_.useRef(null),G=_.useRef(null);R.current||(R.current=vu()),G.current||(G.current=vu());const Be=io(n),Ye=[...new Set(((n==null?void 0:n.projectThreadVisibility)??[]).map(z=>z.root))];_.useEffect(()=>pp(()=>i(t),300,window),[t]);const Xe=_.useCallback(async()=>{const{controller:z,sequence:J}=R.current.begin();N(!0),D("");try{const S=await dp({...at(e),page:h,pageSize:50,query:l,provider:s,project:a,archived:v},{signal:z.signal});if(!R.current.isLatest(J))return;C(S.history),f(T=>{var M;return S.history.sessions.some(H=>H.id===T)?T:((M=S.history.sessions[0])==null?void 0:M.id)??""})}catch(S){S.name!=="AbortError"&&R.current.isLatest(J)&&D(S.message)}finally{R.current.isLatest(J)&&N(!1)}},[e,h,l,s,a,v]);_.useEffect(()=>(Xe(),()=>R.current.cancel()),[Xe]),_.useEffect(()=>{if(G.current.cancel(),!I){p(null),k(!1);return}const{controller:z,sequence:J}=G.current.begin();return p(null),k(!0),D(""),fp({...at(e),sessionId:I},{signal:z.signal}).then(S=>{G.current.isLatest(J)&&p(S.history)}).catch(S=>{S.name!=="AbortError"&&G.current.isLatest(J)&&D(S.message)}).finally(()=>{G.current.isLatest(J)&&k(!1)}),()=>z.abort()},[e,I]);const dn=z=>J=>{z(J.target.value),g(1)};return o.jsxs("div",{className:"view-content history-view",children:[o.jsxs("section",{className:"page-intro",children:[o.jsxs("div",{children:[o.jsx("h1",{children:"聊天记录"}),o.jsx("p",{children:"从 rollout 文件读取历史会话,只读查看,不修改本地数据。"})]}),o.jsxs("button",{className:"button button--secondary",type:"button",onClick:Xe,disabled:y,children:[o.jsx(Wn,{size:16,className:y?"spin":""}),"刷新"]})]}),o.jsxs("section",{className:"history-toolbar",children:[o.jsx("input",{value:t,onChange:dn(r),onKeyDown:z=>{z.key==="Enter"&&(i(t),g(1))},placeholder:"搜索标题、项目、Provider 或消息内容"}),o.jsxs("select",{value:s,onChange:dn(u),children:[o.jsx("option",{value:"",children:"全部 Provider"}),Be.map(z=>o.jsx("option",{value:z.id,children:z.id},z.id))]}),o.jsxs("select",{value:a,onChange:dn(d),children:[o.jsx("option",{value:"",children:"全部项目"}),Ye.map(z=>o.jsx("option",{value:z,children:z},z))]}),o.jsxs("select",{value:v,onChange:dn(m),children:[o.jsx("option",{value:"all",children:"全部会话"}),o.jsx("option",{value:"active",children:"活跃会话"}),o.jsx("option",{value:"archived",children:"已归档"})]})]}),E?o.jsxs("div",{className:"history-error",children:[o.jsx(an,{size:16}),E]}):null,o.jsxs("section",{className:"history-layout",children:[o.jsxs("div",{className:"history-list-panel",children:[o.jsxs("div",{className:"history-list-head",children:[o.jsxs("strong",{children:[w.total," 个会话"]}),o.jsxs("span",{children:["第 ",w.page," 页"]})]}),o.jsxs("div",{className:"history-list",children:[y&&!w.sessions.length?o.jsx("div",{className:"large-empty",children:"读取中…"}):null,!y&&!w.sessions.length?o.jsxs("div",{className:"large-empty",children:[o.jsx(Kn,{size:24}),o.jsx("strong",{children:"没有匹配的会话"})]}):null,w.sessions.map(z=>o.jsxs("button",{type:"button",className:`history-session-row ${z.id===I?"history-session-row--selected":""}`,onClick:()=>f(z.id),children:[o.jsxs("div",{className:"history-session-top",children:[o.jsx("strong",{children:z.title}),o.jsx("time",{children:St(z.updatedAt)})]}),o.jsx("p",{children:z.firstUserMessage||"没有可读的用户消息"}),o.jsxs("div",{className:"history-session-meta",children:[o.jsx("span",{children:z.provider}),o.jsxs("span",{children:[z.messageCount," 条消息"]}),o.jsx("span",{children:z.archived?"已归档":"活跃"})]})]},z.id))]}),o.jsxs("div",{className:"history-pagination",children:[o.jsx("button",{className:"button button--quiet button--compact",type:"button",disabled:h<=1||y,onClick:()=>g(z=>z-1),children:"上一页"}),o.jsx("span",{children:h}),o.jsx("button",{className:"button button--quiet button--compact",type:"button",disabled:!w.hasNextPage||y,onClick:()=>g(z=>z+1),children:"下一页"})]})]}),o.jsx("div",{className:"history-detail-panel",children:j?o.jsxs("div",{className:"large-empty",children:[o.jsx(Wn,{size:24,className:"spin"}),o.jsx("strong",{children:"正在读取会话"})]}):c?o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"history-detail-head",children:[o.jsxs("div",{children:[o.jsx("h2",{children:c.session.title}),o.jsxs("p",{children:[c.session.cwd||"未知项目"," · ",c.session.provider," · ",c.session.messageCount," 条消息"]})]}),o.jsx("span",{children:c.session.archived?"已归档":"活跃"})]}),c.truncated?o.jsxs("div",{className:"history-truncated",children:[o.jsx(an,{size:15}),"仅显示最近 ",c.returnedMessageCount," 条消息。"]}):null,o.jsx("div",{className:"message-stream",children:c.messages.map(z=>o.jsxs("article",{className:`chat-message chat-message--${z.role}`,children:[o.jsxs("div",{className:"chat-message-label",children:[z.role==="user"?"你":"Codex",o.jsx("time",{children:St(z.timestamp)})]}),o.jsx("div",{className:"chat-message-body",children:o.jsx(wp,{text:z.text})})]},`${z.sequence}-${z.timestamp}`))})]}):o.jsxs("div",{className:"large-empty",children:[o.jsx(Kn,{size:28}),o.jsx("strong",{children:"选择一个会话"}),o.jsx("span",{children:"聊天内容将在这里显示。"})]})})]})]})}function $l({title:e,children:n,confirmLabel:t,onConfirm:r,onCancel:l,tone:i="primary",confirmDisabled:s=!1}){return o.jsx("div",{className:"modal-backdrop",role:"presentation",onMouseDown:u=>u.target===u.currentTarget&&l(),children:o.jsxs("section",{className:"modal",role:"dialog","aria-modal":"true","aria-labelledby":"modal-title",children:[o.jsxs("div",{className:"modal-head",children:[o.jsx("h2",{id:"modal-title",children:e}),o.jsx("button",{type:"button",className:"icon-button",onClick:l,"aria-label":"关闭",children:o.jsx(Lc,{size:18})})]}),o.jsx("div",{className:"modal-body",children:n}),o.jsxs("div",{className:"modal-actions",children:[o.jsx("button",{className:"button button--secondary",type:"button",onClick:l,children:"取消"}),o.jsx("button",{className:`button button--${i}`,type:"button",disabled:s,onClick:r,children:t})]})]})})}function Dp({plan:e,status:n,selectedProvider:t,onCancel:r,onConfirm:l}){return o.jsxs($l,{title:e.mode==="switch"?"确认切换并同步":"确认同步元数据",confirmLabel:e.mode==="switch"?"确认切换并同步":"确认执行同步",onCancel:r,onConfirm:l,children:[o.jsxs("div",{className:"modal-callout",children:[o.jsx(an,{size:18}),o.jsxs("div",{children:[o.jsx("strong",{children:"请确认 Codex 已完全关闭"}),o.jsx("span",{children:"关闭 Codex CLI、Codex App、app-server 及相关终端,避免 SQLite 或 rollout 被占用。"})]})]}),o.jsxs("dl",{className:"operation-scope",children:[o.jsxs("div",{children:[o.jsx("dt",{children:"Codex Home"}),o.jsx("dd",{children:n==null?void 0:n.codexHome})]}),o.jsxs("div",{children:[o.jsx("dt",{children:"SQLite Home"}),o.jsxs("dd",{children:[n==null?void 0:n.sqliteHome," ",o.jsxs("small",{children:["(",n==null?void 0:n.sqliteHomeSource,")"]})]})]}),o.jsxs("div",{children:[o.jsx("dt",{children:"当前 Provider"}),o.jsx("dd",{children:n==null?void 0:n.currentProvider})]}),o.jsxs("div",{children:[o.jsx("dt",{children:"目标 Provider"}),o.jsx("dd",{children:t})]}),o.jsxs("div",{children:[o.jsx("dt",{children:"配置变更"}),o.jsx("dd",{children:e.mode==="switch"?"更新 config.toml 根级 model_provider":"不修改 config.toml"})]}),o.jsxs("div",{children:[o.jsx("dt",{children:"Model 策略"}),o.jsx("dd",{children:e.mode!=="switch"?"跟随当前根级 model":e.modelMode==="auto"?"跟随目标 Provider 配置":e.modelMode==="keep"?"保留当前根级 model":`设置为 ${e.model}`})]}),o.jsxs("div",{children:[o.jsx("dt",{children:"备份策略"}),o.jsxs("dd",{children:["修改前创建备份,保留最近 ",e.keepCount," 份"]})]})]})]})}function Fp({backup:e,status:n,onCancel:t,onConfirm:r}){const[l,i]=_.useState(!1),[s,u]=_.useState(!0),[a,d]=_.useState(!0),v=jp(n),m=s&&e.metadata.version>=2&&e.metadata.sqliteHome&&!kp(e.metadata.sqliteHome,v),h=m&&l;return o.jsxs($l,{title:"恢复备份",confirmLabel:"覆盖当前元数据",tone:"danger",onCancel:t,confirmDisabled:!l&&!s&&!a||h,onConfirm:()=>r({restoreConfig:l,restoreDatabase:s,restoreSessions:a,allowSqliteHomeRelocation:!!m}),children:[o.jsxs("div",{className:"restore-summary",children:[o.jsx(Kn,{size:20}),o.jsxs("div",{children:[o.jsxs("strong",{children:[St(e.metadata.createdAt)," · ",e.metadata.targetProvider]}),o.jsx("code",{children:e.path})]})]}),o.jsxs("fieldset",{className:"restore-options",children:[o.jsx("legend",{children:"选择要覆盖的内容"}),o.jsxs("label",{children:[o.jsx("input",{type:"checkbox",checked:l,onChange:g=>i(g.target.checked)}),o.jsxs("span",{children:[o.jsx("strong",{children:"config.toml 与 global state"}),o.jsx("small",{children:"恢复 Provider 配置和 Desktop workspace roots"})]})]}),o.jsxs("label",{children:[o.jsx("input",{type:"checkbox",checked:s,onChange:g=>u(g.target.checked)}),o.jsxs("span",{children:[o.jsx("strong",{children:"SQLite 线程数据库"}),o.jsx("small",{children:"恢复 state_5.sqlite 及备份中的 WAL/SHM"})]})]}),o.jsxs("label",{children:[o.jsx("input",{type:"checkbox",checked:a,onChange:g=>d(g.target.checked)}),o.jsxs("span",{children:[o.jsx("strong",{children:"Rollout 元数据"}),o.jsx("small",{children:"恢复 session_meta 和被修改的 turn_context.model"})]})]})]}),m?o.jsxs("div",{className:`modal-callout ${h?"modal-callout--danger":"modal-callout--warning"}`,children:[o.jsx(an,{size:18}),o.jsxs("div",{children:[o.jsx("strong",{children:"SQLite Home 与备份来源不同"}),o.jsxs("span",{children:["来源:",e.metadata.sqliteHome,o.jsx("br",{}),"目标:",v,o.jsx("br",{}),h?"迁移数据库时不能同时恢复旧 config.toml。":"确认后数据库将恢复到当前目标位置。"]})]})]}):null,o.jsxs("div",{className:"modal-callout",children:[o.jsx(an,{size:18}),o.jsxs("div",{children:[o.jsx("strong",{children:"恢复前请关闭 Codex"}),o.jsx("span",{children:"该操作将覆盖所选的当前元数据;请确认 Codex CLI、App 和 app-server 已关闭。"})]})]})]})}function $p({keepCount:e,backups:n,onCancel:t,onConfirm:r}){const l=Math.max(0,n.backups.length-e);return o.jsxs($l,{title:"清理旧备份",confirmLabel:`删除 ${l} 份旧备份`,tone:"danger",onCancel:t,onConfirm:r,confirmDisabled:l===0,children:[o.jsxs("div",{className:"modal-callout modal-callout--warning",children:[o.jsx(an,{size:18}),o.jsxs("div",{children:[o.jsx("strong",{children:"被删除的备份无法直接恢复"}),o.jsx("span",{children:"只处理当前 Codex Home 下由本工具管理的备份目录。"})]})]}),o.jsxs("dl",{className:"operation-scope",children:[o.jsxs("div",{children:[o.jsx("dt",{children:"当前备份"}),o.jsxs("dd",{children:[n.backups.length," 份"]})]}),o.jsxs("div",{children:[o.jsx("dt",{children:"保留"}),o.jsxs("dd",{children:["最近 ",e," 份"]})]}),o.jsxs("div",{children:[o.jsx("dt",{children:"将删除"}),o.jsxs("dd",{children:[l," 份"]})]})]})]})}function Ap({onCancel:e,onConfirm:n}){const[t,r]=_.useState(""),[l,i]=_.useState(""),[s,u]=_.useState(""),[a,d]=_.useState(""),v=/^[A-Za-z0-9_.-]{1,80}$/.test(t)&&l.trim()&&s.trim();return o.jsx($l,{title:"新增存储配置",confirmLabel:"保存配置",onCancel:e,confirmDisabled:!v,onConfirm:()=>n({profileId:t,name:l,codexHome:s,sqliteHome:a}),children:o.jsxs("div",{className:"profile-form",children:[o.jsxs("label",{children:[o.jsx("span",{children:"配置 ID"}),o.jsx("input",{value:t,onChange:m=>r(m.target.value),placeholder:"work",spellCheck:"false"})]}),o.jsxs("label",{children:[o.jsx("span",{children:"显示名称"}),o.jsx("input",{value:l,onChange:m=>i(m.target.value),placeholder:"工作环境"})]}),o.jsxs("label",{children:[o.jsx("span",{children:"Codex Home"}),o.jsx("input",{value:s,onChange:m=>u(m.target.value),placeholder:"/home/user/.codex",spellCheck:"false"})]}),o.jsxs("label",{children:[o.jsx("span",{children:"SQLite Home(可选)"}),o.jsx("input",{value:a,onChange:m=>d(m.target.value),placeholder:"留空时由服务端按配置解析",spellCheck:"false"})]})]})})}function Up({toast:e,onClose:n}){return _.useEffect(()=>{if(!e)return;const t=window.setTimeout(n,6e3);return()=>window.clearTimeout(t)},[e,n]),e?o.jsxs("div",{className:`toast toast--${e.tone}`,children:[o.jsxs("div",{children:[e.tone==="success"?o.jsx(is,{size:18}):o.jsx(an,{size:18}),o.jsxs("span",{children:[o.jsx("strong",{children:e.title}),e.message?o.jsx("small",{children:e.message}):null]})]}),o.jsx("button",{type:"button",onClick:n,"aria-label":"关闭通知",children:o.jsx(Lc,{size:16})})]}):null}function Hp(){const[e,n]=_.useState("overview"),[t,r]=_.useState("checking"),[l,i]=_.useState(""),[s,u]=Fn("cps.web.profileId","default"),[a,d]=_.useState([]),[v,m]=Fn("cps.web.manualProviders",[]),[h,g]=_.useState(null),[w,C]=_.useState(gp),[I,f]=_.useState(""),[c,p]=_.useState(!0),[y,N]=_.useState(!1),[j,k]=_.useState(null),[E,D]=_.useState(null),[R,G]=_.useState([]),[Be,Ye]=_.useState(null),Xe=_.useRef(0),dn=_.useMemo(()=>{const L=io(h),O=new Set(L.map(Y=>Y.id));return[...L.map(Y=>({...Y,manual:v.includes(Y.id)})),...v.filter(Y=>!O.has(Y)).map(Y=>({id:Y,sources:["manual"],configured:!1,current:!1,manual:!0}))]},[h,v]),z=_.useCallback(async({quiet:L=!1}={})=>{L||p(!0);try{const O=at(s),[Y,xr]=await Promise.all([Oe("/api/status",O),Oe("/api/backups",O)]);g(Y.status),C(xr),f(Je=>Je&&io(Y.status).some(Al=>Al.id===Je)?Je:Y.status.currentProvider)}catch(O){D({tone:"error",title:"状态读取失败",message:O.message})}finally{L||p(!1)}},[s]),J=_.useCallback(async()=>{const L=await ap();d(L.profiles),u(O=>L.profiles.some(Y=>Y.id===O)?O:"default")},[u]);_.useEffect(()=>{let L=!1;return sp().then(async O=>{if(!O)throw new wl;await J(),L||r("ready")}).catch(O=>{L||(r(O instanceof wl?"required":"error"),i(O.message))}),()=>{L=!0}},[J]),_.useEffect(()=>{t==="ready"&&z()},[t,s]),_.useEffect(()=>{const L=O=>{r("required"),i(O.detail||"设备凭证已失效。请重新运行 codex-provider web。")};return window.addEventListener("cps:pairing-required",L),()=>window.removeEventListener("cps:pairing-required",L)},[]),_.useEffect(()=>{if(t!=="ready")return;let L=!1;const O=async()=>{var xr;try{const Je=await up(Xe.current);if(L)return;(xr=Je.activity)!=null&&xr.length&&(Xe.current=Je.activity[Je.activity.length-1].id,G(Al=>[...Al,...Je.activity].slice(-250))),Ye(Je.activeOperation??null)}catch{}};O();const Y=window.setInterval(O,900);return()=>{L=!0,window.clearInterval(Y)}},[t]);const S=_.useCallback(async()=>{const L=j.plan;k(null),N(!0),n("activity");try{const O={...at(s),provider:I,keepCount:L.keepCount},Y=L.mode==="switch"?await Oe("/api/switch",{...O,model:L.modelMode==="custom"?L.model:void 0,keepRootModel:L.modelMode==="keep"}):await Oe("/api/sync",O);D({tone:"success",title:L.mode==="switch"?"切换并同步完成":"同步完成",message:`备份:${Y.result.backupDir}`}),await z({quiet:!0})}catch(O){D({tone:"error",title:"操作失败",message:O.message})}finally{N(!1)}},[j,s,I,z]),T=_.useCallback(async L=>{const O=j.backup;k(null),N(!0),n("activity");try{await Oe("/api/restore",{...at(s),backupId:O.id,...L}),D({tone:"success",title:"备份恢复完成",message:O.id}),await z({quiet:!0})}catch(Y){D({tone:"error",title:"恢复失败",message:Y.message})}finally{N(!1)}},[j,s,z]),M=_.useCallback(async()=>{const L=j.keepCount;k(null),N(!0);try{const O=await Oe("/api/prune",{...at(s),keepCount:L});D({tone:"success",title:"旧备份清理完成",message:`删除 ${O.result.deletedCount} 份,释放 ${pr(O.result.freedBytes)}`}),await z({quiet:!0})}catch(O){D({tone:"error",title:"备份清理失败",message:O.message})}finally{N(!1)}},[j,s,z]),H=_.useCallback(()=>D(null),[]),b=_.useCallback(async L=>{try{const O=await Oe("/api/profiles/save",L);k(null),await J(),u(O.profile.id),D({tone:"success",title:"存储配置已保存",message:O.profile.name})}catch(O){D({tone:"error",title:"配置保存失败",message:O.message})}},[J,u]),Xn=_.useCallback(async()=>{try{await Oe("/api/profiles/delete",{profileId:s}),u("default"),await J()}catch(L){D({tone:"error",title:"配置删除失败",message:L.message})}},[s,J,u]),Ge=_.useCallback(async()=>{await cp().catch(()=>{}),r("required"),i("此浏览器的设备凭证已失效。重新运行 codex-provider web 即可自动配对。")},[]),Pt=_.useCallback(L=>{m(O=>[...new Set([...O,L])].sort()),f(L)},[m]),Ze=_.useCallback(L=>{m(O=>O.filter(Y=>Y!==L)),f((h==null?void 0:h.currentProvider)??"")},[m,h==null?void 0:h.currentProvider]);return t!=="ready"?o.jsxs("div",{className:"access-gate",children:[o.jsx(lo,{size:32}),o.jsx("h1",{children:t==="checking"?"正在完成安全配对":"需要重新配对"}),o.jsx("p",{children:t==="checking"?"请稍候…":l||"请重新运行 codex-provider web。"}),t!=="checking"?o.jsx("code",{children:"codex-provider web"}):null]}):o.jsxs("div",{className:"app-shell",children:[o.jsx(Sp,{status:h,busy:y||!!Be,onRefresh:()=>z()}),o.jsx(Cp,{view:e,setView:n,status:h,onForgetBrowser:Ge}),o.jsxs("main",{className:"main-area",children:[o.jsx(Np,{profiles:a,profileId:s,setProfileId:u,status:h,onAddProfile:()=>k({type:"profile"}),onDeleteProfile:Xn,onRefresh:()=>z(),loading:c}),e==="overview"?o.jsx(Rp,{status:h,backups:w,providers:dn,selectedProvider:I,setSelectedProvider:f,onAddManualProvider:Pt,onRemoveManualProvider:Ze,onExecute:L=>k({type:"execute",plan:L}),onRestore:L=>k({type:"restore",backup:L}),setView:n,busy:y,loading:c}):null,e==="history"?o.jsx(Op,{profileId:s,status:h}):null,e==="backups"?o.jsx(Mp,{backups:w,status:h,busy:y,onRestore:L=>k({type:"restore",backup:L}),onPrune:L=>k({type:"prune",keepCount:L})}):null,e==="activity"?o.jsx(Ip,{activity:R,activeOperation:Be}):null]}),(j==null?void 0:j.type)==="execute"?o.jsx(Dp,{plan:j.plan,status:h,selectedProvider:I,onCancel:()=>k(null),onConfirm:S}):null,(j==null?void 0:j.type)==="restore"?o.jsx(Fp,{backup:j.backup,status:h,onCancel:()=>k(null),onConfirm:T}):null,(j==null?void 0:j.type)==="prune"?o.jsx($p,{keepCount:j.keepCount,backups:w,onCancel:()=>k(null),onConfirm:M}):null,(j==null?void 0:j.type)==="profile"?o.jsx(Ap,{onCancel:()=>k(null),onConfirm:b}):null,o.jsx(Up,{toast:E,onClose:H})]})}zc(document.getElementById("root")).render(o.jsx(co.StrictMode,{children:o.jsx(Hp,{})})); +//# sourceMappingURL=index-33db301d.js.map diff --git a/web/dist/assets/index-33db301d.js.map b/web/dist/assets/index-33db301d.js.map new file mode 100644 index 0000000..e4e9976 --- /dev/null +++ b/web/dist/assets/index-33db301d.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index-33db301d.js","sources":["../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/scheduler/cjs/scheduler.production.min.js","../../../node_modules/scheduler/index.js","../../../node_modules/react-dom/cjs/react-dom.production.min.js","../../../node_modules/react-dom/index.js","../../../node_modules/react-dom/client.js","../../src/api.js","../../src/hooks.js","../../src/history-requests.js","../../src/icons.jsx","../../src/App.jsx","../../src/main.jsx"],"sourcesContent":["/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,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(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"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(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 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(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={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,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({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});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){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 wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){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 a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eGj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3 ({}));\n if (!response.ok || !payload.deviceCredential) {\n throw new PairingRequiredError(payload.error ?? \"配对链接无效、已过期或已被使用。请重新运行 codex-provider web。\");\n }\n window.localStorage.setItem(DEVICE_STORAGE_KEY, payload.deviceCredential);\n window.history.replaceState(null, \"\", `${window.location.pathname}${window.location.search}`);\n return true;\n}\n\nfunction deviceHeaders() {\n return { \"X-Codex-Provider-Device\": window.localStorage.getItem(DEVICE_STORAGE_KEY) ?? \"\" };\n}\n\nasync function parseResponse(response, fallback) {\n const payload = await response.json().catch(() => ({}));\n if (!response.ok) {\n if (payload.code === \"PAIRING_REQUIRED\") {\n window.dispatchEvent(new CustomEvent(\"cps:pairing-required\", { detail: payload.error }));\n throw new PairingRequiredError(payload.error);\n }\n throw new Error(payload.error ?? fallback);\n }\n return payload;\n}\n\nexport async function apiRequest(path, body = {}, { signal } = {}) {\n const response = await fetch(path, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...deviceHeaders()\n },\n body: JSON.stringify(body),\n signal\n });\n return parseResponse(response, `Request failed with HTTP ${response.status}.`);\n}\n\nexport async function getActivity(after = 0) {\n const response = await fetch(`/api/activity?after=${after}`, {\n headers: deviceHeaders()\n });\n return parseResponse(response, `Activity request failed with HTTP ${response.status}.`);\n}\n\nexport async function getProfiles() {\n const response = await fetch(\"/api/profiles\", { headers: deviceHeaders() });\n return parseResponse(response, `Profile request failed with HTTP ${response.status}.`);\n}\n\nexport async function forgetThisBrowser() {\n try {\n await apiRequest(\"/api/access/forget\");\n } finally {\n window.localStorage.removeItem(DEVICE_STORAGE_KEY);\n }\n}\n\nexport async function getHistory(body = {}, options = {}) {\n return apiRequest(\"/api/history\", body, options);\n}\n\nexport async function getHistorySession(body = {}, options = {}) {\n return apiRequest(\"/api/history/session\", body, options);\n}\n","import { useEffect, useState } from \"react\";\n\nexport function usePersistentState(key, initialValue) {\n const [value, setValue] = useState(() => {\n try {\n const stored = window.localStorage.getItem(key);\n return stored ? JSON.parse(stored) : initialValue;\n } catch {\n return initialValue;\n }\n });\n\n useEffect(() => {\n window.localStorage.setItem(key, JSON.stringify(value));\n }, [key, value]);\n\n return [value, setValue];\n}\n","export function createLatestRequestGate() {\n let sequence = 0;\n let controller = null;\n return {\n begin() {\n controller?.abort();\n controller = new AbortController();\n sequence += 1;\n return { sequence, controller, signal: controller.signal };\n },\n isLatest(candidate) {\n return candidate === sequence;\n },\n cancel() {\n controller?.abort();\n sequence += 1;\n }\n };\n}\n\nexport function scheduleDebounced(callback, delay = 300, timers = globalThis) {\n const id = timers.setTimeout(callback, delay);\n return () => timers.clearTimeout(id);\n}\n","import React from \"react\";\n\nfunction Icon({ children, size = 18, className = \"\" }) {\n return (\n \n {children}\n \n );\n}\n\nexport const RefreshIcon = (props) => ;\nexport const DatabaseIcon = (props) => ;\nexport const HistoryIcon = (props) => ;\nexport const ActivityIcon = (props) => ;\nexport const OverviewIcon = (props) => ;\nexport const ShieldIcon = (props) => ;\nexport const ChevronIcon = (props) => ;\nexport const XIcon = (props) => ;\nexport const CheckIcon = (props) => ;\nexport const AlertIcon = (props) => ;\nexport const FolderIcon = (props) => ;\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport {\n PairingRequiredError,\n apiRequest,\n forgetThisBrowser,\n getActivity,\n getHistory,\n getHistorySession,\n getProfiles,\n initializeAccess\n} from \"./api.js\";\nimport { usePersistentState } from \"./hooks.js\";\nimport { createLatestRequestGate, scheduleDebounced } from \"./history-requests.js\";\nimport {\n ActivityIcon,\n AlertIcon,\n CheckIcon,\n ChevronIcon,\n DatabaseIcon,\n FolderIcon,\n HistoryIcon,\n OverviewIcon,\n RefreshIcon,\n ShieldIcon,\n XIcon\n} from \"./icons.jsx\";\n\nconst NAV_ITEMS = [\n { id: \"overview\", label: \"概览\", icon: OverviewIcon },\n { id: \"history\", label: \"聊天记录\", icon: HistoryIcon },\n { id: \"backups\", label: \"备份\", icon: HistoryIcon },\n { id: \"activity\", label: \"活动\", icon: ActivityIcon }\n];\n\nconst EMPTY_BACKUPS = { backupRoot: \"\", backups: [] };\n\nfunction formatNumber(value) {\n return new Intl.NumberFormat(\"zh-CN\").format(Number(value) || 0);\n}\n\nfunction formatBytes(bytes) {\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n let value = Number(bytes) || 0;\n let index = 0;\n while (value >= 1024 && index < units.length - 1) {\n value /= 1024;\n index += 1;\n }\n return index === 0 ? `${value} B` : `${value.toFixed(value >= 10 ? 1 : 2).replace(/\\.0$/, \"\")} ${units[index]}`;\n}\n\nfunction formatDate(value) {\n if (!value) return \"未知时间\";\n return new Intl.DateTimeFormat(\"zh-CN\", {\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false\n }).format(new Date(value));\n}\n\nfunction renderInlineMarkdown(text, keyPrefix) {\n const parts = text.split(/(`[^`]+`|\\*\\*[^*]+\\*\\*|\\*[^*]+\\*)/g);\n return parts.map((part, index) => {\n if (part.startsWith(\"`\") && part.endsWith(\"`\")) return {part.slice(1, -1)};\n if (part.startsWith(\"**\") && part.endsWith(\"**\")) return {part.slice(2, -2)};\n if (part.startsWith(\"*\") && part.endsWith(\"*\")) return {part.slice(1, -1)};\n return {part};\n });\n}\n\nfunction SafeMarkdown({ text }) {\n const blocks = String(text ?? \"\").split(/(```[^\\n]*\\n[\\s\\S]*?```)/g);\n return blocks.map((block, index) => {\n if (block.startsWith(\"```\") && block.endsWith(\"```\")) {\n const lines = block.slice(3, -3).replace(/^\\w*\\n/, \"\");\n return
{lines}
;\n }\n return block.split(\"\\n\").map((line, lineIndex, lines) => {renderInlineMarkdown(line, `${index}-${lineIndex}`)}{lineIndex < lines.length - 1 ?
: null}
);\n });\n}\n\nfunction storagePayload(profileId) {\n return { profileId: profileId || \"default\" };\n}\n\nfunction getTargetSqliteHome(status) {\n const databasePath = status?.stateDbLocation?.path;\n if (!databasePath) return status?.sqliteHome ?? \"\";\n const separator = databasePath.includes(\"\\\\\") ? \"\\\\\" : \"/\";\n const parts = databasePath.split(separator);\n parts.pop();\n return parts.join(separator) || separator;\n}\n\nfunction pathsEqual(left, right) {\n if (!left || !right) return false;\n const normalize = (value) => value.replace(/[\\\\/]+$/, \"\").replaceAll(\"\\\\\", \"/\").toLowerCase();\n return normalize(left) === normalize(right);\n}\n\nfunction providersFromStatus(status) {\n if (!status) return [];\n const sources = new Map();\n const add = (values, source) => {\n for (const value of values ?? []) {\n if (!value || value === \"(missing)\") continue;\n const bucket = sources.get(value) ?? new Set();\n bucket.add(source);\n sources.set(value, bucket);\n }\n };\n add(status.configuredProviders, \"config\");\n add(Object.keys(status.rolloutCounts?.sessions ?? {}), \"rollout\");\n add(Object.keys(status.rolloutCounts?.archived_sessions ?? {}), \"rollout\");\n add(Object.keys(status.sqliteCounts?.sessions ?? {}), \"sqlite\");\n add(Object.keys(status.sqliteCounts?.archived_sessions ?? {}), \"sqlite\");\n add([status.currentProvider], \"config\");\n return [...sources.entries()]\n .map(([id, providerSources]) => ({\n id,\n sources: [...providerSources],\n configured: status.configuredProviders?.includes(id),\n current: id === status.currentProvider\n }))\n .sort((left, right) => Number(right.current) - Number(left.current) || left.id.localeCompare(right.id));\n}\n\nfunction StatusDot({ tone = \"neutral\" }) {\n return ;\n}\n\nfunction AppHeader({ status, busy, onRefresh }) {\n const healthy = status?.sqliteAccess?.supported !== false && !status?.sqliteCounts?.unreadable;\n return (\n
\n
\n
\n
\n
Codex Provider Sync
\n
本机元数据一致性工具
\n
\n
\n
\n
\n \n {busy ? \"操作执行中\" : healthy ? \"本地服务就绪\" : \"需要检查\"}\n
\n \n
\n
\n );\n}\n\nfunction Sidebar({ view, setView, status, onForgetBrowser }) {\n return (\n \n );\n}\n\nfunction StorageBar({ profiles, profileId, setProfileId, status, onAddProfile, onDeleteProfile, onRefresh, loading }) {\n return (\n
\n \n \n \n {profileId !== \"default\" ? : null}\n \n
\n );\n}\n\nfunction ProviderBars({ title, counts, currentProvider }) {\n const entries = Object.entries(counts ?? {}).sort((left, right) => right[1] - left[1]);\n const total = entries.reduce((sum, [, count]) => sum + count, 0);\n return (\n
\n
\n {title}\n {formatNumber(total)}\n
\n
\n {entries.length === 0 ?
无记录
: entries.map(([provider, count]) => (\n
\n
\n {provider}\n {formatNumber(count)}\n
\n
\n \n
\n
\n ))}\n
\n
\n );\n}\n\nfunction StatusPanel({ status, loading }) {\n const rolloutTotal = Object.values(status?.rolloutCounts?.sessions ?? {}).reduce((sum, value) => sum + value, 0)\n + Object.values(status?.rolloutCounts?.archived_sessions ?? {}).reduce((sum, value) => sum + value, 0);\n const sqliteTotal = Object.values(status?.sqliteCounts?.sessions ?? {}).reduce((sum, value) => sum + value, 0)\n + Object.values(status?.sqliteCounts?.archived_sessions ?? {}).reduce((sum, value) => sum + value, 0);\n const aligned = status?.alignment?.aligned;\n return (\n
\n
\n
\n

状态总览

\n

比较 rollout 文件、SQLite 线程索引和当前 Provider。

\n
\n
\n {loading ? : aligned ? : }\n {loading ? \"正在检查\" : aligned ? \"元数据已对齐\" : \"发现不一致\"}\n
\n
\n\n
\n
\n 当前 Provider\n {status?.currentProvider ?? \"—\"}\n {status?.currentProviderImplicit ? \"隐式默认\" : \"config.toml 根级配置\"}\n
\n
\n Rollout 文件\n {formatNumber(rolloutTotal)}\n sessions + archived\n
\n
\n SQLite threads\n {status?.sqliteCounts?.unreadable ? \"不可读\" : formatNumber(sqliteTotal)}\n {status?.stateDbLocation?.source ?? \"未定位数据库\"}\n
\n
\n 托管备份\n {formatNumber(status?.backupSummary?.count)}\n {formatBytes(status?.backupSummary?.totalBytes)}\n
\n
\n\n
\n
\n
Rollout files
\n \n \n
\n
\n
\n
SQLite state
\n \n \n
\n
\n
\n );\n}\n\nfunction Warnings({ status }) {\n const items = [];\n if (status?.sqliteAccess?.supported === false) {\n items.push({ tone: \"danger\", title: \"SQLite 路径不可安全访问\", detail: status.sqliteAccess.message });\n }\n if (status?.sqliteCounts?.unreadable) {\n items.push({ tone: \"danger\", title: \"SQLite 当前不可读\", detail: status.sqliteCounts.error });\n }\n if (status?.lockedRolloutFiles?.length) {\n items.push({ tone: \"warning\", title: `${status.lockedRolloutFiles.length} 个 rollout 文件正在使用`, detail: \"同步会跳过这些活跃文件;会话结束后可再次执行。\" });\n }\n if (status?.encryptedContentWarning) {\n items.push({ tone: \"warning\", title: \"检测到 encrypted_content\", detail: status.encryptedContentWarning });\n }\n const repairs = status?.sqliteRepairStats;\n if (repairs?.userEventRowsNeedingRepair || repairs?.cwdRowsNeedingRepair) {\n items.push({ tone: \"info\", title: \"SQLite 有待修复字段\", detail: `user-event ${repairs.userEventRowsNeedingRepair ?? 0},cwd ${repairs.cwdRowsNeedingRepair ?? 0}` });\n }\n if (items.length === 0) return null;\n return (\n
\n {items.map((item, index) => (\n
\n \n
{item.title}{item.detail}
\n
\n ))}\n
\n );\n}\n\nfunction ProjectVisibility({ projects = [] }) {\n return (\n
\n
\n

项目可见性

检查 Desktop 项目路径、全局排序和首屏 50 条命中。

\n
\n
\n \n \n \n {projects.length === 0 ? (\n \n ) : projects.map((project) => (\n \n \n \n \n \n \n \n \n ))}\n \n
项目根目录交互会话首屏RanksCWD 精确匹配Provider
没有可显示的项目诊断。
{project.root}{project.interactiveThreads}{project.firstPageThreads}/50{project.rankPreview || \"—\"}{project.exactCwdMatches}/{project.interactiveThreads}{Object.entries(project.providerCounts ?? {}).map(([provider, count]) => `${provider} ${count}`).join(\" · \") || \"—\"}
\n
\n
\n );\n}\n\nfunction SegmentedControl({ value, onChange, disabled }) {\n return (\n
\n \n \n
\n );\n}\n\nfunction ExecutionPanel({ status, providers, selectedProvider, setSelectedProvider, onAddManualProvider, onRemoveManualProvider, onRequestExecute, busy }) {\n const [mode, setMode] = usePersistentState(\"cps.web.mode\", \"sync\");\n const [modelMode, setModelMode] = usePersistentState(\"cps.web.modelMode\", \"auto\");\n const [customModel, setCustomModel] = usePersistentState(\"cps.web.customModel\", \"\");\n const [keepCount, setKeepCount] = usePersistentState(\"cps.web.keepCount\", 5);\n const [manualProvider, setManualProvider] = useState(\"\");\n const selectedOption = providers.find((provider) => provider.id === selectedProvider);\n const switchAllowed = selectedOption?.configured;\n const validManualProvider = /^[A-Za-z0-9_.-]+$/.test(manualProvider.trim());\n const executeDisabled = busy || !selectedProvider || status?.sqliteAccess?.supported === false || status?.sqliteCounts?.unreadable;\n\n return (\n
\n
\n

执行同步

所有写操作都会先创建备份。执行前请关闭 Codex CLI、App 和 app-server。

\n \n
\n \n
\n \n \n
\n
\n setManualProvider(event.target.value)}\n placeholder=\"手动添加 Provider ID\"\n spellCheck=\"false\"\n disabled={busy}\n />\n {\n onAddManualProvider(manualProvider.trim());\n setManualProvider(\"\");\n }}\n >\n 添加\n \n {selectedOption?.manual ? : null}\n
\n\n {mode === \"switch\" ? (\n
\n 根级 model\n \n \n \n
\n ) : null}\n\n
修改前创建 metadata v2 备份,并记录 SQLite Home
\n onRequestExecute({ mode, modelMode, model: customModel.trim(), keepCount })}\n >\n {busy ? : }\n {busy ? \"正在执行…\" : mode === \"switch\" ? \"切换并同步\" : \"执行同步\"}\n \n
\n );\n}\n\nfunction RecentBackups({ backups, onViewAll, onRestore }) {\n return (\n
\n
\n

最近备份

{backups.backupRoot || \"同步后将在 Codex Home 下创建备份\"}

\n \n
\n
\n {backups.backups.length === 0 ?
尚无由本工具创建的备份。
: backups.backups.slice(0, 3).map((backup) => (\n
\n
\n
{formatDate(backup.metadata.createdAt)}{backup.metadata.targetProvider} · {backup.metadata.changedSessionFiles ?? 0} 个 rollout
\n
{formatBytes(backup.sizeBytes)}
\n \n
\n ))}\n
\n
\n );\n}\n\nfunction Overview({ status, backups, providers, selectedProvider, setSelectedProvider, onAddManualProvider, onRemoveManualProvider, onExecute, onRestore, setView, busy, loading }) {\n return (\n
\n \n \n
\n
\n \n setView(\"backups\")} onRestore={onRestore} />\n
\n \n
\n
\n );\n}\n\nfunction BackupsView({ backups, status, busy, onRestore, onPrune }) {\n const [keepCount, setKeepCount] = usePersistentState(\"cps.web.keepCount\", 5);\n return (\n
\n
\n

备份

管理当前 Codex Home 下由本工具创建的 metadata v2 备份。

\n
\n
\n
\n
{backups.backupRoot || status?.backupRoot || \"—\"}{backups.backups.length} 份 · {formatBytes(backups.backups.reduce((sum, backup) => sum + backup.sizeBytes, 0))}
\n
\n {backups.backups.length === 0 ?
还没有备份执行一次同步或切换后,备份会显示在这里。
: backups.backups.map((backup) => (\n
\n
{formatDate(backup.metadata.createdAt)}{backup.id}
\n
Provider {backup.metadata.targetProvider}Rollout {backup.metadata.changedSessionFiles ?? 0}SQLite {backup.metadata.sqliteDbFiles?.length ? \"已包含\" : \"未包含\"}
\n
SQLite Home{backup.metadata.sqliteHome ?? \"旧版 metadata 未记录\"}
\n
{formatBytes(backup.sizeBytes)}
\n
\n ))}\n
\n
\n
\n );\n}\n\nfunction ActivityView({ activity, activeOperation }) {\n return (\n
\n

活动日志

当前 Web UI 会话中的状态刷新、同步阶段和操作结果。

{activeOperation ?
{activeOperation.kind}
: null}
\n
\n
Activity log{activity.length} entries
\n
\n {activity.length === 0 ?
等待操作…
: activity.map((entry) => (\n
\n \n {entry.level}\n {entry.message}\n {typeof entry.detail === \"string\" ? {entry.detail} : null}\n
\n ))}\n
\n
\n
\n );\n}\n\nfunction HistoryView({ profileId, status }) {\n const [query, setQuery] = useState(\"\");\n const [committedQuery, setCommittedQuery] = useState(\"\");\n const [provider, setProvider] = useState(\"\");\n const [project, setProject] = useState(\"\");\n const [archived, setArchived] = useState(\"all\");\n const [page, setPage] = useState(1);\n const [history, setHistory] = useState({ sessions: [], total: 0, pageSize: 50, hasNextPage: false });\n const [selectedId, setSelectedId] = useState(\"\");\n const [detail, setDetail] = useState(null);\n const [loading, setLoading] = useState(false);\n const [detailLoading, setDetailLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const listRequest = useRef(null);\n const detailRequest = useRef(null);\n if (!listRequest.current) listRequest.current = createLatestRequestGate();\n if (!detailRequest.current) detailRequest.current = createLatestRequestGate();\n const providers = providersFromStatus(status);\n const projects = [...new Set((status?.projectThreadVisibility ?? []).map((item) => item.root))];\n\n useEffect(() => {\n return scheduleDebounced(() => setCommittedQuery(query), 300, window);\n }, [query]);\n\n const loadList = useCallback(async () => {\n const { controller, sequence } = listRequest.current.begin();\n setLoading(true); setError(\"\");\n try {\n const payload = await getHistory({ ...storagePayload(profileId), page, pageSize: 50, query: committedQuery, provider, project, archived }, { signal: controller.signal });\n if (!listRequest.current.isLatest(sequence)) return;\n setHistory(payload.history);\n setSelectedId((current) => payload.history.sessions.some((session) => session.id === current) ? current : payload.history.sessions[0]?.id ?? \"\");\n } catch (requestError) {\n if (requestError.name !== \"AbortError\" && listRequest.current.isLatest(sequence)) setError(requestError.message);\n } finally {\n if (listRequest.current.isLatest(sequence)) setLoading(false);\n }\n }, [profileId, page, committedQuery, provider, project, archived]);\n\n useEffect(() => {\n loadList();\n return () => listRequest.current.cancel();\n }, [loadList]);\n useEffect(() => {\n detailRequest.current.cancel();\n if (!selectedId) { setDetail(null); setDetailLoading(false); return undefined; }\n const { controller, sequence } = detailRequest.current.begin();\n setDetail(null);\n setDetailLoading(true);\n setError(\"\");\n getHistorySession({ ...storagePayload(profileId), sessionId: selectedId }, { signal: controller.signal })\n .then((payload) => { if (detailRequest.current.isLatest(sequence)) setDetail(payload.history); })\n .catch((requestError) => { if (requestError.name !== \"AbortError\" && detailRequest.current.isLatest(sequence)) setError(requestError.message); })\n .finally(() => { if (detailRequest.current.isLatest(sequence)) setDetailLoading(false); });\n return () => controller.abort();\n }, [profileId, selectedId]);\n\n const updateFilter = (setter) => (event) => { setter(event.target.value); setPage(1); };\n return (\n
\n

聊天记录

从 rollout 文件读取历史会话,只读查看,不修改本地数据。

\n
\n { if (event.key === \"Enter\") { setCommittedQuery(query); setPage(1); } }} placeholder=\"搜索标题、项目、Provider 或消息内容\" />\n \n \n \n
\n {error ?
{error}
: null}\n
\n
\n
{history.total} 个会话第 {history.page} 页
\n
\n {loading && !history.sessions.length ?
读取中…
: null}\n {!loading && !history.sessions.length ?
没有匹配的会话
: null}\n {history.sessions.map((session) => )}\n
\n
{page}
\n
\n
\n {detailLoading ?
正在读取会话
: !detail ?
选择一个会话聊天内容将在这里显示。
: <>

{detail.session.title}

{detail.session.cwd || \"未知项目\"} · {detail.session.provider} · {detail.session.messageCount} 条消息

{detail.session.archived ? \"已归档\" : \"活跃\"}
{detail.truncated ?
仅显示最近 {detail.returnedMessageCount} 条消息。
: null}
{detail.messages.map((message) =>
{message.role === \"user\" ? \"你\" : \"Codex\"}
)}
}\n
\n
\n
\n );\n}\n\nfunction Modal({ title, children, confirmLabel, onConfirm, onCancel, tone = \"primary\", confirmDisabled = false }) {\n return (\n
event.target === event.currentTarget && onCancel()}>\n
\n

{title}

\n
{children}
\n
\n
\n
\n );\n}\n\nfunction ExecuteModal({ plan, status, selectedProvider, onCancel, onConfirm }) {\n return (\n \n
请确认 Codex 已完全关闭关闭 Codex CLI、Codex App、app-server 及相关终端,避免 SQLite 或 rollout 被占用。
\n
\n
Codex Home
{status?.codexHome}
\n
SQLite Home
{status?.sqliteHome} ({status?.sqliteHomeSource})
\n
当前 Provider
{status?.currentProvider}
\n
目标 Provider
{selectedProvider}
\n
配置变更
{plan.mode === \"switch\" ? \"更新 config.toml 根级 model_provider\" : \"不修改 config.toml\"}
\n
Model 策略
{plan.mode !== \"switch\" ? \"跟随当前根级 model\" : plan.modelMode === \"auto\" ? \"跟随目标 Provider 配置\" : plan.modelMode === \"keep\" ? \"保留当前根级 model\" : `设置为 ${plan.model}`}
\n
备份策略
修改前创建备份,保留最近 {plan.keepCount} 份
\n
\n
\n );\n}\n\nfunction RestoreModal({ backup, status, onCancel, onConfirm }) {\n const [restoreConfig, setRestoreConfig] = useState(false);\n const [restoreDatabase, setRestoreDatabase] = useState(true);\n const [restoreSessions, setRestoreSessions] = useState(true);\n const targetSqliteHome = getTargetSqliteHome(status);\n const relocates = restoreDatabase && backup.metadata.version >= 2 && backup.metadata.sqliteHome && !pathsEqual(backup.metadata.sqliteHome, targetSqliteHome);\n const relocationBlocked = relocates && restoreConfig;\n return (\n onConfirm({ restoreConfig, restoreDatabase, restoreSessions, allowSqliteHomeRelocation: Boolean(relocates) })}\n >\n
{formatDate(backup.metadata.createdAt)} · {backup.metadata.targetProvider}{backup.path}
\n
\n 选择要覆盖的内容\n \n \n \n
\n {relocates ?
SQLite Home 与备份来源不同来源:{backup.metadata.sqliteHome}
目标:{targetSqliteHome}
{relocationBlocked ? \"迁移数据库时不能同时恢复旧 config.toml。\" : \"确认后数据库将恢复到当前目标位置。\"}
: null}\n
恢复前请关闭 Codex该操作将覆盖所选的当前元数据;请确认 Codex CLI、App 和 app-server 已关闭。
\n \n );\n}\n\nfunction PruneModal({ keepCount, backups, onCancel, onConfirm }) {\n const deleteCount = Math.max(0, backups.backups.length - keepCount);\n return (\n \n
被删除的备份无法直接恢复只处理当前 Codex Home 下由本工具管理的备份目录。
\n
当前备份
{backups.backups.length} 份
保留
最近 {keepCount} 份
将删除
{deleteCount} 份
\n
\n );\n}\n\nfunction ProfileModal({ onCancel, onConfirm }) {\n const [profileId, setProfileId] = useState(\"\");\n const [name, setName] = useState(\"\");\n const [codexHome, setCodexHome] = useState(\"\");\n const [sqliteHome, setSqliteHome] = useState(\"\");\n const valid = /^[A-Za-z0-9_.-]{1,80}$/.test(profileId) && name.trim() && codexHome.trim();\n return (\n onConfirm({ profileId, name, codexHome, sqliteHome })}>\n
\n \n \n \n \n
\n
\n );\n}\n\nfunction Toast({ toast, onClose }) {\n useEffect(() => {\n if (!toast) return undefined;\n const timer = window.setTimeout(onClose, 6000);\n return () => window.clearTimeout(timer);\n }, [toast, onClose]);\n if (!toast) return null;\n return
{toast.tone === \"success\" ? : }{toast.title}{toast.message ? {toast.message} : null}
;\n}\n\nexport default function App() {\n const [view, setView] = useState(\"overview\");\n const [accessState, setAccessState] = useState(\"checking\");\n const [accessMessage, setAccessMessage] = useState(\"\");\n const [profileId, setProfileId] = usePersistentState(\"cps.web.profileId\", \"default\");\n const [profiles, setProfiles] = useState([]);\n const [manualProviders, setManualProviders] = usePersistentState(\"cps.web.manualProviders\", []);\n const [status, setStatus] = useState(null);\n const [backups, setBackups] = useState(EMPTY_BACKUPS);\n const [selectedProvider, setSelectedProvider] = useState(\"\");\n const [loading, setLoading] = useState(true);\n const [busy, setBusy] = useState(false);\n const [modal, setModal] = useState(null);\n const [toast, setToast] = useState(null);\n const [activity, setActivity] = useState([]);\n const [activeOperation, setActiveOperation] = useState(null);\n const lastActivityId = useRef(0);\n\n const providers = useMemo(() => {\n const detected = providersFromStatus(status);\n const detectedIds = new Set(detected.map((provider) => provider.id));\n return [\n ...detected.map((provider) => ({\n ...provider,\n manual: manualProviders.includes(provider.id)\n })),\n ...manualProviders\n .filter((provider) => !detectedIds.has(provider))\n .map((id) => ({ id, sources: [\"manual\"], configured: false, current: false, manual: true }))\n ];\n }, [status, manualProviders]);\n\n const refresh = useCallback(async ({ quiet = false } = {}) => {\n if (!quiet) setLoading(true);\n try {\n const storage = storagePayload(profileId);\n const [statusPayload, backupPayload] = await Promise.all([\n apiRequest(\"/api/status\", storage),\n apiRequest(\"/api/backups\", storage)\n ]);\n setStatus(statusPayload.status);\n setBackups(backupPayload);\n setSelectedProvider((current) => current && providersFromStatus(statusPayload.status).some((provider) => provider.id === current)\n ? current\n : statusPayload.status.currentProvider);\n } catch (error) {\n setToast({ tone: \"error\", title: \"状态读取失败\", message: error.message });\n } finally {\n if (!quiet) setLoading(false);\n }\n }, [profileId]);\n\n const refreshProfiles = useCallback(async () => {\n const payload = await getProfiles();\n setProfiles(payload.profiles);\n setProfileId((current) => payload.profiles.some((profile) => profile.id === current) ? current : \"default\");\n }, [setProfileId]);\n\n useEffect(() => {\n let cancelled = false;\n initializeAccess()\n .then(async (paired) => {\n if (!paired) throw new PairingRequiredError();\n await refreshProfiles();\n if (!cancelled) setAccessState(\"ready\");\n })\n .catch((error) => {\n if (cancelled) return;\n setAccessState(error instanceof PairingRequiredError ? \"required\" : \"error\");\n setAccessMessage(error.message);\n });\n return () => { cancelled = true; };\n }, [refreshProfiles]);\n\n useEffect(() => {\n if (accessState === \"ready\") refresh();\n }, [accessState, profileId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const requirePairing = (event) => {\n setAccessState(\"required\");\n setAccessMessage(event.detail || \"设备凭证已失效。请重新运行 codex-provider web。\");\n };\n window.addEventListener(\"cps:pairing-required\", requirePairing);\n return () => window.removeEventListener(\"cps:pairing-required\", requirePairing);\n }, []);\n\n useEffect(() => {\n if (accessState !== \"ready\") return undefined;\n let stopped = false;\n const poll = async () => {\n try {\n const payload = await getActivity(lastActivityId.current);\n if (stopped) return;\n if (payload.activity?.length) {\n lastActivityId.current = payload.activity[payload.activity.length - 1].id;\n setActivity((current) => [...current, ...payload.activity].slice(-250));\n }\n setActiveOperation(payload.activeOperation ?? null);\n } catch {\n // A transient poll failure should not interrupt a running operation.\n }\n };\n poll();\n const timer = window.setInterval(poll, 900);\n return () => { stopped = true; window.clearInterval(timer); };\n }, [accessState]);\n\n const execute = useCallback(async () => {\n const plan = modal.plan;\n setModal(null);\n setBusy(true);\n setView(\"activity\");\n try {\n const common = { ...storagePayload(profileId), provider: selectedProvider, keepCount: plan.keepCount };\n const payload = plan.mode === \"switch\"\n ? await apiRequest(\"/api/switch\", { ...common, model: plan.modelMode === \"custom\" ? plan.model : undefined, keepRootModel: plan.modelMode === \"keep\" })\n : await apiRequest(\"/api/sync\", common);\n setToast({ tone: \"success\", title: plan.mode === \"switch\" ? \"切换并同步完成\" : \"同步完成\", message: `备份:${payload.result.backupDir}` });\n await refresh({ quiet: true });\n } catch (error) {\n setToast({ tone: \"error\", title: \"操作失败\", message: error.message });\n } finally {\n setBusy(false);\n }\n }, [modal, profileId, selectedProvider, refresh]);\n\n const restore = useCallback(async (options) => {\n const backup = modal.backup;\n setModal(null);\n setBusy(true);\n setView(\"activity\");\n try {\n await apiRequest(\"/api/restore\", { ...storagePayload(profileId), backupId: backup.id, ...options });\n setToast({ tone: \"success\", title: \"备份恢复完成\", message: backup.id });\n await refresh({ quiet: true });\n } catch (error) {\n setToast({ tone: \"error\", title: \"恢复失败\", message: error.message });\n } finally {\n setBusy(false);\n }\n }, [modal, profileId, refresh]);\n\n const prune = useCallback(async () => {\n const keepCount = modal.keepCount;\n setModal(null);\n setBusy(true);\n try {\n const payload = await apiRequest(\"/api/prune\", { ...storagePayload(profileId), keepCount });\n setToast({ tone: \"success\", title: \"旧备份清理完成\", message: `删除 ${payload.result.deletedCount} 份,释放 ${formatBytes(payload.result.freedBytes)}` });\n await refresh({ quiet: true });\n } catch (error) {\n setToast({ tone: \"error\", title: \"备份清理失败\", message: error.message });\n } finally {\n setBusy(false);\n }\n }, [modal, profileId, refresh]);\n\n const closeToast = useCallback(() => setToast(null), []);\n const saveProfile = useCallback(async (profile) => {\n try {\n const payload = await apiRequest(\"/api/profiles/save\", profile);\n setModal(null);\n await refreshProfiles();\n setProfileId(payload.profile.id);\n setToast({ tone: \"success\", title: \"存储配置已保存\", message: payload.profile.name });\n } catch (error) {\n setToast({ tone: \"error\", title: \"配置保存失败\", message: error.message });\n }\n }, [refreshProfiles, setProfileId]);\n const deleteProfile = useCallback(async () => {\n try {\n await apiRequest(\"/api/profiles/delete\", { profileId });\n setProfileId(\"default\");\n await refreshProfiles();\n } catch (error) {\n setToast({ tone: \"error\", title: \"配置删除失败\", message: error.message });\n }\n }, [profileId, refreshProfiles, setProfileId]);\n const forgetBrowser = useCallback(async () => {\n await forgetThisBrowser().catch(() => {});\n setAccessState(\"required\");\n setAccessMessage(\"此浏览器的设备凭证已失效。重新运行 codex-provider web 即可自动配对。\");\n }, []);\n const addManualProvider = useCallback((provider) => {\n setManualProviders((current) => [...new Set([...current, provider])].sort());\n setSelectedProvider(provider);\n }, [setManualProviders]);\n const removeManualProvider = useCallback((provider) => {\n setManualProviders((current) => current.filter((item) => item !== provider));\n setSelectedProvider(status?.currentProvider ?? \"\");\n }, [setManualProviders, status?.currentProvider]);\n\n if (accessState !== \"ready\") {\n return

{accessState === \"checking\" ? \"正在完成安全配对\" : \"需要重新配对\"}

{accessState === \"checking\" ? \"请稍候…\" : accessMessage || \"请重新运行 codex-provider web。\"}

{accessState !== \"checking\" ? codex-provider web : null}
;\n }\n\n return (\n
\n refresh()} />\n \n
\n setModal({ type: \"profile\" })} onDeleteProfile={deleteProfile} onRefresh={() => refresh()} loading={loading} />\n {view === \"overview\" ? setModal({ type: \"execute\", plan })} onRestore={(backup) => setModal({ type: \"restore\", backup })} setView={setView} busy={busy} loading={loading} /> : null}\n {view === \"history\" ? : null}\n {view === \"backups\" ? setModal({ type: \"restore\", backup })} onPrune={(keepCount) => setModal({ type: \"prune\", keepCount })} /> : null}\n {view === \"activity\" ? : null}\n
\n {modal?.type === \"execute\" ? setModal(null)} onConfirm={execute} /> : null}\n {modal?.type === \"restore\" ? setModal(null)} onConfirm={restore} /> : null}\n {modal?.type === \"prune\" ? setModal(null)} onConfirm={prune} /> : null}\n {modal?.type === \"profile\" ? setModal(null)} onConfirm={saveProfile} /> : null}\n \n
\n );\n}\n","import React from \"react\";\nimport { createRoot } from \"react-dom/client\";\n\nimport App from \"./App.jsx\";\nimport \"./styles.css\";\n\ncreateRoot(document.getElementById(\"root\")).render(\n \n \n \n);\n"],"names":["l","n","p","q","r","t","u","v","w","x","y","z","A","a","B","C","D","E","b","e","F","G","H","I","J","K","L","M","d","c","k","h","g","f","m","N","O","escape","P","Q","R","S","T","U","V","W","X","react_production_min","reactModule","require$$0","reactJsxRuntime_production_min","jsxRuntimeModule","exports","schedulerModule","aa","ca","require$$1","da","ea","fa","ha","ia","ja","ka","la","ma","oa","pa","qa","ra","sa","ta","ua","va","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Ua","Va","Wa","Xa","Ya","Za","ab","bb","cb","db","eb","fb","gb","hb","ib","jb","kb","lb","mb","nb","ob","pb","qb","rb","sb","tb","ub","vb","wb","xb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","Rb","Sb","Tb","Ub","Vb","Wb","Xb","Yb","Zb","$b","ac","bc","cc","dc","ec","fc","gc","hc","ic","jc","kc","lc","mc","oc","nc","pc","qc","rc","sc","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Rc","Sc","Tc","Uc","Vc","Wc","Xc","Yc","Zc","$c","ad","bd","cd","dd","ed","fd","gd","hd","id","jd","kd","ld","md","nd","od","pd","qd","rd","sd","td","ud","vd","wd","xd","yd","Ad","zd","Bd","Cd","Dd","Ed","Fd","Gd","Hd","Id","Jd","Kd","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","Ud","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","de","ee","fe","ge","he","ie","je","ke","le","me","ne","oe","pe","qe","re","se","te","ue","ve","we","xe","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","He","Ie","Je","Ke","Le","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","ff","gf","hf","jf","kf","lf","mf","nf","of","pf","qf","rf","sf","tf","uf","vf","wf","na","xa","$a","ba","xf","yf","zf","Af","Bf","Cf","Df","Ef","Ff","Gf","Hf","Jf","If","Kf","Lf","Mf","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","ih","jh","kh","lh","mh","nh","oh","ph","qh","rh","sh","th","uh","vh","wh","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","ei","fi","gi","hi","ii","ji","ki","li","mi","ni","oi","pi","qi","ri","si","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","aj","bj","cj","dj","ej","fj","gj","hj","ij","jj","kj","lj","mj","nj","oj","pj","qj","rj","sj","tj","uj","vj","wj","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Kj","Lj","Mj","Nj","Oj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","Xj","Yj","Zj","ak","bk","ck","dk","ek","fk","gk","hk","ik","jk","kk","lk","mk","nk","ok","Y","Z","pk","qk","rk","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","Qk","Rk","Sk","Tk","Uk","Vk","Wk","Xk","Yk","Zk","$k","al","bl","cl","dl","el","fl","gl","hl","il","jl","kl","ll","ml","nl","ol","pl","ql","rl","sl","tl","ul","vl","reactDom_production_min","checkDCE","err","reactDomModule","createRoot","DEVICE_STORAGE_KEY","PairingRequiredError","message","hasDeviceCredential","initializeAccess","pairingToken","response","payload","deviceHeaders","parseResponse","fallback","apiRequest","path","body","signal","getActivity","after","getProfiles","forgetThisBrowser","getHistory","options","getHistorySession","usePersistentState","key","initialValue","value","setValue","useState","stored","useEffect","createLatestRequestGate","sequence","controller","candidate","scheduleDebounced","callback","delay","timers","Icon","children","size","className","jsx","RefreshIcon","props","jsxs","DatabaseIcon","HistoryIcon","ActivityIcon","OverviewIcon","ShieldIcon","ChevronIcon","XIcon","CheckIcon","AlertIcon","FolderIcon","NAV_ITEMS","EMPTY_BACKUPS","formatNumber","formatBytes","bytes","units","index","formatDate","renderInlineMarkdown","text","keyPrefix","part","React","SafeMarkdown","block","lines","line","lineIndex","storagePayload","profileId","getTargetSqliteHome","status","databasePath","_a","separator","parts","pathsEqual","left","right","normalize","providersFromStatus","sources","add","values","source","bucket","_b","_c","_d","providerSources","StatusDot","tone","AppHeader","busy","onRefresh","healthy","Sidebar","view","setView","onForgetBrowser","item","StorageBar","profiles","setProfileId","onAddProfile","onDeleteProfile","loading","event","profile","ProviderBars","title","counts","currentProvider","entries","total","sum","count","provider","StatusPanel","rolloutTotal","sqliteTotal","aligned","_e","_f","_g","_h","_i","_j","_k","_l","_m","Warnings","items","repairs","ProjectVisibility","projects","project","SegmentedControl","onChange","disabled","ExecutionPanel","providers","selectedProvider","setSelectedProvider","onAddManualProvider","onRemoveManualProvider","onRequestExecute","mode","setMode","modelMode","setModelMode","customModel","setCustomModel","keepCount","setKeepCount","manualProvider","setManualProvider","selectedOption","switchAllowed","validManualProvider","executeDisabled","RecentBackups","backups","onViewAll","onRestore","backup","Overview","onExecute","BackupsView","onPrune","ActivityView","activity","activeOperation","entry","HistoryView","query","setQuery","committedQuery","setCommittedQuery","setProvider","setProject","archived","setArchived","page","setPage","history","setHistory","selectedId","setSelectedId","detail","setDetail","setLoading","detailLoading","setDetailLoading","error","setError","listRequest","useRef","detailRequest","loadList","useCallback","current","session","requestError","updateFilter","setter","Fragment","Modal","confirmLabel","onConfirm","onCancel","confirmDisabled","ExecuteModal","plan","RestoreModal","restoreConfig","setRestoreConfig","restoreDatabase","setRestoreDatabase","restoreSessions","setRestoreSessions","targetSqliteHome","relocates","relocationBlocked","PruneModal","deleteCount","ProfileModal","name","setName","codexHome","setCodexHome","sqliteHome","setSqliteHome","valid","Toast","toast","onClose","timer","App","accessState","setAccessState","accessMessage","setAccessMessage","setProfiles","manualProviders","setManualProviders","setStatus","setBackups","setBusy","modal","setModal","setToast","setActivity","setActiveOperation","lastActivityId","useMemo","detected","detectedIds","refresh","quiet","storage","statusPayload","backupPayload","refreshProfiles","cancelled","paired","requirePairing","stopped","poll","execute","common","restore","prune","closeToast","saveProfile","deleteProfile","forgetBrowser","addManualProvider","removeManualProvider"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]} \ No newline at end of file diff --git a/web/dist/index.html b/web/dist/index.html new file mode 100644 index 0000000..481bc23 --- /dev/null +++ b/web/dist/index.html @@ -0,0 +1,16 @@ + + + + + + + + Codex Provider Sync + + + + +
+ + + diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..c4f650d --- /dev/null +++ b/web/index.html @@ -0,0 +1,14 @@ + + + + + + + + Codex Provider Sync + + +
+ + + diff --git a/web/src/App.jsx b/web/src/App.jsx new file mode 100644 index 0000000..5865af2 --- /dev/null +++ b/web/src/App.jsx @@ -0,0 +1,950 @@ +import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; + +import { + PairingRequiredError, + apiRequest, + forgetThisBrowser, + getActivity, + getHistory, + getHistorySession, + getProfiles, + initializeAccess +} from "./api.js"; +import { usePersistentState } from "./hooks.js"; +import { createLatestRequestGate, scheduleDebounced } from "./history-requests.js"; +import { + ActivityIcon, + AlertIcon, + CheckIcon, + ChevronIcon, + DatabaseIcon, + FolderIcon, + HistoryIcon, + OverviewIcon, + RefreshIcon, + ShieldIcon, + XIcon +} from "./icons.jsx"; + +const NAV_ITEMS = [ + { id: "overview", label: "概览", icon: OverviewIcon }, + { id: "history", label: "聊天记录", icon: HistoryIcon }, + { id: "backups", label: "备份", icon: HistoryIcon }, + { id: "activity", label: "活动", icon: ActivityIcon } +]; + +const EMPTY_BACKUPS = { backupRoot: "", backups: [] }; + +function formatNumber(value) { + return new Intl.NumberFormat("zh-CN").format(Number(value) || 0); +} + +function formatBytes(bytes) { + const units = ["B", "KB", "MB", "GB", "TB"]; + let value = Number(bytes) || 0; + let index = 0; + while (value >= 1024 && index < units.length - 1) { + value /= 1024; + index += 1; + } + return index === 0 ? `${value} B` : `${value.toFixed(value >= 10 ? 1 : 2).replace(/\.0$/, "")} ${units[index]}`; +} + +function formatDate(value) { + if (!value) return "未知时间"; + return new Intl.DateTimeFormat("zh-CN", { + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false + }).format(new Date(value)); +} + +function renderInlineMarkdown(text, keyPrefix) { + const parts = text.split(/(`[^`]+`|\*\*[^*]+\*\*|\*[^*]+\*)/g); + return parts.map((part, index) => { + if (part.startsWith("`") && part.endsWith("`")) return {part.slice(1, -1)}; + if (part.startsWith("**") && part.endsWith("**")) return {part.slice(2, -2)}; + if (part.startsWith("*") && part.endsWith("*")) return {part.slice(1, -1)}; + return {part}; + }); +} + +function SafeMarkdown({ text }) { + const blocks = String(text ?? "").split(/(```[^\n]*\n[\s\S]*?```)/g); + return blocks.map((block, index) => { + if (block.startsWith("```") && block.endsWith("```")) { + const lines = block.slice(3, -3).replace(/^\w*\n/, ""); + return
{lines}
; + } + return block.split("\n").map((line, lineIndex, lines) => {renderInlineMarkdown(line, `${index}-${lineIndex}`)}{lineIndex < lines.length - 1 ?
: null}
); + }); +} + +function storagePayload(profileId) { + return { profileId: profileId || "default" }; +} + +function getTargetSqliteHome(status) { + const databasePath = status?.stateDbLocation?.path; + if (!databasePath) return status?.sqliteHome ?? ""; + const separator = databasePath.includes("\\") ? "\\" : "/"; + const parts = databasePath.split(separator); + parts.pop(); + return parts.join(separator) || separator; +} + +function pathsEqual(left, right) { + if (!left || !right) return false; + const normalize = (value) => value.replace(/[\\/]+$/, "").replaceAll("\\", "/").toLowerCase(); + return normalize(left) === normalize(right); +} + +function providersFromStatus(status) { + if (!status) return []; + const sources = new Map(); + const add = (values, source) => { + for (const value of values ?? []) { + if (!value || value === "(missing)") continue; + const bucket = sources.get(value) ?? new Set(); + bucket.add(source); + sources.set(value, bucket); + } + }; + add(status.configuredProviders, "config"); + add(Object.keys(status.rolloutCounts?.sessions ?? {}), "rollout"); + add(Object.keys(status.rolloutCounts?.archived_sessions ?? {}), "rollout"); + add(Object.keys(status.sqliteCounts?.sessions ?? {}), "sqlite"); + add(Object.keys(status.sqliteCounts?.archived_sessions ?? {}), "sqlite"); + add([status.currentProvider], "config"); + return [...sources.entries()] + .map(([id, providerSources]) => ({ + id, + sources: [...providerSources], + configured: status.configuredProviders?.includes(id), + current: id === status.currentProvider + })) + .sort((left, right) => Number(right.current) - Number(left.current) || left.id.localeCompare(right.id)); +} + +function StatusDot({ tone = "neutral" }) { + return