From 6c8ec5a2a5405cbab666066463590f719f855a87 Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 19 Sep 2026 21:58:14 -0700 Subject: [PATCH 1/4] feat(desktop): add Tauri desktop shell Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 39 +- .gitignore | 4 + AGENTS.md | 1 + desktop/README.md | 12 + desktop/package.json | 12 + desktop/scripts/prepare-sidecar.ts | 59 + desktop/src-tauri/Cargo.lock | 5500 ++++++++++++++++++ desktop/src-tauri/Cargo.toml | 33 + desktop/src-tauri/build.rs | 3 + desktop/src-tauri/capabilities/default.json | 15 + desktop/src-tauri/icons/icon.png | Bin 0 -> 98 bytes desktop/src-tauri/icons/tray/icon.png | Bin 0 -> 98 bytes desktop/src-tauri/src/auth.rs | 31 + desktop/src-tauri/src/discovery.rs | 116 + desktop/src-tauri/src/formatting.rs | 79 + desktop/src-tauri/src/lib.rs | 101 + desktop/src-tauri/src/main.rs | 3 + desktop/src-tauri/src/proxy.rs | 103 + desktop/src-tauri/src/sidecar.rs | 46 + desktop/src-tauri/src/tray.rs | 213 + desktop/src-tauri/src/window.rs | 55 + desktop/src-tauri/tauri.conf.json | 24 + desktop/ui/index.html | 29 + desktop/ui/main.js | 26 + scripts/test-layout/layout.json | 1 + src/server/management/companion-routes.ts | 5 +- structure/INDEX.md | 3 + structure/desktop-shell.md | 20 + structure/manifest.json | 26 +- tests/ci-workflows/ci-workflows.test.ts | 1 + tests/fixtures/test-layout-expected.json | 1 + tests/gui/gui-desktop-sidecar-script.test.ts | 18 + tests/server/companion-settings.test.ts | 3 + 33 files changed, 6572 insertions(+), 10 deletions(-) create mode 100644 desktop/README.md create mode 100644 desktop/package.json create mode 100644 desktop/scripts/prepare-sidecar.ts create mode 100644 desktop/src-tauri/Cargo.lock create mode 100644 desktop/src-tauri/Cargo.toml create mode 100644 desktop/src-tauri/build.rs create mode 100644 desktop/src-tauri/capabilities/default.json create mode 100644 desktop/src-tauri/icons/icon.png create mode 100644 desktop/src-tauri/icons/tray/icon.png create mode 100644 desktop/src-tauri/src/auth.rs create mode 100644 desktop/src-tauri/src/discovery.rs create mode 100644 desktop/src-tauri/src/formatting.rs create mode 100644 desktop/src-tauri/src/lib.rs create mode 100644 desktop/src-tauri/src/main.rs create mode 100644 desktop/src-tauri/src/proxy.rs create mode 100644 desktop/src-tauri/src/sidecar.rs create mode 100644 desktop/src-tauri/src/tray.rs create mode 100644 desktop/src-tauri/src/window.rs create mode 100644 desktop/src-tauri/tauri.conf.json create mode 100644 desktop/ui/index.html create mode 100644 desktop/ui/main.js create mode 100644 structure/desktop-shell.md create mode 100644 tests/gui/gui-desktop-sidecar-script.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e5eacaa1e9e..c99fea83e2f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,6 +35,7 @@ on: - "tests/**" - "scripts/**" - "app/**" + - "desktop/**" - "gui/**" - "assets/**" - ".gitattributes" @@ -215,6 +216,7 @@ jobs: - 'tests/**' - 'scripts/**' - 'app/**' + - 'desktop/**' - 'gui/**' - 'assets/**' - '.gitattributes' @@ -1175,6 +1177,38 @@ jobs: - name: Build macOS menu bar app run: bun run build:macos + desktop-shell: + name: desktop shell + needs: [changes, gates] + if: github.event_name != 'pull_request' || needs.changes.outputs.ci == 'true' + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - name: Checkout + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + with: + persist-credentials: false + + - name: Install Tauri Linux dependencies + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + + - name: Setup Rust + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # master + with: + toolchain: stable + components: rustfmt, clippy + + - name: Check Rust formatting + run: cargo fmt --manifest-path desktop/src-tauri/Cargo.toml --check + + - name: Run Rust clippy + run: cargo clippy --manifest-path desktop/src-tauri/Cargo.toml --all-targets -- -D warnings + + - name: Run Rust tests + run: cargo test --manifest-path desktop/src-tauri/Cargo.toml + ci: name: ci if: always() @@ -1182,7 +1216,7 @@ jobs: # direct dependencies only, so a failing `select-windows-runner` would # otherwise reach this gate as nothing at all while its dependents report # `skipped`, which is the shape the step below is written to catch. - needs: [changes, select-windows-runner, test, storage-policy, api-usage, gates, platform-macos, macos-control, platform-windows, keyring-smoke, docker-smoke, docs-site-build, structure-gate, npm-global-smoke, macos-app] + needs: [changes, select-windows-runner, test, storage-policy, api-usage, gates, platform-macos, macos-control, platform-windows, keyring-smoke, docker-smoke, docs-site-build, structure-gate, npm-global-smoke, macos-app, desktop-shell] runs-on: ubuntu-latest timeout-minutes: 5 permissions: @@ -1249,12 +1283,15 @@ jobs: GATED_JOBS="$GATED_JOBS platform-macos keyring-smoke docker-smoke npm-global-smoke" GATED_JOBS="$GATED_JOBS macos-control platform-windows docs-site-build" GATED_JOBS="$GATED_JOBS structure-gate macos-app" + GATED_JOBS="$GATED_JOBS desktop-shell" expected_for() { case "$1" in changes|select-windows-runner) echo requested ;; test|storage-policy|api-usage|gates|platform-macos|keyring-smoke|docker-smoke|macos-app) echo "$scoped" ;; + desktop-shell) + echo "$scoped" ;; npm-global-smoke) echo "$packaging" ;; docs-site-build) echo "$docs" ;; structure-gate) echo "$structure" ;; diff --git a/.gitignore b/.gitignore index e6dd44882e5..7973851d2cd 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,7 @@ go/ native/**/target/ dist/macos/ dist/release/ +desktop/src-tauri/binaries/ +desktop/src-tauri/resources/ +desktop/src-tauri/gen/ +desktop/src-tauri/target/ diff --git a/AGENTS.md b/AGENTS.md index 469912b5e39..78a63a33602 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -46,6 +46,7 @@ Bun-native TypeScript with no separate server compile step. gone, and on a new `src/` area nobody claimed. - `scripts/` — release and maintenance tooling; `scripts/release.ts` is the release authority. +- `desktop/` — Tauri v2 desktop shell, bootstrap UI, and compiled proxy sidecar preparation. - `devlog/` — planning and investigation notes, tracked in this repository. See "The `devlog` directory" below for what may and may not go there. diff --git a/desktop/README.md b/desktop/README.md new file mode 100644 index 00000000000..08c1a91c1d1 --- /dev/null +++ b/desktop/README.md @@ -0,0 +1,12 @@ +# OpenCodex desktop shell + +The Tauri shell attaches to the local OpenCodex proxy and keeps the dashboard +in the proxy's loopback origin. During development: + +```sh +bun run prepare-sidecar +bun run dev +``` + +The sidecar is generated from the repository's standalone binary build and is +not checked into git. diff --git a/desktop/package.json b/desktop/package.json new file mode 100644 index 00000000000..8b1bc197495 --- /dev/null +++ b/desktop/package.json @@ -0,0 +1,12 @@ +{ + "name": "@opencodex/desktop", + "private": true, + "scripts": { + "dev": "tauri dev", + "build": "tauri build", + "prepare-sidecar": "bun scripts/prepare-sidecar.ts" + }, + "devDependencies": { + "@tauri-apps/cli": "2.5.0" + } +} diff --git a/desktop/scripts/prepare-sidecar.ts b/desktop/scripts/prepare-sidecar.ts new file mode 100644 index 00000000000..502127870dc --- /dev/null +++ b/desktop/scripts/prepare-sidecar.ts @@ -0,0 +1,59 @@ +import { copyFileSync, cpSync, existsSync, mkdirSync } from "node:fs"; +import { join, resolve } from "node:path"; + +const targetByTriple: Record = { + "aarch64-apple-darwin": "bun-darwin-arm64", + "x86_64-apple-darwin": "bun-darwin-x64", + "x86_64-pc-windows-msvc": "bun-windows-x64", + "x86_64-unknown-linux-gnu": "bun-linux-x64", + "aarch64-unknown-linux-gnu": "bun-linux-arm64", +}; + +function argument(name: string): string | undefined { + const index = Bun.argv.indexOf(name); + return index < 0 ? undefined : Bun.argv[index + 1]; +} + +function hostTriple(): string | undefined { + const result = Bun.spawnSync(["rustc", "-vV"], { stdout: "pipe", stderr: "ignore" }); + if (result.exitCode !== 0) return undefined; + const host = result.stdout.toString().match(/^host:\s*(\S+)$/m)?.[1]; + return host; +} + +const repoRoot = resolve(import.meta.dir, "../.."); +const triple = + argument("--target") ?? + process.env.TARGET ?? + process.env.RUST_TARGET ?? + Bun.env.RUST_TARGET ?? + hostTriple(); +if (!triple || !targetByTriple[triple]) { + throw new Error( + `Unsupported Rust target ${triple ?? "(host unavailable)"}; pass --target ${Object.keys(targetByTriple).join("|")}`, + ); +} + +const target = targetByTriple[triple]; +const source = join(repoRoot, "dist", "standalone", target); +const executable = join(source, target.startsWith("bun-windows-") ? "ocx.exe" : "ocx"); +if (!existsSync(executable)) { + const result = Bun.spawnSync([ + process.execPath, + "run", + "build:standalone", + "--target", + target, + ], { cwd: repoRoot, stdout: "inherit", stderr: "inherit" }); + if (result.exitCode !== 0) process.exit(result.exitCode); +} + +const desktopRoot = resolve(import.meta.dir, ".."); +const binaries = join(desktopRoot, "src-tauri", "binaries"); +const resources = join(desktopRoot, "src-tauri", "resources", "gui", "dist"); +mkdirSync(binaries, { recursive: true }); +mkdirSync(resources, { recursive: true }); +const destination = join(binaries, `ocx-${triple}${target.startsWith("bun-windows-") ? ".exe" : ""}`); +copyFileSync(executable, destination); +cpSync(join(repoRoot, "gui", "dist"), resources, { recursive: true }); +console.log(`Prepared ${destination}`); diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock new file mode 100644 index 00000000000..29152a4ad19 --- /dev/null +++ b/desktop/src-tauri/Cargo.lock @@ -0,0 +1,5500 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "async-signal" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto-launch" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f012b8cc0c850f34117ec8252a44418f2e34a2cf501de89e29b241ae5f79471" +dependencies = [ + "dirs 4.0.0", + "thiserror 1.0.69", + "winreg 0.10.1", +] + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "backtrace" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide 0.8.9", + "object", + "rustc-demangle", + "windows-link 0.2.1", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +dependencies = [ + "serde", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "brotli" +version = "8.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.9.4", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.20", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.5", +] + +[[package]] +name = "cc" +version = "1.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54413ede23c2daf518f35156dfde027feb2374004d63bd497f983c8db9c0e313" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "chacha20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.1", + "rand_core", +] + +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link 0.1.3", +] + +[[package]] +name = "combine" +version = "4.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "cookie" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.9.4", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.9.4", + "core-foundation", + "libc", +] + +[[package]] +name = "core_detect" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "ctor" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" +dependencies = [ + "ctor-proc-macro", + "dtor", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.119", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dbus" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab69f03cc8c4340c9c8e315114e1658e6775a9b16a04357973aa21cec22b32e" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "deranged" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys 0.3.7", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users 0.4.6", + "winapi", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.3", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.9.4", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser", + "foldhash", + "html5ever", + "precomputed-hash", + "selectors", + "tendril", +] + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "embed-resource" +version = "3.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63a1d0de4f2249aa0ff5884d7080814f446bb241a559af6c170a41e878ed2d45" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 0.9.5", + "vswhom", + "winreg 0.55.0", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5ef0006ac9ab233c38522f5ae99cae3625151de8f706cacee1cba4b8e2832a" +dependencies = [ + "cfg-if", + "core_detect", + "multiversion", + "multiversion_no_op", + "rustversion", + "scopeguard", + "simdutf8", +] + +[[package]] +name = "endi" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +dependencies = [ + "serde", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "event-listener" +version = "5.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" +dependencies = [ + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25905e51abafe4dcea6c15fec58c57b601cdbd0ee53d22ea1d3016c587d39b" + +[[package]] +name = "flate2" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" +dependencies = [ + "crc32fast", + "miniz_oxide 0.9.1", + "zlib-rs", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-executor" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "futures-sink" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi 6.0.0", + "rand_core", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.9.4", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever", +] + +[[package]] +name = "http" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.5", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png 0.17.16", +] + +[[package]] +name = "icu_collections" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" + +[[package]] +name = "icu_properties" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" + +[[package]] +name = "icu_provider" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "image" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +dependencies = [ + "bytemuck", + "byteorder-lite", + "moxcms", + "num-traits", + "png 0.18.1", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", +] + +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + +[[package]] +name = "ipnet" +version = "2.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "js-sys" +version = "0.3.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.9.4", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6480ccc157a1389bb2e4891b24751b0f798ba640d22386f23143fbcc89da195a" +dependencies = [ + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "lru-slab" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "moxcms" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] + +[[package]] +name = "muda" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd04e60bc0b07438a6771710ee1698f98f6ebbc7f89b61264af1563b8aeb878" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.20", + "windows-sys 0.61.2", +] + +[[package]] +name = "multiversion" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ca4bea16ffc3f443cf7d866912118196bfef4c6a1556ca00f9f9b00bb43f7c" +dependencies = [ + "multiversion-macros", +] + +[[package]] +name = "multiversion-macros" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d416831a7317ef4b08bee00b69cbbb9c8763da7959a7026244d6266869f9c83" +dependencies = [ + "proc-macro2", + "quote", + "rustversion", + "syn 3.0.6", +] + +[[package]] +name = "multiversion_no_op" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d" + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.9.4", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.9.4", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.9.4", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.9.4", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.9.4", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.9.4", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.9.4", + "block2", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.9.4", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.9.4", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.9.4", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.9.4", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "open" +version = "5.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa576c76302b7b808eecc68061e67336c47833ef9d22caa74dda10fa9675eebc" +dependencies = [ + "dunce", + "is-wsl", + "libc", +] + +[[package]] +name = "opencodex-desktop" +version = "2.61.0" +dependencies = [ + "chrono", + "reqwest 0.12.24", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-autostart", + "tauri-plugin-opener", + "tauri-plugin-shell", + "tauri-plugin-single-instance", + "tokio", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "os_pipe" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "piper" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" + +[[package]] +name = "plist" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" +dependencies = [ + "base64 0.22.1", + "indexmap 2.14.2", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags 2.9.4", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.4", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" + +[[package]] +name = "quick-xml" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +dependencies = [ + "memchr", +] + +[[package]] +name = "quinn" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2 0.6.5", + "thiserror 2.0.20", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc" +dependencies = [ + "bytes", + "getrandom 0.4.3", + "lru-slab", + "rand", + "rand_pcg", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.20", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.6.5", + "tracing", + "windows-sys 0.61.2", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core", +] + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "redox_users" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0" +dependencies = [ + "libredox", + "thiserror 2.0.20", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "reqwest" +version = "0.12.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", +] + +[[package]] +name = "reqwest" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029" +dependencies = [ + "base64 0.23.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb" + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" +dependencies = [ + "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.119", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.9.4", + "cssparser", + "derive_more", + "log", + "new_debug_unreachable", + "phf", + "phf_codegen", + "precomputed-hash", + "rustc-hash", + "servo_arc", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34836a629bcbc6f1afdf0907a744870039b1e14c0561cb26094fa683b158eff3" +dependencies = [ + "erased-serde", + "serde", + "typeid", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e47d95bc83ed33b2ecf84f4187ad1ab9685d18ff28db000c99deac8ce180e3" +dependencies = [ + "base64 0.21.7", + "chrono", + "hex", + "indexmap 1.9.3", + "serde", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea3cee93715c2e266b9338b7544da68a9f24e227722ba482bd1c024367c77c65" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest", +] + +[[package]] +name = "shared_child" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "607549934f6cc26b89cfecfdc46fa90f1e5d1536a68349b0c3a4f9d1c0d37959" +dependencies = [ + "libc", + "sigchld", + "windows-sys 0.61.2", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "sigchld" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f2b37f04360cd465089b87a9c3869c08220a2f3458463f0adf8badf5e77f2c" +dependencies = [ + "libc", + "os_pipe", + "signal-hook", +] + +[[package]] +name = "signal-hook" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a0c28ca5908dbdbcd52e6fdaa00358ab88637f8ab33e1f188dd510eb44b53d" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "swift-rs" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45c444e496845d3f2a351146bff59aae4975b2280238df1dfaa0c7d1846f38e" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.35.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" +dependencies = [ + "bitflags 2.9.4", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "once_cell", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7eeb6d99155545da6150a1795945f16ac9c178deb2a5f2e74d776107bd5849" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fa5bacdb9bbad5954af3d1bd6cf6ae9192cab1b2e270f4a07f904610b9e85f4" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs 6.0.0", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "image", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest 0.13.5", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.20", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9ce40b16101cb6ea63d3e221567affd1c3a9205f95d7bc574941a10636b632" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs 6.0.0", + "glob", + "heck 0.5.0", + "json-patch", + "schemars", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08279169ff42f8fc45a1dbc9dcae888893ba95288142e5880c59b93a26d2cfc5" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png 0.17.16", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.119", + "tauri-utils", + "thiserror 2.0.20", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8b394794f399a421811d06966343e7933fcae92d59f5180b9388d1174497a45" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74be5dd4bed9afbd145e5716b5fa2ec28cbc29c34ffa61c258c9273d896c8020" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars", + "serde", + "serde_json", + "tauri-utils", + "walkdir", +] + +[[package]] +name = "tauri-plugin-autostart" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "062cdcd483d5e3148c9a64dabf8c574e239e2aa1193cf208d95cf89a676f87a5" +dependencies = [ + "auto-launch", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.20", +] + +[[package]] +name = "tauri-plugin-opener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc624469b06f59f5a29f874bbc61a2ed737c0f9c23ef09855a292c389c42e83f" +dependencies = [ + "dunce", + "glob", + "objc2-app-kit", + "objc2-foundation", + "open", + "schemars", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.20", + "url", + "windows", + "zbus", +] + +[[package]] +name = "tauri-plugin-shell" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c50a63e60fb8925956cc5b7569f4b750ac197a4d39f13b8dd46ea8e2bad79" +dependencies = [ + "encoding_rs", + "log", + "open", + "os_pipe", + "regex", + "schemars", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror 2.0.20", + "tokio", +] + +[[package]] +name = "tauri-plugin-single-instance" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc61e4822b8f74d68278e09161d3e3fdd1b14b9eb781e24edccaabf10c420e8c" +dependencies = [ + "serde", + "serde_json", + "tauri", + "thiserror 2.0.20", + "tracing", + "windows-sys 0.60.2", + "zbus", +] + +[[package]] +name = "tauri-runtime" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0b4bc95aed361b0019067d189a1174a603d460d0f6c72606512d59fc9c12ec8" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e6fac707727b7a2f48e4ded90976324267371073edbb415ffb73bb0458d203f" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e176a18e67764923c4f1ce66f25ae4abe5f688384d5eb1a0fa6c77f3d90f887" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dom_query", + "dunce", + "glob", + "http", + "infer", + "json-patch", + "log", + "memchr", + "phf", + "plist", + "proc-macro2", + "quote", + "regex", + "schemars", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.20", + "toml 0.9.5", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1087b111fe2b005e42dbdc1990fc18593234238d47453b0c99b7de1c9ab2c1e0" +dependencies = [ + "dunce", + "embed-resource", + "toml 0.9.5", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendril" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" +dependencies = [ + "new_debug_unreachable", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +dependencies = [ + "thiserror-impl 2.0.20", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" + +[[package]] +name = "tokio" +version = "1.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2 0.5.10", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" +dependencies = [ + "indexmap 2.14.2", + "serde", + "serde_spanned 1.0.0", + "toml_datetime 0.7.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.14.2", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.14.2", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7211ff1b8f0d3adae1663b7da9ffe396eabe1ca25f0b0bee42b0da29a9ddce93" +dependencies = [ + "indexmap 2.14.2", + "toml_datetime 0.7.0", + "toml_parser", + "winnow 0.7.15", +] + +[[package]] +name = "toml_parser" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +dependencies = [ + "winnow 1.0.4", +] + +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.9.4", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tray-icon" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "045979e3f037cd18ad1cb2a419dfda133c5c29c9f3453370079f2255d46c257e" +dependencies = [ + "crossbeam-channel", + "dirs 6.0.0", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.20", + "windows-sys 0.61.2", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "uds_windows" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" +dependencies = [ + "memoffset", + "tempfile", + "windows-sys 0.61.2", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-ident" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "getrandom 0.3.4", + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 3.0.6", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webpki-roots" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.20", + "windows", + "windows-core 0.61.2", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "wry" +version = "0.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs 6.0.0", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", + "synstructure", +] + +[[package]] +name = "zbus" +version = "5.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" +dependencies = [ + "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-lite", + "hex", + "libc", + "ordered-stream", + "rustix", + "serde", + "serde_repr", + "tracing", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow 1.0.4", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 3.0.6", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" +dependencies = [ + "serde", + "winnow 1.0.4", + "zvariant", +] + +[[package]] +name = "zcheapstr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "zlib-rs" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" + +[[package]] +name = "zvariant" +version = "5.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow 1.0.4", + "zcheapstr", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 3.0.6", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 3.0.6", + "winnow 1.0.4", +] diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml new file mode 100644 index 00000000000..292507e27c4 --- /dev/null +++ b/desktop/src-tauri/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "opencodex-desktop" +version = "2.61.0" +description = "OpenCodex desktop shell" +authors = ["OpenCodex contributors"] +license = "MIT" +edition = "2021" +rust-version = "1.77" + +[lib] +name = "opencodex_desktop_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "=2.6.3", features = [] } + +[dependencies] +chrono = { version = "=0.4.41", features = ["serde"] } +reqwest = { version = "=0.12.24", default-features = false, features = ["json", "rustls-tls"] } +serde = { version = "=1.0.219", features = ["derive"] } +serde_json = "=1.0.140" +tauri = { version = "=2.11.6", features = ["tray-icon", "image-png"] } +tauri-plugin-autostart = "=2.5.0" +tauri-plugin-opener = "=2.5.3" +tauri-plugin-shell = "=2.2.0" +tauri-plugin-single-instance = "=2.4.0" +tokio = { version = "=1.45.1", features = ["sync", "time"] } + +[profile.release] +codegen-units = 1 +lto = "thin" +opt-level = "s" +strip = "symbols" diff --git a/desktop/src-tauri/build.rs b/desktop/src-tauri/build.rs new file mode 100644 index 00000000000..d860e1e6a7c --- /dev/null +++ b/desktop/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/desktop/src-tauri/capabilities/default.json b/desktop/src-tauri/capabilities/default.json new file mode 100644 index 00000000000..028e72d82c1 --- /dev/null +++ b/desktop/src-tauri/capabilities/default.json @@ -0,0 +1,15 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Bootstrap-only shell permissions", + "windows": ["main"], + "permissions": [ + "core:default", + "core:window:allow-show", + "core:window:allow-hide", + "core:window:allow-set-title", + "opener:default", + "autostart:default", + "shell:allow-spawn" + ] +} diff --git a/desktop/src-tauri/icons/icon.png b/desktop/src-tauri/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2be228eed21542be926ea80f68548a3bde28f17f GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`nw~C>Ar-fh6C|!YuosxHlv8|x vhjCyV&l<-6o(zXgc~(r~TQNzfU5Ar-fh6C|!YuosxHlv8|x vhjCyV&l<-6o(zXgc~(r~TQNzfU5, +} + +impl Auth { + pub fn new(home: PathBuf) -> Self { + Self { + home, + environment_token: std::env::var("OPENCODEX_ADMIN_AUTH_TOKEN") + .ok() + .filter(|value| !value.is_empty()), + } + } + + pub fn token(&self) -> Option { + self.environment_token.clone().or_else(|| { + std::fs::read_to_string(self.home.join("admin-api-token")) + .ok() + .map(|value| value.trim().to_owned()) + .filter(|value| !value.is_empty()) + }) + } + + pub fn user_agent() -> &'static str { + concat!("OpenCodexDesktop/", env!("CARGO_PKG_VERSION")) + } +} diff --git a/desktop/src-tauri/src/discovery.rs b/desktop/src-tauri/src/discovery.rs new file mode 100644 index 00000000000..2eaded758df --- /dev/null +++ b/desktop/src-tauri/src/discovery.rs @@ -0,0 +1,116 @@ +use serde::Deserialize; +use std::path::{Path, PathBuf}; + +pub const DEFAULT_PORT: u16 = 10100; +const HOME_ENV: &str = "OPENCODEX_HOME"; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct ProxyEndpoint { + pub host: &'static str, + pub port: u16, +} + +impl ProxyEndpoint { + pub fn url(&self, path: &str) -> String { + format!("http://{}:{}{}", self.host, self.port, path) + } +} + +#[derive(Debug, Deserialize)] +struct RuntimePort { + port: u16, +} + +pub fn config_directory(environment: impl Fn(&str) -> Option, home: &Path) -> PathBuf { + environment(HOME_ENV) + .map(|value| value.trim().to_owned()) + .filter(|value| !value.is_empty()) + .map(|value| expand_tilde(PathBuf::from(value), home)) + .unwrap_or_else(|| home.join(".opencodex")) +} + +pub fn resolve(environment: impl Fn(&str) -> Option, home: &Path) -> ProxyEndpoint { + let directory = config_directory(environment, home); + let path = directory.join("runtime-port.json"); + let port = std::fs::read(&path) + .ok() + .and_then(|bytes| serde_json::from_slice::(&bytes).ok()) + .map(|record| record.port) + .filter(|port| (1..=u16::MAX).contains(port)) + .unwrap_or(DEFAULT_PORT); + ProxyEndpoint { + host: "127.0.0.1", + port, + } +} + +fn expand_tilde(path: PathBuf, home: &Path) -> PathBuf { + if path == Path::new("~") { + return home.to_path_buf(); + } + path.strip_prefix("~/") + .map(|rest| home.join(rest)) + .unwrap_or(path) +} + +pub fn current() -> (ProxyEndpoint, PathBuf) { + let home = dirs_home(); + let directory = config_directory(|key| std::env::var(key).ok(), &home); + let endpoint = resolve(|key| std::env::var(key).ok(), &home); + (endpoint, directory) +} + +fn dirs_home() -> PathBuf { + std::env::var_os("HOME") + .map(PathBuf::from) + .or_else(|| std::env::var_os("USERPROFILE").map(PathBuf::from)) + .unwrap_or_else(|| PathBuf::from(".")) +} + +#[cfg(test)] +mod tests { + use super::*; + use std::fs::{create_dir_all, write}; + + #[test] + fn resolves_home_override_and_runtime_port() { + let root = std::env::temp_dir().join(format!("ocx-discovery-{}", std::process::id())); + let home = root.join("home"); + let custom = home.join("custom"); + create_dir_all(&custom).unwrap(); + write( + custom.join("runtime-port.json"), + r#"{"pid":1,"port":12345}"#, + ) + .unwrap(); + let endpoint = resolve(|key| (key == HOME_ENV).then(|| "~/custom".into()), &home); + assert_eq!( + endpoint, + ProxyEndpoint { + host: "127.0.0.1", + port: 12345 + } + ); + let _ = std::fs::remove_dir_all(root); + } + + #[test] + fn any_failure_falls_back_to_default() { + let home = std::env::temp_dir().join("ocx-missing-home"); + let endpoint = resolve(|_| None, &home); + assert_eq!(endpoint.port, DEFAULT_PORT); + } + + #[test] + fn empty_override_and_invalid_port_use_default() { + let root = + std::env::temp_dir().join(format!("ocx-discovery-invalid-{}", std::process::id())); + let home = root.join("home"); + let directory = root.join("custom"); + create_dir_all(&directory).unwrap(); + write(directory.join("runtime-port.json"), r#"{"port":0}"#).unwrap(); + let endpoint = resolve(|key| (key == HOME_ENV).then(|| " ".into()), &home); + assert_eq!(endpoint.port, DEFAULT_PORT); + let _ = std::fs::remove_dir_all(root); + } +} diff --git a/desktop/src-tauri/src/formatting.rs b/desktop/src-tauri/src/formatting.rs new file mode 100644 index 00000000000..5f940b68fed --- /dev/null +++ b/desktop/src-tauri/src/formatting.rs @@ -0,0 +1,79 @@ +pub fn tokens(value: Option) -> String { + abbreviate(value, true) +} + +pub fn count(value: Option) -> String { + abbreviate(value, false) +} + +pub fn cost(value: Option) -> String { + let Some(value) = value else { + return "—".into(); + }; + if value < 1_000.0 { + return format!("${value:.2}"); + } + format!("${}", abbreviate_float(value, false)) +} + +fn abbreviate(value: Option, integer: bool) -> String { + let Some(value) = value else { + return "—".into(); + }; + if !integer && value < 10_000 { + return format!("{value}"); + } + if integer && value < 1_000 { + return format!("{value}"); + } + abbreviate_float(value as f64, integer) +} + +fn abbreviate_float(value: f64, integer: bool) -> String { + let units = [ + (1_000_000_000_000.0, "T"), + (1_000_000_000.0, "B"), + (1_000_000.0, "M"), + (1_000.0, "K"), + ]; + for (threshold, suffix) in units { + if value >= threshold * 0.9995 { + let scaled = value / threshold; + let decimals = if integer || scaled >= 100.0 { + 0 + } else if scaled >= 10.0 { + 1 + } else { + 2 + }; + let rendered = format!("{scaled:.decimals$}"); + return format!( + "{}{}", + rendered.trim_end_matches('0').trim_end_matches('.'), + suffix + ); + } + } + format!("{value:.0}") +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn token_boundaries_match_swift_formatting() { + assert_eq!(tokens(Some(999_600)), "1M"); + assert_eq!(tokens(Some(1_234)), "1K"); + assert_eq!(tokens(Some(2_401_634_303)), "2B"); + assert_eq!(tokens(None), "—"); + } + + #[test] + fn counts_and_costs_have_expected_precision() { + assert_eq!(count(Some(9_999)), "9999"); + assert_eq!(count(Some(12_345)), "12.3K"); + assert_eq!(cost(Some(12.345)), "$12.35"); + assert_eq!(cost(Some(1_234.0)), "$1.23K"); + } +} diff --git a/desktop/src-tauri/src/lib.rs b/desktop/src-tauri/src/lib.rs new file mode 100644 index 00000000000..7062cc326a1 --- /dev/null +++ b/desktop/src-tauri/src/lib.rs @@ -0,0 +1,101 @@ +mod auth; +mod discovery; +mod formatting; +mod proxy; +mod sidecar; +mod tray; +mod window; + +use std::sync::{ + atomic::{AtomicBool, Ordering}, + Mutex, +}; +use tauri::{Manager, WebviewUrl, WebviewWindowBuilder}; +use tauri_plugin_autostart::MacosLauncher; +use tauri_plugin_shell::process::CommandChild; + +pub struct AppState { + pub proxy: proxy::ProxyClient, + pub spawned_by_us: AtomicBool, + pub child: Mutex>, +} + +#[tauri::command] +fn show_dashboard(app: tauri::AppHandle) { + if let Some(window) = app.get_webview_window("main") { + window::show(&window); + } +} + +#[tauri::command] +fn hide_dashboard(app: tauri::AppHandle) { + if let Some(window) = app.get_webview_window("main") { + window::hide(&window); + } +} + +pub fn run() { + tauri::Builder::default() + .plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| { + if let Some(window) = app.get_webview_window("main") { + window::show(&window); + } + })) + .plugin(tauri_plugin_opener::init()) + .plugin(tauri_plugin_autostart::init( + MacosLauncher::LaunchAgent, + None, + )) + .plugin(tauri_plugin_shell::init()) + .invoke_handler(tauri::generate_handler![show_dashboard, hide_dashboard]) + .setup(|app| { + let (endpoint, home) = discovery::current(); + let proxy = proxy::ProxyClient::new(endpoint, auth::Auth::new(home)) + .map_err(|error| error.to_string())?; + let child = tauri::async_runtime::block_on(sidecar::ensure_proxy( + app.handle(), + &proxy, + endpoint, + )) + .map_err(std::io::Error::other)?; + app.manage(AppState { + proxy: proxy.clone(), + spawned_by_us: AtomicBool::new(child.is_some()), + child: Mutex::new(child), + }); + + let window = WebviewWindowBuilder::new( + app, + "main", + WebviewUrl::App(format!("index.html?port={}", endpoint.port).into()), + ) + .title("OpenCodex") + .inner_size(1100.0, 720.0) + .visible(false) + .on_navigation(window::navigation_allowed) + .build()?; + window::configure(&window); + window::set_tray_policy(app.handle(), false); + let dashboard = endpoint.url("/#/usage"); + if tauri::async_runtime::block_on(proxy.is_alive()).is_ok() { + let _ = window.eval(format!("window.location.replace({dashboard:?})")); + } + tray::install(app.handle(), proxy)?; + Ok(()) + }) + .on_window_event(|window, event| { + if let tauri::WindowEvent::Destroyed = event { + if let Some(state) = window.app_handle().try_state::() { + if state.spawned_by_us.load(Ordering::Relaxed) { + if let Ok(mut child) = state.child.lock() { + if let Some(child) = child.take() { + let _ = child.kill(); + } + } + } + } + } + }) + .run(tauri::generate_context!()) + .expect("error while running OpenCodex desktop shell"); +} diff --git a/desktop/src-tauri/src/main.rs b/desktop/src-tauri/src/main.rs new file mode 100644 index 00000000000..c0e7716829b --- /dev/null +++ b/desktop/src-tauri/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + opencodex_desktop_lib::run(); +} diff --git a/desktop/src-tauri/src/proxy.rs b/desktop/src-tauri/src/proxy.rs new file mode 100644 index 00000000000..99662a21579 --- /dev/null +++ b/desktop/src-tauri/src/proxy.rs @@ -0,0 +1,103 @@ +use crate::{auth::Auth, discovery::ProxyEndpoint}; +use reqwest::{Client, Method, StatusCode}; +use serde_json::Value; +use std::time::Duration; + +#[derive(Clone)] +pub struct ProxyClient { + client: Client, + endpoint: ProxyEndpoint, + auth: Auth, +} + +#[derive(Debug)] +pub enum ProxyError { + Unreachable, + Unauthorized, + Http(StatusCode), + Decode(reqwest::Error), +} + +impl ProxyClient { + pub fn new(endpoint: ProxyEndpoint, auth: Auth) -> Result { + Ok(Self { + client: Client::builder() + .timeout(Duration::from_secs(4)) + .user_agent(Auth::user_agent()) + .build()?, + endpoint, + auth, + }) + } + + pub fn endpoint(&self) -> ProxyEndpoint { + self.endpoint + } + + pub async fn startup_health(&self) -> Result { + self.get("/api/startup-health").await + } + + pub async fn is_alive(&self) -> Result { + self.get("/healthz").await + } + + pub async fn companion_settings(&self) -> Result { + self.get("/api/companion/settings").await + } + + pub async fn usage_summary(&self) -> Result { + self.get("/api/usage?range=7d").await + } + + pub async fn quotas(&self) -> Result { + self.get("/api/provider-quotas").await + } + + pub async fn stop(&self) -> Result { + self.request(Method::POST, "/api/stop").await + } + + async fn get(&self, path: &str) -> Result { + self.request(Method::GET, path).await + } + + async fn request(&self, method: Method, path: &str) -> Result { + let response = self.send(&method, path, None).await?; + if response.status() == StatusCode::UNAUTHORIZED { + let token = self.auth.token().ok_or(ProxyError::Unauthorized)?; + let response = self.send(&method, path, Some(token)).await?; + return decode(response).await; + } + decode(response).await + } + + async fn send( + &self, + method: &Method, + path: &str, + token: Option, + ) -> Result { + let mut request = self.client.request(method.clone(), self.endpoint.url(path)); + if let Some(value) = token { + request = request.header("X-OpenCodex-API-Key", value); + } + request.send().await.map_err(|error| { + if error.is_connect() { + ProxyError::Unreachable + } else { + ProxyError::Decode(error) + } + }) + } +} + +async fn decode(response: reqwest::Response) -> Result { + if response.status() == StatusCode::UNAUTHORIZED { + return Err(ProxyError::Unauthorized); + } + if !response.status().is_success() { + return Err(ProxyError::Http(response.status())); + } + response.json().await.map_err(ProxyError::Decode) +} diff --git a/desktop/src-tauri/src/sidecar.rs b/desktop/src-tauri/src/sidecar.rs new file mode 100644 index 00000000000..556611c6c58 --- /dev/null +++ b/desktop/src-tauri/src/sidecar.rs @@ -0,0 +1,46 @@ +use crate::{discovery::ProxyEndpoint, proxy::ProxyClient}; +use tauri::{AppHandle, Manager}; +use tauri_plugin_shell::{process::CommandChild, ShellExt}; +use tokio::time::{sleep, timeout, Duration, Instant}; + +pub async fn ensure_proxy( + app: &AppHandle, + proxy: &ProxyClient, + endpoint: ProxyEndpoint, +) -> Result, String> { + let deadline = Instant::now() + Duration::from_secs(2); + loop { + if matches!( + timeout(Duration::from_millis(250), proxy.is_alive()).await, + Ok(Ok(_)) + ) { + return Ok(None); + } + if Instant::now() >= deadline { + break; + } + sleep(Duration::from_millis(150)).await; + } + + let gui_dist = app + .path() + .resource_dir() + .map_err(|error| error.to_string())? + .join("gui") + .join("dist"); + let command = app + .shell() + .sidecar("ocx") + .map_err(|error| error.to_string())? + .args(["start", "--port", &endpoint.port.to_string()]) + .env("OPENCODEX_GUI_DIST", gui_dist); + let (_events, child) = command.spawn().map_err(|error| error.to_string())?; + + for _ in 0..20 { + tokio::time::sleep(std::time::Duration::from_millis(150)).await; + if proxy.is_alive().await.is_ok() { + return Ok(Some(child)); + } + } + Err("the OpenCodex sidecar did not become healthy".into()) +} diff --git a/desktop/src-tauri/src/tray.rs b/desktop/src-tauri/src/tray.rs new file mode 100644 index 00000000000..af69ecfbe8e --- /dev/null +++ b/desktop/src-tauri/src/tray.rs @@ -0,0 +1,213 @@ +use crate::{formatting, proxy::ProxyClient, window}; +use serde_json::Value; +use std::sync::atomic::Ordering; +use tauri::{ + menu::{CheckMenuItem, Menu, MenuItem, PredefinedMenuItem}, + tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, + AppHandle, Manager, Wry, +}; +use tauri_plugin_autostart::ManagerExt; +use tauri_plugin_opener::OpenerExt; + +pub fn install(app: &AppHandle, proxy: ProxyClient) -> tauri::Result<()> { + let open = MenuItem::with_id(app, "open-dashboard", "Open Dashboard", true, None::<&str>)?; + let browser = MenuItem::with_id(app, "open-browser", "Open in Browser", true, None::<&str>)?; + let login = CheckMenuItem::with_id( + app, + "start-at-login", + "Start at Login", + true, + app.autolaunch().is_enabled().unwrap_or(false), + None::<&str>, + )?; + let spawned_by_us = app + .state::() + .spawned_by_us + .load(Ordering::Relaxed); + let stop = MenuItem::with_id(app, "stop-proxy", "Stop proxy", spawned_by_us, None::<&str>)?; + let quit = MenuItem::with_id(app, "quit", "Quit", true, None::<&str>)?; + let menu = Menu::with_items( + app, + &[ + &open, + &browser, + &PredefinedMenuItem::separator(app)?, + &login, + &stop, + &PredefinedMenuItem::separator(app)?, + &quit, + ], + )?; + + let tray = TrayIconBuilder::with_id("main") + .icon(icon()) + .icon_as_template(true) + .menu(&menu) + .on_tray_icon_event(|tray, event| { + if let TrayIconEvent::Click { + button: MouseButton::Left, + button_state: MouseButtonState::Up, + .. + } = event + { + if let Some(window) = tray.app_handle().get_webview_window("main") { + window::show(&window); + } + } + }) + .on_menu_event(move |app, event| { + let Some(window) = app.get_webview_window("main") else { + return; + }; + match event.id().as_ref() { + "open-dashboard" => window::show(&window), + "open-browser" => { + let endpoint = app.state::().proxy.endpoint(); + let _ = app + .opener() + .open_url(format!("{}#/usage", endpoint.url("/")), None::); + } + "start-at-login" => { + let enabled = app.autolaunch().is_enabled().unwrap_or(false); + if enabled { + let _ = app.autolaunch().disable(); + } else { + let _ = app.autolaunch().enable(); + } + } + "stop-proxy" => { + if app + .state::() + .spawned_by_us + .load(Ordering::Relaxed) + { + let proxy = app.state::().proxy.clone(); + tauri::async_runtime::spawn(async move { + let _ = proxy.stop().await; + }); + } + } + "quit" => app.exit(0), + _ => {} + } + }) + .build(app)?; + + refresh_title(&tray, &proxy); + let tray = tray.clone(); + tauri::async_runtime::spawn(async move { + loop { + tokio::time::sleep(std::time::Duration::from_secs(60)).await; + refresh_title(&tray, &proxy); + } + }); + Ok(()) +} + +fn refresh_title(tray: &tauri::tray::TrayIcon, proxy: &ProxyClient) { + let proxy = proxy.clone(); + let tray = tray.clone(); + tauri::async_runtime::spawn(async move { + let Ok(settings) = proxy.companion_settings().await else { + return; + }; + let Ok(usage) = proxy.usage_summary().await else { + return; + }; + let quotas = proxy.quotas().await.unwrap_or(Value::Null); + if let Some(title) = render_title(&settings, &usage, "as) { + let _ = tray.set_title(Some(&title)); + } + }); +} + +fn render_title(settings: &Value, usage: &Value, quotas: &Value) -> Option { + let metric = settings + .pointer("/settings/menuBarMetric") + .and_then(Value::as_str) + .unwrap_or("tokens"); + let summary = usage.get("summary").unwrap_or(usage); + let quota = quota_percent(quotas); + let value = match metric { + "requests" => formatting::count(summary.get("requests").and_then(Value::as_i64)), + "cost" => formatting::cost(summary.get("estimatedCostUsd").and_then(Value::as_f64)), + "quota" => format_percent(quota), + "none" => return None, + _ => formatting::tokens(summary.get("totalTokens").and_then(Value::as_i64)), + }; + let template = settings + .pointer("/settings/menuBarTemplate") + .and_then(Value::as_str) + .filter(|value| !value.trim().is_empty()); + let rendered = template + .map(|value| { + value + .replace( + "{requests}", + &formatting::count(summary.get("requests").and_then(Value::as_i64)), + ) + .replace( + "{totalTokens}", + &formatting::tokens(summary.get("totalTokens").and_then(Value::as_i64)), + ) + .replace( + "{costUsd}", + &formatting::cost(summary.get("estimatedCostUsd").and_then(Value::as_f64)), + ) + .replace( + "{inputTokens}", + &formatting::tokens(summary.get("inputTokens").and_then(Value::as_i64)), + ) + .replace( + "{outputTokens}", + &formatting::tokens(summary.get("outputTokens").and_then(Value::as_i64)), + ) + .replace("{quotaPercent}", &format_percent(quota)) + }) + .unwrap_or(value); + let rendered = rendered.trim(); + if rendered.is_empty() { + None + } else if rendered.chars().count() > 24 { + Some(format!( + "{}…", + rendered.chars().take(23).collect::() + )) + } else { + Some(rendered.to_owned()) + } +} + +fn quota_percent(value: &Value) -> Option { + let reports = value.get("reports")?.as_array()?; + let mut values = Vec::new(); + for report in reports { + let Some(quota) = report.get("quota") else { + continue; + }; + for key in ["weeklyPercent", "monthlyPercent", "fiveHourPercent"] { + if let Some(value) = quota.get(key).and_then(Value::as_f64) { + values.push(value); + } + } + if let Some(windows) = quota.get("customWindows").and_then(Value::as_array) { + values.extend( + windows + .iter() + .filter_map(|window| window.get("percent").and_then(Value::as_f64)), + ); + } + } + values.into_iter().reduce(f64::min) +} + +fn format_percent(value: Option) -> String { + value + .map(|value| format!("{}%", value.round() as i64)) + .unwrap_or_else(|| "—".into()) +} + +fn icon() -> tauri::image::Image<'static> { + tauri::image::Image::from_bytes(include_bytes!("../icons/tray/icon.png")) + .expect("valid tray icon") +} diff --git a/desktop/src-tauri/src/window.rs b/desktop/src-tauri/src/window.rs new file mode 100644 index 00000000000..a7bcdabd492 --- /dev/null +++ b/desktop/src-tauri/src/window.rs @@ -0,0 +1,55 @@ +use tauri::{AppHandle, Manager, Url, WebviewWindow, WindowEvent}; + +const LOOPBACK_PREFIX: &str = "http://127.0.0.1:"; + +pub fn configure(window: &WebviewWindow) { + let window_for_close = window.clone(); + window.on_window_event(move |event| { + if let WindowEvent::CloseRequested { api, .. } = event { + api.prevent_close(); + let _ = window_for_close.hide(); + apply_tray_policy(window_for_close.app_handle(), false); + } + }); +} + +pub fn navigation_allowed(url: &Url) -> bool { + let value = url.as_str(); + if value.starts_with(LOOPBACK_PREFIX) || value.starts_with("tauri://") { + return true; + } + if value.starts_with("http://") || value.starts_with("https://") { + let _ = tauri_plugin_opener::open_url(value, None::<&str>); + return false; + } + true +} + +pub fn show(window: &WebviewWindow) { + let _ = window.show(); + let _ = window.set_focus(); + apply_tray_policy(window.app_handle(), true); +} + +pub fn hide(window: &WebviewWindow) { + let _ = window.hide(); + apply_tray_policy(window.app_handle(), false); +} + +#[cfg(target_os = "macos")] +fn apply_tray_policy(app: &AppHandle, visible: bool) { + let policy = if visible { + tauri::ActivationPolicy::Regular + } else { + tauri::ActivationPolicy::Accessory + }; + let _ = app.set_dock_visibility(visible); + let _ = app.set_activation_policy(policy); +} + +#[cfg(not(target_os = "macos"))] +fn apply_tray_policy(_app: &AppHandle, _visible: bool) {} + +pub fn set_tray_policy(app: &AppHandle, visible: bool) { + apply_tray_policy(app, visible); +} diff --git a/desktop/src-tauri/tauri.conf.json b/desktop/src-tauri/tauri.conf.json new file mode 100644 index 00000000000..444f5214ac0 --- /dev/null +++ b/desktop/src-tauri/tauri.conf.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "OpenCodex", + "version": "2.61.0", + "identifier": "com.opencodex.desktop", + "build": { + "frontendDist": "../ui", + "devUrl": "http://localhost:1420" + }, + "app": { + "security": { + "csp": "default-src 'self'; connect-src 'self' http://127.0.0.1:*; style-src 'self' 'unsafe-inline'; script-src 'self'" + } + }, + "bundle": { + "active": true, + "targets": "all", + "externalBin": ["binaries/ocx"], + "resources": { + "resources/gui/dist": "gui/dist" + }, + "icon": ["icons/icon.png"] + } +} diff --git a/desktop/ui/index.html b/desktop/ui/index.html new file mode 100644 index 00000000000..e4d5c9a7de0 --- /dev/null +++ b/desktop/ui/index.html @@ -0,0 +1,29 @@ + + + + + + OpenCodex + + + +
+

OpenCodex

+

Connecting to the OpenCodex proxy…

+ +
+ + + diff --git a/desktop/ui/main.js b/desktop/ui/main.js new file mode 100644 index 00000000000..02409913df1 --- /dev/null +++ b/desktop/ui/main.js @@ -0,0 +1,26 @@ +const params = new URLSearchParams(window.location.search); +const port = Number(params.get("port") || "10100"); +const status = document.querySelector("#status"); +const retry = document.querySelector("#retry"); + +async function check() { + status.textContent = `Connecting to OpenCodex proxy at 127.0.0.1:${port}…`; + retry.disabled = true; + try { + const response = await fetch(`http://127.0.0.1:${port}/api/startup-health`, { + cache: "no-store", + }); + if (response.ok) { + status.textContent = "Proxy is ready. Loading dashboard…"; + return; + } + throw new Error(`HTTP ${response.status}`); + } catch { + status.textContent = "The proxy is not reachable yet."; + } finally { + retry.disabled = false; + } +} + +retry.addEventListener("click", check); +check(); diff --git a/scripts/test-layout/layout.json b/scripts/test-layout/layout.json index 3a27b56cc51..6181c9b7f7e 100644 --- a/scripts/test-layout/layout.json +++ b/scripts/test-layout/layout.json @@ -168,6 +168,7 @@ }, "explicit": { "macos-build-script.test.ts": "gui", + "gui-desktop-sidecar-script.test.ts": "gui", "standalone-build-script.test.ts": "gui", "standalone-service.test.ts": "service", "standalone.test.ts": "lib", diff --git a/src/server/management/companion-routes.ts b/src/server/management/companion-routes.ts index df0fd8ab6de..7f5685221ef 100644 --- a/src/server/management/companion-routes.ts +++ b/src/server/management/companion-routes.ts @@ -27,7 +27,10 @@ function response(): Response { export async function handleCompanionRoutes(ctx: ManagementContext): Promise { if (ctx.url.pathname === "/api/companion/settings" && ctx.req.method === "GET") { - if (ctx.req.headers.get("user-agent")?.startsWith("OpenCodexMenuBar/")) companionLastSeenAt = Date.now(); + const userAgent = ctx.req.headers.get("user-agent") ?? ""; + if (userAgent.startsWith("OpenCodexMenuBar/") || userAgent.startsWith("OpenCodexDesktop/")) { + companionLastSeenAt = Date.now(); + } return response(); } if (ctx.url.pathname !== "/api/companion/settings" || ctx.req.method !== "PUT") return null; diff --git a/structure/INDEX.md b/structure/INDEX.md index 40c82166e69..bfd932df79a 100644 --- a/structure/INDEX.md +++ b/structure/INDEX.md @@ -78,6 +78,7 @@ Background service, docs, release, and design discipline. | Doc | Scope | | --- | --- | +| [`desktop-shell.md`](desktop-shell.md) | Tauri desktop shell, proxy attachment and sidecar lifecycle, tray controls, bootstrap navigation, and desktop companion presence. | | [`ops/service-and-sidecars.md`](ops/service-and-sidecars.md) | Service install/repair, platform launchers, tray, and sidecar processes. | | [`ops/docs-and-release.md`](ops/docs-and-release.md) | Docs site, workflow map, branch policy, release flow, and cross-platform CI. | | [`design-methodology.md`](design-methodology.md) | Stage ordering for new GUI, CLI, and user-facing surfaces. | @@ -92,6 +93,7 @@ A source area can be described by more than one doc, because these docs are orga | `.github/` | [`ops/docs-and-release.md`](ops/docs-and-release.md) | | `app/` | [`overview.md`](overview.md) | | `bin/` | [`runtime.md`](runtime.md)
[`ops/docs-and-release.md`](ops/docs-and-release.md) | +| `desktop/` | [`desktop-shell.md`](desktop-shell.md) | | `docs-site/` | [`ops/docs-and-release.md`](ops/docs-and-release.md) | | `gui/` | [`overview.md`](overview.md)
[`gui-and-management-api.md`](gui-and-management-api.md)
[`design-methodology.md`](design-methodology.md) | | `scripts/` | [`overview.md`](overview.md)
[`ops/docs-and-release.md`](ops/docs-and-release.md) | @@ -126,6 +128,7 @@ A source area can be described by more than one doc, because these docs are orga | `src/routing/` | [`catalog.md`](catalog.md) | | `src/server/` | [`runtime.md`](runtime.md)
[`catalog.md`](catalog.md)
[`subagents.md`](subagents.md)
[`transports/byte-accounting.md`](transports/byte-accounting.md)
[`transports/responses.md`](transports/responses.md)
[`transports/streaming-health.md`](transports/streaming-health.md)
[`transports/inventory.md`](transports/inventory.md)
[`data-planes/images.md`](data-planes/images.md)
[`data-planes/inbound-compat.md`](data-planes/inbound-compat.md)
[`providers-and-adapters.md`](providers-and-adapters.md)
[`providers/xai-grok.md`](providers/xai-grok.md)
[`adapters/registry.md`](adapters/registry.md)
[`gui-and-management-api.md`](gui-and-management-api.md)
[`clients/claude-desktop.md`](clients/claude-desktop.md)
[`ops/service-and-sidecars.md`](ops/service-and-sidecars.md) | | `src/server/index.ts` | [`adapters/compatibility-lab.md`](adapters/compatibility-lab.md) | +| `src/server/management/companion-routes.ts` | [`desktop-shell.md`](desktop-shell.md) | | `src/service.ts` | [`runtime.md`](runtime.md)
[`ops/docs-and-release.md`](ops/docs-and-release.md) | | `src/service/` | [`runtime.md`](runtime.md) | | `src/stall-timeout.ts` | [`runtime.md`](runtime.md) | diff --git a/structure/desktop-shell.md b/structure/desktop-shell.md new file mode 100644 index 00000000000..56ae0383a43 --- /dev/null +++ b/structure/desktop-shell.md @@ -0,0 +1,20 @@ +# Desktop shell + +The `desktop/` tree owns the Tauri v2 OpenCodex desktop shell. Its Rust crate +discovers the loopback proxy, lazily retries management authentication, starts +the bundled `ocx` sidecar only when the configured endpoint is unreachable, +and owns the tray, autostart, single-instance, and window lifecycle behavior. + +`desktop/ui/` is only a short bootstrap page. Once `/api/startup-health` +answers, the shell navigates the webview to the proxy's loopback dashboard +(`/#/usage`) rather than bundling or serving `gui/dist` itself. + +`desktop/scripts/prepare-sidecar.ts` maps Rust target triples to the standalone +Bun targets and prepares the external binary plus dashboard resources used by +Tauri. Generated files under desktop/src-tauri/binaries/ and +desktop/src-tauri/resources/ remain ignored. + +The management API companion presence check in +`src/server/management/companion-routes.ts` accepts both +`OpenCodexMenuBar/` and `OpenCodexDesktop/` user agents. This is presence +telemetry only; management authentication remains in the shared API boundary. diff --git a/structure/manifest.json b/structure/manifest.json index 20e69a13f39..4f5dc0b3da8 100644 --- a/structure/manifest.json +++ b/structure/manifest.json @@ -312,14 +312,14 @@ ] }, { - "path": "adapters/compatibility-lab.md", - "tier": 4, - "title": "Compatibility Lab", - "scope": "Optional Lab evidence, automation, and its core-runtime isolation boundary.", - "documents": [ - "src/lab/", - "src/server/index.ts" - ] + "path": "adapters/compatibility-lab.md", + "tier": 4, + "title": "Compatibility Lab", + "scope": "Optional Lab evidence, automation, and its core-runtime isolation boundary.", + "documents": [ + "src/lab/", + "src/server/index.ts" + ] }, { "path": "gui-and-management-api.md", @@ -360,6 +360,16 @@ "src/server/" ] }, + { + "path": "desktop-shell.md", + "tier": 6, + "title": "Desktop shell", + "scope": "Tauri desktop shell, proxy attachment and sidecar lifecycle, tray controls, bootstrap navigation, and desktop companion presence.", + "documents": [ + "desktop/", + "src/server/management/companion-routes.ts" + ] + }, { "path": "ops/service-and-sidecars.md", "tier": 6, diff --git a/tests/ci-workflows/ci-workflows.test.ts b/tests/ci-workflows/ci-workflows.test.ts index 658bd378346..8746d8539f9 100644 --- a/tests/ci-workflows/ci-workflows.test.ts +++ b/tests/ci-workflows/ci-workflows.test.ts @@ -500,6 +500,7 @@ describe("GitHub Actions hardening", () => { "bin/**", "bun.lock", "compose.yaml", + "desktop/**", "docker/**", "gui/**", "package.json", diff --git a/tests/fixtures/test-layout-expected.json b/tests/fixtures/test-layout-expected.json index 25c13f1e48a..2349a61a26f 100644 --- a/tests/fixtures/test-layout-expected.json +++ b/tests/fixtures/test-layout-expected.json @@ -1,5 +1,6 @@ { "macos-build-script.test.ts": "gui", + "gui-desktop-sidecar-script.test.ts": "gui", "standalone-build-script.test.ts": "gui", "standalone-service.test.ts": "service", "standalone.test.ts": "lib", diff --git a/tests/gui/gui-desktop-sidecar-script.test.ts b/tests/gui/gui-desktop-sidecar-script.test.ts new file mode 100644 index 00000000000..413e155f566 --- /dev/null +++ b/tests/gui/gui-desktop-sidecar-script.test.ts @@ -0,0 +1,18 @@ +import { expect, test } from "bun:test"; +import { repoPath } from "../helpers/repo-root"; + +const script = await Bun.file(repoPath("desktop", "scripts", "prepare-sidecar.ts")).text(); + +test("desktop sidecar preparation maps supported Rust targets", () => { + for (const value of [ + "aarch64-apple-darwin", + "x86_64-apple-darwin", + "x86_64-pc-windows-msvc", + "x86_64-unknown-linux-gnu", + "aarch64-unknown-linux-gnu", + ]) expect(script).toContain(value); + expect(script).toContain("build:standalone"); + expect(script).toContain("binaries"); + expect(script).toContain("resources"); + expect(script).toContain("ocx-${triple}"); +}); diff --git a/tests/server/companion-settings.test.ts b/tests/server/companion-settings.test.ts index de0058dc861..d2d27c6425e 100644 --- a/tests/server/companion-settings.test.ts +++ b/tests/server/companion-settings.test.ts @@ -81,6 +81,9 @@ describe("companion settings", () => { expect(ordinary.body.companion.lastSeenAt).toBeNull(); const companion = await call("GET", undefined, "OpenCodexMenuBar/2.60.0"); expect(companion.body.companion.lastSeenAt).toBeNumber(); + resetCompanionPresenceForTests(); + const desktop = await call("GET", undefined, "OpenCodexDesktop/2.61.0"); + expect(desktop.body.companion.lastSeenAt).toBeNumber(); }); }); }); From 4265213da8581bfac99096e7469e6b53bd98e0c6 Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 19 Sep 2026 22:10:20 -0700 Subject: [PATCH 2/4] fix(desktop): kill sidecar on quit, real icons, min macOS 13, exact-port navigation, CI hardening Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 9 +++++ desktop/README.md | 5 +++ desktop/src-tauri/Cargo.lock | 3 -- desktop/src-tauri/Cargo.toml | 1 - desktop/src-tauri/capabilities/default.json | 3 +- desktop/src-tauri/icons/128x128.png | Bin 0 -> 2849 bytes desktop/src-tauri/icons/128x128@2x.png | Bin 0 -> 6300 bytes desktop/src-tauri/icons/32x32.png | Bin 0 -> 638 bytes desktop/src-tauri/icons/64x64.png | Bin 0 -> 1176 bytes desktop/src-tauri/icons/Square107x107Logo.png | Bin 0 -> 2268 bytes desktop/src-tauri/icons/Square142x142Logo.png | Bin 0 -> 3346 bytes desktop/src-tauri/icons/Square150x150Logo.png | Bin 0 -> 3655 bytes desktop/src-tauri/icons/Square284x284Logo.png | Bin 0 -> 7155 bytes desktop/src-tauri/icons/Square30x30Logo.png | Bin 0 -> 559 bytes desktop/src-tauri/icons/Square310x310Logo.png | Bin 0 -> 7822 bytes desktop/src-tauri/icons/Square44x44Logo.png | Bin 0 -> 845 bytes desktop/src-tauri/icons/Square71x71Logo.png | Bin 0 -> 1453 bytes desktop/src-tauri/icons/Square89x89Logo.png | Bin 0 -> 1716 bytes desktop/src-tauri/icons/StoreLogo.png | Bin 0 -> 894 bytes .../android/mipmap-anydpi-v26/ic_launcher.xml | 5 +++ .../icons/android/mipmap-hdpi/ic_launcher.png | Bin 0 -> 901 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 3849 bytes .../android/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 959 bytes .../icons/android/mipmap-mdpi/ic_launcher.png | Bin 0 -> 842 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 2147 bytes .../android/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 944 bytes .../android/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1902 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 5308 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 2017 bytes .../android/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3281 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 8247 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 3675 bytes .../android/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 4469 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 11201 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 5010 bytes .../android/values/ic_launcher_background.xml | 4 ++ desktop/src-tauri/icons/icon.icns | Bin 0 -> 65470 bytes desktop/src-tauri/icons/icon.ico | Bin 0 -> 11591 bytes desktop/src-tauri/icons/icon.png | Bin 98 -> 13516 bytes .../src-tauri/icons/ios/AppIcon-20x20@1x.png | Bin 0 -> 394 bytes .../icons/ios/AppIcon-20x20@2x-1.png | Bin 0 -> 849 bytes .../src-tauri/icons/ios/AppIcon-20x20@2x.png | Bin 0 -> 849 bytes .../src-tauri/icons/ios/AppIcon-20x20@3x.png | Bin 0 -> 1334 bytes .../src-tauri/icons/ios/AppIcon-29x29@1x.png | Bin 0 -> 576 bytes .../icons/ios/AppIcon-29x29@2x-1.png | Bin 0 -> 1304 bytes .../src-tauri/icons/ios/AppIcon-29x29@2x.png | Bin 0 -> 1304 bytes .../src-tauri/icons/ios/AppIcon-29x29@3x.png | Bin 0 -> 1943 bytes .../src-tauri/icons/ios/AppIcon-40x40@1x.png | Bin 0 -> 849 bytes .../icons/ios/AppIcon-40x40@2x-1.png | Bin 0 -> 1839 bytes .../src-tauri/icons/ios/AppIcon-40x40@2x.png | Bin 0 -> 1839 bytes .../src-tauri/icons/ios/AppIcon-40x40@3x.png | Bin 0 -> 3028 bytes .../src-tauri/icons/ios/AppIcon-512@2x.png | Bin 0 -> 26180 bytes .../src-tauri/icons/ios/AppIcon-60x60@2x.png | Bin 0 -> 3028 bytes .../src-tauri/icons/ios/AppIcon-60x60@3x.png | Bin 0 -> 5134 bytes .../src-tauri/icons/ios/AppIcon-76x76@1x.png | Bin 0 -> 1707 bytes .../src-tauri/icons/ios/AppIcon-76x76@2x.png | Bin 0 -> 4517 bytes .../icons/ios/AppIcon-83.5x83.5@2x.png | Bin 0 -> 4825 bytes desktop/src-tauri/icons/tray/icon.png | Bin 98 -> 3433 bytes desktop/src-tauri/src/lib.rs | 35 +++++++++++------- desktop/src-tauri/src/sidecar.rs | 1 + desktop/src-tauri/src/window.rs | 25 +++++++------ desktop/src-tauri/tauri.conf.json | 14 ++++++- desktop/ui/main.js | 10 ++++- structure/desktop-shell.md | 4 +- 64 files changed, 84 insertions(+), 35 deletions(-) create mode 100644 desktop/src-tauri/icons/128x128.png create mode 100644 desktop/src-tauri/icons/128x128@2x.png create mode 100644 desktop/src-tauri/icons/32x32.png create mode 100644 desktop/src-tauri/icons/64x64.png create mode 100644 desktop/src-tauri/icons/Square107x107Logo.png create mode 100644 desktop/src-tauri/icons/Square142x142Logo.png create mode 100644 desktop/src-tauri/icons/Square150x150Logo.png create mode 100644 desktop/src-tauri/icons/Square284x284Logo.png create mode 100644 desktop/src-tauri/icons/Square30x30Logo.png create mode 100644 desktop/src-tauri/icons/Square310x310Logo.png create mode 100644 desktop/src-tauri/icons/Square44x44Logo.png create mode 100644 desktop/src-tauri/icons/Square71x71Logo.png create mode 100644 desktop/src-tauri/icons/Square89x89Logo.png create mode 100644 desktop/src-tauri/icons/StoreLogo.png create mode 100644 desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png create mode 100644 desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png create mode 100644 desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png create mode 100644 desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png create mode 100644 desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png create mode 100644 desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png create mode 100644 desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png create mode 100644 desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png create mode 100644 desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 desktop/src-tauri/icons/android/values/ic_launcher_background.xml create mode 100644 desktop/src-tauri/icons/icon.icns create mode 100644 desktop/src-tauri/icons/icon.ico create mode 100644 desktop/src-tauri/icons/ios/AppIcon-20x20@1x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-20x20@2x-1.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-29x29@1x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-29x29@2x-1.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-29x29@2x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-29x29@3x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-40x40@1x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-40x40@2x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-40x40@3x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-512@2x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-60x60@3x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-76x76@2x.png create mode 100644 desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c99fea83e2f..5954a569708 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1200,6 +1200,15 @@ jobs: toolchain: stable components: rustfmt, clippy + - name: Prepare desktop check resources + run: | + set -euo pipefail + triple="$(rustc -vV | sed -n 's/^host: //p')" + mkdir -p desktop/src-tauri/binaries desktop/src-tauri/resources/gui/dist + : > "desktop/src-tauri/binaries/ocx-${triple}" + chmod +x "desktop/src-tauri/binaries/ocx-${triple}" + : > desktop/src-tauri/resources/gui/dist/.keep + - name: Check Rust formatting run: cargo fmt --manifest-path desktop/src-tauri/Cargo.toml --check diff --git a/desktop/README.md b/desktop/README.md index 08c1a91c1d1..1367889fe05 100644 --- a/desktop/README.md +++ b/desktop/README.md @@ -10,3 +10,8 @@ bun run dev The sidecar is generated from the repository's standalone binary build and is not checked into git. + +The CI desktop-shell job performs Rust-only checks. It creates an empty +platform-named sidecar stub and a placeholder dashboard resource directory +solely for Tauri's external-binary and resource validation; it does not build +or run the standalone binary. diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock index 29152a4ad19..22861cd63e7 100644 --- a/desktop/src-tauri/Cargo.lock +++ b/desktop/src-tauri/Cargo.lock @@ -522,10 +522,8 @@ checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", - "js-sys", "num-traits", "serde", - "wasm-bindgen", "windows-link 0.1.3", ] @@ -2496,7 +2494,6 @@ dependencies = [ name = "opencodex-desktop" version = "2.61.0" dependencies = [ - "chrono", "reqwest 0.12.24", "serde", "serde_json", diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml index 292507e27c4..9f0c0879c57 100644 --- a/desktop/src-tauri/Cargo.toml +++ b/desktop/src-tauri/Cargo.toml @@ -15,7 +15,6 @@ crate-type = ["staticlib", "cdylib", "rlib"] tauri-build = { version = "=2.6.3", features = [] } [dependencies] -chrono = { version = "=0.4.41", features = ["serde"] } reqwest = { version = "=0.12.24", default-features = false, features = ["json", "rustls-tls"] } serde = { version = "=1.0.219", features = ["derive"] } serde_json = "=1.0.140" diff --git a/desktop/src-tauri/capabilities/default.json b/desktop/src-tauri/capabilities/default.json index 028e72d82c1..622143b1fa4 100644 --- a/desktop/src-tauri/capabilities/default.json +++ b/desktop/src-tauri/capabilities/default.json @@ -9,7 +9,6 @@ "core:window:allow-hide", "core:window:allow-set-title", "opener:default", - "autostart:default", - "shell:allow-spawn" + "autostart:default" ] } diff --git a/desktop/src-tauri/icons/128x128.png b/desktop/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..e77df1e28fc9cfe97acd00d99810b17fd1fde004 GIT binary patch literal 2849 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 a=rBKLg=%#bB+u{b3(!XyAS)4eQU3xJL{iiM literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/128x128@2x.png b/desktop/src-tauri/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c6a3f4f3219f3b8a3f6c2745205598ef57cd2e77 GIT binary patch literal 6300 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 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/32x32.png b/desktop/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..9299f3600476116e06ca002552e861f2bc32c65a GIT binary patch literal 638 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 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/Square284x284Logo.png b/desktop/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7c578ed553729f8e81b1590f5594ab3b7581f523 GIT binary patch literal 7155 zcmcJUWl$T;+wLh+tXRV|%re#8dk^)H zVFZSN*W^a;<6Irog+M$EPhHL@X%Mi2n3R5DO@1F<4x_J+_q zNTgBSwIh-}P}#^Gd^I`Vv)fEVpEq51c5_|CPh|84diL^Y(G6i)SHe#~ko@|9jDP@j zhk%&$zX|Q%4gXF4N7TIt{*C?*`8)03=s)s5G{NuzHbO)<&~I6kldYnB@%3K^^10(D47Ho_57r*X)1c)LBM zhis@FKt{_YpUUt6zb62|(}V3KWrwhpT*W`WGG34*uPxZxE`a6EhUV#V{W$PfvaHtb zI7{$zfb}Q*BCjf$fs0FNB#%@tRujzpC$I11e9>=wI+#)GpQ{1}tCBL4+Ct%nPT7@#|b%k$FH`eo4Db9vK_8jlfYf6(-dTqcF@A+&V{S1fcSuWxj0X1U+03he_$rA83me;q z;*y};fWz6npabMdZfnB4h(|zzFC|Jyxd1skKE;A>Ko-8CPUufDf7cywmWEVHm>2Q@ z{K{ZvwLWi0VFTbG ziuX}12__v2tC1UEuzte4aMe=w8J)V<@487BJ}+6o$d&pWQzJ9$Xvt-<^~*q<*`+A! z!8e~9Lb5?smGrcRQR|L>aM74`F6rSXfs=sNY3%jo9?=$WktJDT!p3l(TC|k@lZ|*f zR+i{}!E(Stm85iuj?9396mP{}2Y7$0})RxC=B67p*J3xS{mRX&UQ2st*~{g4lCH z%PKmg?4W;II9hFh@-hbbQNB~(8*1&Inh-%_{5co`#vLX06^Oq^H8&y#vW2S5q#_C= zbZ_H+_-hY2Vsec+E7n*N6iZB&Q`+66r*iY{a+n;5psv-Q^E>=OyR_9c`ldUJQ_Q;| zt~gFdPf8^rhU36EkL&G453Vd3sXag*c>QTo4E- z-E6aR9QiK%vM!_0I@ysq>*ZAXc+ibO2-?}~a3xew@knO0>=j6$q6W)`0GW+F6_j0u zu~yJ|CpCq?2!;WKD^67r>|7p8(|1;1e-kO>3g(7AX;2)SNcmsZ=(xYpw{oQW43tW&(bxbcI*gep_;^}#c5ULY=f7MuY6 zCuMolF($07+G8|JZJ}Z&Cce^v9eoovSN;(KP4X=rda2*4>7IIn|I+pP*~s=s_oub$ z?*2(6Id6Z{dt?mJ+zj@R8CZ2jS9>b+Rh5Z5BFQ^ja#L5RFI4`)6?16yTzQ@Dm(O|( zu$msF-#uk@@L0SS!idoZ2%h1xhXd$$znyj9Yy2N>K-o}we5tj4j2-EvSl?i_d<$nB zhj+A&-S&Z!BWlIoW)0hsy*BtGl1+Sf|99$2RJq=YFHcrJ+Z_qHACX(qcHK7C8bpsh}|v)e8f!(qg(w*tMe@}3$?329ZX=uaHau-g8x zM2Jse!`vRtV?5~PKI=7oH;ii&nt1aOx!ns|cRLMq76SGzq;G6jxs?S})lx9Tx+C`) zz58yBz0=;o?aLM}Ys3PchJMy9sj<|(UnJ;rG8w5=IF60Gc|9GZC=fTREa*P5O%cd=3U0-s1hG`(KzXN%~sgUR=+WgKI`J{hOOEP!y+{59t6;*_BFO>lzUVk+Ggt-HUrK_^=62z zT5>9C$qlga`})(fEE7-d@uU7%FGW4#t()Ae%HO27%|E@(XrkUIm=>0B>75;)Yz( zBvM%?^|v}qYlwU!#Fp1EOssfQF({$X&hm>qr}pyJc;^@;?U6qtfr4~yRUr*yeQ&2< zmKjx4zHc?E`=+-WMrd5N{AKBe9+Y3SYaXUs-w??d!eez>IY zwOq_{`3~?zBS47h?0BqtlJ17z34C$Q!yj&`o?Ge0cOfVsf|5O_!-R->yXV{TT(wKqGyr|vm<;5_^f|^=bPVjf;B1d>uBLx57eBacU2*X z85wq3$B(FGt7o}ZVS63?9$&D#429X+-6I2x!m?V&^EL&K&a&?bxNman*v1qErLWh_9>Fdtc#fSSYM%h2syyu?Qlw;wU+b4jPijb9CzgBX_2^1sNia8^hWRprRP3nA;BqV=}3~tUURcTx=O0=N!_{c!(@@v5!CZ z)wFZddR8I!R4B`Zk4N^V(&UlMsom%3S9^|c$*7Nmt44or`8+PjmT>E*X!GULLm{&t z?aB_Ygo@uvc{+=#zw$_8@IIIE&8`yF@KU`FkT+j3Ie_+k9Vp}E&4Km1On~X+1ZSG- zC)B-8*E2VOAqQu~Bq~*b;VdD$au0W7ukw`y-Zc8u!ak9-QylSJ<+Ny^cJCAb1OxOBeOh`ct3BZN09B z)I^&UW#T_{s0i{m_mLLGJ!#S8#A)|)v9@3+?2gKgm$TV~`i{l%+Pu_o1{fR(&*pdiPCTW>%0iYAikWF62d#`l|Onm23S zSfTTp>C~dpF@HXd#fb?Namhym?;S0mJGmb(Bv^FF6Qg2zG=j`6=sup_PTkqwNbX1fta}XCG{;BFCB?M1^8)ita}(MqM2!k^S?pQ ze<9F+py$63=zn0J|2u&Cf9VwqN;fBXktZ`He4f6`;-+(Dn{^K0)0SFMgluPuJPV9V z^l~6G_jhy~&W*ikHUKKW(kb=uE!_^N!XIFkDF)(cm#Vpx~DT&k`0i*`D-*c`AD!HBPqp%`-JZ5|6ufp4`BY(+r8+$*=>+$#;(; znq4Ozwli9PEo}J_H}2{^nrTaqcOyQBOjNLy5cOx$(yM_bSZO7~qD#;3gR}ue{O>bb zn5;K*L%Ec=GE2&k!X1Az`g+i_vw&1-+5bn(pN!)DPM$) z%b1-z=~2MO#_207cm=(fei1b%e50VS@=PZ=`cg~w0PT8hInY9Bz+$8dxCrPlx@`s> zu<%?2SwnY!^l$G?o5<=J(Xv%{KiAJbvZcDt@PXUvrVu4h%|vbm_t0HcrCM9}kPR-- zdcu+Q$s7r{8B<7VF3Bma^5S!uZ)Q_w_Xn!V$PDyvZ8-G2u6C%>S(NnV2JaYBAN%C^ zjZcYvzp(ElaSrl;lSAc$InlK-%_ZU-cF(Oyk|(E66c#^`)sHv|v9IYBTd;CW-PR*r z=nRJaBV>>0(e)v6M*TkdZyZ+LqN?vIX+3@yoP`9#shAY{23I{bb1Ro$|*$GD=xZlDFt3?wXnGP};SwwgXns0^!+n5rjrB+WDOZx!fcDXVg`HnycCzd_A0;gJE zn|Qd_EWv26TohI;T35;UaEf-x)fArQfo6QYqdaJMe*8E3_?o4}Cb6)SHv_ zR$whHF{LpC>bI!c#ZU4+b~$Zj2%b}(*gMGhyLa8>B)O)Z*Z<<5*s4^sAIX7Ry)Wz> z^GXZ{Q~K>_$Q6MBtV;TGyF|&3^@vZ(PId6T9(@vq{vOD%3pvEt@Qk;J(8O-^Pt@Dom z=!#xKtTe&{9m5^ytHQG)I-fK?a#l6!lY24mi5uY>5YqI8u;3NEmF~x%?2Qzg>y$5m z$EX@QIL$dX8Te#Xp}{6oz``#lFTSS;cY;*)jVp*K1i3bPEPp;vnEyc8nEzHN<+btR zS@3xn!wbQM!m@FUBuMsk8su{_^kVM;9yoWcss-9SYCf!yB^4X59vEDT@8c2|x{lp* zlF;h%2)3hR^K)Tf*_rK}qDi<;uZlIuI2^5A8wuf_Mf6{gtPgW^f*onzy%en)ld8N3 zOL-G$7RY}*gwBBrzYQ40UkZDRvKmEcdS{RbDEoV5Bhz_7D9&o$n8dqH+$<}p-ZO2! z^{i^j+h&MqT|&-={j}sy$FSB>kmTz$UjtlNVq)MFHt(TVa?VhGtD*$ndS%eQ{XVWX z*{L{B)$f=cYCM)&O}tm1(G~85Kf9_z>cEbyi}ekEsA3M(;I^4Bq+Xu$zZ=DZFlHN3 z@4U&R**Pf!0@wd^9Ualfx*odVBQQ5@zg9i#;(o#FlhFx;RzDq6Y%BLGnoQ<|R{Wa# z-+V6pN}K2TThVXBRqbcN+`S@gomr3}ovAYA{< z+krIZ{=vQ_GYs1t-qwGrPtJ2{xpsI?SZCAQ`+b9P3vAWabLOrTse5jE?xKO5FAG#{ zW2a{(z^Od zq`Lblne(BM7=K_MRKv!-*0@;zL0#O-G4Ib!3TPdHZ}kdhEsP<4M|-`efOhVx>7Thd zL1S1a@NBQ2{NCtdoiXZRPe~>;n!eZXio+GB3zq85LDYf1^u=U_&WpeYo*Ds;I$HGR zcIx&_cQOkqyWRijxD`nu_zK2E4wJpF+RrwXXH_nP8$`}kt>0P%e7sSZEJ(c%l;n*a zkcC5JO%DQ}nH|(g_(=0-SZR(t5F-5eQLHqCyf#G;_CO!v|N3cDN4fJsEo%a!yv7_$ ze{KArMa1W#?%vhPZdE|sz~3KXtF^}hmLR8$Uxp(Y7-feK#}w#U6Ud}Fw8W_Jp|~&f z1G5w#rP1L4Xe(=bdnpT^*@mq-yd^9kB6o-8aWKS0Z+UeTQJ*VcsEGbhVSDzpFoK!y zO=Gj?R#vsDW!69L1DQLJ^W3Q5-jl6t_Iom}H5}@fYC|RYeT+B48=qiHCP$R3Lo><+ z13u}Sp@5Zjl1(2g@wc=`d2i+qcx05acw|)c=0;%iM2gP^CL-Rw*kvd$K7xpiIgLBn zI&;hP7l-Z<2yCJB)P965Z*bxBJvMa`l}lAmZRXvgsWj&omC#=jJ+2J)wO9+j+{-%v z%QDzxp0l4IP%SuMvJu=aF#3dRX@13@wy0qK`|xehWQFg?rJ3wdF?rpIHv0%cwnyTbNVTVuJu+~VzX9{YcI*K$V4U2X7|{pG|}K2iz( z7b}!%1F!(ih$SF>ZjY&NhdZv6BVTT)smDU;NQrqYIOciI2A#e`yLnLZv;$7n`wXQf zo|pRx1dLeX6Hv}K=6H=$X3UL8!{t-yJXq`-D{gyllRdhzCB1ec($62@U#A36kQp5Q zN!!$Nr!);@+M=U)kguDucJI{IrUg}pGetMrcKtMcowgyy%IB`>^;G39Zz$pX4gNc3 zP{uzI8MM-p30Q68c_Bb5M}S6FuB&2kQnT>ASP1qJM6I4SgJokEHT#CslUKjSWuh|h4vB?6aNAU1svy$ zc}s@nzBx`4Cwa-Tw>$6V-R{g#t^ATzQ?9dsG&TofO(i_H2|*f1Aur0l{X7x#vl+&F zgbtxe*os&`A&dwE!dr-s#E2EZQ63Vm2Z+-`}`_4(9E+ zs}XVqefa!<>}>lu?LSh=X;jQ>kU~e@HzMW2XROC&KqiS1}UfR>YdL`C9rg zeJ>X13qKIgx_CZ~D4%gDbBeuPF+Y%8lGs8n^)S~!m62)CPJm3WeUYaJ@C ziuerGg{#aH90m!{0o;hP$iI&WU$P-k8*T)6??qB05Z3zi);!gk)G~{W9dj!AyF87aQ;fBei5q=R?d2>BYc*acxC}rp7Ap-EZ z0{|4906-@h;9brC4F5I#SM`5w{#*UuQ~vMjf0TbjqMp^y_xm=`Za;* zd)bJ(wZgf-Kqpsv9fE2hOe^6s=svSE5 zPzp{XT8WWDHX%n{HXC~!8-xljAqTBMp7q4Z$XVUU*AZ*%kYEkCx60GcZZ*tc%6p)k zuvv@=WQ2X*#l0EH8oN7sGvwqrV?`W6{dqZonz6QlP5B4rM~{g#v;Zk2=GbLe5?K|q zXbC}Z&O71EAP9EYtBBE+vAgc~qtgSzZ#)x_1PJg0puJH0Z)^^9tvVVh)bDLt4Qb#gF$r|1iQ@GELV} zr#lxJTWJLw#k7Ie6{`5%;X&Bl<@8tKXD`^AM=_Dbu?hNg0Ny+LT%eP%83I-(JrF6~ zqzqql#o3A`F&APL`P@+_!xi$U`jDR-%90q6YQ#P9d^d9Z)+@+swr2fSr51&VO3QlH zYC~DAp!diTHXGITKt)_1aiTF96r;Rgk0XOL=x0Q8qa^_j0}n^ZuxV$3kTi~F45sDV z1FgYrao;wPh5-z`r|kt!bR?^7kJaab`giX z*k7iT(^vUuNfHJvMgk9e&P(M+o@a6;?U0^)+=&GrH-`*ogvTU!#Cb@U+2??#MiS({`FrU=W6kW(HX2^UPB#=sm zd~phQGsG?#DDrO+Y^{h_KlaKcN`qDE9*;^UM+cJg62)sfdU;CB(d)C8^}&M*6Y1o5 zI^GtbCoxj+9KL#u_kv5gCq>93xQE699oo#pjQ5dQRxy=RY%lTcwdr4K%neJUaY9}c ziSk#T`r@vCKY*siJYzKrH!@)dgX>;zaqQ7FLM-)oWDO@5H$>1QM;sY__vuZ;v!{LR zKH#1+H^ah!aWz19>8Di>PDhe`L7O79GYQ_Gkqril46jBX`?$$JpM2|%!|O4C;GJTs z+_>?| zu99;=>paq@HljNzJgL#_XN8$1pTeV*fv-X$dkJ)~$nLV9VVTpnkb&?UyT!r1@Du#< z?-nHQWb4(Jm+wkLK;^ZIRFX2U{AmV!qgb26zo89BaN5W^**@DAd6(K_WjfV!_Ke5y6GvLW;JCp2ZT7CIPJu%*QQi3Y zkC!vV)q~uocZY|Z_5^&>li@$1PK52)DljhCLL;@jZ>s7}(QxM}RZdB&ueGi^+rt_Y zm}Mwypi7i>F#k`OA{xF$32}SaVx?byXWg>$XGKm8%1!C&bl_ab7*!$ALVfwCe<3*a zSk;mnc3oqAB|3b2;S2cHoHJHDzV=1 z7PU-WIEz9;7q%r(t&-KFuUiZU0&FMGktUA3SoB`TYfhMEe{BJ7%|pjHF3<0zc+j-e zcF6SV#;kv?M1o71Geiaag`bey)ntE;g&*OQYpWG@1YVU3>yCPrmj*DNWu4nD&e9g+ z)cqSMd~oiY2mVGg-zdS1lGtfeZStn3$Tl!}NlB>&%du9^o>8C0(F1#EX6MQK0otKc z>;lKvu1{{oiNFBZukSr?bNo_etsMLyQ9boej{5x8j~YO`kKsqLm4qhJQXS%U@Ici} z9sJ6mUsOOeDr;WL2Dl}iyK{-Q+|);enwc5iW!p(436(>e>v+T}^JsibyNcc7ur71^ zoCMNp8c38JYfbS8L-r{+)PNYt{22b~3Xl++FS-X^=%`%aBUgX#@}4C{$|R3;bhlVF zQxB5>;m=P&ve^|EOdD%Y=8n$4rvs*M&&}q${fs7=j&mc;DumrLBrolg{q6d|kXCrP ztnq7~95`J$>wXTC(`N<;Iq{(OU{55()6=VRa%<39sNENi1dATP#F}l5c0-~#jJ`jc zD|6c#xm{6gTQjqdalzOq4`F!uVQ!KVZC33svlQQk8QBebWaR3(=t@F-VK{#XVPhSI zl4)T*?6=>161((Wwc&^k7{7&R^q58oC3yMZ$zh(~%>2(=QEkC)Zu|&`Jy>_c4m~ja zu8&Q%+r3TQ1yp$DSnJG4@nvC70$`r}@^ACuY`hMGvsJl^jpOwYCx-m~BClyPnkU}Z zd!s)JmFZbMG#1@l$)(c3U)Y3No6^B+$5fxRd^}|~ZhFF50G)|)5n5s_Yj#;qd56I) zStw4THoTbv+SiJ0KbJ=B`{ulcnk|1O9$e341p6)OxmE4gqSH1DI4ke8Jp*$a`ulXP z)eVqdMHtB7l6 z&+fKT2RoRLA8aJ6%B6)^=NGUPc73mId;3w~FKx9%HAdu4PdCAGCzq?Jg13w+Ya=Pa zwx~H7Qil~5N`}7c@@QrNf65YAG#sTm73_pYy*Nka-BKpAJM>KAr=nz#Hr$?GPUGL{ zZfufIGUhK5bKfH*&*s9FFLSYkgQc{|5RJCyYwx<3+0L=-!G!pkK#$Zylz^n z#`wc#gq!4F6bEw|n_(94_2%SzPjW(hq_#Lt=>&&?^ew_xl{HTZFB6r<4KPz`%9?VM z-P7)s!}zZlHipwVN^l`3f7e`a2TwO-U_Bo!&b~BCJf2(t4y}~yKI^MJ`sNH~(Vyj& zZ|&laL5n@?ZdLqVT zM=*c;x!~aiC}%_Rs5t*d5T#Q2AKSpudKr0Ltezg_U? zaxp?|yHzyu$NM!meC6*_982FrNY?R^4u+51LEL}HGjVFevys_5yJTLgo~n-8i9IUMm$CSYeu`*~VWTv~T0)_%>!z%m!hHv1^z z^q@Rh8|yLM-4bECMcJ9}YBb_H(bhBGDYiE1n7Tmsq#Bj+&fk?rB=$tU1&kFdZ-)r( zmYthn2t#qpP{N(PAG_vH-`NjgEe_fw!&K+BFds!|;_jo1I+un{^7o`q@Ap3HyHq%@ zsoMCmckK`JkKS8!VxXw(T6Lp}9YWOb@yMgYO^Ew25OIHMb)FSsRXaizpZoU@yKG+T zK4$q;H+hdXiOfIMA|l1^lrdo`t{~Fux4>C+mWvJ~W9H4J}HyL##fJ4`$vvkpBUa|HjpSv*-UGz5ZwUf9n1>^-gihD1Q9GG-4l*K6%mM`)*J) z3V#NXa0zEX?~0RSN; zH9h6NMm_ZCD^lT9ab?6mn(cbwFHjWnN*xxv3*Wcjto`%4gYe~a+>~l;FN;e0Ol+&z z)Qk8ylMQj=`^K=XUlbYFRspnYNNW0wMS7k=%?v#&;&mhSrxQrP0`2FMb9sOLd5zIPD2&JiBRcx0U>Vu%$T#I&Vp9OL)%$vyW!e^WSLw6e=~*e{{Y zyZ5g9BSr@shAooA>``-Iq6afotT=`3#~Kaeh}|xG533WrCu8QaZd2X7!0o|i4C^CC zEVKTjhLXqNQ3E54ZG3HC^%I|L51np1#Xr9_q@q-zZF*ew;#Q~JGYqs(o36IMeW?jg z)fcO|$v#GkHLLG$ZM7gscFJjEC?yW(#ipiGn9uPTY?B2eT=^CkPEGB}jBk4ZZT)3Ehza)DVU{e>kd#-SE~;u!U`cljnv zP8=~*c2mfF0`M{Kz*31G6?gK_crf?Q-kh|v8rnoa))rE z54+j+5>_enAvy$i^Q-ByAotS`ElevKjUT+(n5!JGoHY z^x|0;Mwm5ClXp^!xp(#%M|BO=`X$q%8(>!5-LI``*7n22?Cy_9|7w;pYF7`T%g$+C zqq}y(g7lzTJ&xzX2L^T1CEI{{hTM6cwS3gcK;0ZB^S)|qs>!7sD}u~H z;39?^>uC)X*UDVwXIhKIG3xOOR@!tdtdet|VX{9iG|f*i?&ULTkk=0bz4zR{_Fyh1 zH+tQ|lUq=^RYO2}6J}2-Y#FRRyjL!udTUy*y#y9yx8bU$=kN6fnAk8$dAj+|7g1JH z+gp^)<^B9a8LsAX?K#BlWI#JyMQ=Ty8SL?QlfY_j;IsZlueGvN?P44<;J9Ov{*3De z9s}D4&`eHTQb%*%v}qAsM4lijQ#v-P<#h~1n-hAWuAQumJVzu$2h-X!t1?~@ZQ6Yw zvB~E`Yh^IL;h|Qm{(9)t`!`k&t){FK4{Y~Y^0p&7lw&>Q;CVms%|!i1dSTjc}3YVgVm|22KIU8EhGFbG_Nc)x@if5 z1C~ZfgZ=hJRXfTan1l= zduW^f*lpwtkb;`4H!@|!x*+W;)_`rJ(f-D{pQJC%uz{}ybS=_<{H}djcLw8U{zTgn z9}9n=o-!wh;8K-4IA6vQw+hwH$W>9{$OqlSV@@||{fFSXr_-Kesu&aSq%X(7n(&7? zLu>VNyLf&_sB1Bj6|TD64FWiEths{W!oJ zX-h)yT#Ji}aK&!1GTSR@4^wv_wDqan`dZ zk5({moxAVlQS9Pe$AGr{xE4Qup63;XL!H^pcF&yx?Lv7e10B9Zhn+QjWD!}uQuf;Y z$faW}lViDZE1l{XnyYv_&~vQ`)UXBk#@)4GPbm#-P7TFJ&po}BJI5pH89sYl&aS^24lM}H{?(^8L~>3S14!+V zohdzS#W#w*6X)E@RIPy=t~K9Q=zOUTrg1W`VlSBB;m;!inDCzYb3Gyg7Ye@Za%Frf{Y(>7VieS-MqE(OY3 zbyvJ-=Jvobnq$A6RLp&2)NoxISKIYhq4mfEi>N>Lx|C{}E`k>9Mnfgu>LB`2+dh)6 zN%E{_YY{^yLOT0(d$2M+2) zJ6#X}1e@~R{9Ap*A*zcPn7p*tm*bcnja24@Pa-a=BcId;F=ys33|6$F2l~tntnODo zeN`9v+!JTm*lgsFYhs?OC+(0?;R$cBn31B2kU80PFRsxlV4;WU_s_lA{LaR!y>N*` zm3pow!v!8p3F)rQwvtQvOHk4QdF&!{P}gC;ZQhDkGTa=y_0{r0`*+vPg{5DdT!Fdm zp^*>0`uuD@-+oUOTdDL7mKZTlx485YFLGs^BQnZFosqY%2w5_%n7goVuen-gQympJ z^@1-J@@&P0@2d!l4_4H98&5OKY~$_nc!sQdu+_R~euZI_%onkJMBm>tsa4MqQ(_#l zIg`_jS8iknXkw49{nrhCbv$Xl1^WWqL#h(aMEkbcwfe{a#8E7FiS4X!4jZf>+3(t^ zZ@=5}<3&&9Sve45b0IonOegnxu%^>HC%IB$F%~bv7N{xT?}jO#A$~SrrT)4cvpXhr z(niKa(g18z`m6~wy@>J17}C57s;6A|%d1i7pbD04V%Chsu(tRX5_MWu+n_?-aTY)h z5_X>Qx#K(@U#lo5T*?nYXKpljdqV5&XW?pecl^4> zqPN@pwBK9zJ{}OpRnik&H58t?GVL#*W6Xg`Q`mRB(-1fTY64#SY8}N*dOqtF$^6T8 zeDtH6-2%?J#w+E}WK?aH3>bxK((ZVXCFVN5tk2N)wQ}NVSB6Z2s?GvPh7+(Nvu?HX zwWud1Q}&Ja@V9|?vzjxku{k@av3iUYUr^V?f*QKJVd;2!FYkwhkfzPhjYMn}+V0BS z?eDLwOoB;+Kh-??Zs0sRFk`P0EsRt9X?d}jr--1^3DY-I29>e`bn%{t`S`cnO%rD) z^97Z_hF}X*_F3vg3`u%i)!0T77mb$ z!p`iW=PPyn89{+HdbIpv=3!>CaTo8*e62Ee$Q&S}g_I@uES9<9Cz@CkgDIuaTle19 zuQi4`;iQVWw0}8zNyMG-O{5(hSMOXzo8Uvf4U8UXFgv=-5NnA`@XDNWLkw@>X_kj_ z>F(JS8_`?__stQjpxKYGxs$mn%997OqFxdlg28E`MN%)T9xc$^x_T`t6&rL*irS$( zcsk=E3|szP{O5L2yyg8B77)#&q|L4!vOgypCq7l5d`*rld^rfcH$W-+qCZryl&%Cu z-L=FSv;aTM!EB|;nt6$``CB3AnmR86_lWsNW2a)pgaC8a>#B_Y9d@47# z|Hlr}4A_UTE($WUlm?`=uvZbN8Uk< z@%e92%+|1N$%zigdQLIq9q9jKFToF2aqHL=^Ed+~o7SdTfjAWgBaRiY3I3|^T4?gS zCJAhc)28|~FBwv`KTIb_p@OV&c1b`!=`l$=6qZn)UD3;UQ$J+iSNyGI=jwy_r8Sqm z;FNd|&jV;X@@D$)k%4Q8*Wn;0B8RmQl8jn!zZRYDT_;hI63Hpssk7sgk=1o5S`RhGa0UHV;jZ;IY08G;Y}B9Np#ank5V{cMX!F{thzCrecmQO}J+U%LbO zEM})(%si>n?XxN#eAHIKf0~^vUAt?JwM1*($QL>mbxJcjgl8Q5a-t;K`VJpTkTDy( zO=99|%Qb)E{yb~YE=#jOcfXHLF6xLTgp=7Xd}X8(==65dZ+)9}78x8US!027vxt@hAM(^lz2z$IUIaxY(vzh<&&<2onVp@zG-}yM|3|`#{c6vD>@yw0*t{cw zY_R|V1$hnmMhP23GeNRT*upd4FytNyPr`mY4{W=W1@XJS9Rcu4Xvo|1{39tMhoD;4H4|o~Z)@J7n zscpgm;fSy&R;vTjeR$frO{xm-enl8?vL?$<2%{xEd`$R^U51l3;qjr&%gRI6B-l6R zIWzwg%XW{sv~G5b-6n@j58<}MLd57CAQ7LDR-SOU!ETU4$rD239-hdS^sv>@Lnw5a zty_e~v#^LA-qqM=_gO|q2!l{$Bk1Tr=LvIG0o#Xc7b+!e$qiXTBuKCko@Y_GkwNDO zHh2gOT~QD_wweePj2~3a8$8{m!iE+ciZa4BUb-l^5nGNcR$fDonXqAP?t+WvUUt?0 zEr1I@gg6>{Dj>I!ICzwL*b2mAE?>dfJQp@&MqarN@VbF>bEu=Pp10%BD8mc zgM|Nf(s{SFmzZ?U!l79yoQb(~g{!Su1uW#txGLQv!0Y&SgQ1~>jl#hrD)X?yxpyLj z4?Hip?1+U8YjXlF%I9HQ3a`c6A2nE_b74aX4&L*yeUq_hm-f(uX&kykjSh4k!$!df zj$O&v`WA`Lor;5f7Y$>NbqX8obXNxnWE3NN$vWpq*p7Wk7m2p$0xfsS+VCBC!-mI{ zZG&}CK*ol_9qX72*g7lgnE$DZloxwd6;~)sprFsfBV`@$Z+0nCr}XBK$rw=^2K_3s zbqawcJ;n9W02!QM2{&P|P6f0#MVpXKplbl#(-7CKt-R1~34 z#ejlnO8LZlG1+1=?|{5|@3o&CQ3cK6$CWCng@`I79s_nY_L%)EK?B__1e zmIMj{If0x&&MQogZQ&iRD`Dd)6A=TpWu@eMdp(l6ML_EL-D`wd{C?7w6J8K@OFSS4 zdPz=%_ho{JGla8*lY{|bo^ZGUInN1C37dos!aCu;AS{N3=6xZD-G?ouAmTH^65(hE zq2USP4&f#UV@t}Ky0UG-_t{cT5WWQ|auFZwSA72(mR@sUYS71lU8zniQwjQQL$q z2%Oe*<6#vo2sl7zkIh9t$dB z&}ol8jkgcH0xg927^Zs2GsPBy-6EVL{38C>dV+Et=xs?3E51&6Lnto?K8C!k!+ z=+oG8BE0B?P}nJj`CVTUzEgpF+D-QJ1>vfaNz3~V)i*6^J{7-E}Tr#8dWTF1!Ef*{1G=aru3q7x;bPxggzaW|@v9(d355;o7ZuJgJRrZ(0*;lL`rTpe;acnwO{ z4BIeU(}P&!i#@!3*;XrJtMtkyCC7?X=X}YiY+cnPQT@%@pvCXC-f-*KCt>t7rs)sW})et)W{u@eIeoft)~2ASaL$$O+^GasoM_ z1#$v89g#Dtlq@;mI*u)q8<(c*l6SQVcqk${Cv^$Gb@-X`FygkH#vRaNPZvXtdS};$zZk@%zxDm zeP}bHZf7WJc8sV%eFD8q-LrCsX>b=MtlB)Ss3heh*r*4whL5H%d)y`yCAquM&()pE znbn(~;Ke2U1Hv^`#lBy0hV{7yxl*NLtn_JApTk9uf0~zNC_~jDyVq&d#oQB%F4wWe zaQR75!1OibN>m(*VKrCP8G7yFC7!x}CwwkqkM+z9Opxoa>S6{&NtMd8P)!=@ zkf&RR94gqu-G^{%X6hGUxsvo57F0ZoMPgL75>}XhUHFKR{l((G)hCE?weMTS4Xda4 zPGwOt|2-^eC=|(6U9xMzot(_#2nEeY6c^pOX~9Jm(Y+G4-3l?#g)UrLu_%b5pk`+` zE?g;w5)p(nNu$J)MHj|Ez+g!_f5!XBy>NNVn|bs9oBwB~_rjrR{?DIx&)j$KoA>U$ zzY~a5E*+sjNEVVsgk&LENET@=$*O|SOdn>FHK8H?tBFV|B4kw88M*c3T`NLGlZ@B9 zfJuCh8q#|EfFr7@cvhAiff@HE>BKL8?6~yy^N5 zn!SgVQfw^BbI?oK&vesC4gp^SJ_KxMjJviZbL%|=xCVHKT_-kz(Wr$7zYhD|b-=rT zgDR}rr=k%KPRpx+kI~N(xzU)2EeeoCw)WqPfbTN&sRhY=ntcLz3x9s#A&`xN>=;)! zT5bT|_US&9M}i*(`~Y|X|4*xmB1sJY>Dzs&65~ivpH;xifPZ}utvnI@7!K@7z%gLL zQK3<}5ONJJH=f4-CmPH@!xF7L_+V|pzc~_2R?DOOUBD(_2e5|^5$TYIqaSLf0cQc{ z0JFxbrpUTE(a)kq5A37W5Q-2Hzu+CuBiIZwcK}}jZUWXVPiDSE``Tv!mjG`9<{X1D z>7!@piy3-XPBKj&3UYY_C(LTL084;xGiHUV&`of84X_ND&lsPLXbOe{xs7NDg7q@( zeIqiP60>W(hktWBV{&=)8Nbm%+ znsEv}bxz>8F5ozAH$Ox@r%>y+5gM1?1^gW? zI%{U8Oy7Cj>j+)lMp%;M05^LSvj}rA^uEhACzuDeT^ujznPwOx>3g*-cTow8PjI{P zQ#SQYl4-%OgWQ)jCzy{}kMl1U4Eq@*lD>Kg_!+L9l}}5in{frVD`ShB=%6cEW_uS+ z5E|z)jz4P!LDqa4d2lvTSCSJ(vdx#%6kB3ZJZ%WceCu;5=MYvIJS4sXA31z|Wb{XH za-v}dJPHnCmQMt+a934ZCESJ$o z9u{0V3`eC!Mw(uA@H6 zV$Gb7)Cb9Qk(q*lZDN#;8cuSAdTbVuIO95NL&u=kW#@IuLh{ZS5@v!5Pw;mvB-86t z$V*zJv+ELW5))7INZbqBC3^)o;S}=XEf+3wc<)imNIr7lF7ipTOX5k|GLlmdoJfAM zB!LUbB0{o|EF_Bv$wIP-kSrt%$s$6skSro3*NWuSaqF*5qC9X?isZgSHs)l@NS<`a z4(6Vc^U9g#d-}N*obeIwfPjB}N4i?Y0Gl+Hz zeAhWVz3n&HKU0QK7xl^W&AU}(5N%j2mGXIKgOe(wpy4D3sK>04Z*5xgMim)EYdIfE z0pQYrWfFCf(9olwb0gMV-J@i62KC75q$zU`8**f&CQ-YYIjoaw;)70y)%nd?vh7Ll zTgXS~D;JKxZ^a=&dfBKlYKkw8jq&Fty04VsFD&seLLYu;$)cw|L-QmR6vCD+7<{Uw_WoEi?@{648Akz19z&B+o zQ>BitW_5g2-L#E8dxD$_PU=CliV7UFvb4JRU{3HVEB&=q*aoQgcG>!BsjaSIZFS0s zTP(;l?=Xx0i3P)$y*`SrTGS<=V_bg;$CXDg*Kd(^+e)i$#XxRj9UoA7IPIbwKTg5$ z_24AA`nJ(GGeU%(q1bg2whmq~YVo3+vfwWEyZB(xSty-bYTUU+dJsuBt@d=&lD=@# z;jmpD4y9LT1xvW1^FUhO-9Q)8V+6Xhp~UMbOM*2 z_U-FwFW=5E=A(Q0o{>PlF~_S!fk+_v$wIP-kSrt%$s$5>v*dpx_)O^5B%F2t0000< KMNUMnLSTZ@U?e*L literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/StoreLogo.png b/desktop/src-tauri/icons/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..03afa12a7b2cb1756b42fa2dcb4e78b3cdfeca90 GIT binary patch literal 894 zcmV-^1A+XBP)fqXRR-hUAytyf3ivGo!N$RmCrBHxT_t6t2T0*2Zd?Rh z2;s(!9zX^OOLv)tZ(vyO>P~m3NStorYtHu0d^>+Tvktt1te_-PP$E7-0rRW~2(v1n zGAgezg)&+7sDM!Tzlbn_iTJij*djCt)dc%$;v>RzFU@W%SozY;zge;*2;Pbyo%y3$e?gio+mVlrwDfm+e`gztnJ zel`(%L>c2W63OS0a7_3KqOk{5Nf;BF#0lXW;U(cooTQ%vlpr-hoV|nczXh4p7GcwB z5@*Oz(n5R?w}fj#k1$MVi8`T4*dy%X+tjdt-v5;FCC<%M0utJtei%a78Xdwp;U;7H zZ4o{b-iUaUhxGw&<|LzH+^K;qQWNQr$>?CeGU`B@CF{@;f?XN%9+4#nLbqoMyNGzm zPBp}Y5+n{lA^?F1CzS^5LIL(X5LQ=^U4t%8oz)C$Y{Tc3xJFb^JFZYS#yMY^c+Vr$ zl&K&TA*T8^tN1gl(H2>RNpyrI@+QH>kuB2^*A`CmZI|A@!)HBIY|kiK=NW58(u<^& zCDZevp`()s$G|489nuAFk)4!nqZ}8f_#4QS?!N=wB2#zY5i?ux*HE0$^&CYs>#7(s zIYu|2+q3u%97Gxx7wRpcU+P(0u91WYud0Q}a0x_)79!PoIz;8I?owsXUJ@yZltfA* zD^Da^VV$E{4V1Y?mf}-ig3@(MAsi(k!fXc?BF!ZbXe(Son?JOgM!rd0S2x~U|sE-TqJdI1k3n?+wLl_5*^ zL|s=;ROsPDh_u|tjLAdu&%dj`?TbM{B`0^{fyTa&E1xeepi^L*YZZP#$5t6&D$cQ@ zL_*M}|0NPYmH}N0dtDkbnBcK^W(e1Ih;4gTIK#ImaXNkuSu7HJX=PvFJCpF^p5oT( zp+^e&3nH%wukrW(j97~!;2V4J)7x9ZAIO}RkD=@EJYA@N7%1GoaFjiJNo2 + + + + \ No newline at end of file diff --git a/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png b/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..917c3501b7cc84700acdd72388dca1ea8b8b388b GIT binary patch literal 901 zcmV;01A6?4P){mEd@)PSR9tYLW^i4 z9uh0j6N_+y;bJbk>o@QXJeFiLlT1+J4t(U-?tAmi`?2r6#K8=#xFk`MC`ptgidF=K z4%cTu;zMyb;r)uQ>EDzQPM|m=^g0YI1B<|d_$;Q)EHAKPkxRTxj@%a zqk=thF#SW|vLK+>9pEPL73hk<9)*B%^nK5PU)*#|ImemtUixq+a|$bT6_Zu8vfIF8 zaS*9+8C$(dB!yeRBf6F$TV>WNw1%>@!a83~5Z48Pl$*#b2?XNWg!f03SEu}5PVdAq zq0RacIKflWO3njssXXyivS>NyfHy+V7vQ9LAUa#ZxXChuI-%eOgLu+%BmeLVD7Qg9 z3H2_IieF`6rA1!X=jSG~kP7@RMY&Cpb`|v(dX3FS^0iQ#??ZNnszg(WPHbxZl0GL$1B zGbl5oPt)0Lh+ZP3&hMj&&B(I4)Mh;jtg@Mp*b{e1Bomgi?XfcfP2d6F_c+4QbEu~_ z)pF!8veb3{B{uP0o|Yc1oCQ9UP?y1&jesffPjj;y{9aBwuF=|R6p8<4?)1-30A1!z z2?gs}(F+a`R=If-@cUw8MM%Uv)&%h;U8pt9S?tVA#b@UKiJAGQXr}(ND?7WAL`k9~ bF`e}XUn3HavL?9!00000NkvXXu0mjfvwfTG literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png b/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..5b517ba3ba56605263c29ec89b76b2dceeb1eca0 GIT binary patch literal 3849 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 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png b/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b40fcbe9d7615e5e90c608df17bd4f0244d9d888 GIT binary patch literal 842 zcmV-Q1GW5#P)055WUTvqzIKMf(i?RAO@#Xint263b;r}5rJE)R2@iufdi@C#eYCeNQ$(Eq;VRj zGdRSJOfad9kfqb*G7E2ESfbnA`v^|73lICgX5O2f-Mbk@!9PACFTe}%0=xh@ZUHXi z7f@)3g3n6QNkI-Fgrt8X+!XaTq_?bt9a3n7<-A@Q_2={O;VUaZ1OxetZ`2QQ>1>pnIGPM;E<{d4@xr!!LE{B@0V^mVt&mSzg@CDMyj9_gOt(EPL%@Z0 z+^z6M);0Kc`W8|>n-lhJ5}=Z5u}|VM$S+`Xhtbt6LdDIT+uvIE-<_!^m_Z`)Rp&aP1M?ILor>{};1CwwRTz`2z5JeNV;BXj;S z$lqs0y$tFe@;@>O5I3x?BK^E7yRGu4#+K^e%y7P*a{yU+o)|H5m^LtphPOU|;O3mFH*;{|vDUO@5j8z@x( USdQ$VMgRZ+07*qoM6N<$g1ta`0{{R3 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png b/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..190a6af060f0d2f9c4338e47310ea6fc5816db62 GIT binary patch literal 2147 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 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png b/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..df3dbaf0b1e8c7b315c2aeab1e33fdec355f9105 GIT binary patch literal 3281 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 n>4X0RDku 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 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png b/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..e7ce636deba3ed92c2463cacb961a3c332f684df GIT binary patch literal 3675 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 C+sAPL literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png b/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e39089c34592a54db202b2cbda7ad4073806eb55 GIT binary patch literal 4469 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 Zv+XN#=jI^!-<$%tcE#4L#>6A({{Rj_J}CeI literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..f0607eeae961fecd81bbad65c225b3d55348e287 GIT binary patch literal 11201 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 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png b/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..a2192837d1848926a830019b2d5b6106be594643 GIT binary patch literal 5010 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 U#>9x%Ki5WKsB5ZItL2FP56zW8 + + #fff + \ No newline at end of file diff --git a/desktop/src-tauri/icons/icon.icns b/desktop/src-tauri/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..3ca608c9234dd12df7f10d70805f0768daa46d1b GIT binary patch literal 65470 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 _X}QEx%TW`Ef>q=eE? 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૕mya}XAM#^g0Y|`D`eg!LZ^i^L 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 B$)*4R literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/icon.ico b/desktop/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..78c4c7833545da805e10394696bd5732dfdba926 GIT binary patch literal 11591 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 Z?Dq?7Sz|7_xbNx$`K*0rS$5A=W{{8C@=?7ir- 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 bK?C~&ci*G)+Nep#00000NkvXXu0mjf4uqE* literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png b/desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..525dc81a9dd4af87a4aedb1fd691ce64603c5404 GIT binary patch literal 849 zcmV-X1FrmuP)tI~I;dDC5=krk{5}{x)Xoz`th#6?HSWvlK zrfRiH{eItY!I!W?p%7&<8Or5yGMN;)3_PQd8w$jW5LYUds8A?~dv?2B)$&lm%J15dnzyw4Qa=Ba=Ma^b2>h*fmY&KObZ-p?c z)hakZ%_5D$eIk$_L|9X)ln{qqhx;CnN918ToxaP1wOUQ&-()fo9HILw9miefJBYLi@6 zU^pRowJ_|~bFP2H7>lu)i@D`<{$yX{_>v8!~<9d$A`b4lFB0x{sohGz3s zrpMNEAC(zCoH2dz3;{zY%>CT6jIkJ-xtLpS|4#&>n?N^%Frf88w}DQW`?*Jr`$=E| z8yw&QCy%9P1#-I&!)Ul)saPS}bacYp&pjdz7{CIi%)y-cf$Y6ne*AzH;6co-@(=~U zKp;RI?t5B(ybBCq;U0SnTs+9@7yN!>=UWW!Z}I8l&W}g*Z6A+*%jdVx_<;EqpMd}R bK?C~&ci*G)+Nep#00000NkvXXu0mjf4uqE* literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png b/desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5e1d35dc360797b927e111d349a9efe3b4bf3ce7 GIT binary patch literal 1334 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 bK?C~&ci*G)+Nep#00000NkvXXu0mjf4uqE* literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png b/desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d07ba4f8a63f7c784623a08e44f6a83b5335cd9f GIT binary patch literal 1839 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 U-78hUx>BD+E7tf{EQ{XrFUTWsUjP6A literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png b/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b5da4b420fd398ac04ac21f433fd8ae41ef2fd12 GIT binary patch literal 3028 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 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png b/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5eda8244aabb7f248051b76890e48180512944 GIT binary patch literal 1707 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 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png b/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b5774f67beaa589fd79a3e0b0497c5d7015909 GIT binary patch literal 4825 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 LNkvXXu0mjfF|b_g literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`nw~C>Ar-fh6C|!YuosxHlv8|x vhjCyV&l<-6o(zXgc~(r~TQNzfU5>, } +impl AppState { + pub fn shutdown_child(&self) { + if !self.spawned_by_us.swap(false, Ordering::AcqRel) { + return; + } + if let Ok(mut child) = self.child.lock() { + if let Some(child) = child.take() { + let _ = child.kill(); + } + } + } +} + #[tauri::command] fn show_dashboard(app: tauri::AppHandle) { if let Some(window) = app.get_webview_window("main") { @@ -72,7 +85,7 @@ pub fn run() { .title("OpenCodex") .inner_size(1100.0, 720.0) .visible(false) - .on_navigation(window::navigation_allowed) + .on_navigation(window::navigation_allowed(endpoint)) .build()?; window::configure(&window); window::set_tray_policy(app.handle(), false); @@ -83,19 +96,13 @@ pub fn run() { tray::install(app.handle(), proxy)?; Ok(()) }) - .on_window_event(|window, event| { - if let tauri::WindowEvent::Destroyed = event { - if let Some(state) = window.app_handle().try_state::() { - if state.spawned_by_us.load(Ordering::Relaxed) { - if let Ok(mut child) = state.child.lock() { - if let Some(child) = child.take() { - let _ = child.kill(); - } - } - } + .build(tauri::generate_context!()) + .expect("error while building OpenCodex desktop shell") + .run(|app, event| { + if matches!(event, tauri::RunEvent::Exit) { + if let Some(state) = app.try_state::() { + state.shutdown_child(); } } - }) - .run(tauri::generate_context!()) - .expect("error while running OpenCodex desktop shell"); + }); } diff --git a/desktop/src-tauri/src/sidecar.rs b/desktop/src-tauri/src/sidecar.rs index 556611c6c58..434c1d62883 100644 --- a/desktop/src-tauri/src/sidecar.rs +++ b/desktop/src-tauri/src/sidecar.rs @@ -42,5 +42,6 @@ pub async fn ensure_proxy( return Ok(Some(child)); } } + let _ = child.kill(); Err("the OpenCodex sidecar did not become healthy".into()) } diff --git a/desktop/src-tauri/src/window.rs b/desktop/src-tauri/src/window.rs index a7bcdabd492..6c62692b6ef 100644 --- a/desktop/src-tauri/src/window.rs +++ b/desktop/src-tauri/src/window.rs @@ -1,7 +1,6 @@ +use crate::discovery::ProxyEndpoint; use tauri::{AppHandle, Manager, Url, WebviewWindow, WindowEvent}; -const LOOPBACK_PREFIX: &str = "http://127.0.0.1:"; - pub fn configure(window: &WebviewWindow) { let window_for_close = window.clone(); window.on_window_event(move |event| { @@ -13,16 +12,20 @@ pub fn configure(window: &WebviewWindow) { }); } -pub fn navigation_allowed(url: &Url) -> bool { - let value = url.as_str(); - if value.starts_with(LOOPBACK_PREFIX) || value.starts_with("tauri://") { - return true; - } - if value.starts_with("http://") || value.starts_with("https://") { - let _ = tauri_plugin_opener::open_url(value, None::<&str>); - return false; +pub fn navigation_allowed(endpoint: ProxyEndpoint) -> impl Fn(&Url) -> bool { + move |url| { + if url.scheme() == "tauri" { + return true; + } + if url.scheme() == "http" && url.host_str() == Some(endpoint.host) { + return url.port_or_known_default() == Some(endpoint.port); + } + if matches!(url.scheme(), "http" | "https") { + let _ = tauri_plugin_opener::open_url(url.as_str(), None::<&str>); + return false; + } + url.scheme() == "about" && url.as_str() == "about:blank" } - true } pub fn show(window: &WebviewWindow) { diff --git a/desktop/src-tauri/tauri.conf.json b/desktop/src-tauri/tauri.conf.json index 444f5214ac0..b5eaa0f9d85 100644 --- a/desktop/src-tauri/tauri.conf.json +++ b/desktop/src-tauri/tauri.conf.json @@ -19,6 +19,18 @@ "resources": { "resources/gui/dist": "gui/dist" }, - "icon": ["icons/icon.png"] + "icon": [ + "icons/icon.icns", + "icons/icon.ico", + "icons/icon.png" + ], + "macOS": { + "minimumSystemVersion": "13.0" + }, + "windows": { + "webviewInstallMode": { + "type": "downloadBootstrapper" + } + } } } diff --git a/desktop/ui/main.js b/desktop/ui/main.js index 02409913df1..85c4ea87326 100644 --- a/desktop/ui/main.js +++ b/desktop/ui/main.js @@ -1,26 +1,34 @@ const params = new URLSearchParams(window.location.search); const port = Number(params.get("port") || "10100"); +const origin = `http://127.0.0.1:${port}`; +const dashboardUrl = `${origin}/#/usage`; const status = document.querySelector("#status"); const retry = document.querySelector("#retry"); +let checking = false; async function check() { + if (checking) return; + checking = true; status.textContent = `Connecting to OpenCodex proxy at 127.0.0.1:${port}…`; retry.disabled = true; try { - const response = await fetch(`http://127.0.0.1:${port}/api/startup-health`, { + const response = await fetch(`${origin}/healthz`, { cache: "no-store", }); if (response.ok) { status.textContent = "Proxy is ready. Loading dashboard…"; + window.location.replace(dashboardUrl); return; } throw new Error(`HTTP ${response.status}`); } catch { status.textContent = "The proxy is not reachable yet."; } finally { + checking = false; retry.disabled = false; } } retry.addEventListener("click", check); check(); +setInterval(check, 1500); diff --git a/structure/desktop-shell.md b/structure/desktop-shell.md index 56ae0383a43..e2062721370 100644 --- a/structure/desktop-shell.md +++ b/structure/desktop-shell.md @@ -5,8 +5,8 @@ discovers the loopback proxy, lazily retries management authentication, starts the bundled `ocx` sidecar only when the configured endpoint is unreachable, and owns the tray, autostart, single-instance, and window lifecycle behavior. -`desktop/ui/` is only a short bootstrap page. Once `/api/startup-health` -answers, the shell navigates the webview to the proxy's loopback dashboard +`desktop/ui/` is only a short bootstrap page. Once `/healthz` answers, the shell +navigates the webview to the proxy's loopback dashboard (`/#/usage`) rather than bundling or serving `gui/dist` itself. `desktop/scripts/prepare-sidecar.ts` maps Rust target triples to the standalone From 4b2eec07ff3e71801da849877c8effabd68dfe5e Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 19 Sep 2026 22:38:55 -0700 Subject: [PATCH 3/4] fix(desktop): clear sidecar state on stop-proxy, drop dead API and mobile icons Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../android/mipmap-anydpi-v26/ic_launcher.xml | 5 ----- .../icons/android/mipmap-hdpi/ic_launcher.png | Bin 901 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 3849 -> 0 bytes .../android/mipmap-hdpi/ic_launcher_round.png | Bin 959 -> 0 bytes .../icons/android/mipmap-mdpi/ic_launcher.png | Bin 842 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 2147 -> 0 bytes .../android/mipmap-mdpi/ic_launcher_round.png | Bin 944 -> 0 bytes .../icons/android/mipmap-xhdpi/ic_launcher.png | Bin 1902 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 5308 -> 0 bytes .../android/mipmap-xhdpi/ic_launcher_round.png | Bin 2017 -> 0 bytes .../icons/android/mipmap-xxhdpi/ic_launcher.png | Bin 3281 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 8247 -> 0 bytes .../android/mipmap-xxhdpi/ic_launcher_round.png | Bin 3675 -> 0 bytes .../android/mipmap-xxxhdpi/ic_launcher.png | Bin 4469 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 11201 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 5010 -> 0 bytes .../android/values/ic_launcher_background.xml | 4 ---- .../src-tauri/icons/ios/AppIcon-20x20@1x.png | Bin 394 -> 0 bytes .../src-tauri/icons/ios/AppIcon-20x20@2x-1.png | Bin 849 -> 0 bytes .../src-tauri/icons/ios/AppIcon-20x20@2x.png | Bin 849 -> 0 bytes .../src-tauri/icons/ios/AppIcon-20x20@3x.png | Bin 1334 -> 0 bytes .../src-tauri/icons/ios/AppIcon-29x29@1x.png | Bin 576 -> 0 bytes .../src-tauri/icons/ios/AppIcon-29x29@2x-1.png | Bin 1304 -> 0 bytes .../src-tauri/icons/ios/AppIcon-29x29@2x.png | Bin 1304 -> 0 bytes .../src-tauri/icons/ios/AppIcon-29x29@3x.png | Bin 1943 -> 0 bytes .../src-tauri/icons/ios/AppIcon-40x40@1x.png | Bin 849 -> 0 bytes .../src-tauri/icons/ios/AppIcon-40x40@2x-1.png | Bin 1839 -> 0 bytes .../src-tauri/icons/ios/AppIcon-40x40@2x.png | Bin 1839 -> 0 bytes .../src-tauri/icons/ios/AppIcon-40x40@3x.png | Bin 3028 -> 0 bytes desktop/src-tauri/icons/ios/AppIcon-512@2x.png | Bin 26180 -> 0 bytes .../src-tauri/icons/ios/AppIcon-60x60@2x.png | Bin 3028 -> 0 bytes .../src-tauri/icons/ios/AppIcon-60x60@3x.png | Bin 5134 -> 0 bytes .../src-tauri/icons/ios/AppIcon-76x76@1x.png | Bin 1707 -> 0 bytes .../src-tauri/icons/ios/AppIcon-76x76@2x.png | Bin 4517 -> 0 bytes .../icons/ios/AppIcon-83.5x83.5@2x.png | Bin 4825 -> 0 bytes desktop/src-tauri/src/proxy.rs | 4 ---- desktop/src-tauri/src/tray.rs | 8 +++++++- structure/desktop-shell.md | 2 ++ 38 files changed, 9 insertions(+), 14 deletions(-) delete mode 100644 desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 desktop/src-tauri/icons/android/values/ic_launcher_background.xml delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-20x20@1x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-20x20@2x-1.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-29x29@1x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-29x29@2x-1.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-29x29@2x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-29x29@3x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-40x40@1x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-40x40@2x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-40x40@3x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-512@2x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-60x60@3x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-76x76@2x.png delete mode 100644 desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png diff --git a/desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml b/desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 2ffbf24b689..00000000000 --- a/desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png b/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 917c3501b7cc84700acdd72388dca1ea8b8b388b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 901 zcmV;01A6?4P){mEd@)PSR9tYLW^i4 z9uh0j6N_+y;bJbk>o@QXJeFiLlT1+J4t(U-?tAmi`?2r6#K8=#xFk`MC`ptgidF=K z4%cTu;zMyb;r)uQ>EDzQPM|m=^g0YI1B<|d_$;Q)EHAKPkxRTxj@%a zqk=thF#SW|vLK+>9pEPL73hk<9)*B%^nK5PU)*#|ImemtUixq+a|$bT6_Zu8vfIF8 zaS*9+8C$(dB!yeRBf6F$TV>WNw1%>@!a83~5Z48Pl$*#b2?XNWg!f03SEu}5PVdAq zq0RacIKflWO3njssXXyivS>NyfHy+V7vQ9LAUa#ZxXChuI-%eOgLu+%BmeLVD7Qg9 z3H2_IieF`6rA1!X=jSG~kP7@RMY&Cpb`|v(dX3FS^0iQ#??ZNnszg(WPHbxZl0GL$1B zGbl5oPt)0Lh+ZP3&hMj&&B(I4)Mh;jtg@Mp*b{e1Bomgi?XfcfP2d6F_c+4QbEu~_ z)pF!8veb3{B{uP0o|Yc1oCQ9UP?y1&jesffPjj;y{9aBwuF=|R6p8<4?)1-30A1!z z2?gs}(F+a`R=If-@cUw8MM%Uv)&%h;U8pt9S?tVA#b@UKiJAGQXr}(ND?7WAL`k9~ bF`e}XUn3HavL?9!00000NkvXXu0mjfvwfTG diff --git a/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png b/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 5b517ba3ba56605263c29ec89b76b2dceeb1eca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3849 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 diff --git a/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png b/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index b40fcbe9d7615e5e90c608df17bd4f0244d9d888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmV-Q1GW5#P)055WUTvqzIKMf(i?RAO@#Xint263b;r}5rJE)R2@iufdi@C#eYCeNQ$(Eq;VRj zGdRSJOfad9kfqb*G7E2ESfbnA`v^|73lICgX5O2f-Mbk@!9PACFTe}%0=xh@ZUHXi z7f@)3g3n6QNkI-Fgrt8X+!XaTq_?bt9a3n7<-A@Q_2={O;VUaZ1OxetZ`2QQ>1>pnIGPM;E<{d4@xr!!LE{B@0V^mVt&mSzg@CDMyj9_gOt(EPL%@Z0 z+^z6M);0Kc`W8|>n-lhJ5}=Z5u}|VM$S+`Xhtbt6LdDIT+uvIE-<_!^m_Z`)Rp&aP1M?ILor>{};1CwwRTz`2z5JeNV;BXj;S z$lqs0y$tFe@;@>O5I3x?BK^E7yRGu4#+K^e%y7P*a{yU+o)|H5m^LtphPOU|;O3mFH*;{|vDUO@5j8z@x( USdQ$VMgRZ+07*qoM6N<$g1ta`0{{R3 diff --git a/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png b/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png deleted file mode 100644 index 190a6af060f0d2f9c4338e47310ea6fc5816db62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2147 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 diff --git a/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png b/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index df3dbaf0b1e8c7b315c2aeab1e33fdec355f9105..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3281 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 n>4X0RDku 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 diff --git a/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png b/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index e7ce636deba3ed92c2463cacb961a3c332f684df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3675 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 C+sAPL diff --git a/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png b/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index e39089c34592a54db202b2cbda7ad4073806eb55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4469 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 Zv+XN#=jI^!-<$%tcE#4L#>6A({{Rj_J}CeI diff --git a/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index f0607eeae961fecd81bbad65c225b3d55348e287..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11201 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 diff --git a/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png b/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index a2192837d1848926a830019b2d5b6106be594643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5010 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 U#>9x%Ki5WKsB5ZItL2FP56zW8 - - #fff - \ No newline at end of file diff --git a/desktop/src-tauri/icons/ios/AppIcon-20x20@1x.png b/desktop/src-tauri/icons/ios/AppIcon-20x20@1x.png deleted file mode 100644 index d6dee2191882ac40c05bf7d56f320e251e4832dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmV;50d@X~P)8G$Hwp1&e6?*`%JZD+x~ALh zwh1r{gB-`9APC5^tTpB>Aro1aQ4~d|DooRq!Z6$<6>{lvvN(>(_kA)=leh`&XV-O9 z6a^(ovTBi(b12WvzjK?mZ7+hdEXj49JO->ds@L|V*&v9?620DV=c#GU4<0@j1vIU0>dyI+6J7gtI~I;dDC5=krk{5}{x)Xoz`th#6?HSWvlK zrfRiH{eItY!I!W?p%7&<8Or5yGMN;)3_PQd8w$jW5LYUds8A?~dv?2B)$&lm%J15dnzyw4Qa=Ba=Ma^b2>h*fmY&KObZ-p?c z)hakZ%_5D$eIk$_L|9X)ln{qqhx;CnN918ToxaP1wOUQ&-()fo9HILw9miefJBYLi@6 zU^pRowJ_|~bFP2H7>lu)i@D`<{$yX{_>v8!~<9d$A`b4lFB0x{sohGz3s zrpMNEAC(zCoH2dz3;{zY%>CT6jIkJ-xtLpS|4#&>n?N^%Frf88w}DQW`?*Jr`$=E| z8yw&QCy%9P1#-I&!)Ul)saPS}bacYp&pjdz7{CIi%)y-cf$Y6ne*AzH;6co-@(=~U zKp;RI?t5B(ybBCq;U0SnTs+9@7yN!>=UWW!Z}I8l&W}g*Z6A+*%jdVx_<;EqpMd}R bK?C~&ci*G)+Nep#00000NkvXXu0mjf4uqE* diff --git a/desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png b/desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png deleted file mode 100644 index 525dc81a9dd4af87a4aedb1fd691ce64603c5404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 849 zcmV-X1FrmuP)tI~I;dDC5=krk{5}{x)Xoz`th#6?HSWvlK zrfRiH{eItY!I!W?p%7&<8Or5yGMN;)3_PQd8w$jW5LYUds8A?~dv?2B)$&lm%J15dnzyw4Qa=Ba=Ma^b2>h*fmY&KObZ-p?c z)hakZ%_5D$eIk$_L|9X)ln{qqhx;CnN918ToxaP1wOUQ&-()fo9HILw9miefJBYLi@6 zU^pRowJ_|~bFP2H7>lu)i@D`<{$yX{_>v8!~<9d$A`b4lFB0x{sohGz3s zrpMNEAC(zCoH2dz3;{zY%>CT6jIkJ-xtLpS|4#&>n?N^%Frf88w}DQW`?*Jr`$=E| z8yw&QCy%9P1#-I&!)Ul)saPS}bacYp&pjdz7{CIi%)y-cf$Y6ne*AzH;6co-@(=~U zKp;RI?t5B(ybBCq;U0SnTs+9@7yN!>=UWW!Z}I8l&W}g*Z6A+*%jdVx_<;EqpMd}R bK?C~&ci*G)+Nep#00000NkvXXu0mjf4uqE* diff --git a/desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png b/desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png deleted file mode 100644 index 5e1d35dc360797b927e111d349a9efe3b4bf3ce7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1334 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 bK?C~&ci*G)+Nep#00000NkvXXu0mjf4uqE* diff --git a/desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png b/desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png deleted file mode 100644 index d07ba4f8a63f7c784623a08e44f6a83b5335cd9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1839 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 U-78hUx>BD+E7tf{EQ{XrFUTWsUjP6A diff --git a/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png b/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png deleted file mode 100644 index b5da4b420fd398ac04ac21f433fd8ae41ef2fd12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3028 zcmV;_3oG=AP)T!<**#(BstDpC9du0j-tj}W5n1YIe(i;5q?0S#IC2}H$V=Nxq- zqKFF@B8cL2{^xhzJo$HShTG@dbIzTr;PUE=$?bZc?&|95>Z*ltBF?01WuZY}1e+Ma zCPuJ{5o}@vn;5|+Mz9fVVg#EQ!9@#E)qnr~P5rq_iJ~a|Z>?6F`g12p)XuSJ$m9c{ z3l=PBtFit4`!}6r5YER4&PeLQg)@!I=g*(r$B!S=&zCP>+}E#P-Oryt-Jd^y(nVb~ zHjH7(k|l1%iWP3vs#R|7+O_Ft_3G6#{xM@{N3z?3V1~eos0ZlTvuEzkojdNqg9q`` zr%$5~A3nJ6-@mtXtjm@ybL-ZvbGvr!iudl_8yz@s!0p_*bH)V4;6D)JAnSJBN z4R`+h`Dv>aFxrXGP{Mt(S=DFGoN-5v9GP0ptuWh_5)1&E$qyesbSF=qj2}OK9C<5s zPBYjkqU}Ru_xJb57cX9n_Uzd+1B0$2`1kMMZqcGe>B>BH>QsFB^5v)#S8Lu?Ju)&9 zkB*K;{6AsQH3ZAqc=6(e8yp;TZ{EC_n(dvwVnbH6blkLQlN%o&ciXpbugn3fRkh!; z*Y4P{BPCagbvwDfj_8c;U;q~UUBQx$Bv=E-1mi>C&Zc`SRs)5=tbb7?N%W|kNL3zpb ziPg`tckSQ5-|gPL+il*w*{xZ#27;r-ix=~6qq5@SzkdCS5`x{QPoLcD*RS29M~~dy zyLa95=g+6cmWOB&3Pvkeu1wF&WjJ1iu3)+UI1%hK5S8`U`x9dQ`t|Yg=_v)<^%}1JS`%F_T)5!Qo;^E5r%e$50efjcbx^ngZP?F!(ju+~TiLo(89f24-Iw+74x(XF506Q=&@}$u8 z3YIw`ww&CL=8E#L$8treeH>*wDJ@1;3{tg!a&^caohMqC+S`jlD;o`sx zwg;1Y;>3w5as^PQk*mFwvCAx@6S|>e7EF9Bi?Cd^W{*TDhS$uk(Bxhc1@1X1xf~Pb zOVjBzK?muBZXU@&VNL!WSb{0oHXHTJZK8cAfV)r5h#_9HoDZ30CDnD}stxhHS%os! zA&!?Y1XCQYdaNs3!Eyq~#DH98UL$fbL2{^Mmdgs!wS&o)psVM2#f>HgSdst%w#_|dQk42+}0JdNZ)=K!Vj9{6bkO5<^Ff&A`2x8PngL;8v1l_>^EE;V~!c-Vn zO0Wh@YHP@s%f$FWjBea_=bPYuFeJq63R7X6cR^(KqGg^*N>7r%gJZ2+9K3z|Hog5R zDh$_YUNt%syWY5QV|qam8mmu|{?p`oVPEPB*39C?L5O+QfVdTc++JI~^{W^Rz#?Q7 z3tM5G$4uAqy8k>U$#R_H+*?$1rjxyDAB)iAkFd_OFlu?zR(LDaXjW-JTp#K_*9dkg z7XFoLBWo$F^TefVd2+3I<;O#?Mmbheh)fLsKDU=e7zmU3CcLl(YcS7~(^ku~|MGk@ z%PT+9Y)tZF0@h%jXCKaGFZE@O!fx7Q$f4@ikYrvTMwm3(hlQ~)uf#<2_*&y_^fP2X zk|1XUPbU~mz$WBJe9TKV(Gp(PhYG2!$;Sw;BN$A;rVPxRCYZ7bp^A{V>?h8d{3l=n zHlY(g1oOfO&f*P|l-|onqXs!$aT%Bwab0Lt;;Wa~3Za=8!A7u&5o}@vn;5|+MzDzy zY+?i(!6rtqi4kmK1e+MaCPuJ{5o}@v8^I<)bSso)(k~i<`^lla~ z0h=-~cg<#1((cU#zJj3MGLN23rVE&WP3UWd5X=iBm|lLNLNRUXEw`d$sB6=g{*$<* z*pz{JZi1D8Pou`rTwN-qQ%u_ko=z~B%vMEyu6$@=p7r@pt`$rNPM4u{5{1%?;OPVl zlhBe%!o1WKtS2aZ8C^I-g);ai`7r@&5nO5!7MTb7=h9*|v;+Y?4tlLNRwHj%n1qzT z0BiLuF5N`y!7}}GLrV})s-9B+%@p+NmZOoI?DqgBp(QYcb)K4)wY+->&5>P(qAjY` zXaxTsi_oGf!a9!+Q_EW^hR)X^vr03_ihEE<(x_G@vgg?uFhJMS?vZOyaPU8MDl8c_7o zD%R>ncQD9O-%}V@`T$&CP9^h@6{%HBUm;r0^jgg<>5A@P5K=r{m(RT6TS^jBfb zef##Mb&a!h7oqhG^^>dWq1$S5(UJ1}+qP|USsIoM3=Ft?_wMB?LfUl2cbS;s;o;!x zEY*BctwuGl=w`236IeP2c3_EoY@5NT)@-ZQp`oGF5eO-A&8$=>aG9QN4Pp8^p({F1 z?!!??@pLc++q^X@n>+HaK1S&-JMYU9>TD_NaL(G49Z8)OCf9e(k2zjaZ| zI-jY~by9mVp6s0z2lh^i{oYCbe$@?ouKTaSmAiE5lFN!oe}8|R#Hynr3a49ZJ8Nwh z)?AVSjf{-MSuPdS=?fsJpNyxe)^=)6*(t=TwH-R3i_CH;xxx$#!7@v8OKUIN!|i3Q zL9{i9cGlwES&R1>UL-RbbCp+V%#{CgSOv=9Qz@Nd+SFU7BrhwxEc1;CW`&Xq(Zm&bv>Aws9>x@LpTdT5%E{buGSHw$^tZwZ9?nkoF8QsC4 z%HGM9tl)a@8XU3dp7m-OU*yrG3_|BRvXN#( zCWbESeMhq;V~tykTD`MD&w8#7>3lsgF)^xaglg!;Aks+$ML_8t zq=_KK(0d0x+xK~&bMJ?9?}yoYo|)Ne_A~RJwSH?7jSMuYZZO{ffk0H+T52Z1yWvkE zCk390gQVgh5O`8sO~ou^cH7n}f!>1g!DQNK{4)yT*hTT8(F%VRc4AIuwVOiP^pZ*a zHb%6t1f6KHAIUT@KLX?4T-|wPZ6jl~5wZ@lZe9<`B!5m0;vytjYR<(b?#O-T=xAlw z?3+zs_0P-Kc+(OV9}kE6>gFkv7io_`X=!*QRgfdZDo`*nh5mmk|Flx*|JQC? z*?YB4_R>WH9*4}If*b9(ciruI5R9LceqWh#`<9ygWg(FcI*r%uO}*UINyrH=qiHVZ z*_p!FC>*qh>_ZFgKXI)29&tJN{@4B&cK-nN$m`?mtLxM6YoFZcDQFHc%?sjR=X^hi z?6#fS<-v>#AB2}QHa^@-s&*SL*xva)m@6X{AcG_EwT4!gdbqpe$Q7TS8Hw7r-(?iD zdns&D)6*7qx^ntGQbtEiVz0LS_peKF_y`A+glkF)yOQ1KG>Gu^<*D!CuHAE1YEXO&uR!}84Z}fjlR_c5&QVl?ww=Y zUF(J(;yf4rpmlO@x4R&kC!No!_@+(ig4K2NrUHapY46wA;-+X=Y9+XN5Y*=911O2Q z&|{Bf;c;eM{p=n_#(S2>v`kO1v{94ut*dOrlIcA~Y_`uJyG8bkrP zTjP?}MV4f%e*5vv2>;!bqPwMub?> zV^t*8IUpAo{0Lel6HDijPE4q3AV*>1h-6|Q+RYs3rhoIA2u~;<U?UPB>H$* z_0E&bR#fPH`Hh*LzP#}NJcQX{N=^!Y@=tu(kBwR z;GMkl)`irAM#9P=X`gwxHEoi?`fUw(n}10Zjoc+H$=ikNMN;2aKmsmjdrJ@l>`MZO ze!=|vC#Jv-y9!nJEC=&Yew7VaNpRN`$(V?vvDU4ikq*eEsoV6@XmiPt53G6vYpt6? zm@4^NOjWL5R32YwgiHE+f5SdB$d{j7(peR{j2bq`>E^nVTGY4F3brnGcvUY z?)+qJe-p<6HgMB1*DZQb#3Q09AAv(LArGW}e0Q-NQRqqHsbl2kQQU`F6mWeuz& zHY0h15gV75T(P&d766x`5G*el?QVF6J;)6_-};7YW|c?u4D?I&r{oO>!3J!HP!gI2 z55hMFNR0D~jwRQBCm=5d>N6~RanGXHo+6nD5h|{YgzS-5?g49C515&-vFoR_86lLwESJp;%3?EDDl_gqSa z+v$$*xIsD)zAUPCXm(g{6Q(z%dRd94w2^TKlk`!sGc70GA^^$0=GP4(a)O3*Pt((q znlV=8Hq213KEFk@IuSqBbNdzg)`PRxOYWxm`_1=qvz(=SN}eH|@9XuuGg#2Mci2Z> zPrmH3byE;}Fi(|7WGV90**a${Jdr~1>AjCr+Q683kml1Ch#fh`ATkD1E&tG^%bchk zys!2%C1rz0wNb22jt=m9W&Ti4>)%%6veRcIrc0rGGRF7O=s!NTcVy|#9IHQOE=hMY zMJ&F){utgU*%7nA5hU4HtdNYq>Z`hYXb;b2`peZ$Ph)o7pvu5s(|-jB*uQ9T~hb7;P^6Za^%aC#~*3^O6g+_ zaIBRdYbgb!4S3L5Eo^XtxyGye)w z7;wus>Nqi0o9?M7o?c7RZ60fl`;RpnOMJlqm>SU^@L{zan~~mYR)=Fpd&(E*sj_8rMXf*&7f6 zVFJsFZwS=2(j95n_4?bRK0v6Y`9D3UgtRW|u*Ig;6+|EJEvd4x@i?$El*spmu({CR zM_(STXYvL}%bYEC#GD;(e$@yO&F1F9*-+#w%Z#LB>fg6!%*n-JFqq15d7TB#7i{VP zD+TS?)B612!IR4CRI{%>59nT%iyNXyEw8a@_Nh$#*OkxJ#-wm-&^9v#L;#Iu!INWk zF69;ztnrH!7_!{*tD?1RQCN#IluQRcsh^{l1qgfg;{^z7f`jq~ysy!wZy4m)QznngoL_}}9Yy*taNEV0ur2B1z1d%ZcN%2Z+nZlSt zH#4OpuFmuXA&tae(jZR0nvdF8sxog1yLmnCDh)i*z`t|)qI0_QZ57~BV}>P&tl!7? zO%1hzweSjRGk*8fo3aEx&$v6l)`y<~?93i5*8Ez>;66`1kKdkaUIoIg5P4k{N5$6P zCr5kPM}YAom7m(-tO}#~(Hg&DL0)CKYD_%Fra8knN;xo{Z@Rhl_57YgNgmib8@WDS z?q-*>7rHSa*os)s*q?!yCchg(Dk4C((^&0I9U&PQjs-Z!y5xDkI8~o_Z9FIusap&L z;()VxhY_Siq^u&B&;YKCFShuS9H)U{e=FfS&~w!7K*6DG`8<=~kXbisnD2nVnF^(P zGD3hzpOP0Q`$&mlR@6DcDE}n@`RSwu4`NjsZVjOO9Xg+P z|6$=V(irI)`wybr8Yvb2JRy`AL+NP*^h2l z%Y)E4b7t<{7_wW^P6}2;lxG1nebFS8&bte3jl+&ee3=w|0IbCiy*1bTmT&V7fnrs3 z@a}??=|VeE=v&n=k5Yeb<`EYvQps1uQDXM(@A+7*H@5bvoheYzCQ*};Do;Ec>z;Rh zn+-mc0|-TSSx?I#a?27~A~t*g7W*#$rp-S^5g?xciZnQmc|&Rv_ynEdb^|_MrZ0Ni zAxYE-l%;iCiMqzaq*Z%wGGV#usV1M;RZi*HVd86v0klsC5T02a3#Y(j%-&50^XVah zyl2uRl=a(1aHN&#VY4Ewo#^N?PY+Vb5AiunX$>3>39Q z3TT3<)yrU1nKtQsCDU*PNcND)sDo5aVD(>?k8IKOcsC8oiW5nkB+tc1<@gHn zUss32V?a6v&FKl?Z`l5Vj?FI#)HB;2GpShZaE>FD<2dPiC9IEhRDu~1{=$U668Ts! zM$_L;mZI-4rk0p;m$Yd&KxA{{ds=3LS8T=;<9%Ju*d~@oX>5u@^=`uqFT%7Nv{hB6 z57!1WQ4(%_drO@P4L&9rsbCh2__POTeC7^3ZWOP@P~*SSLyMB~G}mude|--+SE5l9 zFqk7{_vH<5)m??0p}y?>N)wX>m{A5g0o3R4b5!!_Y+L1`o?k?pTu`uhTXdS%`ZN z>}{v0Asm-MUU9i3Z>ZDKe^{Ms{1*3#Xcfs7q_3!AL@vJdIilz+U-Q+#2o<8_;)Y-$ zdrDl>w_Evn$~t21eu<5!#Ljmn)9pc%C((bx5Ut5$KRM-D8t}!BQ3vCON~rr0qm`{DEv&~Q(njPoafC-?%C%Sw!P0jjPu|;g@zhZM z$0M=kCQg;A_MjZwlilyWvvh&yy11`o`@8E(FyvqVILHM`)PM?(6>>f)AoOTUXn!?8 zm;)hoN~rw!0iUH2?8cDA46Q0Rb^za@VNw)!VYd|)L9@`ZtN`~VwSr$9?P{39 zq+!P)k9O$1N$n%fT?TK+bl!Abr|_29nCtuai(NaGja?}MhM2Fg>s3F7u1qA4?JRX$ zGM~5=C`Gokhban7(&Xa;VcM99W&K-fq(;wZGPYzZRdGrs~J`HQvC>Yd`4<3=r z`rlT}A|d30cgCS(cuE=gEn*MrY;0@>TW4DQ=KYEv>RP;ZHT0HNL@VfAx@TL~TM5~s z5R1)LB7ad_vzM2#K#Uoa9**yR#fN1DdgRCQB}5X;O_9^(aA?7!InWf*v3&oj{L>oC g_g}iXKv%bj?6QtewAEaIdp?l1x`A2^^ilM`0dEV*hyVZp diff --git a/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png b/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png deleted file mode 100644 index 8d5eda8244aabb7f248051b76890e48180512944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1707 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 diff --git a/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png b/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png deleted file mode 100644 index a2b5774f67beaa589fd79a3e0b0497c5d7015909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4825 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 g{NG9|b{>|_@;z#WksZ?Wvux{-6`h30N;d Result { - self.get("/api/startup-health").await - } - pub async fn is_alive(&self) -> Result { self.get("/healthz").await } diff --git a/desktop/src-tauri/src/tray.rs b/desktop/src-tauri/src/tray.rs index af69ecfbe8e..52006a6d901 100644 --- a/desktop/src-tauri/src/tray.rs +++ b/desktop/src-tauri/src/tray.rs @@ -25,6 +25,7 @@ pub fn install(app: &AppHandle, proxy: ProxyClient) -> tauri::Result<()> { .spawned_by_us .load(Ordering::Relaxed); let stop = MenuItem::with_id(app, "stop-proxy", "Stop proxy", spawned_by_us, None::<&str>)?; + let stop_item = stop.clone(); let quit = MenuItem::with_id(app, "quit", "Quit", true, None::<&str>)?; let menu = Menu::with_items( app, @@ -82,8 +83,13 @@ pub fn install(app: &AppHandle, proxy: ProxyClient) -> tauri::Result<()> { .load(Ordering::Relaxed) { let proxy = app.state::().proxy.clone(); + let app = app.clone(); + let stop_item = stop_item.clone(); tauri::async_runtime::spawn(async move { - let _ = proxy.stop().await; + if proxy.stop().await.is_ok() { + app.state::().shutdown_child(); + let _ = stop_item.set_enabled(false); + } }); } } diff --git a/structure/desktop-shell.md b/structure/desktop-shell.md index e2062721370..d9294e60414 100644 --- a/structure/desktop-shell.md +++ b/structure/desktop-shell.md @@ -8,6 +8,8 @@ and owns the tray, autostart, single-instance, and window lifecycle behavior. `desktop/ui/` is only a short bootstrap page. Once `/healthz` answers, the shell navigates the webview to the proxy's loopback dashboard (`/#/usage`) rather than bundling or serving `gui/dist` itself. +Only the bootstrap page has Tauri IPC capability; the loopback dashboard never +does because `dangerousRemoteDomainIpcAccess` is not configured. `desktop/scripts/prepare-sidecar.ts` maps Rust target triples to the standalone Bun targets and prepares the external binary plus dashboard resources used by From 10f3a73d8e90c2014fce79a4bd51ff45b8917776 Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 19 Sep 2026 23:04:50 -0700 Subject: [PATCH 4/4] fix(desktop): clear sidecar state when stop-proxy finds the proxy already gone Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- desktop/src-tauri/src/tray.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/desktop/src-tauri/src/tray.rs b/desktop/src-tauri/src/tray.rs index 52006a6d901..740231d0d48 100644 --- a/desktop/src-tauri/src/tray.rs +++ b/desktop/src-tauri/src/tray.rs @@ -86,7 +86,9 @@ pub fn install(app: &AppHandle, proxy: ProxyClient) -> tauri::Result<()> { let app = app.clone(); let stop_item = stop_item.clone(); tauri::async_runtime::spawn(async move { - if proxy.stop().await.is_ok() { + let stopped = + proxy.stop().await.is_ok() || proxy.is_alive().await.is_err(); + if stopped { app.state::().shutdown_child(); let _ = stop_item.set_enabled(false); }