From 7e92f8da7ae89d3576fe2b70aac85737089eec1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Flor=C3=AAncio?= Date: Wed, 24 Jun 2026 23:02:50 +0100 Subject: [PATCH] feat: add tauri desktop app (#1478) --- .github/workflows/e2e-tests.yml | 91 +- .github/workflows/release.yml | 449 +- AGENTS.md | 5 +- Makefile | 1 + README.md | 4 +- apps/backend/internal/backendapp/helpers.go | 12 + apps/backend/internal/backendapp/main.go | 41 +- .../internal/backendapp/server_test.go | 107 + .../internal/common/config/config_test.go | 12 + apps/cli/README_internal.md | 9 +- apps/cli/src/release-config.test.ts | 130 + apps/desktop/AGENTS.md | 35 + apps/desktop/e2e/README.md | 5 + apps/desktop/e2e/desktop-launch-smoke.mjs | 186 + apps/desktop/index.html | 21 + apps/desktop/package.json | 19 + apps/desktop/src-tauri/.gitignore | 1 + apps/desktop/src-tauri/Cargo.lock | 5147 +++++++++++++++++ apps/desktop/src-tauri/Cargo.toml | 38 + apps/desktop/src-tauri/build.rs | 5 + .../src-tauri/capabilities/default.json | 7 + .../src-tauri/gen/schemas/acl-manifests.json | 1 + .../src-tauri/gen/schemas/capabilities.json | 1 + .../src-tauri/gen/schemas/desktop-schema.json | 2220 +++++++ .../src-tauri/gen/schemas/linux-schema.json | 2220 +++++++ apps/desktop/src-tauri/icons/128x128.png | Bin 0 -> 8882 bytes apps/desktop/src-tauri/icons/128x128@2x.png | Bin 0 -> 19843 bytes apps/desktop/src-tauri/icons/32x32.png | Bin 0 -> 1405 bytes apps/desktop/src-tauri/icons/64x64.png | Bin 0 -> 3532 bytes .../src-tauri/icons/Square107x107Logo.png | Bin 0 -> 6866 bytes .../src-tauri/icons/Square142x142Logo.png | Bin 0 -> 10437 bytes .../src-tauri/icons/Square150x150Logo.png | Bin 0 -> 11162 bytes .../src-tauri/icons/Square284x284Logo.png | Bin 0 -> 25170 bytes .../src-tauri/icons/Square30x30Logo.png | Bin 0 -> 1281 bytes .../src-tauri/icons/Square310x310Logo.png | Bin 0 -> 27879 bytes .../src-tauri/icons/Square44x44Logo.png | Bin 0 -> 2171 bytes .../src-tauri/icons/Square71x71Logo.png | Bin 0 -> 4096 bytes .../src-tauri/icons/Square89x89Logo.png | Bin 0 -> 5442 bytes apps/desktop/src-tauri/icons/StoreLogo.png | Bin 0 -> 2520 bytes .../icons/android/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2468 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 12267 bytes .../android/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 2468 bytes .../icons/android/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2369 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 6963 bytes .../android/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2369 bytes .../android/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5859 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 17696 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 5859 bytes .../android/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10495 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 29339 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10495 bytes .../android/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15137 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 42767 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15137 bytes apps/desktop/src-tauri/icons/icon.icns | Bin 0 -> 226180 bytes apps/desktop/src-tauri/icons/icon.ico | Bin 0 -> 30127 bytes apps/desktop/src-tauri/icons/icon.png | Bin 0 -> 10582 bytes .../src-tauri/icons/ios/AppIcon-20x20@1x.png | Bin 0 -> 734 bytes .../icons/ios/AppIcon-20x20@2x-1.png | Bin 0 -> 1862 bytes .../src-tauri/icons/ios/AppIcon-20x20@2x.png | Bin 0 -> 1862 bytes .../src-tauri/icons/ios/AppIcon-20x20@3x.png | Bin 0 -> 3256 bytes .../src-tauri/icons/ios/AppIcon-29x29@1x.png | Bin 0 -> 1197 bytes .../icons/ios/AppIcon-29x29@2x-1.png | Bin 0 -> 3099 bytes .../src-tauri/icons/ios/AppIcon-29x29@2x.png | Bin 0 -> 3099 bytes .../src-tauri/icons/ios/AppIcon-29x29@3x.png | Bin 0 -> 5235 bytes .../src-tauri/icons/ios/AppIcon-40x40@1x.png | Bin 0 -> 1862 bytes .../icons/ios/AppIcon-40x40@2x-1.png | Bin 0 -> 4758 bytes .../src-tauri/icons/ios/AppIcon-40x40@2x.png | Bin 0 -> 4758 bytes .../src-tauri/icons/ios/AppIcon-40x40@3x.png | Bin 0 -> 8140 bytes .../src-tauri/icons/ios/AppIcon-512@2x.png | Bin 0 -> 147888 bytes .../src-tauri/icons/ios/AppIcon-60x60@2x.png | Bin 0 -> 8140 bytes .../src-tauri/icons/ios/AppIcon-60x60@3x.png | Bin 0 -> 13982 bytes .../src-tauri/icons/ios/AppIcon-76x76@1x.png | Bin 0 -> 4456 bytes .../src-tauri/icons/ios/AppIcon-76x76@2x.png | Bin 0 -> 11452 bytes .../icons/ios/AppIcon-83.5x83.5@2x.png | Bin 0 -> 12820 bytes apps/desktop/src-tauri/resources/.gitignore | 4 + .../src-tauri/resources/kandev/.gitignore | 2 + apps/desktop/src-tauri/src/backend.rs | 989 ++++ apps/desktop/src-tauri/src/lib.rs | 1 + apps/desktop/src-tauri/src/main.rs | 50 + apps/desktop/src-tauri/tauri.conf.json | 51 + apps/desktop/src-tauri/windows-sign.ps1 | 72 + apps/desktop/src/main.ts | 33 + apps/desktop/src/styles.css | 116 + apps/desktop/tsconfig.json | 7 + apps/pnpm-lock.yaml | 130 + apps/pnpm-workspace.yaml | 1 + docs/decisions/0026-tauri-desktop-shell.md | 30 + docs/decisions/INDEX.md | 1 + docs/desktop-app.md | 67 + docs/desktop-tauri-signing.md | 36 + docs/features.md | 1 + docs/plans/desktop-tauri-app/plan.md | 259 + ...task-01-backend-desktop-launch-contract.md | 47 + .../task-02-tauri-desktop-scaffold.md | 55 + .../task-03-desktop-runtime-resources.md | 48 + .../task-04-release-desktop-artifacts.md | 47 + .../task-05-signing-and-release-trust.md | 51 + .../task-06-desktop-e2e-smoke.md | 48 + .../task-07-docs-and-release-notes.md | 53 + docs/specs/INDEX.md | 1 + docs/specs/desktop-tauri-app/spec.md | 166 + scripts/release-desktop.test.sh | 109 + scripts/release/prepare-desktop-runtime.sh | 114 + scripts/release/verify-desktop-assets.sh | 68 + scripts/release/verify-desktop-runtime.sh | 112 + 106 files changed, 13504 insertions(+), 32 deletions(-) create mode 100644 apps/backend/internal/backendapp/server_test.go create mode 100644 apps/desktop/AGENTS.md create mode 100644 apps/desktop/e2e/README.md create mode 100644 apps/desktop/e2e/desktop-launch-smoke.mjs create mode 100644 apps/desktop/index.html create mode 100644 apps/desktop/package.json create mode 100644 apps/desktop/src-tauri/.gitignore create mode 100644 apps/desktop/src-tauri/Cargo.lock create mode 100644 apps/desktop/src-tauri/Cargo.toml create mode 100644 apps/desktop/src-tauri/build.rs create mode 100644 apps/desktop/src-tauri/capabilities/default.json create mode 100644 apps/desktop/src-tauri/gen/schemas/acl-manifests.json create mode 100644 apps/desktop/src-tauri/gen/schemas/capabilities.json create mode 100644 apps/desktop/src-tauri/gen/schemas/desktop-schema.json create mode 100644 apps/desktop/src-tauri/gen/schemas/linux-schema.json create mode 100644 apps/desktop/src-tauri/icons/128x128.png create mode 100644 apps/desktop/src-tauri/icons/128x128@2x.png create mode 100644 apps/desktop/src-tauri/icons/32x32.png create mode 100644 apps/desktop/src-tauri/icons/64x64.png create mode 100644 apps/desktop/src-tauri/icons/Square107x107Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square142x142Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square150x150Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square284x284Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square30x30Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square310x310Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square44x44Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square71x71Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square89x89Logo.png create mode 100644 apps/desktop/src-tauri/icons/StoreLogo.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 apps/desktop/src-tauri/icons/icon.icns create mode 100644 apps/desktop/src-tauri/icons/icon.ico create mode 100644 apps/desktop/src-tauri/icons/icon.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-20x20@1x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x-1.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-29x29@1x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-29x29@2x-1.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-29x29@2x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-29x29@3x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-40x40@1x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-40x40@3x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-512@2x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-60x60@3x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-76x76@2x.png create mode 100644 apps/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png create mode 100644 apps/desktop/src-tauri/resources/.gitignore create mode 100644 apps/desktop/src-tauri/resources/kandev/.gitignore create mode 100644 apps/desktop/src-tauri/src/backend.rs create mode 100644 apps/desktop/src-tauri/src/lib.rs create mode 100644 apps/desktop/src-tauri/src/main.rs create mode 100644 apps/desktop/src-tauri/tauri.conf.json create mode 100644 apps/desktop/src-tauri/windows-sign.ps1 create mode 100644 apps/desktop/src/main.ts create mode 100644 apps/desktop/src/styles.css create mode 100644 apps/desktop/tsconfig.json create mode 100644 docs/decisions/0026-tauri-desktop-shell.md create mode 100644 docs/desktop-app.md create mode 100644 docs/desktop-tauri-signing.md create mode 100644 docs/plans/desktop-tauri-app/plan.md create mode 100644 docs/plans/desktop-tauri-app/task-01-backend-desktop-launch-contract.md create mode 100644 docs/plans/desktop-tauri-app/task-02-tauri-desktop-scaffold.md create mode 100644 docs/plans/desktop-tauri-app/task-03-desktop-runtime-resources.md create mode 100644 docs/plans/desktop-tauri-app/task-04-release-desktop-artifacts.md create mode 100644 docs/plans/desktop-tauri-app/task-05-signing-and-release-trust.md create mode 100644 docs/plans/desktop-tauri-app/task-06-desktop-e2e-smoke.md create mode 100644 docs/plans/desktop-tauri-app/task-07-docs-and-release-notes.md create mode 100644 docs/specs/desktop-tauri-app/spec.md create mode 100644 scripts/release-desktop.test.sh create mode 100755 scripts/release/prepare-desktop-runtime.sh create mode 100755 scripts/release/verify-desktop-assets.sh create mode 100755 scripts/release/verify-desktop-runtime.sh diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index fefe606819..dc5fff5cb9 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -5,18 +5,22 @@ on: branches: [main] paths: - "apps/backend/**" + - "apps/desktop/**" - "apps/web/**" - "apps/packages/**" - "apps/pnpm-lock.yaml" + - "apps/pnpm-workspace.yaml" - ".github/workflows/e2e-tests.yml" - "!**/*.md" pull_request: branches: [main] paths: - "apps/backend/**" + - "apps/desktop/**" - "apps/web/**" - "apps/packages/**" - "apps/pnpm-lock.yaml" + - "apps/pnpm-workspace.yaml" - ".github/workflows/e2e-tests.yml" - "!**/*.md" # Manual trigger for verifying CI on draft PRs and ad-hoc reruns. The @@ -50,6 +54,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v6 + with: + persist-credentials: false - name: Mark workspace safe for git run: git config --global --add safe.directory "$GITHUB_WORKSPACE" @@ -133,6 +139,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v6 + with: + persist-credentials: false - name: Mark workspace safe for git run: git config --global --add safe.directory "$GITHUB_WORKSPACE" @@ -223,6 +231,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v6 + with: + persist-credentials: false - name: Verify Docker is available run: docker info @@ -357,9 +367,65 @@ jobs: path: apps/web/e2e/test-results/ retention-days: 7 + desktop-e2e: + name: Desktop E2E Smoke + runs-on: ubuntu-latest + timeout-minutes: 20 + defaults: + run: + shell: bash + + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Set up pnpm + uses: pnpm/action-setup@v5 + with: + version: "9.15.9" + + - name: Set up Node.js + uses: actions/setup-node@v6 + with: + node-version: "24" + cache: pnpm + cache-dependency-path: apps/pnpm-lock.yaml + + - name: Set up Rust + run: rustup toolchain install stable --profile minimal + + - name: Cache Rust build + uses: Swatinem/rust-cache@v2 + with: + workspaces: apps/desktop/src-tauri -> target + key: desktop-e2e + + - name: Install desktop system dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + pkg-config \ + libglib2.0-dev \ + libwebkit2gtk-4.1-dev \ + libgtk-3-dev \ + libayatana-appindicator3-dev \ + librsvg2-dev \ + patchelf \ + xvfb + + - name: Install dependencies + working-directory: apps + run: pnpm install --frozen-lockfile + + - name: Run desktop smoke + working-directory: apps + run: pnpm --filter @kandev/desktop e2e + e2e-report: name: Merge E2E Reports - needs: [e2e, e2e-containers] + needs: [e2e, e2e-containers, desktop-e2e] if: always() runs-on: ubuntu-latest # Pre-baked image bundles Node 24, pnpm 9.15.9, and the Playwright CLI. @@ -374,6 +440,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v6 + with: + persist-credentials: false - name: Mark workspace safe for git run: git config --global --add safe.directory "$GITHUB_WORKSPACE" @@ -413,3 +481,24 @@ jobs: name: playwright-report path: apps/web/playwright-report/ retention-days: 14 + + - name: Verify required E2E jobs passed + if: always() + env: + E2E_RESULT: ${{ needs.e2e.result }} + E2E_CONTAINERS_RESULT: ${{ needs['e2e-containers'].result }} + DESKTOP_E2E_RESULT: ${{ needs['desktop-e2e'].result }} + run: | + set -euo pipefail + if [ "$E2E_RESULT" != "success" ]; then + echo "e2e finished with result: $E2E_RESULT" >&2 + exit 1 + fi + if [ "$E2E_CONTAINERS_RESULT" != "success" ]; then + echo "e2e-containers finished with result: $E2E_CONTAINERS_RESULT" >&2 + exit 1 + fi + if [ "$DESKTOP_E2E_RESULT" != "success" ]; then + echo "desktop-e2e finished with result: $DESKTOP_E2E_RESULT" >&2 + exit 1 + fi diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e3775925ab..1bb480eb07 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,15 +7,16 @@ name: release # 1. prepare — bump version, regen CHANGELOG, open + merge release PR, push tag vX.Y.Z # 2. build-web — build Vite SPA bundle (shared across arches) # 3. build-bundles — assemble native bin/ tarballs for 5 platforms +# 4. build-desktop — package Tauri desktop installers from matching runtime bundles # 5. docker-{amd64,arm64} — native per-arch image builds (no QEMU), consuming -# the prebuilt linux bundles from step 4 +# the prebuilt linux bundles from step 3 # 6. docker-manifest — stitch the two arch digests into the user-facing # multi-arch tags via `buildx imagetools create` # 7. docker-universal-{amd64,arm64} — native universal builds on top of # docker-manifest's per-arch base # 8. docker-universal-manifest — size-gate amd64 staging, then promote both # arches to the user-facing :universal tags -# 9. publish-release — create GH release with .tar.gz + .sha256 assets + auto-generated notes +# 9. publish-release — create GH release with runtime + desktop assets and release notes # 10. publish-npm — publish kandev@X.Y.Z + @kdlbs/runtime-*@X.Y.Z to npmjs # 11. update-homebrew-tap — push updated Formula/kandev.rb to kdlbs/homebrew-kandev # @@ -25,6 +26,9 @@ name: release # # Required secrets: # HOMEBREW_TAP_DEPLOY_KEY — SSH private key for kdlbs/homebrew-kandev deploy key +# APPLE_CERTIFICATE / APPLE_CERTIFICATE_PASSWORD / KEYCHAIN_PASSWORD — macOS Developer ID signing +# APPLE_ID / APPLE_PASSWORD / APPLE_TEAM_ID or APPLE_API_KEY / APPLE_API_ISSUER / APPLE_API_KEY_P8 — macOS notarization +# WINDOWS_CERTIFICATE / WINDOWS_CERTIFICATE_PASSWORD — Windows installer signing on: workflow_dispatch: @@ -42,6 +46,10 @@ on: description: "Dry run (no PR, tag, npm publish, or tap update)" type: boolean default: false + allow_unsigned_desktop: + description: "Allow unsigned macOS/Windows desktop artifacts for internal validation only" + type: boolean + default: false # Default to read-only at the workflow level. Each job opts into the writes # it actually needs. @@ -58,6 +66,7 @@ jobs: outputs: version: ${{ steps.compute.outputs.version }} tag: ${{ steps.compute.outputs.tag }} + ref: ${{ steps.compute.outputs.ref }} steps: - uses: actions/checkout@v6 with: @@ -99,6 +108,8 @@ jobs: id: compute env: BUMP: ${{ inputs.bump }} + ALLOW_UNSIGNED_DESKTOP: ${{ inputs.allow_unsigned_desktop }} + CURRENT_REF: ${{ github.sha }} run: | set -euo pipefail PKG_VERSION="$(node -p "require('./apps/cli/package.json').version")" @@ -148,6 +159,11 @@ jobs: echo "Next tag: $TAG" echo "version=$NEXT" >> "$GITHUB_OUTPUT" echo "tag=$TAG" >> "$GITHUB_OUTPUT" + if [ "$ALLOW_UNSIGNED_DESKTOP" = "true" ]; then + echo "ref=$CURRENT_REF" >> "$GITHUB_OUTPUT" + else + echo "ref=$TAG" >> "$GITHUB_OUTPUT" + fi # Sanity: tag must not already exist if git rev-parse "$TAG" >/dev/null 2>&1; then @@ -160,7 +176,7 @@ jobs: fi - name: Bump version + generate CHANGELOG (in working tree) - if: ${{ !inputs.dry_run }} + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} env: NEXT: ${{ steps.compute.outputs.version }} TAG: ${{ steps.compute.outputs.tag }} @@ -172,11 +188,33 @@ jobs: # rewrites them to the real version in-flight before publishing, # once the matching @kdlbs/runtime-* tarballs exist on npm. (cd apps/cli && npm version --no-git-tag-version "$NEXT") + (cd apps/desktop && npm version --no-git-tag-version "$NEXT") + node <<'NODE' + const fs = require("node:fs"); + const next = process.env.NEXT; + + const tauriConfigPath = "apps/desktop/src-tauri/tauri.conf.json"; + const tauriConfig = JSON.parse(fs.readFileSync(tauriConfigPath, "utf8")); + tauriConfig.version = next; + fs.writeFileSync(tauriConfigPath, `${JSON.stringify(tauriConfig, null, 2)}\n`); + + const cargoTomlPath = "apps/desktop/src-tauri/Cargo.toml"; + const cargoToml = fs.readFileSync(cargoTomlPath, "utf8"); + fs.writeFileSync(cargoTomlPath, cargoToml.replace(/^version = ".*"$/m, `version = "${next}"`)); + + const cargoLockPath = "apps/desktop/src-tauri/Cargo.lock"; + const cargoLock = fs.readFileSync(cargoLockPath, "utf8"); + const packageBlock = /(\[\[package\]\]\nname = "kandev-desktop"\nversion = ")[^"]+(")/; + if (!packageBlock.test(cargoLock)) { + throw new Error("Could not find kandev-desktop package entry in Cargo.lock"); + } + fs.writeFileSync(cargoLockPath, cargoLock.replace(packageBlock, `$1${next}$2`)); + NODE pnpm -C apps install --no-frozen-lockfile git-cliff --tag "$TAG" -o CHANGELOG.md - name: Create release PR + squash-merge + tag - if: ${{ !inputs.dry_run }} + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} NEXT: ${{ steps.compute.outputs.version }} @@ -189,7 +227,7 @@ jobs: MSG="release: $NEXT" git checkout -b "$BRANCH" - git add apps/cli/package.json CHANGELOG.md apps/pnpm-lock.yaml + git add apps/cli/package.json apps/desktop/package.json apps/desktop/src-tauri/Cargo.lock apps/desktop/src-tauri/Cargo.toml apps/desktop/src-tauri/tauri.conf.json CHANGELOG.md apps/pnpm-lock.yaml git commit -m "$MSG" # If a previous run pushed this branch but failed before the merge # landed, the remote branch still exists. Delete it so the push @@ -231,6 +269,17 @@ jobs: } } + - name: Unsigned desktop validation summary + if: ${{ !inputs.dry_run && inputs.allow_unsigned_desktop }} + env: + NEXT: ${{ steps.compute.outputs.version }} + TAG: ${{ steps.compute.outputs.tag }} + REF: ${{ steps.compute.outputs.ref }} + run: | + echo "Unsigned desktop validation for $TAG / $NEXT." + echo "No release PR, tag, GitHub release, public container tags, npm publish, or Homebrew update will be created." + echo "Build jobs will check out $REF." + - name: Dry-run summary if: ${{ inputs.dry_run }} env: @@ -257,7 +306,8 @@ jobs: steps: - uses: actions/checkout@v6 with: - ref: ${{ needs.prepare.outputs.tag }} + ref: ${{ needs.prepare.outputs.ref }} + persist-credentials: false - uses: pnpm/action-setup@v5 with: version: "9.15.9" @@ -287,7 +337,7 @@ jobs: strategy: matrix: include: - - os: ubuntu-latest + - os: ubuntu-22.04 platform: linux-x64 goos: linux goarch: amd64 @@ -316,7 +366,8 @@ jobs: steps: - uses: actions/checkout@v6 with: - ref: ${{ needs.prepare.outputs.tag }} + ref: ${{ needs.prepare.outputs.ref }} + persist-credentials: false - uses: actions/setup-go@v6 with: go-version-file: apps/backend/go.mod @@ -389,6 +440,360 @@ jobs: dist/kandev-${{ matrix.platform }}.tar.gz dist/kandev-${{ matrix.platform }}.tar.gz.sha256 + build-desktop: + name: Build desktop app (${{ matrix.platform }}) + needs: [prepare, build-bundles] + if: ${{ !inputs.dry_run }} + strategy: + matrix: + include: + - platform: macos-arm64 + os: macos-15 + rust_target: aarch64-apple-darwin + tauri_bundles: dmg + - platform: macos-x64 + os: macos-15-intel + rust_target: x86_64-apple-darwin + tauri_bundles: dmg + - platform: linux-x64 + os: ubuntu-22.04 + rust_target: x86_64-unknown-linux-gnu + tauri_bundles: deb,rpm + - platform: linux-arm64 + os: ubuntu-24.04-arm + rust_target: aarch64-unknown-linux-gnu + tauri_bundles: deb,rpm + - platform: windows-x64 + os: windows-latest + rust_target: x86_64-pc-windows-msvc + tauri_bundles: nsis + runs-on: ${{ matrix.os }} + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ needs.prepare.outputs.ref }} + persist-credentials: false + + - uses: pnpm/action-setup@v5 + with: + version: "9.15.9" + + - uses: actions/setup-node@v6 + with: + node-version: "24" + cache: pnpm + cache-dependency-path: apps/pnpm-lock.yaml + + - name: Set up Rust + run: rustup toolchain install stable --profile minimal --target "${{ matrix.rust_target }}" + + - name: Cache Rust build + uses: Swatinem/rust-cache@v2 + with: + workspaces: apps/desktop/src-tauri -> target + key: desktop-${{ matrix.platform }}-${{ matrix.rust_target }} + + - name: Install Linux desktop dependencies + if: startsWith(matrix.platform, 'linux-') + run: | + sudo apt-get update + sudo apt-get install -y \ + pkg-config \ + libglib2.0-dev \ + libwebkit2gtk-4.1-dev \ + libgtk-3-dev \ + libayatana-appindicator3-dev \ + librsvg2-dev \ + patchelf + + - name: Install dependencies + run: pnpm -C apps install --frozen-lockfile + + - uses: actions/download-artifact@v5 + with: + name: bundle-${{ matrix.platform }} + path: dist/desktop-runtime + + - name: Prepare desktop runtime resources + run: | + set -euo pipefail + mkdir -p dist/desktop-runtime-src + tar -xzf "dist/desktop-runtime/kandev-${{ matrix.platform }}.tar.gz" -C dist/desktop-runtime-src + scripts/release/prepare-desktop-runtime.sh \ + --bundle-dir "dist/desktop-runtime-src/kandev" \ + --platform "${{ matrix.platform }}" \ + --output-dir "apps/desktop/src-tauri/resources/kandev" + + - name: Configure macOS signing and notarization + if: startsWith(matrix.platform, 'macos-') + env: + ALLOW_UNSIGNED_DESKTOP: ${{ inputs.allow_unsigned_desktop }} + APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} + APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + APPLE_PROVIDER_SHORT_NAME: ${{ secrets.APPLE_PROVIDER_SHORT_NAME }} + APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }} + APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }} + APPLE_API_KEY_P8: ${{ secrets.APPLE_API_KEY_P8 }} + run: | + set -euo pipefail + + missing=() + for key in APPLE_CERTIFICATE APPLE_CERTIFICATE_PASSWORD KEYCHAIN_PASSWORD; do + if [ -z "${!key:-}" ]; then + missing+=("$key") + fi + done + + apple_id_notarization=0 + if [ -n "${APPLE_ID:-}" ] && [ -n "${APPLE_PASSWORD:-}" ] && [ -n "${APPLE_TEAM_ID:-}" ]; then + apple_id_notarization=1 + fi + + api_key_notarization=0 + if [ -n "${APPLE_API_KEY:-}" ] && [ -n "${APPLE_API_ISSUER:-}" ] && [ -n "${APPLE_API_KEY_P8:-}" ]; then + api_key_notarization=1 + fi + + if [ "$apple_id_notarization" -eq 0 ] && [ "$api_key_notarization" -eq 0 ]; then + missing+=("APPLE_ID/APPLE_PASSWORD/APPLE_TEAM_ID or APPLE_API_KEY/APPLE_API_ISSUER/APPLE_API_KEY_P8") + fi + + if [ "${#missing[@]}" -gt 0 ]; then + if [ "$ALLOW_UNSIGNED_DESKTOP" = "true" ]; then + echo "::warning::Unsigned desktop artifacts are internal validation only; missing macOS signing inputs: ${missing[*]}" + exit 0 + fi + echo "::error::Public macOS desktop releases require signing and notarization inputs: ${missing[*]}" >&2 + exit 1 + fi + + certificate_path="$RUNNER_TEMP/kandev-developer-id.p12" + python3 - <<'PY' + import base64 + import os + from pathlib import Path + + Path(os.environ["RUNNER_TEMP"], "kandev-developer-id.p12").write_bytes( + base64.b64decode(os.environ["APPLE_CERTIFICATE"]) + ) + PY + + security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain + security default-keychain -s build.keychain + security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain + security set-keychain-settings -t 3600 -u build.keychain + security import "$certificate_path" -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain + + cert_info="$(security find-identity -v -p codesigning build.keychain | grep "Developer ID Application" | head -n 1 || true)" + if [ -z "$cert_info" ]; then + cert_info="$(security find-identity -v -p codesigning build.keychain | head -n 1 || true)" + fi + if [ -z "$cert_info" ]; then + echo "::error::No code signing identity found in build.keychain" >&2 + exit 1 + fi + cert_id="$(echo "$cert_info" | awk -F'"' '{print $2}')" + echo "APPLE_SIGNING_IDENTITY=$cert_id" >> "$GITHUB_ENV" + + if [ "$api_key_notarization" -eq 1 ]; then + private_keys_dir="$RUNNER_TEMP/private_keys" + mkdir -p "$private_keys_dir" + printf '%s\n' "$APPLE_API_KEY_P8" > "$private_keys_dir/AuthKey_${APPLE_API_KEY}.p8" + echo "APPLE_API_KEY_PATH=$private_keys_dir/AuthKey_${APPLE_API_KEY}.p8" >> "$GITHUB_ENV" + fi + + - name: Sign macOS desktop runtime binaries + if: startsWith(matrix.platform, 'macos-') && !inputs.allow_unsigned_desktop + run: | + set -euo pipefail + runtime_bin="apps/desktop/src-tauri/resources/kandev/bin" + for binary in kandev agentctl; do + path="$runtime_bin/$binary" + if [ ! -f "$path" ]; then + echo "::error::Missing macOS runtime binary at $path" >&2 + exit 1 + fi + codesign --force --options runtime --timestamp --sign "$APPLE_SIGNING_IDENTITY" "$path" + codesign --verify --strict --verbose=2 "$path" + done + + - name: Sign Windows desktop runtime binaries + if: matrix.platform == 'windows-x64' && !inputs.allow_unsigned_desktop + shell: pwsh + env: + WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }} + WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} + WINDOWS_TIMESTAMP_URL: ${{ secrets.WINDOWS_TIMESTAMP_URL }} + WINDOWS_SIGNTOOL_PATH: ${{ secrets.WINDOWS_SIGNTOOL_PATH }} + run: | + $runtimeBin = Join-Path $env:GITHUB_WORKSPACE "apps/desktop/src-tauri/resources/kandev/bin" + foreach ($binary in @("kandev.exe", "agentctl.exe")) { + $path = Join-Path $runtimeBin $binary + if (!(Test-Path -LiteralPath $path)) { + Write-Error "Missing Windows runtime binary at $path" + exit 1 + } + & "$env:GITHUB_WORKSPACE/apps/desktop/src-tauri/windows-sign.ps1" -Path $path + } + + - name: Build Tauri desktop app + env: + CI: "true" + APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} + APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + APPLE_PROVIDER_SHORT_NAME: ${{ secrets.APPLE_PROVIDER_SHORT_NAME }} + APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }} + APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }} + ALLOW_UNSIGNED_DESKTOP: ${{ inputs.allow_unsigned_desktop }} + WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }} + WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} + WINDOWS_TIMESTAMP_URL: ${{ secrets.WINDOWS_TIMESTAMP_URL }} + WINDOWS_SIGNTOOL_PATH: ${{ secrets.WINDOWS_SIGNTOOL_PATH }} + run: | + set -euo pipefail + pnpm -C apps --filter @kandev/desktop build:vite + cd apps/desktop + pnpm tauri build \ + --features desktop-runtime \ + --target "${{ matrix.rust_target }}" \ + --bundles "${{ matrix.tauri_bundles }}" + + - name: Sign Windows desktop artifacts + if: matrix.platform == 'windows-x64' + shell: pwsh + env: + ALLOW_UNSIGNED_DESKTOP: ${{ inputs.allow_unsigned_desktop }} + WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }} + WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} + WINDOWS_TIMESTAMP_URL: ${{ secrets.WINDOWS_TIMESTAMP_URL }} + WINDOWS_SIGNTOOL_PATH: ${{ secrets.WINDOWS_SIGNTOOL_PATH }} + run: | + $missing = @() + if ([string]::IsNullOrWhiteSpace($env:WINDOWS_CERTIFICATE)) { $missing += "WINDOWS_CERTIFICATE" } + if ([string]::IsNullOrWhiteSpace($env:WINDOWS_CERTIFICATE_PASSWORD)) { $missing += "WINDOWS_CERTIFICATE_PASSWORD" } + + if ($missing.Count -gt 0) { + if ($env:ALLOW_UNSIGNED_DESKTOP -eq "true") { + Write-Warning "Unsigned desktop artifacts are internal validation only; missing Windows signing inputs: $($missing -join ', ')" + exit 0 + } + Write-Error "Public Windows desktop releases require signing inputs: $($missing -join ', ')" + exit 1 + } + + $certificatePath = Join-Path $env:RUNNER_TEMP "kandev-code-signing.pfx" + [IO.File]::WriteAllBytes($certificatePath, [Convert]::FromBase64String($env:WINDOWS_CERTIFICATE)) + + $bundleDir = Join-Path $env:GITHUB_WORKSPACE "apps/desktop/src-tauri/target/${{ matrix.rust_target }}/release/bundle" + if (!(Test-Path $bundleDir)) { + $bundleDir = Join-Path $env:GITHUB_WORKSPACE "apps/desktop/src-tauri/target/release/bundle" + } + if (!(Test-Path $bundleDir)) { + Write-Error "Missing Tauri bundle directory" + exit 1 + } + + $timestampUrl = if ([string]::IsNullOrWhiteSpace($env:WINDOWS_TIMESTAMP_URL)) { "https://timestamp.digicert.com" } else { $env:WINDOWS_TIMESTAMP_URL } + $signTool = if ([string]::IsNullOrWhiteSpace($env:WINDOWS_SIGNTOOL_PATH)) { "signtool" } else { $env:WINDOWS_SIGNTOOL_PATH } + $artifacts = @(Get-ChildItem -Path $bundleDir -Recurse -File -Include *.exe, *.msi) + if ($artifacts.Count -eq 0) { + Write-Error "No Windows installer artifacts found under $bundleDir" + exit 1 + } + + function Invoke-SignTool { + param( + [Parameter(Mandatory = $true)] + [string[]]$Arguments, + [Parameter(Mandatory = $true)] + [string]$Description + ) + + & $signTool @Arguments + if ($LASTEXITCODE -ne 0) { + throw "$Description failed with exit code $LASTEXITCODE" + } + } + + # signtool sign is the default Windows signing mechanism for CI artifacts. + try { + foreach ($artifact in $artifacts) { + $signArguments = @( + "sign", "/fd", "SHA256", "/td", "SHA256", "/tr", $timestampUrl, + "/f", $certificatePath, + "/p", $env:WINDOWS_CERTIFICATE_PASSWORD, + $artifact.FullName + ) + $verifyArguments = @("verify", "/pa", $artifact.FullName) + + Invoke-SignTool ` + -Description "signtool sign $($artifact.Name)" ` + -Arguments $signArguments + Invoke-SignTool ` + -Description "signtool verify $($artifact.Name)" ` + -Arguments $verifyArguments + } + } finally { + if (Test-Path -LiteralPath $certificatePath) { + Remove-Item -LiteralPath $certificatePath -Force -ErrorAction SilentlyContinue + } + } + + - name: Collect desktop artifacts + run: | + set -euo pipefail + out_dir="$GITHUB_WORKSPACE/dist/desktop-artifacts" + mkdir -p "$out_dir" + + bundle_dir="apps/desktop/src-tauri/target/${{ matrix.rust_target }}/release/bundle" + if [ ! -d "$bundle_dir" ]; then + bundle_dir="apps/desktop/src-tauri/target/release/bundle" + fi + if [ ! -d "$bundle_dir" ]; then + echo "Missing Tauri bundle directory" >&2 + exit 1 + fi + + found=0 + while IFS= read -r -d '' artifact; do + base="$(basename "$artifact")" + dest="$out_dir/kandev-desktop-${{ matrix.platform }}-$base" + cp "$artifact" "$dest" + (cd "$out_dir" && shasum -a 256 "$(basename "$dest")" > "$(basename "$dest").sha256") + found=$((found + 1)) + done < <(find "$bundle_dir" -type f \( \ + -name '*.dmg' -o \ + -name '*.deb' -o \ + -name '*.rpm' -o \ + -name '*.msi' -o \ + -name '*.exe' -o \ + -name '*.AppImage' \ + \) -print0) + + if [ "$found" -eq 0 ]; then + echo "No desktop artifacts found under $bundle_dir" >&2 + exit 1 + fi + + scripts/release/verify-desktop-assets.sh "$out_dir" "${{ matrix.platform }}" + ls -lh "$out_dir" + + - uses: actions/upload-artifact@v5 + with: + name: desktop-${{ matrix.platform }} + path: dist/desktop-artifacts/* + # --------------------------------------------------------------------------- # Docker base image — split per arch onto native runners, then stitched into # a multi-arch manifest list. Each arch consumes the matching linux bundle @@ -398,7 +803,7 @@ jobs: docker-amd64: name: Build & push container image (amd64) needs: [prepare, build-bundles] - if: ${{ !inputs.dry_run }} + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} runs-on: ubuntu-latest permissions: contents: read @@ -469,7 +874,7 @@ jobs: docker-arm64: name: Build & push container image (arm64) needs: [prepare, build-bundles] - if: ${{ !inputs.dry_run }} + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} runs-on: ubuntu-24.04-arm permissions: contents: read @@ -528,7 +933,7 @@ jobs: docker-manifest: name: Assemble multi-arch base manifest needs: [prepare, docker-amd64, docker-arm64] - if: ${{ !inputs.dry_run }} + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} runs-on: ubuntu-latest permissions: contents: read @@ -582,7 +987,7 @@ jobs: docker-universal-amd64: name: Build & push universal image (amd64) needs: [prepare, docker-manifest] - if: ${{ !inputs.dry_run }} + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} runs-on: ubuntu-latest permissions: contents: read @@ -634,7 +1039,7 @@ jobs: docker-universal-arm64: name: Build & push universal image (arm64) needs: [prepare, docker-manifest] - if: ${{ !inputs.dry_run }} + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} runs-on: ubuntu-24.04-arm permissions: contents: read @@ -685,7 +1090,7 @@ jobs: # docker-universal-manifest is included in publish-release's `needs` so # its size gate (and any per-arch build failure) blocks the release. needs: [prepare, docker-universal-amd64, docker-universal-arm64] - if: ${{ !inputs.dry_run }} + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} runs-on: ubuntu-latest permissions: contents: read @@ -741,8 +1146,8 @@ jobs: publish-release: name: Publish GitHub release - needs: [prepare, build-bundles, docker-universal-manifest] - if: ${{ !inputs.dry_run }} + needs: [prepare, build-bundles, build-desktop, docker-universal-manifest] + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} runs-on: ubuntu-latest permissions: contents: write # softprops/action-gh-release creates the release @@ -767,6 +1172,12 @@ jobs: path: dist/release-assets merge-multiple: true + - uses: actions/download-artifact@v5 + with: + pattern: desktop-* + path: dist/release-assets + merge-multiple: true + - name: Verify release assets run: | set -euo pipefail @@ -783,6 +1194,7 @@ jobs: exit 1 fi done + scripts/release/verify-desktop-assets.sh dist/release-assets ls -lh dist/release-assets - name: Publish release @@ -794,11 +1206,12 @@ jobs: files: | dist/release-assets/kandev-*.tar.gz dist/release-assets/kandev-*.tar.gz.sha256 + dist/release-assets/kandev-desktop-* publish-npm: name: Publish npm packages needs: [prepare, publish-release] - if: ${{ !inputs.dry_run }} + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} runs-on: ubuntu-latest permissions: id-token: write # Required for OIDC trusted publishing @@ -833,7 +1246,7 @@ jobs: update-homebrew-tap: name: Update Homebrew tap needs: [prepare, publish-release] - if: ${{ !inputs.dry_run }} + if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 diff --git a/AGENTS.md b/AGENTS.md index 39c9b9e87b..5dce07d080 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,6 +8,7 @@ apps/ ├── backend/ # Go backend (orchestrator, lifecycle, agentctl, WS gateway) ├── web/ # Vite/React SPA frontend (Go boot payload + WS + Zustand) +├── desktop/ # Tauri desktop shell around the native runtime ├── cli/ # CLI tool (TypeScript) ├── landing/ # Landing page └── packages/ # Shared packages/types @@ -18,6 +19,7 @@ apps/ - **Package manager**: `pnpm` workspace (run from `apps/`, not repo root) - **Backend**: Go with Make (`make -C apps/backend test|lint|build`) - **Frontend**: Vite/React SPA (`cd apps && pnpm --filter @kandev/web dev|build:vite|lint|typecheck`) +- **Desktop**: Tauri shell (`cd apps && pnpm --filter @kandev/desktop build|e2e`; Rust tests from `apps/desktop/src-tauri`) - **UI**: Shadcn components via `@kandev/ui` - **E2E**: Playwright (`cd apps/web && pnpm e2e`). The `containers` project (gated on `KANDEV_E2E_CONTAINERS=1`, formerly `docker`) covers both the Docker executor and the SSH executor — anything that needs a real Docker daemon on the host lives there. See `apps/web/e2e/README.md`. - **GitHub repo**: `https://github.com/kdlbs/kandev` @@ -37,6 +39,7 @@ Architecture notes and per-area conventions live alongside the code they describ - `apps/backend/internal/agentctl/AGENTS.md` — agentctl HTTP server: route groups, adapter model, ACP protocol. - `apps/backend/internal/agentctl/server/api/AGENTS.md` — reverse-proxy body rewriting (`Accept-Encoding`), iframe-blocking header stripping. - `apps/backend/internal/integrations/AGENTS.md` — adding a new third-party integration (Jira/Linear pattern, both backend and frontend halves). The `/add-integration` skill mirrors this for scaffolding new integrations. +- `apps/desktop/AGENTS.md` — Tauri desktop app: runtime resources, Rust process lifecycle, packaging, signing, and smoke tests. - `apps/web/AGENTS.md` — Vite/React SPA frontend: shadcn imports, Go boot-payload hydration, store slice structure (incl. `office`), WS format, component conventions, TS lint limits. --- @@ -114,4 +117,4 @@ For developing in ephemeral cloud VMs (Cursor Cloud, Codex, GitHub Codespaces, e --- -**Last Updated**: 2026-05-24 +**Last Updated**: 2026-06-23 diff --git a/Makefile b/Makefile index 9d3da9f1bd..969fe96356 100644 --- a/Makefile +++ b/Makefile @@ -388,6 +388,7 @@ test-scripts: @bash scripts/pr-state.test.sh @bash scripts/opencode-code-review.test.sh @python3 scripts/opencode-code-review.test.py + @bash scripts/release-desktop.test.sh .PHONY: test-e2e test-e2e: build-backend build-web diff --git a/README.md b/README.md index 685b0e95b4..b81b0f8aa9 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Manage and run tasks in parallel. Orchestrate agents. Review changes. Ship value Kandev Demo

-[See desktop and mobile screenshots](docs/screenshots.md) +[See screenshots](docs/screenshots.md) ## What @@ -246,7 +246,7 @@ make doctor There are a few similar tools in this space, and new ones appearing everyday. Here's what sets this one apart: -- **Server-first architecture** - Not a desktop app. Runs as a server you can access from any device, including your phone. Start a task away from your computer and check in on it later. +- **Server-first architecture** - The core app runs as a server you can access from any device, including your phone. - **Remote runtimes** - Run agents on remote servers via SSH, Docker hosts, and cloud environments, not just your local machine. - **Multi-provider** - Use Claude Code, Codex, Copilot, Gemini, Amp, Auggie, OpenCode, Cursor, Qwen, Droid, iFlow, Kilocode, Pi, Kimi, Kiro, Qoder, Trae, and Oh My Pi side by side. Not locked to one vendor. - **CLI passthrough and chat** - Interact with agents through structured chat messages or drop into raw CLI mode for full agent TUI capabilities. diff --git a/apps/backend/internal/backendapp/helpers.go b/apps/backend/internal/backendapp/helpers.go index b5397a77c9..daab5b7e30 100644 --- a/apps/backend/internal/backendapp/helpers.go +++ b/apps/backend/internal/backendapp/helpers.go @@ -83,6 +83,11 @@ import ( ws "github.com/kandev/kandev/pkg/websocket" ) +const ( + desktopHealthTokenEnv = "KANDEV_DESKTOP_HEALTH_TOKEN" + desktopHealthTokenHeader = "X-Kandev-Desktop-Health-Token" +) + // buildSessionDataProvider constructs the session data provider function used by the WebSocket hub // to send initial data (git status, context window, available commands) when a client subscribes. func buildSessionDataProvider(taskRepo *sqliterepo.Repository, lifecycleMgr *lifecycle.Manager, log *logger.Logger) func(context.Context, string) ([]*ws.Message, error) { @@ -551,6 +556,9 @@ func registerRoutes(p routeParams) { c.JSON(http.StatusServiceUnavailable, gin.H{"status": "starting", "service": "kandev"}) return } + if token := desktopHealthToken(); token != "" { + c.Header(desktopHealthTokenHeader, token) + } c.JSON(http.StatusOK, gin.H{"status": "ok", "service": "kandev", "mode": "websocket+http"}) }) @@ -614,6 +622,10 @@ func registerRoutes(p routeParams) { } } +func desktopHealthToken() string { + return strings.TrimSpace(os.Getenv(desktopHealthTokenEnv)) +} + func newWebAppHandler(p routeParams) (*webapp.Handler, string, bool) { assets, source, ok := webAssetsFS() if !ok { diff --git a/apps/backend/internal/backendapp/main.go b/apps/backend/internal/backendapp/main.go index 767031cc1d..a869994ce8 100644 --- a/apps/backend/internal/backendapp/main.go +++ b/apps/backend/internal/backendapp/main.go @@ -12,6 +12,7 @@ import ( "os" "os/signal" "path/filepath" + "strings" "sync/atomic" "syscall" "time" @@ -740,21 +741,25 @@ func startGatewayAndServe( // after we bind the socket above; probe the local listener with a short // retry loop — once a single connect succeeds, the kernel queue is up and // any subsequent /health call will land on a wired route. - go waitListenerThenMarkReady(port, log) + go waitListenerThenMarkReady(server.Addr, log) awaitShutdown(server, orchestratorSvc, lifecycleMgr, runCleanups, log) return true } func startHTTPServer(server *http.Server, port int, log *logger.Logger) bool { - ln, err := net.Listen("tcp", fmt.Sprintf(":%d", port)) + addr := strings.TrimSpace(server.Addr) + if addr == "" { + addr = serverListenAddr("", port) + } + ln, err := net.Listen("tcp", addr) if err != nil { log.Error("Server listen error", zap.Error(err)) return false } go func() { - log.Info("WebSocket server listening", zap.Int("port", port)) + log.Info("WebSocket server listening", zap.String("addr", ln.Addr().String()), zap.Int("port", port)) if err := server.Serve(ln); err != nil && err != http.ErrServerClosed { log.Error("Server serve error", zap.Error(err)) } @@ -763,6 +768,26 @@ func startHTTPServer(server *http.Server, port int, log *logger.Logger) bool { return true } +func serverListenAddr(host string, port int) string { + host = strings.TrimSpace(host) + if host == "" { + return fmt.Sprintf(":%d", port) + } + return net.JoinHostPort(host, fmt.Sprint(port)) +} + +func serverProbeAddr(listenAddr string) string { + host, port, err := net.SplitHostPort(listenAddr) + if err != nil { + return listenAddr + } + switch host { + case "", "0.0.0.0", "::": + host = "127.0.0.1" + } + return net.JoinHostPort(host, port) +} + // waitListenerThenMarkReady probes the local HTTP listener until a // connect succeeds, then flips the package-level `ready` flag so the // /health handler stops returning 503. Runs in its own goroutine so @@ -773,8 +798,8 @@ func startHTTPServer(server *http.Server, port int, log *logger.Logger) bool { // of seconds. If the budget expires the flag still flips, so the // backend doesn't permanently advertise "not ready" if probing fails // for some unrelated reason (e.g. an iptables hiccup on a dev box). -func waitListenerThenMarkReady(port int, log *logger.Logger) { - addr := fmt.Sprintf("127.0.0.1:%d", port) +func waitListenerThenMarkReady(listenAddr string, log *logger.Logger) { + addr := serverProbeAddr(listenAddr) deadline := time.Now().Add(30 * time.Second) ticker := time.NewTicker(50 * time.Millisecond) defer ticker.Stop() @@ -784,12 +809,12 @@ func waitListenerThenMarkReady(port int, log *logger.Logger) { _ = conn.Close() // A successful TCP dial proves the listener is bound. ready.Store(true) - log.Info("backend ready", zap.Int("port", port)) + log.Info("backend ready", zap.String("addr", addr)) return } if time.Now().After(deadline) { log.Warn("backend readiness probe never connected; flipping ready anyway", - zap.Int("port", port)) + zap.String("addr", addr)) ready.Store(true) return } @@ -1630,7 +1655,7 @@ func buildHTTPServer( }) return &http.Server{ - Addr: fmt.Sprintf(":%d", port), + Addr: serverListenAddr(cfg.Server.Host, port), Handler: router, ReadTimeout: cfg.Server.ReadTimeoutDuration(), WriteTimeout: cfg.Server.WriteTimeoutDuration(), diff --git a/apps/backend/internal/backendapp/server_test.go b/apps/backend/internal/backendapp/server_test.go new file mode 100644 index 0000000000..ee8b4f1e14 --- /dev/null +++ b/apps/backend/internal/backendapp/server_test.go @@ -0,0 +1,107 @@ +package backendapp + +import ( + "context" + "net" + "net/http" + "testing" + + "github.com/kandev/kandev/internal/common/logger" + "go.uber.org/zap" +) + +func TestStartHTTPServerUsesServerAddr(t *testing.T) { + log, err := logger.NewFromZap(zap.NewNop()) + if err != nil { + t.Fatalf("NewFromZap: %v", err) + } + + blocked := listenOnFreePort(t) + t.Cleanup(func() { + if err := blocked.Close(); err != nil { + t.Errorf("close blocked listener: %v", err) + } + }) + + server := &http.Server{ + Addr: "127.0.0.1:0", + Handler: http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusNoContent) }), + } + defer func() { + _ = server.Shutdown(context.Background()) + }() + + if !startHTTPServer(server, listenerPort(t, blocked), log) { + t.Fatalf("expected server to listen on configured Addr %q", server.Addr) + } +} + +func TestServerListenAddr(t *testing.T) { + tests := []struct { + name string + host string + port int + want string + }{ + {name: "blank host keeps port-only address", host: "", port: 38429, want: ":38429"}, + {name: "wildcard host", host: "0.0.0.0", port: 38429, want: "0.0.0.0:38429"}, + {name: "loopback host", host: "127.0.0.1", port: 38429, want: "127.0.0.1:38429"}, + {name: "ipv6 host", host: "::1", port: 38429, want: "[::1]:38429"}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := serverListenAddr(tt.host, tt.port); got != tt.want { + t.Fatalf("serverListenAddr(%q, %d) = %q, want %q", tt.host, tt.port, got, tt.want) + } + }) + } +} + +func TestDesktopHealthTokenTrimsEnv(t *testing.T) { + t.Setenv(desktopHealthTokenEnv, " token-value ") + + if got := desktopHealthToken(); got != "token-value" { + t.Fatalf("desktopHealthToken() = %q, want token-value", got) + } +} + +func TestServerProbeAddr(t *testing.T) { + tests := []struct { + name string + listenAddr string + want string + }{ + {name: "port-only address probes loopback", listenAddr: ":38429", want: "127.0.0.1:38429"}, + {name: "wildcard ipv4 probes loopback", listenAddr: "0.0.0.0:38429", want: "127.0.0.1:38429"}, + {name: "wildcard ipv6 probes loopback", listenAddr: "[::]:38429", want: "127.0.0.1:38429"}, + {name: "loopback address probes itself", listenAddr: "127.0.0.1:38429", want: "127.0.0.1:38429"}, + {name: "ipv6 loopback probes itself", listenAddr: "[::1]:38429", want: "[::1]:38429"}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := serverProbeAddr(tt.listenAddr); got != tt.want { + t.Fatalf("serverProbeAddr(%q) = %q, want %q", tt.listenAddr, got, tt.want) + } + }) + } +} + +func listenOnFreePort(t *testing.T) net.Listener { + t.Helper() + ln, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("listen on free port: %v", err) + } + return ln +} + +func listenerPort(t *testing.T, ln net.Listener) int { + t.Helper() + tcpAddr, ok := ln.Addr().(*net.TCPAddr) + if !ok { + t.Fatalf("expected TCP listener, got %T", ln.Addr()) + } + return tcpAddr.Port +} diff --git a/apps/backend/internal/common/config/config_test.go b/apps/backend/internal/common/config/config_test.go index c6a2ef73cb..bf38b4884b 100644 --- a/apps/backend/internal/common/config/config_test.go +++ b/apps/backend/internal/common/config/config_test.go @@ -187,6 +187,18 @@ func TestFeatures_OfficeEnabledByEnv(t *testing.T) { } } +func TestServerHostFromEnv(t *testing.T) { + t.Setenv("KANDEV_SERVER_HOST", "127.0.0.1") + + cfg, err := LoadWithPath(t.TempDir()) + if err != nil { + t.Fatalf("LoadWithPath: %v", err) + } + if cfg.Server.Host != "127.0.0.1" { + t.Fatalf("Server.Host = %q, want 127.0.0.1", cfg.Server.Host) + } +} + // TestFeaturesConfig_JSONShape pins the wire format of GET /api/v1/features. // The handler in helpers.go serializes FeaturesConfig directly so new // fields flow through without an extra edit; this test guarantees the diff --git a/apps/cli/README_internal.md b/apps/cli/README_internal.md index 796f338c1b..ad1e8028cd 100644 --- a/apps/cli/README_internal.md +++ b/apps/cli/README_internal.md @@ -47,9 +47,14 @@ kandev/ # npm runtime package (@kdlbs/runtime-{platform}) @kdlbs/runtime-{platform}/ └── bin/{kandev,agentctl,agentctl-linux-amd64} + +# Tauri desktop resource directory +apps/desktop/src-tauri/resources/kandev/ +└── bin/{kandev[.exe],agentctl[.exe],agentctl-linux-amd64} ``` For npm installs, the main `kandev` package provides only a tiny Node bin shim that execs `bin/kandev` from the platform runtime package. +For desktop release builds, `scripts/release/prepare-desktop-runtime.sh` extracts the matching GitHub release bundle into the Tauri resource directory before `tauri build` runs. ## Commands @@ -121,9 +126,9 @@ Releases run entirely in GitHub Actions. From the GHA UI: 4. Optionally tick `dry_run` to validate without publishing. 5. Click **Run workflow**. -The workflow does everything: version bump, CHANGELOG, PR, merge, tag, build, npm publish, Homebrew tap update. See [/.github/workflows/release.yml](../../.github/workflows/release.yml). +The workflow does everything: version bump, CHANGELOG, PR, merge, tag, runtime bundles, desktop artifacts, npm publish, Homebrew tap update. See [/.github/workflows/release.yml](../../.github/workflows/release.yml). -Single SemVer flow: `apps/cli/package.json` version, git tag, npm packages, and Homebrew formula are all bumped to the same `X.Y.Z`. +Single SemVer flow: `apps/cli/package.json` version, git tag, npm packages, Homebrew formula, GitHub runtime tarballs, and desktop artifacts are all bumped to the same `X.Y.Z`. Versioning: diff --git a/apps/cli/src/release-config.test.ts b/apps/cli/src/release-config.test.ts index 3272086e34..dd21ee8e02 100644 --- a/apps/cli/src/release-config.test.ts +++ b/apps/cli/src/release-config.test.ts @@ -181,3 +181,133 @@ describe("release npm publishing", () => { expect(script).toContain("treated as idempotent success"); }); }); + +describe("release desktop artifacts", () => { + const desktopPlatforms = ["macos-arm64", "macos-x64", "linux-x64", "linux-arm64", "windows-x64"]; + + function releaseWorkflow(): string { + return readRepoFile(".github/workflows/release.yml"); + } + + it("builds desktop artifacts for every supported runtime platform", () => { + const workflow = releaseWorkflow(); + + expect(workflow).toMatch(/\n build-desktop:\n/); + expect(workflow).toContain("needs: [prepare, build-bundles]"); + expect(workflow).toContain("scripts/release/prepare-desktop-runtime.sh"); + expect(workflow).toContain('--platform "${{ matrix.platform }}"'); + expect(workflow).toContain( + 'rustup toolchain install stable --profile minimal --target "${{ matrix.rust_target }}"', + ); + expect(workflow).toContain("Swatinem/rust-cache@v2"); + + for (const platform of desktopPlatforms) { + expect(workflow, `release.yml must include desktop platform ${platform}`).toContain( + `platform: ${platform}`, + ); + } + }); + + it("publishes desktop artifacts while leaving npm and Homebrew tied to runtime tarballs", () => { + const workflow = releaseWorkflow(); + const publishNpmScript = readRepoFile("scripts/release/publish-npm.sh"); + const homebrewScript = readRepoFile("scripts/release/update-homebrew-tap.sh"); + + expect(workflow).toContain( + "needs: [prepare, build-bundles, build-desktop, docker-universal-manifest]", + ); + expect(workflow).toContain("pattern: desktop-*"); + expect(workflow).toContain("scripts/release/verify-desktop-assets.sh"); + expect(workflow).toContain("dist/release-assets/kandev-desktop-*"); + expect(workflow).toContain('shasum -a 256 "$(basename "$dest")"'); + + expect(publishNpmScript).toContain('asset="kandev-${platform}.tar.gz"'); + expect(publishNpmScript).not.toContain("kandev-desktop-"); + expect(homebrewScript).toContain('local sha_file="kandev-${platform}.tar.gz.sha256"'); + expect(homebrewScript).not.toContain("kandev-desktop-"); + }); + + it("bumps desktop package and Tauri versions during release preparation", () => { + const workflow = releaseWorkflow(); + + expect(workflow).toContain('(cd apps/desktop && npm version --no-git-tag-version "$NEXT")'); + expect(workflow).toContain("tauriConfig.version = next"); + expect(workflow).toContain('cargoToml.replace(/^version = ".*"$/m, `version = "${next}"`)'); + expect(workflow).toContain('name = "kandev-desktop"'); + expect(workflow).toContain("apps/desktop/src-tauri/tauri.conf.json"); + expect(workflow).toContain("apps/desktop/src-tauri/Cargo.toml"); + expect(workflow).toContain("apps/desktop/src-tauri/Cargo.lock"); + }); + + it("pins linux x64 desktop release builds to Ubuntu 22.04", () => { + const workflow = releaseWorkflow(); + + expect(workflow).toContain(`- os: ubuntu-22.04 + platform: linux-x64 + goos: linux + goarch: amd64`); + expect(workflow).toContain(`- platform: linux-x64 + os: ubuntu-22.04 + rust_target: x86_64-unknown-linux-gnu + tauri_bundles: deb,rpm`); + }); + + it("fails public macOS and Windows desktop builds closed when signing secrets are absent", () => { + const workflow = releaseWorkflow(); + const signingDocs = readRepoFile("docs/desktop-tauri-signing.md"); + const tauriConfig = readRepoFile("apps/desktop/src-tauri/tauri.conf.json"); + const windowsSignScript = readRepoFile("apps/desktop/src-tauri/windows-sign.ps1"); + + expect(workflow).toContain("allow_unsigned_desktop"); + expect(workflow).toContain("Unsigned desktop artifacts are internal validation only"); + expect(workflow).toContain("ref: ${{ needs.prepare.outputs.ref }}"); + expect(workflow).toContain("persist-credentials: false"); + expect(workflow).toContain("Unsigned desktop validation summary"); + expect(workflow).toContain("No release PR, tag, GitHub release, public container tags"); + expect(workflow).toContain("if: ${{ !inputs.dry_run && !inputs.allow_unsigned_desktop }}"); + expect(workflow).toContain("docker-amd64:"); + expect(workflow).toContain("docker-universal-manifest:"); + + for (const key of [ + "APPLE_CERTIFICATE", + "APPLE_CERTIFICATE_PASSWORD", + "KEYCHAIN_PASSWORD", + "APPLE_SIGNING_IDENTITY", + "APPLE_API_KEY_P8", + "APPLE_API_KEY_PATH", + "APPLE_TEAM_ID", + ]) { + expect(workflow, `release.yml must wire ${key}`).toContain(key); + } + + for (const key of ["WINDOWS_CERTIFICATE", "WINDOWS_CERTIFICATE_PASSWORD", "signtool sign"]) { + expect(workflow, `release.yml must wire ${key}`).toContain(key); + } + expect(workflow).toContain("Invoke-SignTool"); + expect(workflow).toContain("$LASTEXITCODE -ne 0"); + expect(workflow).toContain("Sign macOS desktop runtime binaries"); + expect(workflow).toContain("resources/kandev/bin"); + expect(workflow).toContain("for binary in kandev agentctl; do"); + expect(workflow).toContain( + 'codesign --force --options runtime --timestamp --sign "$APPLE_SIGNING_IDENTITY"', + ); + expect(workflow).toContain("codesign --verify --strict"); + expect(workflow).toContain("Sign Windows desktop runtime binaries"); + expect(workflow).toContain('foreach ($binary in @("kandev.exe", "agentctl.exe"))'); + expect(workflow).toContain("Remove-Item -LiteralPath $certificatePath"); + + expect(tauriConfig).toContain('"publisher": "Kandev"'); + expect(tauriConfig).toContain('"timestampUrl"'); + expect(tauriConfig).toContain('"timestampUrl": "https://timestamp.digicert.com"'); + expect(tauriConfig).toContain('"signCommand"'); + expect(tauriConfig).toContain("windows-sign.ps1"); + expect(tauriConfig).not.toContain('"csp": null'); + expect(windowsSignScript).toContain('"https://timestamp.digicert.com"'); + expect(windowsSignScript).toContain("Remove-Item -LiteralPath $certificatePath"); + expect(signingDocs).toContain("Public recommended desktop releases require signing"); + expect(signingDocs).toContain("allow_unsigned_desktop"); + expect(signingDocs).toContain("does not publish a GitHub release"); + expect(signingDocs).toContain("public container tags"); + expect(signingDocs).toContain("Ubuntu 22.04"); + }); +}); diff --git a/apps/desktop/AGENTS.md b/apps/desktop/AGENTS.md new file mode 100644 index 0000000000..595207e3c2 --- /dev/null +++ b/apps/desktop/AGENTS.md @@ -0,0 +1,35 @@ +# Desktop App Guidance + +`apps/desktop` is the Tauri v2 shell for Kandev. It should stay a thin desktop wrapper over the existing native runtime and Go-served SPA. + +## Commands + +Run from `apps/` unless noted: + +- `pnpm --filter @kandev/desktop build:vite` builds the startup surface. +- `pnpm --filter @kandev/desktop build` builds the Linux desktop bundle locally. +- `pnpm --filter @kandev/desktop e2e` builds the app and runs the Linux smoke harness under Xvfb when needed. +- From `apps/desktop/src-tauri`, `cargo test` runs Rust unit tests without requiring the Tauri runtime feature by default. + +## Runtime Resources + +Release builds prepare `src-tauri/resources/kandev/` with: + +```text +bin/kandev[.exe] +bin/agentctl[.exe] +bin/agentctl-linux-amd64 +``` + +Use `scripts/release/prepare-desktop-runtime.sh` and `scripts/release/verify-desktop-runtime.sh`; do not commit runtime binaries. The tracked `.gitignore` files only keep the resource directory present for Tauri config validation. + +## Architecture + +- Frontend code in `src/` is only the startup/error surface. The real product UI is still served by the Go backend after `/health` succeeds. +- Rust code owns backend process spawning and cleanup. Do not expose broad shell or filesystem permissions to frontend JavaScript. +- Desktop launches force `KANDEV_SERVER_HOST=127.0.0.1`, prefer a stable desktop port with random fallback, and pass `KANDEV_BUNDLE_DIR` to the native launcher. +- `KANDEV_DESKTOP_RUNTIME_DIR` is a test/development override for runtime resources. + +## Release + +Desktop artifacts are built in `.github/workflows/release.yml` after the platform runtime bundles. Public macOS and Windows artifacts require signing unless `allow_unsigned_desktop=true` is explicitly selected for internal validation. diff --git a/apps/desktop/e2e/README.md b/apps/desktop/e2e/README.md new file mode 100644 index 0000000000..382eb1c819 --- /dev/null +++ b/apps/desktop/e2e/README.md @@ -0,0 +1,5 @@ +# Desktop E2E + +`pnpm --filter @kandev/desktop e2e` builds the Linux desktop bundle, launches the compiled Tauri app under `xvfb-run` when no display is available, and points it at a fake native runtime. + +The fake runtime exposes `/health` and `/`. The smoke test passes only after the WebView requests `/`, which proves the startup screen transitioned to the backend UI after health succeeded. diff --git a/apps/desktop/e2e/desktop-launch-smoke.mjs b/apps/desktop/e2e/desktop-launch-smoke.mjs new file mode 100644 index 0000000000..3bdcbe5882 --- /dev/null +++ b/apps/desktop/e2e/desktop-launch-smoke.mjs @@ -0,0 +1,186 @@ +#!/usr/bin/env node +import { createServer } from "node:http"; +import { chmod, mkdir, mkdtemp, writeFile } from "node:fs/promises"; +import { existsSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { delimiter, dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawn } from "node:child_process"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const desktopRoot = resolve(__dirname, ".."); +const repoRoot = resolve(desktopRoot, "../.."); + +if (process.argv[2] === "--fake-runtime") { + await runFakeRuntime(process.argv[3], process.argv.slice(4)); +} else { + await runSmoke(); +} + +async function runSmoke() { + const appBinary = resolve(desktopRoot, "src-tauri/target/release/kandev-desktop"); + if (!existsSync(appBinary)) { + throw new Error(`Missing desktop binary at ${appBinary}; run pnpm build first`); + } + + const tmp = await mkdtemp(join(tmpdir(), "kandev-desktop-e2e-")); + const runtimeDir = join(tmp, "runtime"); + const stateDir = join(tmp, "state"); + await mkdir(join(runtimeDir, "bin"), { recursive: true }); + await mkdir(stateDir, { recursive: true }); + + await writeFakeRuntime(runtimeDir, stateDir); + + const launchedViaXvfb = !process.env.DISPLAY && commandExists("xvfb-run"); + const command = launchedViaXvfb ? "xvfb-run" : appBinary; + const args = launchedViaXvfb ? ["-a", appBinary] : []; + const child = spawn(command, args, { + cwd: repoRoot, + detached: process.platform !== "win32", + env: { + ...process.env, + KANDEV_DESKTOP_RUNTIME_DIR: runtimeDir, + WEBKIT_DISABLE_COMPOSITING_MODE: "1", + NO_AT_BRIDGE: "1", + }, + stdio: ["ignore", "pipe", "pipe"], + }); + + let stdout = ""; + let stderr = ""; + child.stdout?.on("data", (chunk) => { + stdout += chunk; + }); + child.stderr?.on("data", (chunk) => { + stderr += chunk; + }); + + const failIfExited = () => { + if (child.exitCode !== null) { + throw new Error(`desktop app exited early with code ${child.exitCode}\n${stdout}\n${stderr}`); + } + }; + + try { + await waitForFile(join(stateDir, "health-requested"), 45_000, failIfExited); + await waitForFile(join(stateDir, "root-requested"), 45_000, failIfExited); + } finally { + await stopProcess(child); + } + + console.log("Desktop smoke passed: WebView requested / after backend health succeeded."); +} + +async function writeFakeRuntime(runtimeDir, stateDir) { + const fakeRuntime = join(runtimeDir, "bin", process.platform === "win32" ? "kandev.cmd" : "kandev"); + const agentctl = join(runtimeDir, "bin", process.platform === "win32" ? "agentctl.cmd" : "agentctl"); + const linuxHelper = join(runtimeDir, "bin", "agentctl-linux-amd64"); + + if (process.platform === "win32") { + await writeFile( + fakeRuntime, + `@echo off\r\nnode "${fileURLToPath(import.meta.url)}" --fake-runtime "${stateDir}" %*\r\n`, + ); + await writeFile(agentctl, "@echo off\r\necho fake agentctl\r\n"); + } else { + await writeFile( + fakeRuntime, + `#!/usr/bin/env bash\nexec node "${fileURLToPath(import.meta.url)}" --fake-runtime "${stateDir}" "$@"\n`, + ); + await writeFile(agentctl, "#!/usr/bin/env bash\necho fake agentctl\n"); + await chmod(fakeRuntime, 0o755); + await chmod(agentctl, 0o755); + } + + await writeFile(linuxHelper, "#!/usr/bin/env bash\necho fake agentctl linux helper\n"); + if (process.platform !== "win32") { + await chmod(linuxHelper, 0o755); + } +} + +async function runFakeRuntime(stateDir, args) { + const portIndex = args.indexOf("--port"); + const port = portIndex >= 0 ? Number(args[portIndex + 1]) : 0; + const isHeadless = args.includes("--headless"); + + if (!isHeadless || !Number.isInteger(port) || port <= 0) { + await writeFile(join(stateDir, "invalid-args"), JSON.stringify(args)); + process.exit(2); + } + + await writeFile(join(stateDir, "launched"), JSON.stringify({ args, port })); + + const server = createServer(async (req, res) => { + if (req.url === "/health") { + await writeFile(join(stateDir, "health-requested"), "1"); + const headers = { "content-type": "application/json" }; + if (process.env.KANDEV_DESKTOP_HEALTH_TOKEN) { + headers["x-kandev-desktop-health-token"] = process.env.KANDEV_DESKTOP_HEALTH_TOKEN; + } + res.writeHead(200, headers); + res.end('{"status":"ok"}'); + return; + } + + if (req.url === "/") { + await writeFile(join(stateDir, "root-requested"), "1"); + res.writeHead(200, { "content-type": "text/html" }); + res.end("Kandev
Kandev desktop smoke
"); + return; + } + + res.writeHead(404); + res.end("not found"); + }); + + await new Promise((resolveListen) => server.listen(port, "127.0.0.1", resolveListen)); + + const stop = async () => { + await writeFile(join(stateDir, "terminated"), "1"); + server.close(() => process.exit(0)); + }; + process.on("SIGTERM", stop); + process.on("SIGINT", stop); +} + +async function waitForFile(path, timeoutMs, tick) { + const deadline = Date.now() + timeoutMs; + while (Date.now() < deadline) { + tick?.(); + if (existsSync(path)) { + return; + } + await new Promise((resolveWait) => setTimeout(resolveWait, 250)); + } + throw new Error(`Timed out waiting for ${path}`); +} + +async function stopProcess(child) { + if (child.exitCode !== null) { + return; + } + if (process.platform === "win32") { + child.kill(); + } else { + process.kill(-child.pid, "SIGTERM"); + } + await Promise.race([ + new Promise((resolveExit) => child.once("exit", resolveExit)), + new Promise((resolveTimeout) => setTimeout(resolveTimeout, 5_000)), + ]); + if (child.exitCode === null) { + if (process.platform === "win32") { + child.kill("SIGKILL"); + } else { + process.kill(-child.pid, "SIGKILL"); + } + } +} + +function commandExists(command) { + const path = process.env.PATH ?? ""; + return path + .split(delimiter) + .filter(Boolean) + .some((entry) => existsSync(join(entry, command))); +} diff --git a/apps/desktop/index.html b/apps/desktop/index.html new file mode 100644 index 0000000000..3c21d90210 --- /dev/null +++ b/apps/desktop/index.html @@ -0,0 +1,21 @@ + + + + + + Kandev + + + +
+
+ +
+

Kandev

+

Starting backend

+

Preparing the local runtime and opening your workspace.

+
+
+
+ + diff --git a/apps/desktop/package.json b/apps/desktop/package.json new file mode 100644 index 0000000000..7f0a6733a9 --- /dev/null +++ b/apps/desktop/package.json @@ -0,0 +1,19 @@ +{ + "name": "@kandev/desktop", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "tauri dev --features desktop-runtime", + "dev:vite": "vite --host 127.0.0.1 --port 1420", + "build": "tauri build --features desktop-runtime --bundles deb,rpm", + "build:vite": "vite build", + "e2e": "pnpm build && node e2e/desktop-launch-smoke.mjs", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@tauri-apps/cli": "2.8.4", + "typescript": "^5", + "vite": "^8.0.16" + } +} diff --git a/apps/desktop/src-tauri/.gitignore b/apps/desktop/src-tauri/.gitignore new file mode 100644 index 0000000000..b83d22266a --- /dev/null +++ b/apps/desktop/src-tauri/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/apps/desktop/src-tauri/Cargo.lock b/apps/desktop/src-tauri/Cargo.lock new file mode 100644 index 0000000000..fcdafe6778 --- /dev/null +++ b/apps/desktop/src-tauri/Cargo.lock @@ -0,0 +1,5147 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +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_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[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.118", +] + +[[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.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[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 = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[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 = "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.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +dependencies = [ + "serde_core", +] + +[[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.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" +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.13.0", + "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.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce8d3bd5823c7504d3f579f13e7b2f3da252fcb938c594d5680ee508bf846f" +dependencies = [ + "serde_core", +] + +[[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.18", +] + +[[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.12+spec-1.1.0", +] + +[[package]] +name = "cc" +version = "1.2.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" +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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +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 = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +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.13.0", + "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.13.0", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[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.29.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "matches", + "phf 0.10.1", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[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 0.13.1", + "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.118", +] + +[[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.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.118", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.118", +] + +[[package]] +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derive_more" +version = "0.99.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.118", +] + +[[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.118", +] + +[[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 = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[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", + "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.13.0", + "block2", + "libc", + "objc2", +] + +[[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.118", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser 0.36.0", + "foldhash", + "html5ever 0.38.0", + "precomputed-hash", + "selectors 0.36.1", + "tendril 0.5.0", +] + +[[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31a88c8d26de40ed18fe748c547845aa39de1db3afd958f8cb91579f3644bcb" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.2+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[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.118", +] + +[[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.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "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.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[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 = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-executor" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[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.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[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.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[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", + "libc", + "r-efi 6.0.0", +] + +[[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.13.0", + "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.118", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[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.118", +] + +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" +dependencies = [ + "log", + "mac", + "markup5ever 0.14.1", + "match_token", +] + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever 0.38.0", +] + +[[package]] +name = "http" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +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.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[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", + "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", +] + +[[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.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf4f5d937a025381f5ab13624b1c5f51414bfe5c9885663226eae8d6d39560" + +[[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[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.118", +] + +[[package]] +name = "js-sys" +version = "0.3.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31" +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 = "kandev-desktop" +version = "0.1.0" +dependencies = [ + "darling", + "getrandom 0.3.4", + "idna_adapter", + "libc", + "plist", + "serde_json", + "serde_with", + "tauri", + "tauri-build", + "tauri-plugin-single-instance", + "tauri-runtime", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.13.0", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.8-speedreader" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" +dependencies = [ + "cssparser 0.29.6", + "html5ever 0.29.1", + "indexmap 2.14.0", + "selectors 0.24.0", +] + +[[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.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[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.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" +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 = "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.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "markup5ever" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" +dependencies = [ + "log", + "phf 0.11.3", + "phf_codegen 0.11.3", + "string_cache 0.8.9", + "string_cache_codegen 0.5.4", + "tendril 0.4.3", +] + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril 0.5.0", + "web_atoms", +] + +[[package]] +name = "match_token" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "memchr" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" + +[[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 = "mio" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.61.2", +] + +[[package]] +name = "muda" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c9fec5a4e89860383d778d10563a605838f8f0b2f9303868937e5ff32e86177" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 2.0.18", + "windows-sys 0.60.2", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.13.0", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[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 = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[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.5.0", + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[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.13.0", + "block2", + "libc", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-text", + "objc2-core-video", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.13.0", + "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 = [ + "bitflags 2.13.0", + "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.13.0", + "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.13.0", + "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-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.13.0", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-core-video" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" +dependencies = [ + "bitflags 2.13.0", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-io-surface", +] + +[[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.13.0", + "block2", + "libc", + "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.13.0", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-javascript-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586" +dependencies = [ + "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.13.0", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-security" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" +dependencies = [ + "bitflags 2.13.0", + "objc2", + "objc2-core-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.13.0", + "objc2", + "objc2-core-foundation", + "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.13.0", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-javascript-core", + "objc2-security", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[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 = "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.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_shared 0.8.0", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros 0.13.1", + "phf_shared 0.13.1", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.6", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.6", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.3", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher 1.0.3", +] + +[[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.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "plist" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac26e981c03a6e53e0aee43c113e3202f5581d5360dae7bd2c70e800dd0451d" +dependencies = [ + "base64 0.22.1", + "indexmap 2.14.0", + "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", +] + +[[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 = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[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.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.12+spec-1.1.0", +] + +[[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-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +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.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[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.13.0", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.18", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[package]] +name = "regex" +version = "1.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +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.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64 0.22.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", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.13.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[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" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[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.118", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" +dependencies = [ + "bitflags 1.3.2", + "cssparser 0.29.6", + "derive_more 0.99.20", + "fxhash", + "log", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc 0.2.0", + "smallvec", +] + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.13.0", + "cssparser 0.36.0", + "derive_more 2.1.1", + "log", + "new_debug_unreachable", + "phf 0.13.1", + "phf_codegen 0.13.1", + "precomputed-hash", + "rustc-hash", + "servo_arc 0.4.3", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[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.118", +] + +[[package]] +name = "serde_json" +version = "1.0.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[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.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[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.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.0", + "schemars 0.9.0", + "schemars 1.2.1", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[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.118", +] + +[[package]] +name = "servo_arc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[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", + "digest", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[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.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "socket2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +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.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[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 0.13.1", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +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", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +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 = "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.34.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9103edf55f2da3c82aea4c7fab7c4241032bfeea0e71fa557d98e00e7ce7cc20" +dependencies = [ + "bitflags 2.13.0", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "parking_lot", + "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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[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.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d545ccf7b60dcd44e07c6fb5aeb09140966f0aabd5d2aa14a6821df7bc99348" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.18", + "tokio", + "tray-icon", + "url", + "urlpattern", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c432ccc9ff661803dab74c6cd78de11026a578a9307610bbc39d3c55be7943f" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "toml 0.9.12+spec-1.1.0", + "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", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.118", + "tauri-utils", + "thiserror 2.0.18", + "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.118", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin-single-instance" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47c387d4d96690131dc46d1d2827df5c222b896a2bfeb15a16267229a55c50b5" +dependencies = [ + "serde", + "serde_json", + "tauri", + "thiserror 2.0.18", + "tracing", + "windows-sys 0.59.0", + "zbus", +] + +[[package]] +name = "tauri-runtime" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3367f0b47df90e9195cd9f04a56b0055a2cba45aa11923c6c253d748778176fc" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d91d29ca680c545364cf75ba2f2e3c7ea2ab6376bfa3be26b56fa2463a5b5e" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "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", + "html5ever 0.29.1", + "http", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.13.1", + "plist", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" +dependencies = [ + "dunce", + "embed-resource", + "toml 1.1.2+spec-1.1.0", +] + +[[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.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "tendril" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24" +dependencies = [ + "new_debug_unreachable", + "utf-8", +] + +[[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.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl 2.0.18", +] + +[[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.118", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[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.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.3", +] + +[[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.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.14.0", + "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.0", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.3", +] + +[[package]] +name = "toml_parser" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +dependencies = [ + "winnow 1.0.3", +] + +[[package]] +name = "toml_writer" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" + +[[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.13.0", + "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.118", +] + +[[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.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 2.0.18", + "windows-sys 0.60.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.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[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 = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[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.23.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "serde_core", + "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.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[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.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.118", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "075474b12bcb3d2e3d4546580e9de478eeeead668a1761e2a8860c836b7ef297" +dependencies = [ + "phf 0.13.1", + "phf_codegen 0.13.1", + "string_cache 0.9.0", + "string_cache_codegen 0.6.1", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" +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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" +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 = "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.118", +] + +[[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.18", + "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.118", +] + +[[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.118", +] + +[[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.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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +dependencies = [ + "memchr", +] + +[[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 = "wry" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dpi", + "dunce", + "gdkx11", + "gtk", + "html5ever 0.29.1", + "http", + "javascriptcore-rs", + "jni", + "kuchikiki", + "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.18", + "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 = "zbus" +version = "5.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfeff997a0aaa3eb20c4652baf788d2dfa6d2839a0ead0b3ff69ce2f9c4bdd1" +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 0.7.15", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bbd5a90dbe8feee5b13def448427ae314ccd26a49cac47905cafefb9ff846f1" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.118", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" +dependencies = [ + "serde", + "winnow 0.7.15", + "zvariant", +] + +[[package]] +name = "zerocopy" +version = "0.8.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + +[[package]] +name = "zvariant" +version = "5.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b64ef4f40c7951337ddc7023dd03528a57a3ce3408ee9da5e948bd29b232c4" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow 0.7.15", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "484d5d975eb7afb52cc6b929c13d3719a20ad650fea4120e6310de3fc55e415c" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.118", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 2.0.118", + "winnow 0.7.15", +] diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml new file mode 100644 index 0000000000..f6e09e573b --- /dev/null +++ b/apps/desktop/src-tauri/Cargo.toml @@ -0,0 +1,38 @@ +[package] +name = "kandev-desktop" +version = "0.1.0" +description = "Kandev desktop shell" +authors = ["Kandev"] +license = "AGPL-3.0-only" +repository = "https://github.com/kdlbs/kandev" +edition = "2021" +rust-version = "1.85" + +[[bin]] +name = "kandev-desktop" +path = "src/main.rs" +required-features = ["desktop-runtime"] +test = false + +[features] +default = [] +desktop-runtime = [ + "dep:tauri", + "dep:tauri-plugin-single-instance", + "dep:tauri-runtime", +] + +[build-dependencies] +tauri-build = { version = "=2.4.1", features = [] } + +[dependencies] +darling = "=0.21.3" +getrandom = "0.3" +idna_adapter = "=1.0.0" +libc = "0.2" +plist = "=1.7.1" +serde_json = "1" +serde_with = "=3.15.0" +tauri = { version = "=2.8.4", features = [], optional = true } +tauri-runtime = { version = "=2.9.0", optional = true } +tauri-plugin-single-instance = { version = "=2.2.1", optional = true } diff --git a/apps/desktop/src-tauri/build.rs b/apps/desktop/src-tauri/build.rs new file mode 100644 index 0000000000..988efc4453 --- /dev/null +++ b/apps/desktop/src-tauri/build.rs @@ -0,0 +1,5 @@ +fn main() { + if std::env::var_os("CARGO_FEATURE_DESKTOP_RUNTIME").is_some() { + tauri_build::build(); + } +} diff --git a/apps/desktop/src-tauri/capabilities/default.json b/apps/desktop/src-tauri/capabilities/default.json new file mode 100644 index 0000000000..6e3d2e8c66 --- /dev/null +++ b/apps/desktop/src-tauri/capabilities/default.json @@ -0,0 +1,7 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Main Kandev desktop window permissions", + "windows": ["main"], + "permissions": ["core:app:default", "core:event:default", "core:window:default"] +} diff --git a/apps/desktop/src-tauri/gen/schemas/acl-manifests.json b/apps/desktop/src-tauri/gen/schemas/acl-manifests.json new file mode 100644 index 0000000000..3c237c9aef --- /dev/null +++ b/apps/desktop/src-tauri/gen/schemas/acl-manifests.json @@ -0,0 +1 @@ +{"core":{"default_permission":{"identifier":"default","description":"Default core plugins set.","permissions":["core:path:default","core:event:default","core:window:default","core:webview:default","core:app:default","core:image:default","core:resources:default","core:menu:default","core:tray:default"]},"permissions":{},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version","allow-identifier","allow-bundle-type"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-bundle-type":{"identifier":"allow-bundle-type","description":"Enables the bundle_type command without any pre-configured scope.","commands":{"allow":["bundle_type"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-fetch-data-store-identifiers":{"identifier":"allow-fetch-data-store-identifiers","description":"Enables the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":["fetch_data_store_identifiers"],"deny":[]}},"allow-identifier":{"identifier":"allow-identifier","description":"Enables the identifier command without any pre-configured scope.","commands":{"allow":["identifier"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-remove-data-store":{"identifier":"allow-remove-data-store","description":"Enables the remove_data_store command without any pre-configured scope.","commands":{"allow":["remove_data_store"],"deny":[]}},"allow-set-app-theme":{"identifier":"allow-set-app-theme","description":"Enables the set_app_theme command without any pre-configured scope.","commands":{"allow":["set_app_theme"],"deny":[]}},"allow-set-dock-visibility":{"identifier":"allow-set-dock-visibility","description":"Enables the set_dock_visibility command without any pre-configured scope.","commands":{"allow":["set_dock_visibility"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-bundle-type":{"identifier":"deny-bundle-type","description":"Denies the bundle_type command without any pre-configured scope.","commands":{"allow":[],"deny":["bundle_type"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-fetch-data-store-identifiers":{"identifier":"deny-fetch-data-store-identifiers","description":"Denies the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_data_store_identifiers"]}},"deny-identifier":{"identifier":"deny-identifier","description":"Denies the identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["identifier"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-remove-data-store":{"identifier":"deny-remove-data-store","description":"Denies the remove_data_store command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_data_store"]}},"deny-set-app-theme":{"identifier":"deny-set-app-theme","description":"Denies the set_app_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_app_theme"]}},"deny-set-dock-visibility":{"identifier":"deny-set-dock-visibility","description":"Denies the set_dock_visibility command without any pre-configured scope.","commands":{"allow":[],"deny":["set_dock_visibility"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-clear-all-browsing-data":{"identifier":"allow-clear-all-browsing-data","description":"Enables the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":["clear_all_browsing_data"],"deny":[]}},"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-auto-resize":{"identifier":"allow-set-webview-auto-resize","description":"Enables the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":["set_webview_auto_resize"],"deny":[]}},"allow-set-webview-background-color":{"identifier":"allow-set-webview-background-color","description":"Enables the set_webview_background_color command without any pre-configured scope.","commands":{"allow":["set_webview_background_color"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-hide":{"identifier":"allow-webview-hide","description":"Enables the webview_hide command without any pre-configured scope.","commands":{"allow":["webview_hide"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-show":{"identifier":"allow-webview-show","description":"Enables the webview_show command without any pre-configured scope.","commands":{"allow":["webview_show"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-clear-all-browsing-data":{"identifier":"deny-clear-all-browsing-data","description":"Denies the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":[],"deny":["clear_all_browsing_data"]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-auto-resize":{"identifier":"deny-set-webview-auto-resize","description":"Denies the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_auto_resize"]}},"deny-set-webview-background-color":{"identifier":"deny-set-webview-background-color","description":"Denies the set_webview_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_background_color"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-hide":{"identifier":"deny-webview-hide","description":"Denies the webview_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_hide"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-show":{"identifier":"deny-webview-show","description":"Denies the webview_show command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_show"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-is-enabled","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-is-always-on-top","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-always-on-top":{"identifier":"allow-is-always-on-top","description":"Enables the is_always_on_top command without any pre-configured scope.","commands":{"allow":["is_always_on_top"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-background-color":{"identifier":"allow-set-background-color","description":"Enables the set_background_color command without any pre-configured scope.","commands":{"allow":["set_background_color"],"deny":[]}},"allow-set-badge-count":{"identifier":"allow-set-badge-count","description":"Enables the set_badge_count command without any pre-configured scope.","commands":{"allow":["set_badge_count"],"deny":[]}},"allow-set-badge-label":{"identifier":"allow-set-badge-label","description":"Enables the set_badge_label command without any pre-configured scope.","commands":{"allow":["set_badge_label"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-focusable":{"identifier":"allow-set-focusable","description":"Enables the set_focusable command without any pre-configured scope.","commands":{"allow":["set_focusable"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-overlay-icon":{"identifier":"allow-set-overlay-icon","description":"Enables the set_overlay_icon command without any pre-configured scope.","commands":{"allow":["set_overlay_icon"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-simple-fullscreen":{"identifier":"allow-set-simple-fullscreen","description":"Enables the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":["set_simple_fullscreen"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-theme":{"identifier":"allow-set-theme","description":"Enables the set_theme command without any pre-configured scope.","commands":{"allow":["set_theme"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-always-on-top":{"identifier":"deny-is-always-on-top","description":"Denies the is_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["is_always_on_top"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-background-color":{"identifier":"deny-set-background-color","description":"Denies the set_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_background_color"]}},"deny-set-badge-count":{"identifier":"deny-set-badge-count","description":"Denies the set_badge_count command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_count"]}},"deny-set-badge-label":{"identifier":"deny-set-badge-label","description":"Denies the set_badge_label command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_label"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-focusable":{"identifier":"deny-set-focusable","description":"Denies the set_focusable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focusable"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-overlay-icon":{"identifier":"deny-set-overlay-icon","description":"Denies the set_overlay_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_overlay_icon"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-simple-fullscreen":{"identifier":"deny-set-simple-fullscreen","description":"Denies the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_simple_fullscreen"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-theme":{"identifier":"deny-set-theme","description":"Denies the set_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_theme"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/apps/desktop/src-tauri/gen/schemas/capabilities.json b/apps/desktop/src-tauri/gen/schemas/capabilities.json new file mode 100644 index 0000000000..27e3b53b03 --- /dev/null +++ b/apps/desktop/src-tauri/gen/schemas/capabilities.json @@ -0,0 +1 @@ +{"default":{"identifier":"default","description":"Main Kandev desktop window permissions","local":true,"windows":["main"],"permissions":["core:app:default","core:event:default","core:window:default"]}} \ No newline at end of file diff --git a/apps/desktop/src-tauri/gen/schemas/desktop-schema.json b/apps/desktop/src-tauri/gen/schemas/desktop-schema.json new file mode 100644 index 0000000000..b01bfa931d --- /dev/null +++ b/apps/desktop/src-tauri/gen/schemas/desktop-schema.json @@ -0,0 +1,2220 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", + "type": "string" + }, + "description": { + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + }, + "uniqueItems": true + }, + "platforms": { + "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "allOf": [ + { + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ], + "required": [ + "identifier" + ] + } + ] + }, + "Identifier": { + "description": "Permission identifier", + "oneOf": [ + { + "description": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`", + "type": "string", + "const": "core:default", + "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`", + "type": "string", + "const": "core:app:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`" + }, + { + "description": "Enables the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-hide", + "markdownDescription": "Enables the app_hide command without any pre-configured scope." + }, + { + "description": "Enables the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-show", + "markdownDescription": "Enables the app_show command without any pre-configured scope." + }, + { + "description": "Enables the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-bundle-type", + "markdownDescription": "Enables the bundle_type command without any pre-configured scope." + }, + { + "description": "Enables the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-default-window-icon", + "markdownDescription": "Enables the default_window_icon command without any pre-configured scope." + }, + { + "description": "Enables the fetch_data_store_identifiers command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-fetch-data-store-identifiers", + "markdownDescription": "Enables the fetch_data_store_identifiers command without any pre-configured scope." + }, + { + "description": "Enables the identifier command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-identifier", + "markdownDescription": "Enables the identifier command without any pre-configured scope." + }, + { + "description": "Enables the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-name", + "markdownDescription": "Enables the name command without any pre-configured scope." + }, + { + "description": "Enables the remove_data_store command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-remove-data-store", + "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." + }, + { + "description": "Enables the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-app-theme", + "markdownDescription": "Enables the set_app_theme command without any pre-configured scope." + }, + { + "description": "Enables the set_dock_visibility command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-dock-visibility", + "markdownDescription": "Enables the set_dock_visibility command without any pre-configured scope." + }, + { + "description": "Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-tauri-version", + "markdownDescription": "Enables the tauri_version command without any pre-configured scope." + }, + { + "description": "Enables the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-version", + "markdownDescription": "Enables the version command without any pre-configured scope." + }, + { + "description": "Denies the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-hide", + "markdownDescription": "Denies the app_hide command without any pre-configured scope." + }, + { + "description": "Denies the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-show", + "markdownDescription": "Denies the app_show command without any pre-configured scope." + }, + { + "description": "Denies the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-bundle-type", + "markdownDescription": "Denies the bundle_type command without any pre-configured scope." + }, + { + "description": "Denies the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-default-window-icon", + "markdownDescription": "Denies the default_window_icon command without any pre-configured scope." + }, + { + "description": "Denies the fetch_data_store_identifiers command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-fetch-data-store-identifiers", + "markdownDescription": "Denies the fetch_data_store_identifiers command without any pre-configured scope." + }, + { + "description": "Denies the identifier command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-identifier", + "markdownDescription": "Denies the identifier command without any pre-configured scope." + }, + { + "description": "Denies the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-name", + "markdownDescription": "Denies the name command without any pre-configured scope." + }, + { + "description": "Denies the remove_data_store command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-remove-data-store", + "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." + }, + { + "description": "Denies the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-app-theme", + "markdownDescription": "Denies the set_app_theme command without any pre-configured scope." + }, + { + "description": "Denies the set_dock_visibility command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-dock-visibility", + "markdownDescription": "Denies the set_dock_visibility command without any pre-configured scope." + }, + { + "description": "Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-tauri-version", + "markdownDescription": "Denies the tauri_version command without any pre-configured scope." + }, + { + "description": "Denies the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-version", + "markdownDescription": "Denies the version command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`", + "type": "string", + "const": "core:event:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`" + }, + { + "description": "Enables the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit", + "markdownDescription": "Enables the emit command without any pre-configured scope." + }, + { + "description": "Enables the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit-to", + "markdownDescription": "Enables the emit_to command without any pre-configured scope." + }, + { + "description": "Enables the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-listen", + "markdownDescription": "Enables the listen command without any pre-configured scope." + }, + { + "description": "Enables the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-unlisten", + "markdownDescription": "Enables the unlisten command without any pre-configured scope." + }, + { + "description": "Denies the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit", + "markdownDescription": "Denies the emit command without any pre-configured scope." + }, + { + "description": "Denies the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit-to", + "markdownDescription": "Denies the emit_to command without any pre-configured scope." + }, + { + "description": "Denies the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-listen", + "markdownDescription": "Denies the listen command without any pre-configured scope." + }, + { + "description": "Denies the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-unlisten", + "markdownDescription": "Denies the unlisten command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`", + "type": "string", + "const": "core:image:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`" + }, + { + "description": "Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-bytes", + "markdownDescription": "Enables the from_bytes command without any pre-configured scope." + }, + { + "description": "Enables the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-path", + "markdownDescription": "Enables the from_path command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-rgba", + "markdownDescription": "Enables the rgba command without any pre-configured scope." + }, + { + "description": "Enables the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-size", + "markdownDescription": "Enables the size command without any pre-configured scope." + }, + { + "description": "Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-bytes", + "markdownDescription": "Denies the from_bytes command without any pre-configured scope." + }, + { + "description": "Denies the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-path", + "markdownDescription": "Denies the from_path command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-rgba", + "markdownDescription": "Denies the rgba command without any pre-configured scope." + }, + { + "description": "Denies the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-size", + "markdownDescription": "Denies the size command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`", + "type": "string", + "const": "core:menu:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`" + }, + { + "description": "Enables the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-append", + "markdownDescription": "Enables the append command without any pre-configured scope." + }, + { + "description": "Enables the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-create-default", + "markdownDescription": "Enables the create_default command without any pre-configured scope." + }, + { + "description": "Enables the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-get", + "markdownDescription": "Enables the get command without any pre-configured scope." + }, + { + "description": "Enables the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-insert", + "markdownDescription": "Enables the insert command without any pre-configured scope." + }, + { + "description": "Enables the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-checked", + "markdownDescription": "Enables the is_checked command without any pre-configured scope." + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-enabled", + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." + }, + { + "description": "Enables the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-items", + "markdownDescription": "Enables the items command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-popup", + "markdownDescription": "Enables the popup command without any pre-configured scope." + }, + { + "description": "Enables the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-prepend", + "markdownDescription": "Enables the prepend command without any pre-configured scope." + }, + { + "description": "Enables the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove", + "markdownDescription": "Enables the remove command without any pre-configured scope." + }, + { + "description": "Enables the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove-at", + "markdownDescription": "Enables the remove_at command without any pre-configured scope." + }, + { + "description": "Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-accelerator", + "markdownDescription": "Enables the set_accelerator command without any pre-configured scope." + }, + { + "description": "Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-app-menu", + "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-help-menu-for-nsapp", + "markdownDescription": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-window-menu", + "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-windows-menu-for-nsapp", + "markdownDescription": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Enables the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-checked", + "markdownDescription": "Enables the set_checked command without any pre-configured scope." + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-enabled", + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-text", + "markdownDescription": "Enables the set_text command without any pre-configured scope." + }, + { + "description": "Enables the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-text", + "markdownDescription": "Enables the text command without any pre-configured scope." + }, + { + "description": "Denies the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-append", + "markdownDescription": "Denies the append command without any pre-configured scope." + }, + { + "description": "Denies the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-create-default", + "markdownDescription": "Denies the create_default command without any pre-configured scope." + }, + { + "description": "Denies the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-get", + "markdownDescription": "Denies the get command without any pre-configured scope." + }, + { + "description": "Denies the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-insert", + "markdownDescription": "Denies the insert command without any pre-configured scope." + }, + { + "description": "Denies the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-checked", + "markdownDescription": "Denies the is_checked command without any pre-configured scope." + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-enabled", + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." + }, + { + "description": "Denies the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-items", + "markdownDescription": "Denies the items command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-popup", + "markdownDescription": "Denies the popup command without any pre-configured scope." + }, + { + "description": "Denies the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-prepend", + "markdownDescription": "Denies the prepend command without any pre-configured scope." + }, + { + "description": "Denies the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove", + "markdownDescription": "Denies the remove command without any pre-configured scope." + }, + { + "description": "Denies the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove-at", + "markdownDescription": "Denies the remove_at command without any pre-configured scope." + }, + { + "description": "Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-accelerator", + "markdownDescription": "Denies the set_accelerator command without any pre-configured scope." + }, + { + "description": "Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-app-menu", + "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-help-menu-for-nsapp", + "markdownDescription": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-window-menu", + "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-windows-menu-for-nsapp", + "markdownDescription": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Denies the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-checked", + "markdownDescription": "Denies the set_checked command without any pre-configured scope." + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-enabled", + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-text", + "markdownDescription": "Denies the set_text command without any pre-configured scope." + }, + { + "description": "Denies the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-text", + "markdownDescription": "Denies the text command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`", + "type": "string", + "const": "core:path:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`" + }, + { + "description": "Enables the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-basename", + "markdownDescription": "Enables the basename command without any pre-configured scope." + }, + { + "description": "Enables the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-dirname", + "markdownDescription": "Enables the dirname command without any pre-configured scope." + }, + { + "description": "Enables the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-extname", + "markdownDescription": "Enables the extname command without any pre-configured scope." + }, + { + "description": "Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-is-absolute", + "markdownDescription": "Enables the is_absolute command without any pre-configured scope." + }, + { + "description": "Enables the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-join", + "markdownDescription": "Enables the join command without any pre-configured scope." + }, + { + "description": "Enables the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-normalize", + "markdownDescription": "Enables the normalize command without any pre-configured scope." + }, + { + "description": "Enables the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve", + "markdownDescription": "Enables the resolve command without any pre-configured scope." + }, + { + "description": "Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve-directory", + "markdownDescription": "Enables the resolve_directory command without any pre-configured scope." + }, + { + "description": "Denies the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-basename", + "markdownDescription": "Denies the basename command without any pre-configured scope." + }, + { + "description": "Denies the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-dirname", + "markdownDescription": "Denies the dirname command without any pre-configured scope." + }, + { + "description": "Denies the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-extname", + "markdownDescription": "Denies the extname command without any pre-configured scope." + }, + { + "description": "Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-is-absolute", + "markdownDescription": "Denies the is_absolute command without any pre-configured scope." + }, + { + "description": "Denies the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-join", + "markdownDescription": "Denies the join command without any pre-configured scope." + }, + { + "description": "Denies the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-normalize", + "markdownDescription": "Denies the normalize command without any pre-configured scope." + }, + { + "description": "Denies the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve", + "markdownDescription": "Denies the resolve command without any pre-configured scope." + }, + { + "description": "Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve-directory", + "markdownDescription": "Denies the resolve_directory command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`", + "type": "string", + "const": "core:resources:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`" + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:allow-close", + "markdownDescription": "Enables the close command without any pre-configured scope." + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:deny-close", + "markdownDescription": "Denies the close command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-show-menu-on-left-click`", + "type": "string", + "const": "core:tray:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-show-menu-on-left-click`" + }, + { + "description": "Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-get-by-id", + "markdownDescription": "Enables the get_by_id command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-remove-by-id", + "markdownDescription": "Enables the remove_by_id command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon-as-template", + "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope." + }, + { + "description": "Enables the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-menu", + "markdownDescription": "Enables the set_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-show-menu-on-left-click", + "markdownDescription": "Enables the set_show_menu_on_left_click command without any pre-configured scope." + }, + { + "description": "Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-temp-dir-path", + "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope." + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-title", + "markdownDescription": "Enables the set_title command without any pre-configured scope." + }, + { + "description": "Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-tooltip", + "markdownDescription": "Enables the set_tooltip command without any pre-configured scope." + }, + { + "description": "Enables the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-visible", + "markdownDescription": "Enables the set_visible command without any pre-configured scope." + }, + { + "description": "Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-get-by-id", + "markdownDescription": "Denies the get_by_id command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-remove-by-id", + "markdownDescription": "Denies the remove_by_id command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon-as-template", + "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope." + }, + { + "description": "Denies the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-menu", + "markdownDescription": "Denies the set_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-show-menu-on-left-click", + "markdownDescription": "Denies the set_show_menu_on_left_click command without any pre-configured scope." + }, + { + "description": "Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-temp-dir-path", + "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope." + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-title", + "markdownDescription": "Denies the set_title command without any pre-configured scope." + }, + { + "description": "Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-tooltip", + "markdownDescription": "Denies the set_tooltip command without any pre-configured scope." + }, + { + "description": "Denies the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-visible", + "markdownDescription": "Denies the set_visible command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`", + "type": "string", + "const": "core:webview:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`" + }, + { + "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-clear-all-browsing-data", + "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope." + }, + { + "description": "Enables the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview", + "markdownDescription": "Enables the create_webview command without any pre-configured scope." + }, + { + "description": "Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview-window", + "markdownDescription": "Enables the create_webview_window command without any pre-configured scope." + }, + { + "description": "Enables the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-get-all-webviews", + "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope." + }, + { + "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-internal-toggle-devtools", + "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope." + }, + { + "description": "Enables the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-print", + "markdownDescription": "Enables the print command without any pre-configured scope." + }, + { + "description": "Enables the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-reparent", + "markdownDescription": "Enables the reparent command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-auto-resize", + "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-background-color", + "markdownDescription": "Enables the set_webview_background_color command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-focus", + "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-position", + "markdownDescription": "Enables the set_webview_position command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-size", + "markdownDescription": "Enables the set_webview_size command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-zoom", + "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope." + }, + { + "description": "Enables the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-close", + "markdownDescription": "Enables the webview_close command without any pre-configured scope." + }, + { + "description": "Enables the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-hide", + "markdownDescription": "Enables the webview_hide command without any pre-configured scope." + }, + { + "description": "Enables the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-position", + "markdownDescription": "Enables the webview_position command without any pre-configured scope." + }, + { + "description": "Enables the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-show", + "markdownDescription": "Enables the webview_show command without any pre-configured scope." + }, + { + "description": "Enables the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-size", + "markdownDescription": "Enables the webview_size command without any pre-configured scope." + }, + { + "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-clear-all-browsing-data", + "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope." + }, + { + "description": "Denies the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview", + "markdownDescription": "Denies the create_webview command without any pre-configured scope." + }, + { + "description": "Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview-window", + "markdownDescription": "Denies the create_webview_window command without any pre-configured scope." + }, + { + "description": "Denies the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-get-all-webviews", + "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope." + }, + { + "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-internal-toggle-devtools", + "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope." + }, + { + "description": "Denies the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-print", + "markdownDescription": "Denies the print command without any pre-configured scope." + }, + { + "description": "Denies the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-reparent", + "markdownDescription": "Denies the reparent command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-auto-resize", + "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-background-color", + "markdownDescription": "Denies the set_webview_background_color command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-focus", + "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-position", + "markdownDescription": "Denies the set_webview_position command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-size", + "markdownDescription": "Denies the set_webview_size command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-zoom", + "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope." + }, + { + "description": "Denies the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-close", + "markdownDescription": "Denies the webview_close command without any pre-configured scope." + }, + { + "description": "Denies the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-hide", + "markdownDescription": "Denies the webview_hide command without any pre-configured scope." + }, + { + "description": "Denies the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-position", + "markdownDescription": "Denies the webview_position command without any pre-configured scope." + }, + { + "description": "Denies the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-show", + "markdownDescription": "Denies the webview_show command without any pre-configured scope." + }, + { + "description": "Denies the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-size", + "markdownDescription": "Denies the webview_size command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-internal-toggle-maximize`", + "type": "string", + "const": "core:window:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-internal-toggle-maximize`" + }, + { + "description": "Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-available-monitors", + "markdownDescription": "Enables the available_monitors command without any pre-configured scope." + }, + { + "description": "Enables the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-center", + "markdownDescription": "Enables the center command without any pre-configured scope." + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-close", + "markdownDescription": "Enables the close command without any pre-configured scope." + }, + { + "description": "Enables the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-create", + "markdownDescription": "Enables the create command without any pre-configured scope." + }, + { + "description": "Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-current-monitor", + "markdownDescription": "Enables the current_monitor command without any pre-configured scope." + }, + { + "description": "Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-cursor-position", + "markdownDescription": "Enables the cursor_position command without any pre-configured scope." + }, + { + "description": "Enables the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-destroy", + "markdownDescription": "Enables the destroy command without any pre-configured scope." + }, + { + "description": "Enables the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-get-all-windows", + "markdownDescription": "Enables the get_all_windows command without any pre-configured scope." + }, + { + "description": "Enables the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-hide", + "markdownDescription": "Enables the hide command without any pre-configured scope." + }, + { + "description": "Enables the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-position", + "markdownDescription": "Enables the inner_position command without any pre-configured scope." + }, + { + "description": "Enables the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-size", + "markdownDescription": "Enables the inner_size command without any pre-configured scope." + }, + { + "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-internal-toggle-maximize", + "markdownDescription": "Enables the internal_toggle_maximize command without any pre-configured scope." + }, + { + "description": "Enables the is_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-always-on-top", + "markdownDescription": "Enables the is_always_on_top command without any pre-configured scope." + }, + { + "description": "Enables the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-closable", + "markdownDescription": "Enables the is_closable command without any pre-configured scope." + }, + { + "description": "Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-decorated", + "markdownDescription": "Enables the is_decorated command without any pre-configured scope." + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-enabled", + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." + }, + { + "description": "Enables the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-focused", + "markdownDescription": "Enables the is_focused command without any pre-configured scope." + }, + { + "description": "Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-fullscreen", + "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximizable", + "markdownDescription": "Enables the is_maximizable command without any pre-configured scope." + }, + { + "description": "Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximized", + "markdownDescription": "Enables the is_maximized command without any pre-configured scope." + }, + { + "description": "Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimizable", + "markdownDescription": "Enables the is_minimizable command without any pre-configured scope." + }, + { + "description": "Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimized", + "markdownDescription": "Enables the is_minimized command without any pre-configured scope." + }, + { + "description": "Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-resizable", + "markdownDescription": "Enables the is_resizable command without any pre-configured scope." + }, + { + "description": "Enables the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-visible", + "markdownDescription": "Enables the is_visible command without any pre-configured scope." + }, + { + "description": "Enables the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-maximize", + "markdownDescription": "Enables the maximize command without any pre-configured scope." + }, + { + "description": "Enables the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-minimize", + "markdownDescription": "Enables the minimize command without any pre-configured scope." + }, + { + "description": "Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-monitor-from-point", + "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope." + }, + { + "description": "Enables the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-position", + "markdownDescription": "Enables the outer_position command without any pre-configured scope." + }, + { + "description": "Enables the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-size", + "markdownDescription": "Enables the outer_size command without any pre-configured scope." + }, + { + "description": "Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-primary-monitor", + "markdownDescription": "Enables the primary_monitor command without any pre-configured scope." + }, + { + "description": "Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-request-user-attention", + "markdownDescription": "Enables the request_user_attention command without any pre-configured scope." + }, + { + "description": "Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-scale-factor", + "markdownDescription": "Enables the scale_factor command without any pre-configured scope." + }, + { + "description": "Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-bottom", + "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope." + }, + { + "description": "Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-top", + "markdownDescription": "Enables the set_always_on_top command without any pre-configured scope." + }, + { + "description": "Enables the set_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-background-color", + "markdownDescription": "Enables the set_background_color command without any pre-configured scope." + }, + { + "description": "Enables the set_badge_count command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-badge-count", + "markdownDescription": "Enables the set_badge_count command without any pre-configured scope." + }, + { + "description": "Enables the set_badge_label command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-badge-label", + "markdownDescription": "Enables the set_badge_label command without any pre-configured scope." + }, + { + "description": "Enables the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-closable", + "markdownDescription": "Enables the set_closable command without any pre-configured scope." + }, + { + "description": "Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-content-protected", + "markdownDescription": "Enables the set_content_protected command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-grab", + "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-icon", + "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-position", + "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-visible", + "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope." + }, + { + "description": "Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-decorations", + "markdownDescription": "Enables the set_decorations command without any pre-configured scope." + }, + { + "description": "Enables the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-effects", + "markdownDescription": "Enables the set_effects command without any pre-configured scope." + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-enabled", + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." + }, + { + "description": "Enables the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focus", + "markdownDescription": "Enables the set_focus command without any pre-configured scope." + }, + { + "description": "Enables the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focusable", + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." + }, + { + "description": "Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-fullscreen", + "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-ignore-cursor-events", + "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope." + }, + { + "description": "Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-max-size", + "markdownDescription": "Enables the set_max_size command without any pre-configured scope." + }, + { + "description": "Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-maximizable", + "markdownDescription": "Enables the set_maximizable command without any pre-configured scope." + }, + { + "description": "Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-min-size", + "markdownDescription": "Enables the set_min_size command without any pre-configured scope." + }, + { + "description": "Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-minimizable", + "markdownDescription": "Enables the set_minimizable command without any pre-configured scope." + }, + { + "description": "Enables the set_overlay_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-overlay-icon", + "markdownDescription": "Enables the set_overlay_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-position", + "markdownDescription": "Enables the set_position command without any pre-configured scope." + }, + { + "description": "Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-progress-bar", + "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope." + }, + { + "description": "Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-resizable", + "markdownDescription": "Enables the set_resizable command without any pre-configured scope." + }, + { + "description": "Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-shadow", + "markdownDescription": "Enables the set_shadow command without any pre-configured scope." + }, + { + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-simple-fullscreen", + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size", + "markdownDescription": "Enables the set_size command without any pre-configured scope." + }, + { + "description": "Enables the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size-constraints", + "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope." + }, + { + "description": "Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-skip-taskbar", + "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope." + }, + { + "description": "Enables the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-theme", + "markdownDescription": "Enables the set_theme command without any pre-configured scope." + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title", + "markdownDescription": "Enables the set_title command without any pre-configured scope." + }, + { + "description": "Enables the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title-bar-style", + "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope." + }, + { + "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-visible-on-all-workspaces", + "markdownDescription": "Enables the set_visible_on_all_workspaces command without any pre-configured scope." + }, + { + "description": "Enables the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-show", + "markdownDescription": "Enables the show command without any pre-configured scope." + }, + { + "description": "Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-dragging", + "markdownDescription": "Enables the start_dragging command without any pre-configured scope." + }, + { + "description": "Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-resize-dragging", + "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope." + }, + { + "description": "Enables the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-theme", + "markdownDescription": "Enables the theme command without any pre-configured scope." + }, + { + "description": "Enables the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-title", + "markdownDescription": "Enables the title command without any pre-configured scope." + }, + { + "description": "Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-toggle-maximize", + "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope." + }, + { + "description": "Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unmaximize", + "markdownDescription": "Enables the unmaximize command without any pre-configured scope." + }, + { + "description": "Enables the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unminimize", + "markdownDescription": "Enables the unminimize command without any pre-configured scope." + }, + { + "description": "Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-available-monitors", + "markdownDescription": "Denies the available_monitors command without any pre-configured scope." + }, + { + "description": "Denies the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-center", + "markdownDescription": "Denies the center command without any pre-configured scope." + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-close", + "markdownDescription": "Denies the close command without any pre-configured scope." + }, + { + "description": "Denies the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-create", + "markdownDescription": "Denies the create command without any pre-configured scope." + }, + { + "description": "Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-current-monitor", + "markdownDescription": "Denies the current_monitor command without any pre-configured scope." + }, + { + "description": "Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-cursor-position", + "markdownDescription": "Denies the cursor_position command without any pre-configured scope." + }, + { + "description": "Denies the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-destroy", + "markdownDescription": "Denies the destroy command without any pre-configured scope." + }, + { + "description": "Denies the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-get-all-windows", + "markdownDescription": "Denies the get_all_windows command without any pre-configured scope." + }, + { + "description": "Denies the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-hide", + "markdownDescription": "Denies the hide command without any pre-configured scope." + }, + { + "description": "Denies the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-position", + "markdownDescription": "Denies the inner_position command without any pre-configured scope." + }, + { + "description": "Denies the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-size", + "markdownDescription": "Denies the inner_size command without any pre-configured scope." + }, + { + "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-internal-toggle-maximize", + "markdownDescription": "Denies the internal_toggle_maximize command without any pre-configured scope." + }, + { + "description": "Denies the is_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-always-on-top", + "markdownDescription": "Denies the is_always_on_top command without any pre-configured scope." + }, + { + "description": "Denies the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-closable", + "markdownDescription": "Denies the is_closable command without any pre-configured scope." + }, + { + "description": "Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-decorated", + "markdownDescription": "Denies the is_decorated command without any pre-configured scope." + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-enabled", + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." + }, + { + "description": "Denies the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-focused", + "markdownDescription": "Denies the is_focused command without any pre-configured scope." + }, + { + "description": "Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-fullscreen", + "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximizable", + "markdownDescription": "Denies the is_maximizable command without any pre-configured scope." + }, + { + "description": "Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximized", + "markdownDescription": "Denies the is_maximized command without any pre-configured scope." + }, + { + "description": "Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimizable", + "markdownDescription": "Denies the is_minimizable command without any pre-configured scope." + }, + { + "description": "Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimized", + "markdownDescription": "Denies the is_minimized command without any pre-configured scope." + }, + { + "description": "Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-resizable", + "markdownDescription": "Denies the is_resizable command without any pre-configured scope." + }, + { + "description": "Denies the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-visible", + "markdownDescription": "Denies the is_visible command without any pre-configured scope." + }, + { + "description": "Denies the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-maximize", + "markdownDescription": "Denies the maximize command without any pre-configured scope." + }, + { + "description": "Denies the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-minimize", + "markdownDescription": "Denies the minimize command without any pre-configured scope." + }, + { + "description": "Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-monitor-from-point", + "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope." + }, + { + "description": "Denies the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-position", + "markdownDescription": "Denies the outer_position command without any pre-configured scope." + }, + { + "description": "Denies the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-size", + "markdownDescription": "Denies the outer_size command without any pre-configured scope." + }, + { + "description": "Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-primary-monitor", + "markdownDescription": "Denies the primary_monitor command without any pre-configured scope." + }, + { + "description": "Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-request-user-attention", + "markdownDescription": "Denies the request_user_attention command without any pre-configured scope." + }, + { + "description": "Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-scale-factor", + "markdownDescription": "Denies the scale_factor command without any pre-configured scope." + }, + { + "description": "Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-bottom", + "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope." + }, + { + "description": "Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-top", + "markdownDescription": "Denies the set_always_on_top command without any pre-configured scope." + }, + { + "description": "Denies the set_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-background-color", + "markdownDescription": "Denies the set_background_color command without any pre-configured scope." + }, + { + "description": "Denies the set_badge_count command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-badge-count", + "markdownDescription": "Denies the set_badge_count command without any pre-configured scope." + }, + { + "description": "Denies the set_badge_label command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-badge-label", + "markdownDescription": "Denies the set_badge_label command without any pre-configured scope." + }, + { + "description": "Denies the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-closable", + "markdownDescription": "Denies the set_closable command without any pre-configured scope." + }, + { + "description": "Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-content-protected", + "markdownDescription": "Denies the set_content_protected command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-grab", + "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-icon", + "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-position", + "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-visible", + "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope." + }, + { + "description": "Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-decorations", + "markdownDescription": "Denies the set_decorations command without any pre-configured scope." + }, + { + "description": "Denies the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-effects", + "markdownDescription": "Denies the set_effects command without any pre-configured scope." + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-enabled", + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." + }, + { + "description": "Denies the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focus", + "markdownDescription": "Denies the set_focus command without any pre-configured scope." + }, + { + "description": "Denies the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focusable", + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." + }, + { + "description": "Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-fullscreen", + "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-ignore-cursor-events", + "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope." + }, + { + "description": "Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-max-size", + "markdownDescription": "Denies the set_max_size command without any pre-configured scope." + }, + { + "description": "Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-maximizable", + "markdownDescription": "Denies the set_maximizable command without any pre-configured scope." + }, + { + "description": "Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-min-size", + "markdownDescription": "Denies the set_min_size command without any pre-configured scope." + }, + { + "description": "Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-minimizable", + "markdownDescription": "Denies the set_minimizable command without any pre-configured scope." + }, + { + "description": "Denies the set_overlay_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-overlay-icon", + "markdownDescription": "Denies the set_overlay_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-position", + "markdownDescription": "Denies the set_position command without any pre-configured scope." + }, + { + "description": "Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-progress-bar", + "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope." + }, + { + "description": "Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-resizable", + "markdownDescription": "Denies the set_resizable command without any pre-configured scope." + }, + { + "description": "Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-shadow", + "markdownDescription": "Denies the set_shadow command without any pre-configured scope." + }, + { + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-simple-fullscreen", + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size", + "markdownDescription": "Denies the set_size command without any pre-configured scope." + }, + { + "description": "Denies the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size-constraints", + "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope." + }, + { + "description": "Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-skip-taskbar", + "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope." + }, + { + "description": "Denies the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-theme", + "markdownDescription": "Denies the set_theme command without any pre-configured scope." + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title", + "markdownDescription": "Denies the set_title command without any pre-configured scope." + }, + { + "description": "Denies the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title-bar-style", + "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope." + }, + { + "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-visible-on-all-workspaces", + "markdownDescription": "Denies the set_visible_on_all_workspaces command without any pre-configured scope." + }, + { + "description": "Denies the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-show", + "markdownDescription": "Denies the show command without any pre-configured scope." + }, + { + "description": "Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-dragging", + "markdownDescription": "Denies the start_dragging command without any pre-configured scope." + }, + { + "description": "Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-resize-dragging", + "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope." + }, + { + "description": "Denies the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-theme", + "markdownDescription": "Denies the theme command without any pre-configured scope." + }, + { + "description": "Denies the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-title", + "markdownDescription": "Denies the title command without any pre-configured scope." + }, + { + "description": "Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-toggle-maximize", + "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope." + }, + { + "description": "Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unmaximize", + "markdownDescription": "Denies the unmaximize command without any pre-configured scope." + }, + { + "description": "Denies the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unminimize", + "markdownDescription": "Denies the unminimize command without any pre-configured scope." + } + ] + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + } + } +} \ No newline at end of file diff --git a/apps/desktop/src-tauri/gen/schemas/linux-schema.json b/apps/desktop/src-tauri/gen/schemas/linux-schema.json new file mode 100644 index 0000000000..b01bfa931d --- /dev/null +++ b/apps/desktop/src-tauri/gen/schemas/linux-schema.json @@ -0,0 +1,2220 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", + "type": "string" + }, + "description": { + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + }, + "uniqueItems": true + }, + "platforms": { + "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "allOf": [ + { + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ], + "required": [ + "identifier" + ] + } + ] + }, + "Identifier": { + "description": "Permission identifier", + "oneOf": [ + { + "description": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`", + "type": "string", + "const": "core:default", + "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`", + "type": "string", + "const": "core:app:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`" + }, + { + "description": "Enables the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-hide", + "markdownDescription": "Enables the app_hide command without any pre-configured scope." + }, + { + "description": "Enables the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-show", + "markdownDescription": "Enables the app_show command without any pre-configured scope." + }, + { + "description": "Enables the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-bundle-type", + "markdownDescription": "Enables the bundle_type command without any pre-configured scope." + }, + { + "description": "Enables the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-default-window-icon", + "markdownDescription": "Enables the default_window_icon command without any pre-configured scope." + }, + { + "description": "Enables the fetch_data_store_identifiers command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-fetch-data-store-identifiers", + "markdownDescription": "Enables the fetch_data_store_identifiers command without any pre-configured scope." + }, + { + "description": "Enables the identifier command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-identifier", + "markdownDescription": "Enables the identifier command without any pre-configured scope." + }, + { + "description": "Enables the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-name", + "markdownDescription": "Enables the name command without any pre-configured scope." + }, + { + "description": "Enables the remove_data_store command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-remove-data-store", + "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." + }, + { + "description": "Enables the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-app-theme", + "markdownDescription": "Enables the set_app_theme command without any pre-configured scope." + }, + { + "description": "Enables the set_dock_visibility command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-dock-visibility", + "markdownDescription": "Enables the set_dock_visibility command without any pre-configured scope." + }, + { + "description": "Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-tauri-version", + "markdownDescription": "Enables the tauri_version command without any pre-configured scope." + }, + { + "description": "Enables the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-version", + "markdownDescription": "Enables the version command without any pre-configured scope." + }, + { + "description": "Denies the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-hide", + "markdownDescription": "Denies the app_hide command without any pre-configured scope." + }, + { + "description": "Denies the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-show", + "markdownDescription": "Denies the app_show command without any pre-configured scope." + }, + { + "description": "Denies the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-bundle-type", + "markdownDescription": "Denies the bundle_type command without any pre-configured scope." + }, + { + "description": "Denies the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-default-window-icon", + "markdownDescription": "Denies the default_window_icon command without any pre-configured scope." + }, + { + "description": "Denies the fetch_data_store_identifiers command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-fetch-data-store-identifiers", + "markdownDescription": "Denies the fetch_data_store_identifiers command without any pre-configured scope." + }, + { + "description": "Denies the identifier command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-identifier", + "markdownDescription": "Denies the identifier command without any pre-configured scope." + }, + { + "description": "Denies the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-name", + "markdownDescription": "Denies the name command without any pre-configured scope." + }, + { + "description": "Denies the remove_data_store command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-remove-data-store", + "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." + }, + { + "description": "Denies the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-app-theme", + "markdownDescription": "Denies the set_app_theme command without any pre-configured scope." + }, + { + "description": "Denies the set_dock_visibility command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-dock-visibility", + "markdownDescription": "Denies the set_dock_visibility command without any pre-configured scope." + }, + { + "description": "Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-tauri-version", + "markdownDescription": "Denies the tauri_version command without any pre-configured scope." + }, + { + "description": "Denies the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-version", + "markdownDescription": "Denies the version command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`", + "type": "string", + "const": "core:event:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`" + }, + { + "description": "Enables the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit", + "markdownDescription": "Enables the emit command without any pre-configured scope." + }, + { + "description": "Enables the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit-to", + "markdownDescription": "Enables the emit_to command without any pre-configured scope." + }, + { + "description": "Enables the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-listen", + "markdownDescription": "Enables the listen command without any pre-configured scope." + }, + { + "description": "Enables the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-unlisten", + "markdownDescription": "Enables the unlisten command without any pre-configured scope." + }, + { + "description": "Denies the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit", + "markdownDescription": "Denies the emit command without any pre-configured scope." + }, + { + "description": "Denies the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit-to", + "markdownDescription": "Denies the emit_to command without any pre-configured scope." + }, + { + "description": "Denies the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-listen", + "markdownDescription": "Denies the listen command without any pre-configured scope." + }, + { + "description": "Denies the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-unlisten", + "markdownDescription": "Denies the unlisten command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`", + "type": "string", + "const": "core:image:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`" + }, + { + "description": "Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-bytes", + "markdownDescription": "Enables the from_bytes command without any pre-configured scope." + }, + { + "description": "Enables the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-path", + "markdownDescription": "Enables the from_path command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-rgba", + "markdownDescription": "Enables the rgba command without any pre-configured scope." + }, + { + "description": "Enables the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-size", + "markdownDescription": "Enables the size command without any pre-configured scope." + }, + { + "description": "Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-bytes", + "markdownDescription": "Denies the from_bytes command without any pre-configured scope." + }, + { + "description": "Denies the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-path", + "markdownDescription": "Denies the from_path command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-rgba", + "markdownDescription": "Denies the rgba command without any pre-configured scope." + }, + { + "description": "Denies the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-size", + "markdownDescription": "Denies the size command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`", + "type": "string", + "const": "core:menu:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`" + }, + { + "description": "Enables the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-append", + "markdownDescription": "Enables the append command without any pre-configured scope." + }, + { + "description": "Enables the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-create-default", + "markdownDescription": "Enables the create_default command without any pre-configured scope." + }, + { + "description": "Enables the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-get", + "markdownDescription": "Enables the get command without any pre-configured scope." + }, + { + "description": "Enables the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-insert", + "markdownDescription": "Enables the insert command without any pre-configured scope." + }, + { + "description": "Enables the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-checked", + "markdownDescription": "Enables the is_checked command without any pre-configured scope." + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-enabled", + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." + }, + { + "description": "Enables the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-items", + "markdownDescription": "Enables the items command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-popup", + "markdownDescription": "Enables the popup command without any pre-configured scope." + }, + { + "description": "Enables the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-prepend", + "markdownDescription": "Enables the prepend command without any pre-configured scope." + }, + { + "description": "Enables the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove", + "markdownDescription": "Enables the remove command without any pre-configured scope." + }, + { + "description": "Enables the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove-at", + "markdownDescription": "Enables the remove_at command without any pre-configured scope." + }, + { + "description": "Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-accelerator", + "markdownDescription": "Enables the set_accelerator command without any pre-configured scope." + }, + { + "description": "Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-app-menu", + "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-help-menu-for-nsapp", + "markdownDescription": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-window-menu", + "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-windows-menu-for-nsapp", + "markdownDescription": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Enables the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-checked", + "markdownDescription": "Enables the set_checked command without any pre-configured scope." + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-enabled", + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-text", + "markdownDescription": "Enables the set_text command without any pre-configured scope." + }, + { + "description": "Enables the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-text", + "markdownDescription": "Enables the text command without any pre-configured scope." + }, + { + "description": "Denies the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-append", + "markdownDescription": "Denies the append command without any pre-configured scope." + }, + { + "description": "Denies the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-create-default", + "markdownDescription": "Denies the create_default command without any pre-configured scope." + }, + { + "description": "Denies the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-get", + "markdownDescription": "Denies the get command without any pre-configured scope." + }, + { + "description": "Denies the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-insert", + "markdownDescription": "Denies the insert command without any pre-configured scope." + }, + { + "description": "Denies the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-checked", + "markdownDescription": "Denies the is_checked command without any pre-configured scope." + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-enabled", + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." + }, + { + "description": "Denies the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-items", + "markdownDescription": "Denies the items command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-popup", + "markdownDescription": "Denies the popup command without any pre-configured scope." + }, + { + "description": "Denies the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-prepend", + "markdownDescription": "Denies the prepend command without any pre-configured scope." + }, + { + "description": "Denies the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove", + "markdownDescription": "Denies the remove command without any pre-configured scope." + }, + { + "description": "Denies the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove-at", + "markdownDescription": "Denies the remove_at command without any pre-configured scope." + }, + { + "description": "Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-accelerator", + "markdownDescription": "Denies the set_accelerator command without any pre-configured scope." + }, + { + "description": "Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-app-menu", + "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-help-menu-for-nsapp", + "markdownDescription": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-window-menu", + "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-windows-menu-for-nsapp", + "markdownDescription": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope." + }, + { + "description": "Denies the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-checked", + "markdownDescription": "Denies the set_checked command without any pre-configured scope." + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-enabled", + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-text", + "markdownDescription": "Denies the set_text command without any pre-configured scope." + }, + { + "description": "Denies the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-text", + "markdownDescription": "Denies the text command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`", + "type": "string", + "const": "core:path:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`" + }, + { + "description": "Enables the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-basename", + "markdownDescription": "Enables the basename command without any pre-configured scope." + }, + { + "description": "Enables the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-dirname", + "markdownDescription": "Enables the dirname command without any pre-configured scope." + }, + { + "description": "Enables the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-extname", + "markdownDescription": "Enables the extname command without any pre-configured scope." + }, + { + "description": "Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-is-absolute", + "markdownDescription": "Enables the is_absolute command without any pre-configured scope." + }, + { + "description": "Enables the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-join", + "markdownDescription": "Enables the join command without any pre-configured scope." + }, + { + "description": "Enables the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-normalize", + "markdownDescription": "Enables the normalize command without any pre-configured scope." + }, + { + "description": "Enables the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve", + "markdownDescription": "Enables the resolve command without any pre-configured scope." + }, + { + "description": "Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve-directory", + "markdownDescription": "Enables the resolve_directory command without any pre-configured scope." + }, + { + "description": "Denies the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-basename", + "markdownDescription": "Denies the basename command without any pre-configured scope." + }, + { + "description": "Denies the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-dirname", + "markdownDescription": "Denies the dirname command without any pre-configured scope." + }, + { + "description": "Denies the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-extname", + "markdownDescription": "Denies the extname command without any pre-configured scope." + }, + { + "description": "Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-is-absolute", + "markdownDescription": "Denies the is_absolute command without any pre-configured scope." + }, + { + "description": "Denies the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-join", + "markdownDescription": "Denies the join command without any pre-configured scope." + }, + { + "description": "Denies the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-normalize", + "markdownDescription": "Denies the normalize command without any pre-configured scope." + }, + { + "description": "Denies the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve", + "markdownDescription": "Denies the resolve command without any pre-configured scope." + }, + { + "description": "Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve-directory", + "markdownDescription": "Denies the resolve_directory command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`", + "type": "string", + "const": "core:resources:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`" + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:allow-close", + "markdownDescription": "Enables the close command without any pre-configured scope." + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:deny-close", + "markdownDescription": "Denies the close command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-show-menu-on-left-click`", + "type": "string", + "const": "core:tray:default", + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-show-menu-on-left-click`" + }, + { + "description": "Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-get-by-id", + "markdownDescription": "Enables the get_by_id command without any pre-configured scope." + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-new", + "markdownDescription": "Enables the new command without any pre-configured scope." + }, + { + "description": "Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-remove-by-id", + "markdownDescription": "Enables the remove_by_id command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon-as-template", + "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope." + }, + { + "description": "Enables the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-menu", + "markdownDescription": "Enables the set_menu command without any pre-configured scope." + }, + { + "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-show-menu-on-left-click", + "markdownDescription": "Enables the set_show_menu_on_left_click command without any pre-configured scope." + }, + { + "description": "Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-temp-dir-path", + "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope." + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-title", + "markdownDescription": "Enables the set_title command without any pre-configured scope." + }, + { + "description": "Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-tooltip", + "markdownDescription": "Enables the set_tooltip command without any pre-configured scope." + }, + { + "description": "Enables the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-visible", + "markdownDescription": "Enables the set_visible command without any pre-configured scope." + }, + { + "description": "Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-get-by-id", + "markdownDescription": "Denies the get_by_id command without any pre-configured scope." + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-new", + "markdownDescription": "Denies the new command without any pre-configured scope." + }, + { + "description": "Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-remove-by-id", + "markdownDescription": "Denies the remove_by_id command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon-as-template", + "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope." + }, + { + "description": "Denies the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-menu", + "markdownDescription": "Denies the set_menu command without any pre-configured scope." + }, + { + "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-show-menu-on-left-click", + "markdownDescription": "Denies the set_show_menu_on_left_click command without any pre-configured scope." + }, + { + "description": "Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-temp-dir-path", + "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope." + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-title", + "markdownDescription": "Denies the set_title command without any pre-configured scope." + }, + { + "description": "Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-tooltip", + "markdownDescription": "Denies the set_tooltip command without any pre-configured scope." + }, + { + "description": "Denies the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-visible", + "markdownDescription": "Denies the set_visible command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`", + "type": "string", + "const": "core:webview:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`" + }, + { + "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-clear-all-browsing-data", + "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope." + }, + { + "description": "Enables the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview", + "markdownDescription": "Enables the create_webview command without any pre-configured scope." + }, + { + "description": "Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview-window", + "markdownDescription": "Enables the create_webview_window command without any pre-configured scope." + }, + { + "description": "Enables the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-get-all-webviews", + "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope." + }, + { + "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-internal-toggle-devtools", + "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope." + }, + { + "description": "Enables the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-print", + "markdownDescription": "Enables the print command without any pre-configured scope." + }, + { + "description": "Enables the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-reparent", + "markdownDescription": "Enables the reparent command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-auto-resize", + "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-background-color", + "markdownDescription": "Enables the set_webview_background_color command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-focus", + "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-position", + "markdownDescription": "Enables the set_webview_position command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-size", + "markdownDescription": "Enables the set_webview_size command without any pre-configured scope." + }, + { + "description": "Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-zoom", + "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope." + }, + { + "description": "Enables the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-close", + "markdownDescription": "Enables the webview_close command without any pre-configured scope." + }, + { + "description": "Enables the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-hide", + "markdownDescription": "Enables the webview_hide command without any pre-configured scope." + }, + { + "description": "Enables the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-position", + "markdownDescription": "Enables the webview_position command without any pre-configured scope." + }, + { + "description": "Enables the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-show", + "markdownDescription": "Enables the webview_show command without any pre-configured scope." + }, + { + "description": "Enables the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-size", + "markdownDescription": "Enables the webview_size command without any pre-configured scope." + }, + { + "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-clear-all-browsing-data", + "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope." + }, + { + "description": "Denies the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview", + "markdownDescription": "Denies the create_webview command without any pre-configured scope." + }, + { + "description": "Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview-window", + "markdownDescription": "Denies the create_webview_window command without any pre-configured scope." + }, + { + "description": "Denies the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-get-all-webviews", + "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope." + }, + { + "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-internal-toggle-devtools", + "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope." + }, + { + "description": "Denies the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-print", + "markdownDescription": "Denies the print command without any pre-configured scope." + }, + { + "description": "Denies the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-reparent", + "markdownDescription": "Denies the reparent command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-auto-resize", + "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-background-color", + "markdownDescription": "Denies the set_webview_background_color command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-focus", + "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-position", + "markdownDescription": "Denies the set_webview_position command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-size", + "markdownDescription": "Denies the set_webview_size command without any pre-configured scope." + }, + { + "description": "Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-zoom", + "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope." + }, + { + "description": "Denies the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-close", + "markdownDescription": "Denies the webview_close command without any pre-configured scope." + }, + { + "description": "Denies the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-hide", + "markdownDescription": "Denies the webview_hide command without any pre-configured scope." + }, + { + "description": "Denies the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-position", + "markdownDescription": "Denies the webview_position command without any pre-configured scope." + }, + { + "description": "Denies the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-show", + "markdownDescription": "Denies the webview_show command without any pre-configured scope." + }, + { + "description": "Denies the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-size", + "markdownDescription": "Denies the webview_size command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-internal-toggle-maximize`", + "type": "string", + "const": "core:window:default", + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-internal-toggle-maximize`" + }, + { + "description": "Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-available-monitors", + "markdownDescription": "Enables the available_monitors command without any pre-configured scope." + }, + { + "description": "Enables the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-center", + "markdownDescription": "Enables the center command without any pre-configured scope." + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-close", + "markdownDescription": "Enables the close command without any pre-configured scope." + }, + { + "description": "Enables the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-create", + "markdownDescription": "Enables the create command without any pre-configured scope." + }, + { + "description": "Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-current-monitor", + "markdownDescription": "Enables the current_monitor command without any pre-configured scope." + }, + { + "description": "Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-cursor-position", + "markdownDescription": "Enables the cursor_position command without any pre-configured scope." + }, + { + "description": "Enables the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-destroy", + "markdownDescription": "Enables the destroy command without any pre-configured scope." + }, + { + "description": "Enables the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-get-all-windows", + "markdownDescription": "Enables the get_all_windows command without any pre-configured scope." + }, + { + "description": "Enables the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-hide", + "markdownDescription": "Enables the hide command without any pre-configured scope." + }, + { + "description": "Enables the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-position", + "markdownDescription": "Enables the inner_position command without any pre-configured scope." + }, + { + "description": "Enables the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-size", + "markdownDescription": "Enables the inner_size command without any pre-configured scope." + }, + { + "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-internal-toggle-maximize", + "markdownDescription": "Enables the internal_toggle_maximize command without any pre-configured scope." + }, + { + "description": "Enables the is_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-always-on-top", + "markdownDescription": "Enables the is_always_on_top command without any pre-configured scope." + }, + { + "description": "Enables the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-closable", + "markdownDescription": "Enables the is_closable command without any pre-configured scope." + }, + { + "description": "Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-decorated", + "markdownDescription": "Enables the is_decorated command without any pre-configured scope." + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-enabled", + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." + }, + { + "description": "Enables the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-focused", + "markdownDescription": "Enables the is_focused command without any pre-configured scope." + }, + { + "description": "Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-fullscreen", + "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximizable", + "markdownDescription": "Enables the is_maximizable command without any pre-configured scope." + }, + { + "description": "Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximized", + "markdownDescription": "Enables the is_maximized command without any pre-configured scope." + }, + { + "description": "Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimizable", + "markdownDescription": "Enables the is_minimizable command without any pre-configured scope." + }, + { + "description": "Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimized", + "markdownDescription": "Enables the is_minimized command without any pre-configured scope." + }, + { + "description": "Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-resizable", + "markdownDescription": "Enables the is_resizable command without any pre-configured scope." + }, + { + "description": "Enables the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-visible", + "markdownDescription": "Enables the is_visible command without any pre-configured scope." + }, + { + "description": "Enables the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-maximize", + "markdownDescription": "Enables the maximize command without any pre-configured scope." + }, + { + "description": "Enables the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-minimize", + "markdownDescription": "Enables the minimize command without any pre-configured scope." + }, + { + "description": "Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-monitor-from-point", + "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope." + }, + { + "description": "Enables the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-position", + "markdownDescription": "Enables the outer_position command without any pre-configured scope." + }, + { + "description": "Enables the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-size", + "markdownDescription": "Enables the outer_size command without any pre-configured scope." + }, + { + "description": "Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-primary-monitor", + "markdownDescription": "Enables the primary_monitor command without any pre-configured scope." + }, + { + "description": "Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-request-user-attention", + "markdownDescription": "Enables the request_user_attention command without any pre-configured scope." + }, + { + "description": "Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-scale-factor", + "markdownDescription": "Enables the scale_factor command without any pre-configured scope." + }, + { + "description": "Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-bottom", + "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope." + }, + { + "description": "Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-top", + "markdownDescription": "Enables the set_always_on_top command without any pre-configured scope." + }, + { + "description": "Enables the set_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-background-color", + "markdownDescription": "Enables the set_background_color command without any pre-configured scope." + }, + { + "description": "Enables the set_badge_count command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-badge-count", + "markdownDescription": "Enables the set_badge_count command without any pre-configured scope." + }, + { + "description": "Enables the set_badge_label command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-badge-label", + "markdownDescription": "Enables the set_badge_label command without any pre-configured scope." + }, + { + "description": "Enables the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-closable", + "markdownDescription": "Enables the set_closable command without any pre-configured scope." + }, + { + "description": "Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-content-protected", + "markdownDescription": "Enables the set_content_protected command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-grab", + "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-icon", + "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-position", + "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope." + }, + { + "description": "Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-visible", + "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope." + }, + { + "description": "Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-decorations", + "markdownDescription": "Enables the set_decorations command without any pre-configured scope." + }, + { + "description": "Enables the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-effects", + "markdownDescription": "Enables the set_effects command without any pre-configured scope." + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-enabled", + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." + }, + { + "description": "Enables the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focus", + "markdownDescription": "Enables the set_focus command without any pre-configured scope." + }, + { + "description": "Enables the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focusable", + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." + }, + { + "description": "Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-fullscreen", + "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-icon", + "markdownDescription": "Enables the set_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-ignore-cursor-events", + "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope." + }, + { + "description": "Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-max-size", + "markdownDescription": "Enables the set_max_size command without any pre-configured scope." + }, + { + "description": "Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-maximizable", + "markdownDescription": "Enables the set_maximizable command without any pre-configured scope." + }, + { + "description": "Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-min-size", + "markdownDescription": "Enables the set_min_size command without any pre-configured scope." + }, + { + "description": "Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-minimizable", + "markdownDescription": "Enables the set_minimizable command without any pre-configured scope." + }, + { + "description": "Enables the set_overlay_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-overlay-icon", + "markdownDescription": "Enables the set_overlay_icon command without any pre-configured scope." + }, + { + "description": "Enables the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-position", + "markdownDescription": "Enables the set_position command without any pre-configured scope." + }, + { + "description": "Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-progress-bar", + "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope." + }, + { + "description": "Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-resizable", + "markdownDescription": "Enables the set_resizable command without any pre-configured scope." + }, + { + "description": "Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-shadow", + "markdownDescription": "Enables the set_shadow command without any pre-configured scope." + }, + { + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-simple-fullscreen", + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." + }, + { + "description": "Enables the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size", + "markdownDescription": "Enables the set_size command without any pre-configured scope." + }, + { + "description": "Enables the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size-constraints", + "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope." + }, + { + "description": "Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-skip-taskbar", + "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope." + }, + { + "description": "Enables the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-theme", + "markdownDescription": "Enables the set_theme command without any pre-configured scope." + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title", + "markdownDescription": "Enables the set_title command without any pre-configured scope." + }, + { + "description": "Enables the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title-bar-style", + "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope." + }, + { + "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-visible-on-all-workspaces", + "markdownDescription": "Enables the set_visible_on_all_workspaces command without any pre-configured scope." + }, + { + "description": "Enables the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-show", + "markdownDescription": "Enables the show command without any pre-configured scope." + }, + { + "description": "Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-dragging", + "markdownDescription": "Enables the start_dragging command without any pre-configured scope." + }, + { + "description": "Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-resize-dragging", + "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope." + }, + { + "description": "Enables the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-theme", + "markdownDescription": "Enables the theme command without any pre-configured scope." + }, + { + "description": "Enables the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-title", + "markdownDescription": "Enables the title command without any pre-configured scope." + }, + { + "description": "Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-toggle-maximize", + "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope." + }, + { + "description": "Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unmaximize", + "markdownDescription": "Enables the unmaximize command without any pre-configured scope." + }, + { + "description": "Enables the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unminimize", + "markdownDescription": "Enables the unminimize command without any pre-configured scope." + }, + { + "description": "Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-available-monitors", + "markdownDescription": "Denies the available_monitors command without any pre-configured scope." + }, + { + "description": "Denies the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-center", + "markdownDescription": "Denies the center command without any pre-configured scope." + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-close", + "markdownDescription": "Denies the close command without any pre-configured scope." + }, + { + "description": "Denies the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-create", + "markdownDescription": "Denies the create command without any pre-configured scope." + }, + { + "description": "Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-current-monitor", + "markdownDescription": "Denies the current_monitor command without any pre-configured scope." + }, + { + "description": "Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-cursor-position", + "markdownDescription": "Denies the cursor_position command without any pre-configured scope." + }, + { + "description": "Denies the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-destroy", + "markdownDescription": "Denies the destroy command without any pre-configured scope." + }, + { + "description": "Denies the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-get-all-windows", + "markdownDescription": "Denies the get_all_windows command without any pre-configured scope." + }, + { + "description": "Denies the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-hide", + "markdownDescription": "Denies the hide command without any pre-configured scope." + }, + { + "description": "Denies the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-position", + "markdownDescription": "Denies the inner_position command without any pre-configured scope." + }, + { + "description": "Denies the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-size", + "markdownDescription": "Denies the inner_size command without any pre-configured scope." + }, + { + "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-internal-toggle-maximize", + "markdownDescription": "Denies the internal_toggle_maximize command without any pre-configured scope." + }, + { + "description": "Denies the is_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-always-on-top", + "markdownDescription": "Denies the is_always_on_top command without any pre-configured scope." + }, + { + "description": "Denies the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-closable", + "markdownDescription": "Denies the is_closable command without any pre-configured scope." + }, + { + "description": "Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-decorated", + "markdownDescription": "Denies the is_decorated command without any pre-configured scope." + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-enabled", + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." + }, + { + "description": "Denies the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-focused", + "markdownDescription": "Denies the is_focused command without any pre-configured scope." + }, + { + "description": "Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-fullscreen", + "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximizable", + "markdownDescription": "Denies the is_maximizable command without any pre-configured scope." + }, + { + "description": "Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximized", + "markdownDescription": "Denies the is_maximized command without any pre-configured scope." + }, + { + "description": "Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimizable", + "markdownDescription": "Denies the is_minimizable command without any pre-configured scope." + }, + { + "description": "Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimized", + "markdownDescription": "Denies the is_minimized command without any pre-configured scope." + }, + { + "description": "Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-resizable", + "markdownDescription": "Denies the is_resizable command without any pre-configured scope." + }, + { + "description": "Denies the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-visible", + "markdownDescription": "Denies the is_visible command without any pre-configured scope." + }, + { + "description": "Denies the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-maximize", + "markdownDescription": "Denies the maximize command without any pre-configured scope." + }, + { + "description": "Denies the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-minimize", + "markdownDescription": "Denies the minimize command without any pre-configured scope." + }, + { + "description": "Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-monitor-from-point", + "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope." + }, + { + "description": "Denies the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-position", + "markdownDescription": "Denies the outer_position command without any pre-configured scope." + }, + { + "description": "Denies the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-size", + "markdownDescription": "Denies the outer_size command without any pre-configured scope." + }, + { + "description": "Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-primary-monitor", + "markdownDescription": "Denies the primary_monitor command without any pre-configured scope." + }, + { + "description": "Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-request-user-attention", + "markdownDescription": "Denies the request_user_attention command without any pre-configured scope." + }, + { + "description": "Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-scale-factor", + "markdownDescription": "Denies the scale_factor command without any pre-configured scope." + }, + { + "description": "Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-bottom", + "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope." + }, + { + "description": "Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-top", + "markdownDescription": "Denies the set_always_on_top command without any pre-configured scope." + }, + { + "description": "Denies the set_background_color command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-background-color", + "markdownDescription": "Denies the set_background_color command without any pre-configured scope." + }, + { + "description": "Denies the set_badge_count command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-badge-count", + "markdownDescription": "Denies the set_badge_count command without any pre-configured scope." + }, + { + "description": "Denies the set_badge_label command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-badge-label", + "markdownDescription": "Denies the set_badge_label command without any pre-configured scope." + }, + { + "description": "Denies the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-closable", + "markdownDescription": "Denies the set_closable command without any pre-configured scope." + }, + { + "description": "Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-content-protected", + "markdownDescription": "Denies the set_content_protected command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-grab", + "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-icon", + "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-position", + "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope." + }, + { + "description": "Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-visible", + "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope." + }, + { + "description": "Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-decorations", + "markdownDescription": "Denies the set_decorations command without any pre-configured scope." + }, + { + "description": "Denies the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-effects", + "markdownDescription": "Denies the set_effects command without any pre-configured scope." + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-enabled", + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." + }, + { + "description": "Denies the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focus", + "markdownDescription": "Denies the set_focus command without any pre-configured scope." + }, + { + "description": "Denies the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focusable", + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." + }, + { + "description": "Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-fullscreen", + "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-icon", + "markdownDescription": "Denies the set_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-ignore-cursor-events", + "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope." + }, + { + "description": "Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-max-size", + "markdownDescription": "Denies the set_max_size command without any pre-configured scope." + }, + { + "description": "Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-maximizable", + "markdownDescription": "Denies the set_maximizable command without any pre-configured scope." + }, + { + "description": "Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-min-size", + "markdownDescription": "Denies the set_min_size command without any pre-configured scope." + }, + { + "description": "Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-minimizable", + "markdownDescription": "Denies the set_minimizable command without any pre-configured scope." + }, + { + "description": "Denies the set_overlay_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-overlay-icon", + "markdownDescription": "Denies the set_overlay_icon command without any pre-configured scope." + }, + { + "description": "Denies the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-position", + "markdownDescription": "Denies the set_position command without any pre-configured scope." + }, + { + "description": "Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-progress-bar", + "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope." + }, + { + "description": "Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-resizable", + "markdownDescription": "Denies the set_resizable command without any pre-configured scope." + }, + { + "description": "Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-shadow", + "markdownDescription": "Denies the set_shadow command without any pre-configured scope." + }, + { + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-simple-fullscreen", + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." + }, + { + "description": "Denies the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size", + "markdownDescription": "Denies the set_size command without any pre-configured scope." + }, + { + "description": "Denies the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size-constraints", + "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope." + }, + { + "description": "Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-skip-taskbar", + "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope." + }, + { + "description": "Denies the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-theme", + "markdownDescription": "Denies the set_theme command without any pre-configured scope." + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title", + "markdownDescription": "Denies the set_title command without any pre-configured scope." + }, + { + "description": "Denies the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title-bar-style", + "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope." + }, + { + "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-visible-on-all-workspaces", + "markdownDescription": "Denies the set_visible_on_all_workspaces command without any pre-configured scope." + }, + { + "description": "Denies the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-show", + "markdownDescription": "Denies the show command without any pre-configured scope." + }, + { + "description": "Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-dragging", + "markdownDescription": "Denies the start_dragging command without any pre-configured scope." + }, + { + "description": "Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-resize-dragging", + "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope." + }, + { + "description": "Denies the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-theme", + "markdownDescription": "Denies the theme command without any pre-configured scope." + }, + { + "description": "Denies the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-title", + "markdownDescription": "Denies the title command without any pre-configured scope." + }, + { + "description": "Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-toggle-maximize", + "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope." + }, + { + "description": "Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unmaximize", + "markdownDescription": "Denies the unmaximize command without any pre-configured scope." + }, + { + "description": "Denies the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unminimize", + "markdownDescription": "Denies the unminimize command without any pre-configured scope." + } + ] + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + } + } +} \ No newline at end of file diff --git a/apps/desktop/src-tauri/icons/128x128.png b/apps/desktop/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..00188ee27966ecbd224b36db9eebed55ad8b3141 GIT binary patch literal 8882 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/128x128@2x.png b/apps/desktop/src-tauri/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..41a785936bd7dd2544e5e78073032e810fa1cb81 GIT binary patch literal 19843 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 LNkvXXu0mjf3wxGm literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/64x64.png b/apps/desktop/src-tauri/icons/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3f5a65b7ef732a4b843f1fd7138bfff3b28e41 GIT binary patch literal 3532 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 M07*qoM6N<$f~UJSmH+?% literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square142x142Logo.png b/apps/desktop/src-tauri/icons/Square142x142Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..205036e7f0da8b5fd77c7f22910c91fec29ee818 GIT binary patch literal 10437 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 OA*96QMJt63gZ~S%KJMNC literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square284x284Logo.png b/apps/desktop/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b65d91a1a90e63f1ed70eda6e7850a7b0bba7f9b GIT binary patch literal 25170 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square30x30Logo.png b/apps/desktop/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ed4fe6a08bbc8d53205f6f6832f9dc8fcc46c8 GIT binary patch literal 1281 zcmV+c1^)VpP)79i4x@UP!889fI z&Wc&K{#oKe0}XobbMJ!FSr41jgK+eB`rZz^wJv)^n0vLo;~kh44;+qaBna@Y;crn^ z){3gCy@*5xvmsjOv6zpbv=+zh=^p6PZB(yoMLhZEoYkUe;tVvmyaJ2Gi&O6LQ_ilK{qD=)CFsqhwWri=G;YGqkLA~6Mv)q~a@Z=k>LIIOmEq*F2Y zhtA-ErWc9s&oD85iJ#Z?^zyWB(4(QQ>Ii8*2Fa{KO+{c88WEnkj0amfabxfktf@Z0 zsf|W_C@XJ6l8pN8*JD}G)S?AMEMyalk72n$45ZN1cnpJsr|3C}IMJC>@4#j&gURIJ zpn@PT33Snt$sWp-mR& zv^EP#cEC6C0icB7@idaK9--eXC@E=1ch}*pk>axYO@46^Wp2+#l$JikT%lA-@ye7; zOmg~nv>(S0-#<&wYQeNwHn2n@iN{7UF>#6KXpEk1_6m#!dm*Q4ai#BFDwDPqcc;9- zG6^OSIE!H5Jg?Vv^-p4Y`WniL4j~l22>uUWBIyFf!5w zzyAz&?|FZox>uP_OwEeoMp4mvx-ml{bK{qvUPVP^2X74NbPV z@iwg-n9(LmCSDRpgXgJAMIlKF-|Oyrjy&(g^wf2}XSY}Jw#W>ut$TupXEAWGkhf-& zi#Gye;*jPllS)QhIM<22`%l8@swD3M-ImJ-ZH;|TaJ!{ca! z%du&$Bx+Pj8I}H_uPM)ac+A=86N%p9sTGfp1?EU{lAk31JLy(Y?f-O zU^b|U7>Q?$7Y?0L%jjGh_l9}P8bxV&D;J#Cy9u+i6IAtr+yM5RtB$X7yhY9law&J^ rMKG*f%0O=n4}u`vje-7u{NL$sz}_6DWR$@j00000NkvXXu0mjfBO`B~ literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square310x310Logo.png b/apps/desktop/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..33829b00461275da32ac431a213dcd698cc2525f GIT binary patch literal 27879 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Ƹ#pRklp|2yGX7*h&+e7Ul?8J*SqQ! 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square44x44Logo.png b/apps/desktop/src-tauri/icons/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fbe1f3f1c3579ffa899cf42e29a46af60c5694e9 GIT binary patch literal 2171 zcmV->2!!{EP)V>QIstB^ViCcrcoeWmQ53mx5M;Q9IhgtP{l1x@hjjUwL9-_Quy@jc)B zJ@4~A-#c;u0`8$hj(hC55BUEAumn>2B^mOXAlQaY1BpaN=WjgE-w)VqR#E9B8U8L2 zxBQQLBoe7(QsP20+*ookFYs1tq49}^&1&J1mPtM6Q!7Pf0G-`uVKnK69Lx!Ja`-a% zYP2w$x}Z>a^ZNvWomP7G78G(dnwtvI-F=;}1iR)EV78QkFo4jYl^7qe7#5q3K2xHr z>nfyD8G`&XPWo34~!V-p#$_Cu>( zh{nd#sJZgFgJN!RSa1xk#I^dJfVzdEEI~_i5d@on*l8aU(A!_(1REZ{0ttz4;L}fn z3G5@Nzn+h}x_lV=TKRo(@vp+$YXWkz=J3gip^s>lkjuR>AjsgSnTn{WKcJ)I0&E8R zAio4F=U@W@VvsR^H;PYe#Ej_YY3?@E*B{1`rAKk1=vjDsPe43PX3u}Z?O^FSfhacI zAr%Xl&76TT7+PU6b)cuG{RG9wIv$QImxL%us^-njWqHHU!Qp86JRy2p1oO!AO5Hxum%*I|= zX_;*VL?ZoZzBa*vl+^9;^z_I6FJj?E9PMbYKtsbf{CaCk30AH?hsK5@IDc-7gFcoK zS30RUD#&?+%;qjSyJ4~Pa#@qf%3J(1DhTEm80LNLvTnU=A>@Jm!Cg~apMvYHYt;+ z(~iKvIGjJb1@Q^5BPb{dx!GwyeN{Xz&s}b`T0|R{s7@LHI)Q!l? zeH1EHAUr(B@PtZCdK-riF2)04ix4~Ouh{e16s|O4<;#6pbCe;$nOy|hYBeAtY%`7@ z-9!p-0nsrpp#1yyFf-;wDh@527K;|=ATK9_7mJa|*QnY{wwx?sJUoI>eeHcTG-V-e z?oO1P*u;5yuJjE`QhzL6UWmePpN8(n8J85ntq3y`IHSw-Rxa~Gvn~sl>;6GW_5qof zRDU*VV8tgL{jdrqWxjUMl}T`;{RkdT*@`QdcXR&E zh~5m9IuJ`9E1(1|$Jx@?T$V5QbeINItAh{_G80CF9u`VAGr2B}CW1?r$)qRm5QqI= z&OmbVKZz=S$j_a}Cneqsk1~fD9lE<~VKMcSzWP8(zP7FHJeRMu^pA1$2w717$S)+Ls%i(KCcT0_Lmg@wwsP}RQT9GLwr!}rmJLI{ z4iS;R$5&Y?Shv2G{PQJlFWuGT5v>!|H*#nmluT;w#Jp7Dq{WAs<)zK$pOKXO4vLF5 z6413&G`6F!w~@{!lDPTg*7jq}*y$WBbANZf(vdt_%su3~l8F*gnE1d#?j;loUw-|- zzIblbnZ;xUV{XPLORT|%TvLaJ*;yLopJ={mIEzyrvyQm`WAmew_+ww{3c1@4xB8uPh!EM11>9vXfMGc%(h0X;xT$K zUn}`l`DO{l8X^_tAK-~6f8d{oYga<;6%3v34DUnaWY3{89?Rv?73GkM-QvsSDro#7 ziNBHdL5A=Mc5X^hdiqszY!%4--9el_^)gni{*FJ>Pqbl?E-BtbsPH2BBEx5YfG~XLMM|I(RCB=%otyc|42Cl%90ov-=Y3n(_Wh;uQ zz4a7L)X1YLBlE<9z!FfSnT+MDPEmoG&1G}Amg_JLS!cU70)DTX{sK!A$S)W+Ol7?Vci`| x44P5+%0PNsmvbl@i81<;``^>u2YinM{x8=<-KnXryYB!1002ovPDHLkV1ii1Ay5DS literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square71x71Logo.png b/apps/desktop/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..738f2e41d94f54f3b7fcf140c65527cb91459c9f GIT binary patch literal 4096 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/StoreLogo.png b/apps/desktop/src-tauri/icons/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..797a5442d0534e40fd6f036d7af2ec677773be9a GIT binary patch literal 2520 zcmV;}2`Bc6P)LU}%I+XGeFmoCmpIQJsy7s&5||j8?0M(b$6S?ji8& zKNlu?ZZI@JZ{x_zFXM1VTUzSmeSV&w`;okE%|hy*3O%DkThPrl3`M0oBoKzp_gCE z@bE;+p`{XpGM>@8#a>%ifKxd?LHO8p^tg;Br+mR6|Gz#KP8G zr?t4MXmnmdTRT_S*}1{Nq32@?SQ$Pt>Qgv5_r{?Eui%C7574t`81nNrORX4<&1h<_ z#s>MjI-k`}f9RP{^;~)-4#jw!iQIyBRH-mqmdn++n0*Es{y{M1-{n2HFRp zrPbO<)_ncuAbiZ9up=Q1_IBMcAoyqaYS#qV*f_wmR|GOMR#2etz(3%1?A$g=*wDNH z9opHAv`TutBL#3rXp>h?!{I#uW)6bc%)=v;@SlLgDQ}^)G!rq?52CTL0wcrL5bOEj zP|~Yvplh%_AwpoKEI@O|c6O~+ho+_q_|cd5=@U(Tz<`$KItfOr)2sai5(GnU#;i1) zJh2+NIdQPDbw)+`1z{ql;8P`O=+Sc|UW!h@!KC>pDL&q=AS{9wW7dYUQCxf!I=#KD zGQ)tu#*b#%!R$42b_R-zj-aq`AEKsgg`;CH%BF$X>U}h~)Cx(&(q}SHzKaX_Thu<& z+^)`UK_DgxpsK0>l@*szem756QOU%8nvI#BB#-+NqcJpeIr{iSOE#YOo`kCfdvN>K z8N5m~d*yNhPG_!?1uz;7Pgnh#q!zTYg52QDaN>T^*jSBGqt{RokHx>@Y~kH|GWCip zIJ-L%BS*c5yz`rI>0&%(>jY|RZcvTPZ4=E}QO288WvXOC10BJo5?(!KqN}?rzKjom zv$GFT?oVmOS7O+Rl~fnK@zw5$7(a2d6#8c$`&eB>w$qQ8?#XvY2QMV2OhIi!A*Q^v zi?q@kq?Kyvx1O5czcFO!QtBNG5dW#4XehJ(veu<->mQos2N$WWjVp34u0VBN4t4Q( ze4DkF7_L$#dMtIZNSN@k?^9MH1#ad(W6i5gfw1B=GnroRf@?)vaIJU?BF1k(LBUS+ z@`^;%Kkr}+~6FstY^t`E_*%3j*F8n%|V0) z#-XOX5(iSIsxUOD(!68#11)HX1}bVN>g=gVO<72WXumi+t@?(f(I^^9>O%-c^Of&(Y6!d8%?uo+0s5tTHOvBa;Mr)}cVR$iI?8&kk zTAEN=mX09bRYc9D$S+tU);4t5?`WrFK0*dB!Ofc)`23TB;@fY0myC?GRfw69EP6}{ zM&HR2g(l$S>`k`S8G4-)HO2GtepO`w#*AAl>i59@SPUQW2UJvCAd|IRh=O-f3a;!R z6`U^A%`meDlW8s2SUTw;{{F91iZloactaI|3QR6v`VvQymtfk=B-&wl4r#}hkP}RV zM~`6$3SLBTn?O4yFQc9sDDRw@rA~X9tWDcNHssgK%1)7mb;Rx4XH+?EQZ2C^a?bq& zIoTV@K;=<3E+Xyt63HBACMfvll&vY)wl!3?Pb0=}yhkKY8Co2O3vQL2CMA1WvAjCl zdqe=$U$E-Eb2}R^&&?J`nVmtJs|2A;+w{a-+r zk8Nc#ttCayX34wvi?Z3qeS$aCG>;g<-1Mrdt|D>wB!ow-r45KEe0TjI#zee>n5vwz%jp(dTTU*{#$UZ0Jm*1_opO zBX>f~P{}>Nfuw#MZQP|xuc@yu6Pc58=rw7Sd~GKtW7tNJ9Z(6f)wFEU86qF{ga&Pp z$#Hh<41+N&cq56$5h%H}@6lVWs-Zf5^eqvY3l`lW!<8;s;acOBXDIP81CKo-Y_SA- z`rh$^$r^`)=A*YB@brk5KA}-pi5nryd4^YcWfsb-vK~34`Q(ZF$>5>CQGyVEqESDt z7`GNfJxQMi8d66Y{JWfDwPu=6`7l&#@o|BbPj#PkJk7%xTRBNhtNe)Um|3u8q0#=A@pqi8jZyY3zxqjcJyi zBt1kWD!2qUB3f|4E#j^LK|xVbKsI53S$hBbhS6xy8AUkh@i8#Nd;h%u|NeXLcfWg| z8h{Bu@F+q`Nr8Li+539_uBv8Fb!ix&-`m%)aWS;bCP4tu~j zu>lIuPOwDlS`|`u-7a;-%N`ZuA|dcqDvPoBBOu9 zpA`V|LjhPB6L)TMqbdjIO5a47=MtR1_!rty4>UI1f|pwq4KqGq6AXx(@FiSadLZ?S z?g;9gfZEz(6cw(6uBi$}Lo<&|N;!wa2mggbd9RzTY+W9fZ3%3Z$`ST7I!1orkGxLlgWE^+hb5eiV3 z?|EM<03Y8lOq#k5nOhQ2Q&R*_uR++AH4p9{ebGZ3Pv_&&y~hOf3Yv+G^^qJSlBBYk z#bg_7z&kF2?ne1hTBw?KQZJm07cM4euykGkaB}j;tc3kIa&Q^D&a`KCps-*K4Ejd0 z#?SHJ-Or@hTzfIq-b(;RqY|XE z=H#KYWIGNYdV>}_UjgRa4Lt*=A^V$oWTkM#Pfo?wuM<#Faol3PC!4X&R4M4y*LMVJ zs=tGtcwJW6(XYDI;rN(7a~GP3b#`oa?orEXI!e9K8Z(v-D2-=_wpM@F!d-{OXASuraVD&d?s71L5ix1ZStNmRdlo zodh?xzMKpC_g_FPl!lU$O-P)33f+!;F0orK$n{Lt7?K~f=|W5dzWhpz=u zF7WXlfxNs$2<-M8x=|T>Ab&1j8$9G?OqsgH!e$R@HgrIqkXXsK9>c?5N5T12iiO?? z>Hh+7{xxyb2gFnZ~g2kxUo#Aor?)^ByW$m0x>UAo@M=WKF%CfqXKu};B^g0rKF7Wjm zfs@BqP-b3Ba^h7A@Os3CWuoZvM<^@LKv2+J3?2R&C$_|-^~_#tSBFq3x&*;}<}%F+ zy6pstRpLUec0zr9DJ8Q$BnIn9%$-0~Xc}%-<)X0UeOhEP7e5XTo>WJqU`^^IuJ9Tg z$|>QckXxm}+h>>=h`Qt5NfE6^3(FXdIzH{<6pZ34pYZ3=V^$${%m+9{Ouf~j^0Bb{`E8)4$uym2fBhyEJ< zLlz)wM9pfvaUXY`p{f7NP7)HfAR5Yd6Mvv~NqIedEBBizb0!Em69Pqq6cO zwr-hDvimc3qg^|b5i(!_cR3;`utNqs&x|EpY4X&~?ZQ~HtukCOzl4j$=^VJ%uji0P zaseP#9F_Aice>F3fssk+{Nfsrm zYpl3aW0*Ix)z9;f{SAern-Y`q`Mg50ORy(+J55AnT6Wh|RP zhz_yNXprSL62Ws}#t&WSy;0k!%qa->DNTS!XpgT%&HsY;wI+Zmc~j z^~$z&I}B7W$57)pkad$@-_VBFnJfS|WsK&gSqycrJ>)nn!INPtG@@*)dWBh~7=w#U;`Sj{|7;OQxz iK8$|~;wgw9(eXdX;xLuakVu*U0000zRM&N8MTtQ;8kl!Ugw4^yg5tL+JV`V)T6)jZ%I8kiZlS^>| z$3pZI(fn8TTlW(%JOOpImZE3nHRQ*{tI^4EwBtpB9kb}_=Vj)pSG$EhWjJ}r{}>VWd*m} z_yC0fMixM_`=fhke!k-0SL9ERf#>GCx@$~KXujsl#T+#yH@EDa9$_J}(n>%Eo2_SD zdBwzOAg{v`A0pv9I*5vgC5@}`GYWbz;yV9Ym@A8ZoLc>-fD;EnvR0=P$sntE^lR*T zb4Pl4xm^d$$P3?Rn?F{K-|N*;4l)MnGA6B#sey=k-}pFB9qQ@ANg22VCc;g{bdJSL zo4C;8?lN~EO?RT{R5DZjC>}GZwiTL1)--kH;5tK9Lxt?iDQH+T_dc^P$m5)S z@PfWU*UIfZ;?M1jOKd8bd>6e(Dwp#oX;Shbyo7e%-1k%XyDx<2jPP6ZW@Su>;nC4x z(`J|Gbe}eMG*Xw57q;9blnN>`rZ6loFXD?WW|i!LHps5u^XxX>ab#3AdXN|V?^r?C zPoTbQ;3fMXH}K=rq!>lu7+SP*|MdB9LNI;kCTnkE*3gr2TbmQkj#`9o{qo+(NsIMM zpwo>nT<~v|dLR&)Rv~nw?G?*Q2hVMvBNHqFRn

VyS{{-KG{>&tOYkie0;fI`5zt zk!w?qZZhLYeSKE@rf^*y-QQQ6Ze1f~GV6_ZF6)igc2ANsbl5X;RB%Aak4VW0W@>KN zGA|F12&6?U0fQGMH=y9(f$gUWkGT?1 zi}{ML`u#m1KQPTtLRL}ItZ$PWDv*?P*I=%^VjQZrU|3q;5?3?=`$JKHivP*J9V`h1 zCO!oQ>GLx_W?JW}2plrUG(sa+04GjFJO)to;%Hm3@LiFxx)S6GYbMG)S`kCC^D1JQ zex%I4|7GAoxA1UVZ;Fx6{7(%ZEM35`0H?M9fzQ8x@j`&k_rDC@a{g2STF=(d0_ zRPo3DUp&a=JcHi(HEVOh^fz4C=X3jNU}04_Fr?brxXq>~&n|G<=;KxemG_iX^98lF z!o$qzcZj*$C-WumBQ8rZ``yo5XQ<2cU1=C5k~Ri@7?|Izpg34PCtZWa+g0q(ms5wY zy)ZB~W~=YzIMP~IKEax;T_KyyJ-P-%ao>9Mo?d(K0y~kx!4CU`b+NC@QG}qhcFEFN zy&!%{{5;imKvxzR%vfvM_*iu9b^K0*MX_dJawz2D)uLp7qu(ay>|BQu{-O=)Cz)k?@E@jmNXMZcf>w~y=EicNKrkbX8kcx zv*mF{ku3u>;9#+BKrT8`sA#WH++K4uKg&|Jp)IBM_=3@~&l6D$%q=*&FYUaR}C)4!ljV`qhy314-YPE-p~WuT6-kfy9S+LCGy~ z-U!U6RLn6GM96A8UEST9dVBY{s)DV)(}>&x3wvV@$={aL)_)-7V>~ot^TWOMS&=?J zGLqrsHh<(Koc2osIL1rGmj|g8)!gWH_MN_fu$3`r)3y`}9CdC^Ce8gtg2{N$tk&w! z^`Tv`wzkvi9_+}Nl1At8Pa&fL_h`beG;$4i^`ztu z_h+&U=H5v9q`xz16H57xWm1coZe|>f&8&2gf6Gda?>?qvv89`q5$fvT?_-m2a>{J$3#X*t-m#hANsepGKik!axlI@O6N zE{jFix4%J4pMHXt!3ZTme8!18Z?~+5`Yi3TNP0@Mn8nT?&mV&Nc>NMJ=uylwC$O5@ zGyiBGYqTHGy$FQY6Fl7HvqsmNbgA^%k!j=QA_ahS-#LSLN)OGFL@8)MwN4NMC;goaYXxfi%^ zamZ$Nm;&7?XT81)z}iDp>T8($RTT^7Gny_V@%>77Xc7+Y0$!}g?1#^=9X?(blNBf4 z`?jS82ET-C`hyA&>UIj)09Fc$hA~JZX=uWWiYXBz(K4gkI;W*xw%`vs1dT z-yhL|=^2cC2v=2N58OFAA_$G7>*?ZSusBepwvSY-W`Z~mIjh@N#ezq%Y_0ReSTz2d zx(mTImO>?%X(B0U9szQ&wnJa_xLJbv;Hc}6reC%oo7PY#3GA8Yv`rHYp6~hGUCJar zUmt;PozdfqTgOm)TLo=pWt+C7V{Iy0TwJ5^f>xvV#X_^0kk%l5W%0?14-XPI0@5cnR2(k={qul=A^#zhG57c?drpNg%BoL7O>!MW$9Z@- zSw=CZn*;Myx|?$UJId7-y>~>IPr^ln>ZX)0Z|WM$`>SMZ2Y9z^VRR}UzDoHN>VtuUviZg$ zCWuHs_+T+HgA~gY>Y3Df6R-TCLS@|&GK!E(qO&gJ*}wB*hZfNXNewsYCviD-W(k_j zu@DqotiKSAnESM7qL)_{_6x_MAyFp^QX2ej_D90kp|=Zm=3&jF8s(R8~Dz-SEdopVkh?@_zn@&%a zyLEdw%vXO@<-05V!V8Pt6&MDj&!E$O;m8=blqLo;+JVuJ&gqTa?E0xx%-=F7%ml)F zK{9D}s8d`x)KX;1j*anNpps;orw47`2Tpegl$b*xhiaZ;5^hDlIxc)Kr-;DjCGYdr zEtVxoSZ}%`Jd1M5?xMeVwy{VznF_WSd$ZLV^~IrMV9=>lpTe2aS7MSd*j&*r(I?*SE{j07%FWHNR7v(5X{U4E9uPkcxHT?2w0V`!LiAuqtuY$JKa zY~-gpzYN4yhZn3w#{P)&N!&lI(}ZV zRrDXMvT^$atH$2cm;Sg%e-%3~ZJg%vTKp?Hv0BxkHi0vg{hSQ4NcEC3SMvn=2;W&<>dNm<{Kh_*MjI!vyucY1sk z8A7b>8Le z=Wne9>NGPND=9&nViV><;&_e^rt=nH)r$w=$vYVniP6a5{&d2~5+tXC`VZwJZOdG7 zVSki0I}U+v35|`PLQ&8s+xysv>BJf&$|{jtCrX7(5HH?Wd~%8jlxp@?>yr0@Amky@ zqRLv?Ck9f<8V70}?;%5iC*J9pi)6{sx`K(S)cGHYD9W1yV(;RG+N1S1Pb5THymubj zSev@G0yrf1Q4SrThEXhpz#Ns+2kU>oPnIciBJ+Ns;CfF{X=YeC0^J{w5q79C`5Ls% zg0#&RYY@NR>CMs%h)Dw?axz9}zCE_@wGhY!FT@9-NX8clnzdv`fBECFU;e;C1uB}U zN0yrZISoiEhSQr1C@>)a3DVFI5t9ltL?i4pd-#LDc5Y^|cr1%Z^%K+J-Yrt6{0iX+ zpibgw%Tbo&XrrQ=swc+8#E5tQHR291TCIDKG5?XoF;hYr+4_ssITTu`gy(SFI7Xrp zmnzFu497!ol@wZt3tZ3#!dlu#XQ-!0g5X z^Cy!5ng(J=jOC<+!)QADK8ff`?uy9XFq7zlhyww9(M#~djAnkwsr!@nq814mmM}~- z7UZChUETT?z240!&}QvkWg+x7nBo;KtPHW%98q~OChNR7W@GA8LZJQW8CPr3ZhUNw zG6_>g^K7!kIpfNH^Vx$I%1$dOy^W6rX=%cI{=urkcf{6&Byl0NyU5+2lsRI*j)dQ^ zX|luxvLjk}PHMi;T#hTXE>LB82V2v4IWkPh>1;OdOJ&B9jW6#YQ~g#^c^q5j`HGC3~*Xf zyi7)4-7|$y-#FD%Y)~ZD>MAS!!>)+KCYG^O8Y45`bLZg0u-2i#{xC(;9Zj}RWAQGg zAg+PM(J2|L5U~P@fm z^1(!+Vr=n|c)X)_S2+2B%W^y3807r>KPPvQJFA;vA#M)*UsjmLy4tplM<4J*nGUN0 zHCekd;xVf8H!Fp|qpd{l#j9h0Jb!4_5x)*P%0|q$0snrE5~@~%ltBVIUt(~mU;*;1 zTwE#uZLwh|AeZM73%M7qtwO=~WhSPJg4b+(#$)2Y=-cn^X{0MxMneVKj{AjZ%|<)G zxI`}lj3=m=_}g?WGO)nf-vPnzO4=vk2Qf@2&&gA|E|;DtGs|IdfTsc!ce{ZFul%`C zy{Aj(v(ut3i`gCAS#~YD64|lXUnSy7Tn}r6D`%KyDwpWHq-ZOI+^t#3mEGCn;|=HD zX1JvN0nxMVxEKin8EoC8?c(62nC$s;aJ^y?V8|v+LenuCAr|KnVZ2N=;xjoK7I+nk z4QGbg;GZ3~)p7VFFr8~}!(H_AkuzUfEnx`}xBK2V1jvhXQFzXKt@e~Dhu*3I68sLJ zUlGPWlQ;W@1_$e|se|?=h(8%CllEsJq+|k;7nT4IJ!4jR@FpbgR@BM+ zm5wZEEkU=*6;UTWg`56MSamwq0XQU9YYwm#-YyP?i{xd^nUWO(C~e+4KIWms{QB^A zQ;pM-MDh2v;iPWvXV-C>6YA7L!TtV_EIFnmr{Eb6|AO9~B;066$Llb4BH*jwJXyd4 z}X68PcOV=YeSc${ev&1B||r+49*kC@}v z3JLF1|MX$KSbbWgMsJ|O4ThV?Yx+|Z;WKRw*FYy#JXjIEa1NTM$BN0r$U-aFIpRwZ zY>owofF135ynInlFGqwu14kt^#eKeX7?Ky9Q`PMG0PpxUv8x;^E(8K`jCjdS zIMLU`RG-z6S)@eVHO5r+C_fx%YRMy{o4jFJxxbdcgGX{#*W5=9{3cLVQ4z_Q_nE5h znB{Jc_Cv$m5=md(-^*}>xJ{F(Ag6RWxZSb7MHPh}DGclGB&!fBuF$b&$KnDlv4j@` z<-TfVZQYp!ItP`bX<3v7)HPjJ*FDQ=iI6MUiwGBJGK>|mkzd0`WO~iwh9CWhs<(&| z1yerC~neY2zi^2Hp-Tpc*Y#nD^4qfM!GL7~h zcZnG#?kRI*>vaoNJdQs{)_-L63bW}NvQAYrJB(zKWWg*KtkjS*FMV61*JSvGAifgA zTS9?B=n{-To1D2BU-ieSgOm6s8)n8hg@0TqSeNEvcYbGKTBk2>mA#Yhg0caq|Qn4_oavY0u-b(H87 z99x8$3KM!ldo2W4*o2X8Eq4~6C9kN#@`+fofqPkiW4d)&=q3p4@}Jn8EFwG=Z@<1~ z+pw4?)Yq!5uMOvx!)Enb0MEzk4hIVItaa7#8S&d z6sW8+G|`9OsQ;%a*)2?7&JZ(jd)&z-rnDC}D;FlO*oAQf4@o8z|LG!q1a1W7qp~iV z*u%v$4o}22K8vP$R-%vEh4ieB1U?Wspja;(CONCiucbxqh`MfN9*MmwZexER-@%G4 z0dxNBcvI5s({LZG)()%Oz|m7%TWXvyTlVf~XEa99@m6&v+NVGaIAA<4EMiQilGu7u z0iAH%>xavyoi|{k!fJ1TYC08xwM`o^SC@igdY1g+J$~ZoamVXja1@O6#W16BF8Z=b z#+7q4rL5}K6yn0{c^X4S;ReusBga^#k51bB}+)KfYowTX1CO z6PbOsypd-B=tfZfS-o)laqKZ=?|&h`)~E ze?LSWHRd8LML50pp74L69`G8C=5;Q5tTfMHvz_=*KPgzY47a?&|n`P0^#)NiTIfCyU!hb)7 z1sCTHY#&N%ySCA+NObZMF~tl&Vy z=;<}~|1;dP1t|62XZu zUkpGPDth`zS`K{xRDzf^IRGqS(MDdt4wTPk#RpPEd0QSk&0J5N zxDK9Ha;I~<&`VV#HzWXk*-x7F<|F$Y#hfF+zpVHXQG};vD&x0N*qT;7OT1B+D6;81 zzk%Qo#ny)|# zZH_IjG?waS^^38)vT?W_LI$l$3|eM*u!K<8$XvpnM{yU*p>Rtu zvOHUL&CQ7{aePK(RM}Idxu`Uu0V(jtEW<;joT^f7{0+=X9N1^WNLn ze!J9TKpIJ#Npt$WP4A72^w(u{EEv&4_>d-Dn#NNARq6#wH3RK)Vm%D zU1lM&!vxC~-V8Xx)Fygg!Tn*5Cq*zvXU#-0tV6w-oA8zmJ}bkMNL^!>u;g%>?7?p3 z6l9fpJ5|l9rlB6&7oK}q4|Uv*uQtE5GWiE|Z=-OZm}D$vst0`+jw9?ZjTewws}Fxl zngINEoQ)}yq$i~$Ee$XCkaLkh%5CMwx12&j*;251j+pkUdqMx0XRe$dyL_s)*tp9Y zPl_P3A6{@DdDI%%GC!RU&epmWSHN#{-8m4Dc3GFS&1C|h;TnW;sbl?39;n%fGawY+ za?;HG1eceU(Gf5Z+;Lt3o9L{0vg(l17Re^$zUS7*dOy>!JOdYI~*33%|pOl(I|Rv{sxfKXm{jO6`QYQM*ssE zPtbn9=@6!ec{*#O@zalz*uO*@QD-Bc7N1*IYlrsvbKzokp5YXN>+nZM7l-GZLWg7q zXJ$&x>8nC^r=@6tX#Yg#u_@Is2zeG=(lhaXL#7iFJWj=_j~}otG~)=KBo)43nlP+? z8Iv9Kz1bF74i0{r4NQNtP8SP+p{0qgmrEQUru6G43@y@waM+tYWQfHs@QOh}p)IoQ3nYh?l zjYCQcJF{1_pFio(midO37l2-`pBhXjN>VY$mlM<5eYuy^%d!h{Tv(H1?lI{;-G|Xb0Gitn$VER;VSilZWJK5lNv0am`P z>Q@S28WVMY9<9GjEU|wiq8(DN)2H^qGtOjqFrRs} zt^e>WqM?0>U;#M@wpN@kcvxpfn6b?{fv=&YR!W3)(7$y;JPN=kh$OjOJfJ^yei>*M zU0l%`Tp)`k(iuw1RxZ1zqOV&&Bq2q};5u;lS6cPAYE|qxy7737z}}u&dj@bP3@hel zcM%!fzKw3<7pIBc@fDN}NTxg&(-UGMO>7GM909>Ve9NTqL^u|?#vy{kFo&GwkCHL*P3ta=@XjsqLy0We z^z$b#d7R9u?}>>I2;C|JiX@8Vw5Qc6YY}>u_D?6Vlyp-7-tsimtuk;}jJozTUToI6 zRs2w~E?2JtzALu93rs%vZ!hmvb;3-p(8sXjJRC7^Cf<4~_R4_JqWDl;@ksX&j1-=+ z!nm;?3E4v*jN8)dh5&;s_xa?Y(dqSG;kZ!uC$GqcX|2|zJD_(1P<6*$@c1QJPq}XG z^8U%_MGh3G_PSHJrgHAD`!Lau_Ee?IoyKMh(x^;>!4~)y0aF3*4yTGNHO%eWC3VPs z8rG6NI()z0RFSiHHnfrEbk>Za9`+fj%V7X8xX9?k!)Q>e1_eUC@g=TXfU#O{tI=TM zdZ=A{ALwST6m8mwo>{HEqsuuQkJ&ugC@d#7=;i&Z+{yp8;X=Uuw0Y>EI%^3$vNuFw z&eo#pxJ6Y9q!?BS6{esd%|nn{`<#k-f<%+BTEFg`G2}4&Pfae~3NxHOTQko23p8uv z!N1jq!*;Pl5Mr#6N5F{)rF5s@xL(Z#&~cJdG!KMeA@DS~6&#>NexLVgl`xw3dixp@e%IIt>0aWg8`~3elFrcfdP@~B zPZtP^NH#n_q^%jVc21hHF3Gk8pVA2y+_P* z3p3P6)Oa3K_3$?tmfPQBYL@}kTI2cY-rpa`*Ew#EXxjwVekAU_omODN8r5Xgm5oVE zJ12!-nwrU*wJG=PXE|qYy$7bo*83MK<}99r+>amNs)PO`F;%gx7{X`HCyZ%TKbc%> zhFow+mWTG6VRsSe@MiS}9Y+5ZV0y6t)6-TNtoSta%PnEQ1K_8AV{|_yp)Sg=fi`4y zAOQDE-@g+a5Tz)vkye|Wma3zkUjOsHdj(fV$}JNDCD9q^tqp8t0g+BnvySpn4v@Rh z(e6#P5rsV7CjV-Z)%>2`Bjb3fY1e=hGa}lCTpV3{Fsdj*o9T+u6P$XA=Ulp~fn9qr*$V`7I$+7equ=0994Mbi#-R_~YU$%szLPejhgwA+mLG==1cKPE)6Ymqbr!2ztwNG*I7|nHk%0 z!V2SLCm4T4PsBfv?{uwmMN}81cf_j^oo7}HDbufj_kI`EE7*QnQqf2w*D!OF?3gx`m%QRQ|tGslyrNYxCtpZEe32C^?ga7dN;SNv+ z&jsJOmr~|iHra=oHC%<-NA^VU*LSJauX1box<8i zRl(qmM#jB5uFH{-c@-FTsxw+BemtOVMuE$_aNy)bKHn?h5qH?D8?~WYiy{lsJ#Pq;&0auQ}d>wdTUASGz0qji{Uq z;4+Xze^I4#M{d3ST#dR+$nB*&9wcGFXgfk1E02Y;FRKdh2(8LhlgVB;2+T>(j1+o% zPZ1*8r7Vi!JEk^_=*uIGotcoTNeDNV5wcbPs$`LKKJ)G|YI>I3AEXGWdUIEGprt*i zO~AT(giw(TRMBRx=0a^OB zj)St&^;wmla52mc03;4Q?0HD`MYan8u+_0)g#~*ZrmksnF}1kT30*?jQ_{Zy>BQDt z*062HUuq4fF`vPlz$?q#FQGFd<4x`#<2|WX^N>$gQ@{CeR>}6spG_DC+$=Iw>HSRW zatsLsjCSrG>O+ShdPFo_FNcej7yR=C`kIlYA3}_~Dy-FN<0(W}`Y|}Wm0TjfcPut| zEhb3&+^c-+*4KqpMDB12%z!GVm+&Xo0llp7<5r(7+rRDF89vz0dQR?jZL|dZNbht# zxs(C zESs6=^JF(K9dH-jx<6=-GJr>VqIekF1sn;^9e3yUPN;xN&6`!|zi&Jayt5LphFq>~ zY66kzERT}=?hQq9?d{Wa>@^S7)@kSCy%FJ7K(7uTvm0ZgvxMKyvehb$UeR{oxk@He ztxJmxF(bv&%FTF^md%^M7f~&S6MS%2SgAmC?VZmAinv}!f8%=_UT5uD0|6D48|wX+ z@<5TD<^!3r?yiP@-eI!r>8vvBX=|hgMDCF&<-GV-y(;Ubl71qzqn?B9A2AyEaM2^> zKwI@E#1V@sbr=_hgu6BG08s{2<8d_>ZN?vR&ox~iJC6CqA%em2Bj zU$V?q;@B7Vghd|>0mm)BrNw#C*TO>v(RkA_H~@0snVbEwSG(Ux5@yp;LVhrwdGaZb z%K$CFqh5~iz2QtXUfy;4lM8xKN|2Tc6=d;Yyn>meNvQGX24_JpniHI#c#Z&4#BuVM z0Luv29DySu>ePSmKkh&HANPNo|6knyvE?XZ`U{dDd@1m167=w|i60CoDl1Ygr04%X DkTwSg literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png b/apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..7125484c8a6be6ced3a24dc715f71b3100e7a683 GIT binary patch literal 2468 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png b/apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..2173c309740857b8f96771cd0e6aff8a75f8523b GIT binary patch literal 6963 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png b/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..92281f059500706d640cc2fe0742bbdcd24fd1cf GIT binary patch literal 5859 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png b/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..dcb7bceec4f77be1afd63a30f0e251c4328acbdb GIT binary patch literal 17696 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png b/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..92281f059500706d640cc2fe0742bbdcd24fd1cf GIT binary patch literal 5859 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png b/apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..20e52f0637f9730f92e9910d5c417edde931b667 GIT binary patch literal 10495 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 SasLl&1W1X=i-Lp=e*GTQ+>Mo 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∈W&t^m$H_17&k%ltw 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

AgBg!k_q3yQvbRcGN^UPKe?jA2wXO? z-W;C*-~hb7<(JtMJ0LU3U@rGf(DXK3(37R{!ixWS0-@+1qm-tE-NDCzb==!BT`!#sv}J7|9Cg z=u0}a*Pt=wQo9`tL)c7BARn*GU;l&`IqE!eSt$t#Q?C&U*Tl% zBSB(n=O;q+NIA{J4fG-!J#Cr%4ieb^z`?X|GCt|nxi-Bdc%|-HIIBZ2W`v2#l)CNP zOGtS_Zl7`yBN>x68su=xURp;*x>-=Ap5YMecBQRk(Vt*aO**yq8om4F%p-k0y}o)L zQ;LjiW!Vw)q}6vBJMz7P8g=t zcfu&Q;{R%$pdjIFdsD;cR}A-aU&1o$yEG1Gy2#PeQa-lBj@TA&i!3`#Ocg!5-k0); zHRdy%1Mxvp9jg(ZhikG>Hvegtun4*Bp*%U|_}HJ_Qn*+I$38K8004-dx?z@Fvkco)G#{w^V32XQeT5<+%`Yft@e!07q8@23gM0Wk;_ zEnXYC*|IYU*BSG%MrN9%2~6f1(GoyTi|#-)vQ%B1(CL7k>9N8V_bEfC&@=qD-y6(m z*Z+(gx$#zlPY<}+dt-|sHv?rokR2)p{VbHmLcDeAG;Gb#ei5uP@)pGYbSgVCTx!?i zHc_BRc+(_FjeCNIdqQ>HSLkrvqN7&U6hDM0rc6v|$ zj6D@)SzkOD}Q?wD;eQ}vmJ}C^kCh#YHdP5gUdoFQNBWZ)V1ljd+9V02 zb{2hR$f&Pm1CJ`nMd1DO#X#2&BQ#+&^5EJ@cL@3IxThwItyMTz z^REvLV4v^b##GDyV>?`rZuXigv;}2=)C)_k?*#JuW`+%-0O@0U`@=7uXXeh#*=Mh{*IK6!&~dGxGzxZUqHJjFQz23RSChdB6bv+3J_l$1*y9X5 z0u`N6Udo&mx6GY)J8?O}V!_Jo6gT4x8G2p}sXGB4%5B&XBwh-&vOjI5`Bvm@6Dx}v zf!X>j8J?07RK2$jJuQ=$`u{CvuaB^28zF9W3&Ssk7rpUj{?4>EDAPWpHRbB1zi3lg zhUuxtIeUuXjCGHSyQ+Sh%5~FU798eeZK7CCdM6@i$EPx!>N8<4MFEs_`FP(WI)F2Q z7kP&N_rODXpzjIAWF-J+&0)J+&%1W_%|M9zgSu;JiK;|D2M$@=&tc<%dSY#j;4hN1 zDN2HtzuN~d5`Gi>jxD?A9|sTw^qxMDE+{&=$QSq$1h*WX1vztaxyMjEnARxh@+tF(ZuFee#ize zD6=gW2S>Tu=*t!qGKQ@uP1hcVF`DJ$z_W)6i!z)wyvBMbQi{U!Rk`<82*qS$HvJ%8 z)&2SmLX;+WX3@<=bSjlBS)?BAa(|E(0177#()=v**O_y4ln_owCvk3FG!;+8zpP~T(rvyDe%*x@rsOo_EQleLvEt-}J>4g8j9>ClM`+!O?yvxPLwUN} zW-B5A--8ma&~M_fNNG=RlC*#Hg9yY=IJ4h}FCK572t3XnC7vPcr{@6htgNB+CQ`K)`zJTz{yd6 zOAjKmvyD*9q+P#~Qy3qlKVSpQWEb8|#o3L#T+WvZtS*aS)okrx=D(8s_cncq;U4pX z%tt)?YDdX_Xb;#gpESYuT#L&@4qV}QAX1R8x>ctox_WCH4k!fy0S~wNo(90ma9c|Q zRPVc>-z+a@6GqI`d0X&CAwh5?xs<~nSW>k@Z(IMNG=MZ59O62|kal<3<6DI-v?7Kf z4ybUlXQ8p3(L(Q+^yzfN`M$iD92|v4erotgp5I-A#Bx|cYPAY6S^epAZzp9Q(I9D& z{JMmf9MbT+Gje>OyF}f0Vu^mJyl8j##!?^V4kRP>mOTT^sxZo$Qs>J#7Vmia^8-cr zDZ$1!oF1Fv3Zh903Jt6Sf#LlWD8zRxzV~YoB{>i`q0j@$9n{1b%oBt;QB;r^g;{lk z-C1=XVeD@-sUp+Q!1qRUNW>mo*MGc<_m;Dl6wR;GeAp80^Av*&ZG(sR7{T8+@~?G3 zVAENKHw?FqMZ9@a;Y1r$aCx5+A>*1PAO*|neJVu8B$$Ij<`q9MjFW3%k|6%qhq1$S zz{ylih4SaTtU^%xF+XpoKZ5=C9eMNd_MYU?hh~@g#Ve#%GX6Q3=X!8J+Nfi5YW}Cb z4}L0~ay#ErO<@(CR|&beIb*^G5F1bxL%{>JQ(l&j8lfAY|KcP>xFvROildiWBUiqYiPvNVu%c+Tp@I{ zT$zMR3yj3xJYW$K%RH{Ll_T;qxZxc2)0SA`b7?Q{aR^tt-i@6=6bv~l3&u-ZtzkMm z%MQ;q+mWBlG<;#rixiz_r525Qdl~A^?n%3m!R1Nzd}-)#lrrsYZIEMnxpXgtx8VRd zYY+f~3Q|xciHJ<}o+rYQ2Uj8Wal(mL@25h;I+5}R#~_8mBY88VG3|jndj+?J1oV}j zM-7}@r4*?jYjEo_)RS`mt+ZOEJ>eG$r!k!V!H6Zk8aRD~GAI^+gNk*t)I3@w@02%Iyc5qnzeRuK!|{c&FBkDGSp0 zpFz01clb3CQOgu)SbTLCt1s}F2A%fwxBW!dP{?6FeiDO3gI0@ZIp>Jr<8z|oggBs^ zmqrZON9vkct){=>99jr@{l>0ws3wUF9c*uw$%i#fu!F z_fp7yNCk!L>8vs_${Y;nhGn*ldAs9+yi}E!;;Lig)S$4>3G-hKSK6+=Cd*=5o?9TQ z&ZebGFn=bC05ILV0x`_2_0#b(!>4wuoj-OqsuOV%_(8SD_=49~ohKH4%o@o=lAd1Z z4jLe$I#4k#tjE);Tv-i&1hxi@Hd^^6xaQ2>IJw^Hk%9YsTV zJvdH@1u2vpXfJ8$ev8JDlP4LUqqX%Pcbe`xa&=dPVl=#V-PpINPD&aGIi!TPG?8k2 zFXS`RfB1!17@h>9w4zMEqAT>OnZjqezg@8<|KAq}jE}3wGr(|ia)#(y(|n>@JQ|Mr zn?IA5p@Jc$M7*TM+Y5ik^Z{PKc^_(cs<74pr*BB>XXAkx9(hPPkhQ_ayLZX0@yEQp zzH4_k;a7ul4;a17Kc-VgGdC_RAbCX*AdlxF2&ePz_%i`j`&a~-?<-wN0w_YeXDi8j zUYpwG-gs}VU^$8{%kagork=0G(< zjAxuZF7opB35MRTInQEIv_?0)tV<>j-~;($itBfKWiRiBe~8i8 zmCiV%Bb4htop|A)RWtmN(rxWcE$i_?74{I(Zk7QMl8h3k{iM8{XD#}t#p*o2;CrVo zX*?MpwVbOeIh()sUG=uBfh7Q#5e7Ck_B9hNZzus=JfLcNQ&iMlR(y(2!Elai^!<}y z#9PyO)TFlIe11=2_R;-^WMlq6C7k%tf8rY^XAc5XIyhTApaKcN=CY^>nyJg5+iQ1I z4U?t;>*+9qEnRAA9p*DK%$_nTDv%k5-ZV_4u*-GHA;+^NX%BP@xrf|@M4cf#c@tRS z@Ggubd2Y4pR0T5R(1k*Bt5BwcM*;*)dpYNaRk|5~3t*BsSTo4bY{#xIRf}RQMSzk; zl031r8+L6CC$j}5K?XAkbARA?3Gx}_K-_~fp1mEWsR}D;zC52*4M;e8!&E(MX$SvW z*xRhgGZ~K*n!PA~DPUB7wwG|G1-gmPp)Ce#p+2Qm|Ee&N&Xw>Y``l~&UwdjncZlOn zIQb2dT>e{Sh)1>OODE(S^HU$%9DFpQH9kp7Qhni)3Tcsmm8d6J7J;#_*f_1ca*Ib4 zdi_P=6#NaQ1~47*wSKxpj3X4rACDm!IZ6^B?fJXo&2`Xl$7yT%BrDG`JQ`+xw02Kl zR$1Nn`CiP=FGW3Xp(Kz~Qs!%qtSWpjPljf4PUyRm;eQXclo)3Y7!Hxslrg)KR=kp%-sO zcdn}OE);HuuZCcIeKNxzOpM5^sz|tZ6mI_h*iU8LoMF*c%JFlwp)695ea~Tlx)(%Ve?>QqWunt0QX86=p-w;VHG8Cfm>AE}g@H9ceCr~_) z#*j89KNMUh?g}{<`4vDsqV(szVtExk4!RDFJp*=*xv5V(W5tIyhV$X9T8nWMR0J&$ zo$-#^Sn&@!p}Gjl1B>q){@!}AA`A1i9{~jzJ~GK;=0TGU@=^l+_1Qm;qXaLy#O|)h zk6M))K>H*50f|3C%f#0g$NDdK+7+uUpjCUW=@ikvP36Q!MvWmcntIeU*C+T35BCAe zU%Z2wYr(a$O3<45D$tQml8L*c!|>X#QH0xUIkOYVp^<#4Bj|T$yiKjwR!6Pf#R-2o zUuE|uuQ<|Ab~o>F%A;`^^B)R&*0acD$MCP`2=Fp#wt zPytt1-xmFr(zPD?f}h3Re-h#nm|F^`iR4S~`N&5>Bm zZGl~`=@@xhS|MG|HEjeo{A?kat(lK!1O5(f$fLd zKd;HQj~Cwg9I#E;e`Y8vX|4^;}(#U7UUUciIHK>*FEQv)b% zsMcoum2nXF)BU6K`_>1?G6?qZv3xE?F{Pisf*Ur{sUQ5{u-o1UrO5|A_r;aPa)^@M zzHhA2WuE`;?`RemID4%1|AHz%Q#5St?naYwOJ7^L#FhqIN`7%yK$dXRs6!fgrcy%W z7DT&g!#mKTgI=6IYJv(v1+>lKT^J{G4nMLvk%mkt&%6)%#y5ctz_j=qLFxX1)g}J& ztE`M7apY3AQXF&g{;A#HU9k-Ah*!BJA|PY7=wSVEdRG^$hZ(LZ>BtGmX<2nf`GrA z(^er59nWFmRBpf`^p_p=`{)rbE%WLp2CWx#xp6Jt=@s@5>@tRX@tqZ7%O8*MzMc^L z4eWKQK>XvO@yBsZV&A=mhNf_f03LUZA6yLP(}Ekhv)a}_1yuiM`0Msh^XfFY3WnZmC;iL$Gm%U>U=rC$ zcndfhW3zJ-GSA}w>OA!qT4~5%U%Th^k^H}R-WvNBM-jr{wgK}nN~Ag1`{#IkXN(8{ z`Fi(W-wROqlex1WFWN9Fq&+pBv(BTMzMRaPn#?rcw;tYh7k3>?FoW02g*u+zwY$Gy z*H9&KU&sY|=FIa2g_x++9@1hGZNb~|Y){78WY4Wd_WT=VsrzrMIV(CMEy9fpz5)ky z;bP3set|XZ_?Lc&Qsuxs+m- z(K3fV9P_U>Lk$1IR}i(?<0coXB1Eo=zg2N}dvw>&vj3>>o)(<)IYy9h(_FEL@9=)- zSM)P?sTg*nAQL~qBE~S+trBE=Rg2qkahToe;YPE|;FN!zJmz4h$40&wle`p5g{&I@ zJbm6LkeV-YBsUNN8aT7#+lo^unN`-@NH7tYqn+0R^b_#BIiw zJ?j4cM|)X)6_^`BzP`VYybrRHZ1<{)=mfW*X7J0*C|n|Ha+r;X{6L&=3T?NqwT8(S z9FH)*zsz*Mbm8}L`Df~?CWair9oAV7ECXHplR4K4#&YwDHNT%0yl$sv()(t921P}L zNmm%!b*CPy9T2C>kBo14Jv?43_gA>g<^6Cd_f*`X;Hd%@J}g6j-5&8^(2HXYAt>4A zE8(u1Gbx@XV;AvwC3jOqCvW>u;yb=I6j3qX*AhtrnsQ;brS@**TSDI{kyHUJq67%JdmbGk5eCz{FT|4 zP=W>~5P=S_<%W3iez}{uHPgyKRYn@`#!*X@s%+E3{Ty6EBT2$=-w4{b=&adZOZ@|$ z7&%t9y~^?b^(yM(BBGu|@zxa=kuNmH#d7!!o60&D$~2|=IUf$8OX z(#NEHe8O)j=u>)&mTA;?CXJ22QpZwA>E?eDgJ#KpIXF% zz^zyl6Gm1cI?YAU<|q=^F-7za6Ey-vADNL%5aO4-j2=JMz(jGVmqi~+ z{F#1!@J9*x^m-s`nEGFa@VhS_qX%<&sX!z|91pUyCZW{uK+f4~Wulhqi3EZ6jd_Vu zP~S6g$Wa-RqjIyx*(?O$Iq&on2LBFOw$qNXF5iKJ&I z|AM%Gx^W>;(o*mreUvq~f3R$DRcP`s$pa+1renv71KtR zh&~zH8;bj4Yr^y;1LRymPkxyJVE2?{f?bS-Z3KS`KX z;dbQ279RHHe1;a`@l`#{JxRfry^kN)Y+^K_(9yj`V~Gz>Ya*kI1diM8Cm(*-iA3)d|C1 zR^7Th_WD=+r)!WDZ_SK}_}#dxj#{Rbo)sqARFaQ|{=rN`WM`ou&9lKb_iK9hf}942 zl@Fk}gdLJRVJ&5%VuY&P;1q?NyBhZwm9Cbu;R@5gee|%%x#HxZrCy4l6Shm4jb0{jywM}F`$RFzd6TH2Qtl>&$x zx0@&ySOn{XxpBm)^lN*#`0d}O%oxB&N#($pddE1p76=SXn~{B920rwa!}exoH0I__=zP)2z4( z*80o>sv}@P?`ov<-#4qo&$;wVW@+vY0a8al-FjRK!^_W)cYE;&4VZ5(Mnh-Ic!vSP z(Hqi+d+Y_MgV3oZlNYsM@4ka8w)X__hrV=*^1O5leT(TZ{9|uVXxLZkoUE?RPokvZ zxVup~;&8H-n=q&@c3S|q(gz3#Lh&4IOpFRMaJ*I1d7-J5{h-2GKA)ESH_C9`jYvv@ zdegD2s#P{hq}|>Btt#h3o=Dja^w%;iq1tFO;_vmb@+Xo+XxVd+R~+#zyu4h7HNF`i z0Wz<52rqKW^;vENM=c7~AG~ncbqJcL#=r;%msA!L#w#y}Sh4~i2JEL4R6!sv+(H+4 zLV=Wt%ZIs3Ph-=XzAr&Nc;UTqhG+WleM$uWyuk`Uc=hmn6!eEh}3MrSzyYgp%4IWy5K4fk%2m8$ZeY zP@Vz@H1yi=G%QG-3g;gi4!hw28%IbO!x0C_XruWF+vDshEEsKSjhsu;kS?u6&~Cbe zcS070>O-fG?b?CEGlBiaO{4CX3uP(_qEfrLA+(>*wy`Q%d;h8Tkhs@@CFfBWPK6x` zKjoA&?*sO9f8)F4BUm&9k;J~F^i4M*X)kiHPY z+#DA9XRKPhJ`8b1mt+4D3$zi}c|M#C4l22WS?6nrjtj+s)#L68gvGYlYa&Q@bhqZY zp*8nVyC|o{fO`X$I$q980k0$?|JZWs7MDQjOv3!;6e>(Du8$qHfZ~!@%eJ;D(mYPf z)RZO7XInZho-bqQW1m+>23$5RV~AvAO<=^aLp8QT9NR@LlyYW6(cg#x+A8Ks(u>}! z&e|%+!&f;X8dt6DPkMFjASI$-l0^IIGECcJ>N(Qjq4Rcj)t5hru$SOG7~R{1Q>gz9h?}|lS?R{lmcy~8NF-`eu&(!! z1q>;;!5*5P96shIt1JCV{ig9CQf~YlO6qkE0_D`w!X(3?`^^AAOx!)$59e#47y4im{FM1&Z(@J0ZQ7kov5&^9Uq^uW1n4R`E`(b;SEydo z?Gp*+nf;|h!=vRtF1Nf$Mu%~`tWZQ}J%h`?8e$lPtwX(Vo7nAaWBTTYcyAbv4dn|E7ph_x zC@u!s&-y%Ih1O_lm{v&o?Ee+?y&z%JYx}k1$-{rIH6VH|e;Uc55Wn)K-ao7w$^T5B z^pv?|0X3cj%;k-qe%|M6EhXN(pSQB@^tkC6;yGHB7aPcD;95r$G0Rw0O?Pw+- ziN!)puD%hI5^7CJiSFQb86PYuOk_5r^vn=g0?vM9f!bZV1;!A29 zvtOqKAR-7&?$Yau&PTr?gH|Q13$C>^?kK}6_EI)}fQ|0X3iTUtiN|39d7|;|VCmOf zmMr+9HxUePr6{~fuCVnXCq75XWSkUFB%bMPYHUIf&Q#B^#>ko);d@N7sN6f)>2B(L zq@Gp5sRaL%zC8?V1`c!dp+Z5P|)aJ{Nbn;4x$bD?zc(iEyE}Z+8_<;$t5R_!= z{IG7q1V!3$(ekyF8Td=aUBe;bUr5hRsHm$+UD0FI`PW#Z92ysQrtK zJPEXVX;)P2#-B#>HUwBJc5{l$tmKJ89FyD$b_Qagk-;kY-X zE#NTlbIX=?pao#uMOlO@V*B2>@NB8v-IPiagr0dcxX58r~3A; z$D*sko4rwn;p#b(&cPd5vUM}Y=8PISydj{$=%Z_4FxI_pUl0$?Bk}058{2eOg#)9S zouHF|%PCk8Lf+p%Ay&trSy$YD%0{s9Rh$noI7_C!T|p`|@hVTC0`5lb|;zKk@)TUW4@bV}XN;6K)C3t^J9uxQ`D_3y5K zU8@+#kXYSXbYGI0fb-EMBS>6lkQHqe%eCSd9W*NZjpVz-qK&haE{{^WDp{@votP~$^=A%ZYi zLm~HkZO_-^Kv{9B@41~qMNbd6-r8aEEUa+xi4nSTZ;L}$^@hz1}p|EKTvj#m5@ z-CXFcPsyr9Xm9YyX21RNJs2}Pk{j5R0XA=Y2F$m48m60{RH2Y=xZxpU%@V8_b>*}&+N4{_ZUQwdvN9IsU z%x=`NSu;53o8Lag+v>#%j0_voMG|(1zu@qhvpLP`jx%9s z#1$2NQ_*ezgi{y0J}ubrq9B{jM|((Pc~?|Xp-)XVxAHamoyh1ytpM{k6vD4mMWrZv zDHI?}Vqd4OPswBu#VgK=W8hekcm6raecBn8-{6m|u!3udg}lFgios$W!aG1CV}lAq zRQ)0)9-sQrjK}e3rSAds1$Xv-VS(B|QN8H%OV8j{k>JWBZG_Mr0pEQGd(Wcvc+Ja* z0AM`WTd~x#I}OsQ+`n{dr5U^l&VMGBc2TZHi!LyKFf^i??#wa0L@c4-5Pw5M%cq_y zjB{8_O%bcI`+<=!eWpk`d}|&)TDy_>jX}2FH5S!(NNb(3p8t+^^E_{PzF_@gYrUIS zzPkrfrA@I4LFqC%;nFdTQo9qg)wQ}gq4!^ir6~E_hn?aH;WK^!APd;tR6@OedQBwR zu%!1TN)a%iZym_u)_$FvxzDhzt0L3 zv6h#`McH~qvwfQ<0nVn+#dSA=1qLZu99)9v2d)6v5Aq+Wbi7fDL}k9i%Fv#}*-vx< z=My<%>7|$_r?2^3yl!XGtj+tFP1M`xHtY;mF)1z_iCk>^ob%~io#zDwPZZ>kt?ei4 z_Xs7fB;s@9A*bHQWsPJ!H#xAVzvNTN8NMV%#IG!S_6FI9Z73arOsyHKHOV;YtmKp& z$10%@V({vEBH>Lj_HV?LyCGNmO<_lcc|YG#l{S_%pD|mqKL*uMr9nhYp9F0Bn-okJ zK#Ip$4ipY5b(yx~CF4QwMa~&mKD`q)?xm~h4yz0$Q_u{@SFmYW_%Vrya#8R{{hI{* zEz1p_33_?K!*y3IfMB#B(e|bAT|2E`>6v*Y>+B7ukps6c9y{7k^+&nLWF0jqoge6k;-YlSC^>DYzO-6<*9 z^Dz#IZZp%}xV5PTk!uXj(=CwMzNhFEE7RElEXsgf<(vpn^8+Z#_uqTJx67G4^psqZ zgJ9P~jeNz>&(=6H!P}+U(80AAk0)CYLwwewI>hAUa>P4qxqORAqk^qRYHerIxkK+U z!BW=_A6lU%o)#z+AE`p?rGBHtu4ni0?SInRBcI}o`l;hpIt*4l3v9MH};*$T&3%s0M;%Z~)!+pFk%$35}Y zrFHe>6aHAM-k72>7e;zV%KF`Q0Zr&M!TZrUH8n_W5Zd5A!eCv+($aG4Gm^hQYkUfm zZxA-)J>0A0z4L~Ig=JI;aBo9xLl}cX1ayHE@&e(EA720fUwH-`*cO zC)eq6Ff*^MkzveZYsIqdZL6wE4^nk|%UEEB^ZcU*1hrM#FNlgy$32|lQy--Jm+-MB zuC!Zz&pi0uobb%*WUqWnE0a37K_Lc_Z3QN&U+g^^ zt^~59qh~VB{4fZ^dT##l{uM<^*-*1tOX@+C`{=otf(x8uAJ~rS+iFeWuy%uUq7oxu zqSK1bfic|o^r?N32@JYzvgay&>WGUE4nMWRyG3=!<+2HXVU%{k&I;2IQw`I2_YU^`;u%VS zyCn0n^z-}enNXi9*Z1-Sa+Wq5^`-Nj!JhTjyQBZ;klX6VWC(hRLt|Yfm*&xpUHCf}*`LKl&C}@n z3i-((O>*D^okkrcudx<&i)A#P>C!&;ql{Uu_79CoI^%U5%I6*O{B51|aHIS08ApdK zaS1^-N^vPeQF-1_Ns~L&@m_WE>3=Nt12pF2cC%xTD%#^&_r?My&nhu$pWJc9>wc zje|SEu+vJ3h@-7hgZzWcKjtfEva4==7c2fgy=Lu;iRq^3G?2`4h4R{nYd#X={R(3& zgq*#~AFsTU?Z}_KEpH`x839!dCp9(+D-5h!s|wA;Fd;!qA28mFxrE#002 z$OzX=;q5z9QHokZvgPf(Y1F&KSH+6jX#+=A3D-q%G+DqvXv@_LsCy~l z6T{kwE2zc!Ih504{?qXb_=;J&okX5W8d00`%FK4kve(01Qn+Eeh(2i*+a_Rmcm?w8 zE&g=p_pqf*B;dD#-b4yQcozU=^)p6?F)=`!N_K*N{UUjw&g*yaV)qi0t^LUobz+;g zm>9)+-Gz~Y;S5RW{swAE<7KC*41LS%kHI4Tu?#;JD?10vUD+nxlwmB2L665>`?-=c zs*vyc5C;(@rD-{jo6#oB?9bHwZo19afaq<7!%MLwnZXc5P_CV7ETIv5gHBMMoW#5Q z2olPu0820oQ$^;gCL|@|vsJ>uzAEAFTHzs)Di!7idGuC?Wu4VNnDO2# z(CiOoQCiYwmQ<{tI1w`~p$=j*N$HO*-Xd~zt*_;~*i60|7bl6sMvg%c~3SvXnht+Q}Sye2@Q>$dpf`PyeBj5uQw;_@L=Ad;)+`R z^-gzkbM%QF|2g!jhd()+7SqfNQc-mJu3Gz*L6gw2Zjj_ff}mMN!cvjk?_%wQX8rPH z?Ifnmb8xZ3c2C-V>-wW~vtuNGkyzrux4TgsTCVEq$^)wkIs{}an{QnYb&b}2dz>sM zWGlj&2zajB($@F$BHGo1ajrX;7mAt4zl-+{HTsRZ++MBAJ5Lj)EYTBjvG&^0um9yF zS2DcD<@Yp<@`t74zAf=0^hw5n2d#G*Ftr8~nXUNNN3w?W%s=HSi`+=6*Y8*l2(vts zvJ+Tz7s$nJK=l=LB-uZ66p^dUA10eq*M7zGE#e z^(^|x@*pwg?(jL-@7!ta5>D~%k{Ubs$tifzvPISfyA--=*Q3DZUh-To%2&WGstmS^ zeU2WLMFc**Px0Xa-w<_XiJo=8PLCSG!ZhXDu0JDS3f3s2h5`y`78Ejw?KG`BSZ)F( zt_5jsGVhqCIgfh^3|UG*gjERJuZWISQ+m;tCq;|N=^XAVzE$=>&XDLE&9ZvBC$avW zl72;br$LQBpZ0vV)#$$?wvf`G&l1)7!rJlbxgx~ua@sfv*}o*TXX>z6_1CJ)#&J%| zonfQXYknFj_qC_FFDURm9@8`=;x{muLm0X`G_RmR%V#`jdZ(B53!JSz=w-=swYQB2 zw+8d>15(}sMLm_V7BrMU`$Zmxqb#x54{~h#r+_hr3Bo%}{+jVh@sY~pPIB2fw)Oc$ zM7j0wc|*5})#rrOMLH1`sL0c>wF2Z{m^Sx7yd28S8Ds)czyga%svo4SQ}^hn12vWP zjlhV|e(BL8F;5WEC!SN3!ZadbLTj%Pd)dXH)hQ*PDhLK|fn78#O(~?hi_UMF`_bOI zyL8j9B%k&qKg>|1vG*94pZiG4mx&pMhvP9;d`(>Ue5jFoW@w?0zAH$&nye|xAINcE zV;j1ouIt?7I!@QtXdF>Pky2|6W~Fi&mPq-LovB4It@#|@?uv(@sEt5Dj*I4^Aa6GV zK4WVBW^3~7M_NI$Xo?+IWj-TOPW;?V7W^0flUHEngzF8T=v!6)&XHEGbXr$rpl$dq z4CSJTmRRH`s)Pt~iD2oKd%L|p7TwrR>KATJtDGwd8OD9RY;vp(ZjUH{j-X>u;6Uf5 zgJ6sVz*vuYkv*M zH8g8i|J7|IoE{(NDM$!jpZWZO)@~Xm3n6s~lC7DqsDq_5aU!dHQG~{Lb7Cb`90L1R zN=oHuNXnLe`H|8W8(6&d_xBq#`aoKyH^(09S|x|ELd>(>&%MnS$0fXSCQ`da^|<|~ z;eFc8a4aTHHX7T~qWxdhKF5$uRXO}_)T0yeCz?6N*UgE5azCbJo?hwVK)~g4SXnL8 zgdY5CG2EyZwbwm$&^#4O#Go}eGl&b3skl(cHt`uRaN__3``dXLUjaLq$=-# zP4xRS6w)A(XHF_=>>ak!-LXLXtGS+t*VOF3Pp0$wV5F8+zs`lS*5dwQJ60{0G)I6_k% z>aQC4A>c=ob0)g6l?t`Vkb^d3X(ZtCrCJEsWtrn6agwH?ADin;&LK;DJ3uYfGpCYv zX=Cz4V-f8!BRa}2(`UK8Fq)hgMY-zMOUG)&b6a;+=8KB#12 zE)2eU)iO$ri+Rx_{i1)7s;A8!R5=n&@M_{k{oc=ySb~+q?TBMB@3U1A9}IvHj+5NB zg*PjN@5F1s2rGPW#eywQolTocPvPyO8)}eaGt*s-)!DWQNVQN6?PBWkBc%hN2oY9+ z<{U(K*}oybJleQ`lJ6&u@Fs4KB@)G+^iQIC!XOt*#`t=1c1Y^4l=&pyl#Om-x~iT& zS}ma|9+5fbh4U1xrlu?YU)5+&fMC@T%&QEV#cQ<^&sandbriNArLky_U@O(*+TS*f zu4GBu=X+nbt3z6!D&Wu7QV93OGBO)P)NyJnH5G*WjTh^0gN65e^8V?;`K6NVp z_R4JDU(#=L{6$ztDSe~8WhHSt&z^Z*YC@3{>z#`HRz79x!V(z1@EOmXIWsgl_`{KC zNGiESbR8}hNuqdo^h{KIl{+#1NQW**=c6n}%WdWm#>qR z(IlC?Gfd+fHMQjSNjS!*e0)!AQj8I2T_Xy}c`E{{=G!LnE>vhMhs@UJtm5#qpB}h@|PzP}}LeGYq_D z_fgvAgH7U^M33i;phuwpQhjCw@7Gb+IGv5rITp2s-xO80)Xm5mCcoXmX6P7|RmZ`C z@e!bHvvQ3CQz@%Z6>4Zw);#XHmRIm<@iTNZBAeE>OGX_Z6Tt~K@uYgNf$E&2L--Ic zmLwruo1ER^KH>59jWBQ+0)M$ogPuFXS5I5RWiTjgSJ6~+SxXkE-A_VO*c?k?{=b5K zUlSx}z9fygb`C7fdJ~gbp;T5ihM_!*sIj*&bonCKMGl^R#AL%vp|thd&M83Nu;=aS z!pAEuX%1jV1BwSt#{+vc8=KA4Ni(%w^MK{D^R>y|vC*r0qRJ3~nB<%#f8|$6gVC1h6ut=Us?JaNc4(4Z zr~t&e=2os=%OyMEk=&lGjvs@zsuOxJOp|jzH@18)5gpNvm>6$K+gl&dYy68~Sd>%Q zAkKoGc&O5!>@$%HEM0my$7j*Gq zH2SrAUicc8_(i3Bku+%;bK3}i6=0%B#JBKp9R;7uRtzjdk>njr7#1y6?$l`ne$zFl z?$Qa93KQm6m99eMkudBrdEUwPD9~e_?;gN9b|ix^NRY+ioGGq*m`rT^JJO>)=F9BV zVjsz5+cM7`5`fBCno`4P4V+Q`JR*wiu{b33`RC;O60j9n0C0sLIO>@TeL;_kmyX}9 z*pnnST9ga?+SHrqQB|cGN$$j4+S(Y_oC`D@a<9K9aL{v)f+SpD1hy#x2jDM;_p`&TfQ1OEh8Onlj=4sK;?b&3mGq1VU z)H3}cWR6-RJ+$fKE7qZ3Q(=FB!EqHyCDU~6%$88Me>X~9Jv*4}D-u%PKRXFy z<{Rg+-!(p^BfC)gB*QTKAgc)4R5g&aDn%HbZ)Qvc9NauRv2WPxdyMpvilGwLCfB}7 z6l#3>T3C^xihgS-;ztkGKkll<1#7wV#fwGENw_;{5%MiI(5`9y?s0>G$p3r?q}oyq z+2X@nirc?vXo1$oMhg~`4z|EOooZ7-4yqv}=!tUnyIMQN^31Pt9L?hsC|5fpl~$&V zEp!`=UEe7TSM^s54YZbCG7=_Kr$log|0Ktjr;N&Ay1wE)cuhN^Z`7GZJWvBnP(fmk z=JVCZKUTH?WV)UKxW(J&w0EM`WYBZ;XlADLEE6HscV3>4Ov`+%dl+g4@M_v-GIA3T zRUNN@vwf{n7=eSPeb*|P<851cKfJ_0z%|8WI!aK8z+87DssCaa7vYpE4BsxCv}HS6=3 zmid5lU36W2vUhMz_tJF`oF}X?l0%W_{-C*Aj><*36gSb>jMN=dUa%dSz*(xA5W8P^ z33RAzT93v-ckeCjKkN3K`)P^`mkCFo9~J<|cK0GQ$;7&2kS8320oai~xNT}W7B)UU z?wB~8;YH)H{Qy1U!jcg_915sn!)5ZXT9#NF&3@HdlW2UN zaqM~?#;L)jE{1pjDWl|~02Sxn*YXea|9hMm0P$lQa?ddh5p3e-YGsNwL<&4h1c zf0PdOD<8kj-Q#4WZz*0vbIRce5cTGf3yD5RNsWxfP-kVW4$V-Wfv+$kU={dv21)Ge-|8}>I!59Iv>07-@+~nYiNAh#PYdR4uhQwDJ*yqwsvKr+KkqXGMi4#f zTAg1-glb5vZ_LIRUkZO+#f-kF7DpIKp$Luo1Y)3XkI^pdyMClo#>%SJp@SBPxslEU zR1VjPp>EG@Vpw2we+rAKeQ>jhso49(6~PR)D<5R9Y+_gNaV5Db-n1ph#?#Zyaumz{ zA4_t|<*vh-s)MasGw}nK7RH~A5c(Y@H$45(aTh0|y%#$8F2{21(~cfSf6 z-R`>L-TaH6Jrf2ovFM;GuZ7l#)ns{%E19}uzVOX{*$1T$-k#!!6R4$hp+1{&9t;}o)>WtGix9A7o z4Rtm%8h%JkvTkz%BTnBcB+dNBz5UK<#*h2@*3--{ze!*kJ6rvvf1uXfrem$L4|$yD7VV8nOvJUoh)f? zniozU`#DClKD~~=T00lvUMI4waHEY!z2#h_S^wW&fp@M161(5})FyhC{aM<5ScOTw z)5334s%aTeSRp*HZkGGwwS|b3EzD~QrXYmEod!5r47&Jm*D4A!*83cedyT#@H~uT& z=Z_XvuaUBXKPUin05y_w8VNq^fL@ZT!Ya_5BKtdZ(q zdfp~nmgiipf~_8#$2iT7rye>_$4AP@bd383879^gGms;W`8FJ%3(_V{z5Mj`3#{B7 zC8!1|HUHP$R|Ultbn6nLcz_^5gA?3g@BqQxoiI2A32uV~cOTp#xVtAvfWd6nf_PPX<_QN#)xo1LHW)qWAPMS%1M&!Nm7KeugUM&LHE7imX6TN~z$tK`b&v zrV2n{c}-g`?o3I`1#J-#!Qc@>{m>MmCu%xMmeco zCWPmRYNLysohq-M)d20vKknp0$3_Ib!T;fUP{eunj437U1YWq{mM}BS*{z%H^RJUV zAYO}9I-JJ(h|GS?SvqUP+xDTOwwV5{!lEX#picF>!A@FKro&LS>u!~F_A4ZZT;4$S zUDh3(J%ZNb&blK~DLp=ob$C$m38af-HLV2?71=I!?sMDS@Na#rNv-*4RrkI1XB4*& zt>#5PjT2d2%(U~xJk(7r%p$AWXoyhv+d;phv5Gi?^I~uLxTT^`cIyza*3w8*qTK#V z@9>nKbG6v4*t}$X{@hH|NrDy&DT|;8fXT9PcJ`+ornbM>BzQF~z(g1T{e#($L^Amv z)U=jaJeXAf4iFga=R#|zxgJ`&99Q%t8d^Kw@O~Ac=~Q4uy%Ac5NKyS>1s&(RAF;*R zQdsJ!gkf9Qc{eo@b{#dLf{VoBZtIHt*Votd&BIkFkhy2;`kBcWtZn+EJ$``zkOn`_ zc1+Nnl!>ZL%W#TP1bbkqk(oq|Qb{?CT~eOfAr)9$Td3=sOVZP~EeN()`DRCa2ombr zU@s}j9kLfFMo&e`f|HOd@xwCsDJd>NBcQL#r#LHONeB*_TsSpngQ1AiX(4PFuxhIy zG4l-B>+e@LT(kFolaa{~(sM#aN z0TR{^P&?Bq=kcR&q?gAYCNnM+cbp`aStIGjV(acpR0^I6d2oZ894gL)+9Q>Mepi##;m`&$q>KSFko?aH3=;RhSa9q^IIEwM~6=+ zQUyj&mH{ylOk+1fo2cr__E00mpitqz<#YFF?6A2!siG~X<%mY?m^h%WTuCWos-VYB zAXM!0l6%vM0bXew8Q@Ekkz_a1oF%KY6Ko_my&oFb|Af>w;=A$#5Nc>yD?&ijI#vBK z+MSa2+S#Dd`r^qvqVzfL* zz0W*L^NzPFh|Ua%7&_ccOU6;V!`3NV{!tgnGEIA6iQZYjmo7CFK-->0=H!VVrPo`_U=0)gnSx>B5vJO*D_*Aj0`) zWT)|;EDN1cm`{kWCq1D?$5m>B_=Xoz;0s@Lxs7CN@Htn#RCnvHjl`F8-b9r-B#%co zVoi5y(BfAH>EB8YRc6zVW&`Zn9$xe+Jd`zvJwp0xlQ6rS2kgAL%Li+BVUwM!x>sP| zkcyr_YdT~dfKvK#LGMe4`}iavt`WCuItwczC3&mPYQv2!#bkj$qAcEgb_w?OoTuU~ zsb(oy%8xA!!J%ZR9HWk^0zTaU#3tSFcN|&?0!+@^gFTm8dJcP+^`tb;&Npb<|)T>87Wmb?WXLn`LH zb+jt+RzqocRik02&sV5E)0S16sJuj_E5iLa?U)RfU|S{|#58yctkt8h9^a<G$BB!FA(JpK%1`YLuJY3QsvxUPACpmiON`e>}Pa8@5#f;2Ph~L{02NpWmYvMp!El^NIrQTBIESjI?`=74A za!4rNSAo;P!P+Slgy~5kl{W!w1Pw(Y{Y<_W#_F{4_~#>RnFi zr5!@FL0pLYFyN-zA${cr7E%6Yiw0i1waxE>1eSJ~a{V?W*BJ++vH4 zD;?bwps{dQK&qBinzKx28qw#|VW^OY3?d%`c#|X8UY&i-I;I zac8|?XS5T$E&{E~J%{&fX^(G4;3de^?Ev!5nj(tm56*LQR)@baKSL%9O4hpYXmx8* zds<)AxN~dd_lb`75B4`$B=@xVBQeUP6F5{0vl*j($mOCV@}FZp=^?_3f8s2r^vXL& zs&@-gh>*1cN?xdM3vIpmzv(my) zNO`F>zf$)7bHXwfmtqZ4wC=Z#MD8PEgY|xib7k??0|o^IBlu-3_7)oth^X`r{-siO zmF2xTbA|=Iin}34e!_h&EyBoL7B4}b)R^+x2=jhRd3GY0(__3w_dqmd$@sls!?`*= z1ja&Fg%z`{Do4fXNCbxv>Xm5<=qa0!6jyrXPz z{~kkBv;Lb{v##zi>SeXjnrdID5vysaULv@759C8s@3DpMKAUSlFimV4+9g_xG@4X~ z!Ulr>F|QJhoH_OIvrFYjPON%xwjJyILUVHe#8&7R)slZzJ+ui-D*K$o49Mr#^019{ z8?eUi=7Kgou4(FnHMZv$Uh8j;b_?^jE<=!XR+kVh>8c&mbbEFZ6M%g`+ypHy6X zQbDX|f|kT}F7j2)$LvQRR96GPLYon5S!nJH3EVn&B%A8jyvDz3IL8(d0C1ty*RLSR zaIVtLONH?-cu}*Tmko2y8f{$irNL?LI+rPFjn|2ZnH8NzJ2nplepFh-6vC|uF9}oY zCjXLUYj`zLZ|@osvZ#CA)rry^GpWdyc6P=?n>q|nmL6^(6N0Q=G%ZYn8V!~RU6wz& zavfs4_JRRinO8evGNmJ(wbq<1v;(~T2;K8FpKBNW9zP6iCG6=rb2n5h$$)!6q=Gp- z;Ty>S^$Ua9i`Q>hrSh=vCp8xdH~I>K-a||{1Myw&40M_}tHElr7Kh*X+#qAn@y>*lNz@BeQ8Asf zZZmZ-J1Ee~*S|TK=u@hUdD(bL(f34E#XD_J0h!#)@XxO>ebZiH``r^~2Xg4-e&%tx zedMt5|0y*$lseM0C>gc8kjkJ}`Ddb2=dIh5nKDDh0vfWh?&JWc)DJodDE!{w*c`2I zh$-lLk8R{VAhlMFhBBLHRe;M3Tjq>mEy>}L7tJO3t|=fQaH!BvlyIH$lM_v4SC@sA zlJ^RW4$VeJTWgzggjZCQZPCL{(|8(Lsn_FdrNW}uCaFjah=DC~M-v5zH3_HlE^;BG z!U=APPTbi-7QTs*TdW=v?lz$Pxe4WBRJeVSC1pGkpcn~&&xi!%=! zx3=;UgZh?%Mq!cPe20eiq(OJ9aVzN>nh`dYL+3h+!SG!0l*8n-wGOsVS%FN9my&_Y zU}I)InJMVf!`(WCT~e(s>++dv^n%#$-&vVf*7^d|9+D%Tt>`7a+?_I8 zlgi*ms#89*scjI4<<=)Fhk};hqL6fRL?z=uEEyoLs=TO3njl=>5{P&uEX8UNGr$i2 zsP9S`j`L+au$V0{Bz0v5mmX}sy6GKaV2)tM)ev7wKyK_RPGtNKjTueo%<2QfL2i{% zoq~R2)%gYgHbxsXe@-z{=UH$i-`DE^xxEq|i;Xy&V_4X}?AbFqQ7V2L7y3Dc4ZZo& z!a1B}T0S!<>uvhgh4y4r)>BijOCU;WWD4y zTbLX-ZO89G^(Hm(wmlCx&Tbww+OkN!a;3C;ls%sj-RIJDkpt)Vw(XodZ>srvn~PuB zHv&NCS8opg=N1FJLu!?C7>Y54D^Ln|_BL}rv_?w8~ zfpCHPIE%l^pYdq4$e;B8f5T$8)5k_@f)I78_Z@=#1YcSsgTzWPARFm>ISN`Od`jzt zrd{6YhE(9a`K4UsQW%pTF{BU3qf)0ycmOsxSVN`tp16;K?a`DVQFed{PM%JVEWy{`aqC43l4^dScnC@1i)zzXsSVw;{PCfF zueWz)=Mg8+no;=SB%)6}jAx6R{!aJqip_~hCcO_`ZP+Ze zuDm{g`!~?cjQLtpex$BEK=IC{+x4tLF_O~2{N#w$rb6t_nGT$_jA}EEWDcuo8AB!h zLa=?u*-H$Y+EYv%{M((j7eh`Ca2)T36X%fyed|0C!O^9X-#Ish@IN%|ywx2|B3uuw zi#}+Zi=a?fk9@Abp!5nivc}H0m$uQ1Y?S~eGd(gGTeao{=OFe4TzMVmQc(K zzMd(3^Ra-3MGW%1zTIqyo0*n38f`i$1AhPk&at~E~O$;>%ky7{P=YE z;GUvbiQ%G?_>h}nHceNq$(k3MvT2bM^d|O&I@U``+>(3G?(W1n>#YXT>hG{kw-Woa zf|ARd+o*E1QYdGV)mIw50hZY7%h+%g&)Ql5F@)s zr!T68|J~>q$GP;n4KKwM6pvQP60Wx>w}Km$&kLjO@!eO@C->4Js`KVhcriTrcS2u{ zHea4Pympq2#YNxik8$$$W`r(&@9+Q2tC z3+BU9799ieyKF{iZbw%%N+s38gGihs&f1!Fs`FMEA=pN495rSSqRYh8>=@HOFK*!U5NR$o`;AGw z^9dztE-&QW-ckl_~%Jo{o#&-@Ww$U4OwJ^?g=8D^i;`&ix9@Yhl~?3s@kNmr`EGq$A#d z$3ieFeuat~pScAJsLSYS1l}-@!%^J^xz%=r3l!hs8z-bHL{$rJn%wYHm1tM}K3tv7 z(u23_`~NMJO|-*Be@#Pcb^cQT(`B2K1o5Y7NlEaz-A`u_uD@o_s9|+(9q5iw)%~i+ zll_b$XOrM#o%{fe|J6P`AnBnpCB7Pz2H{|7lDFgGG}`gxbrd2ec~p|Q zu@Z0aoM)m?Z4gz4XBp#Zm|h9HW+TAPFBBEzE%w<3RR`hEL0%yfIlhE3DrTw?44j-1 ze04MtX(y1wt4F=)(TSbWZk^l)+{9qvt;@RGW%H0NR6@6+A5DG2n8+{K)rV2hTG|Vn zqYRHGEHg{8Vr8Ds=DT58&C2TPW}@cw)2_yBmo5U&T+w$-EwyP~a_AIkEn6TbStV)h z4OYM>IRe{DY%Im8m`QluhS;|Ngjz^3h7J><5&o77zpJgO5Jn$>!x~FOe0= z^dLsjuQ4g%CxI)*DQiJh!ciI%{Z0#ETy<&C#;!D^VwV3shEO~$@L7`urk(89aoC+T znnLX~Ak1bxZ?M#+fr{zPTRm6f2SFx*#tF zmlCaq^L$-!$q=KD7-%|kX<;u9eu0kOd{AY}o!*MBFyq>5Kd+lp%(^oha8d!C8l8cN z2x3wDGHJIxj%QCJ7Za#d!E4AU#U(IsOL;vm0yZTX%(X{jv4OiZ{D4ksox*4F^EL}i z;De1r_Ud)Q75z)5Xkq~!qX;>-sp>ug9?RvWChsZWgvr=0r_(#rG%sUuE1+gjO01D7 z1iiQSCQb`|_}};}Dfg8<7B&`@Y3EfK1rnRD$L~%V$5slnvL))T%vT!c& z?q;)g?!#012n;H=d|a8?U^e{<414G7y6szD`oH-Lds*Rs)2*+jLb3dFDwd7atV*B6 zed*L}<~0<-v6Ki2@dCvxz8h(Utc3NxNxnP+ug7O`rKC|ll!uC|#rT!$>5j_dTq&bI zAIV~TWI5R%;Q5@JYo*<-lTVy>8AOkRd$S0yZ-4WQsu)JSPI zzK$v2gUwJ)x~ABZeSR@-w=_G!mfg6-or$UH)zw9d{hwR>@+x^DDc=}gDSeIMiD?s> z)i|WCv6OY@LXp{zG%`wD)Kh2zx$JdL$T{U)jwknRS4-|94nYz^xJV*gJjT-$eP_Za zx%u0W84&oq;`0vOfq-mGKk3CiPN|=I68CCgFMS2ZTGUC8xpt)l>4K;bcQhvmx9 zTa5Dw{vdl%2Z$r9sg_XaGmia%O{ly^&91pRx|CBCg=c78@R-ktDC(;(Za<*KVI z;hK_~-KsmaV8kLjZyh{AMWUv1qeoP&VALgou6rDzq$On$$|8x6J^7`0Lu@p0<8rdsdA zgoi`}ndgL+JG-OTDy*0igvDzUQ9Iv~X7=~UMr7rX)oeMRJO2jqOrCyOeWl-h4U$(m z9_!iCE(HpNZlJ!OVY!fiW^&ghevXTPywRA{G?lCl}zRX6;~6<$f0CAcMG+zoqa zJ9{e(8QS|*-r*ZJ_vNR&ivx1;onwQ|=}9A0wXXL)?0Ko4C(F)4{UrwWT<3syoJ7u% z)J@aj?5+bS7r8~SIjdM9b%lZm(><;2S(UP)wZ!xG$Ap7O8W7rRQO$=r*rFgT6S6{6hPqK!Yt5bV8e`Oy$=?c4$T06HQ^$FkRSwhD zGLi6oRkd`_V!wLBCQ8BJbVg-P-;ja9ev?eXvsXYwL$6E+QyUn_cDqxi-=TX~dy=8$9Ubkl!qLfF+F*uWBrlmCjrJO6s!%FByvEh<$J+U}+G)}D?)>>kSQ z0VqaXw-*!hR5%M_d#3Gxcz;f{9KIY~aXkeOs+fkl*Wjo+95ZEKkeSk0neh{xd*$US zwQN>654Oa5rlXZC&_{{CXsjO`G&5W~d3q@%rzrS)6U<`m~8G#W&0${vB zBztDg%(%Nw4dmK>#r>1@2}wiFwPmwAJ1F2x90z>#=^vYcDXL*M@9gA3~)H>z35Lq zp-}!xk^yoyBC%Np-=)lx)s?a969WPD&#Y!k!op&71;tU-lGx|3!D_$q$KvOMe(qtK z6bVb*gn?CUy2y+OMGX+o$EaOsAndvaEb3;Cu&q`%V!V!s-$+{@QI62QI-6{??az-4 zpR!d*cwm)B{YZ2%*omu5W;HlVx`X@seqO*2h2hc&`vqA`>`Y^G`*iUBrx>HegG3jH zaVF(A3qdpl$hU&xH~TDLQsMzPl_W7%72fabo!_EpGW-n_ZTgjoerL{{Zb3YU2O^ literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png b/apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..46fb1b4be7072fd6f7ce99df4b370cd4a7441992 GIT binary patch literal 15137 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/icon.png b/apps/desktop/src-tauri/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ef16f8376974ebff30a917231787e2c0b0251058 GIT binary patch literal 10582 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 QZ2$lO07*qoM6N<$f;LD-lK=n! literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x-1.png b/apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d51d17d7f62c3fbc2a6aba81aeebd09869bcf5a GIT binary patch literal 1862 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..262dd4f17f2616e4647a392cf7a1047d6dd13ba8 GIT binary patch literal 4758 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@3x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..54ce4f4a222aba828965b4f57572b66efa998e00 GIT binary patch literal 8140 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

@s=gy|5)7NU2=>OR(!T7+mF;a%X`|VS|n^ zLW!=!tlWIu!eDd=PU3g>l5T(QQ$YAWsZ+_^t|ZNqrO+CjoCTH?M%>Y{%DIg)x2%8U zi?fU9xxcMtXc@S4P>O|u0Y|D%JXQJ~) zP6|d&(I5A2dy(>;b_y?uunm?^e^h`YY?>#Nrx4-E0})AIUzyw|*x5V=O527GjD4%| zu$LbUJdu~Hxp&PHA!Kdq@>bIjHc#mnO}bkFbw8i7!ykaGVx3Jv~fCu;mL&&Iz(Psw~ij&M1YKH%=jl&1dJoWBbQNsOv z+w@AW@{vIjsm`4~&qT6ck5-vuk0KtS*c3E=iqqzvL*6xvLjwJxwu|TZ76k(?toZ2G zbV9K5LJWnx&m54m5;o=+Gd1F`O!1vr+e^}YRh`5p+!*TJLl7!4X`RPT1+#X!4iu$O z)%2Uqs>Tq$X#lfuYG6{Rvui`I-v{U zd&o?tpg$UwK>19ujt-^ijR6WZX%Pq{&Rk4L3a3yxEHuCOqVm2azJjZ_yt*9rS*+ZQ zjV8O0fLM4axBciIp$#~VkUV8b)EA^3G}zV_<;g;FtLwYkfX=Q8Ot|I=-S6DK1E;7f z#EcYk%(i6~r)Qb&zfv8ZhQIh@Z(X*Vsvw3C(G9=O>6TaGnGCbD^=jVP=NC5=-s( zq47P1qraNU)m%^khtDfz;Q?^>k(o@d$mpieVde6H?u#nHs4>~js}6OV zO>Kz0$)`hNuC(U?u3M!o%#G7EQ=g(Q*fbyP1F)v#F3!2%xN}E*Q_@EEuI^7b=Wf2^ z-5&fM;Vr8$3DK@(dXO4J=ERDyfqRP3fAP*xzosx32-qya-6E*T=u>krWK2+o=k(UX zsBc!g**;cG@{7~e+}!S$jLW|Bv*&Y8LJgvTK;_#W+-<0NSN-I`tk(E`DYdI@@L?Q# zZTI<1NbnKMrJrHmk!p>5UqWq5&*Pm}^EbOm=Sla-J#w$&hk*fvi^fnUS6^DxT=t|v zr6)jMt57(y1UuG>uIHs#8c}Q5mE5P;5F=DM<(J*eSh7^MQ8@~ZzBvqih4Nv?v>RBb z>LO>~Kuj=C{)$;GuuM{1Lc^X?B4i|8!}|a8@os7V_@bHe<<;*KANAjt9!gG1S+Yjl HDENN>4(#3> literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-512@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-512@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..934910bb70cb5bfcd078bc1712c1b8009f0c2a71 GIT binary patch literal 147888 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..54ce4f4a222aba828965b4f57572b66efa998e00 GIT binary patch literal 8140 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

@s=gy|5)7NU2=>OR(!T7+mF;a%X`|VS|n^ zLW!=!tlWIu!eDd=PU3g>l5T(QQ$YAWsZ+_^t|ZNqrO+CjoCTH?M%>Y{%DIg)x2%8U zi?fU9xxcMtXc@S4P>O|u0Y|D%JXQJ~) zP6|d&(I5A2dy(>;b_y?uunm?^e^h`YY?>#Nrx4-E0})AIUzyw|*x5V=O527GjD4%| zu$LbUJdu~Hxp&PHA!Kdq@>bIjHc#mnO}bkFbw8i7!ykaGVx3Jv~fCu;mL&&Iz(Psw~ij&M1YKH%=jl&1dJoWBbQNsOv z+w@AW@{vIjsm`4~&qT6ck5-vuk0KtS*c3E=iqqzvL*6xvLjwJxwu|TZ76k(?toZ2G zbV9K5LJWnx&m54m5;o=+Gd1F`O!1vr+e^}YRh`5p+!*TJLl7!4X`RPT1+#X!4iu$O z)%2Uqs>Tq$X#lfuYG6{Rvui`I-v{U zd&o?tpg$UwK>19ujt-^ijR6WZX%Pq{&Rk4L3a3yxEHuCOqVm2azJjZ_yt*9rS*+ZQ zjV8O0fLM4axBciIp$#~VkUV8b)EA^3G}zV_<;g;FtLwYkfX=Q8Ot|I=-S6DK1E;7f z#EcYk%(i6~r)Qb&zfv8ZhQIh@Z(X*Vsvw3C(G9=O>6TaGnGCbD^=jVP=NC5=-s( zq47P1qraNU)m%^khtDfz;Q?^>k(o@d$mpieVde6H?u#nHs4>~js}6OV zO>Kz0$)`hNuC(U?u3M!o%#G7EQ=g(Q*fbyP1F)v#F3!2%xN}E*Q_@EEuI^7b=Wf2^ z-5&fM;Vr8$3DK@(dXO4J=ERDyfqRP3fAP*xzosx32-qya-6E*T=u>krWK2+o=k(UX zsBc!g**;cG@{7~e+}!S$jLW|Bv*&Y8LJgvTK;_#W+-<0NSN-I`tk(E`DYdI@@L?Q# zZTI<1NbnKMrJrHmk!p>5UqWq5&*Pm}^EbOm=Sla-J#w$&hk*fvi^fnUS6^DxT=t|v zr6)jMt57(y1UuG>uIHs#8c}Q5mE5P;5F=DM<(J*eSh7^MQ8@~ZzBvqih4Nv?v>RBb z>LO>~Kuj=C{)$;GuuM{1Lc^X?B4i|8!}|a8@os7V_@bHe<<;*KANAjt9!gG1S+Yjl HDENN>4(#3> literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-60x60@3x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4711f81c989b2f90ff81c84f0469bdf88d105069 GIT binary patch literal 13982 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 UKj{9S?+i#>SVpKuKri5b0E6?R=Kufz literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4dca4b6e501bb3b962e3c8b688b6b9b078eb6bc5 GIT binary patch literal 4456 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..afd6ececdca200cfa1c489a0931988c495a19013 GIT binary patch literal 12820 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, + startup_output: Arc>, + shutdown_started: Arc, +} + +impl Default for BackendState { + fn default() -> Self { + Self { + child: Arc::new(Mutex::new(None)), + startup_output: Arc::new(Mutex::new(StartupOutput::default())), + shutdown_started: Arc::new(AtomicBool::new(false)), + } + } +} + +impl BackendState { + pub fn begin_shutdown(&self) -> bool { + !self.shutdown_started.swap(true, Ordering::SeqCst) + } + + pub fn stop(&self) { + self.shutdown_started.store(true, Ordering::SeqCst); + let child = self.child.lock().expect("backend child mutex poisoned").take(); + if let Some(mut child) = child { + terminate_child(&mut child); + } + } + + fn is_shutdown_started(&self) -> bool { + self.shutdown_started.load(Ordering::SeqCst) + } + + fn set_child(&self, mut child: Child) -> bool { + let mut guard = self.child.lock().expect("backend child mutex poisoned"); + if self.is_shutdown_started() { + drop(guard); + terminate_child(&mut child); + return false; + } + *guard = Some(child); + true + } + + fn reset_startup_output(&self) { + self.startup_output + .lock() + .expect("startup output mutex poisoned") + .clear(); + } + + fn recent_startup_output(&self) -> Option { + self.startup_output + .lock() + .expect("startup output mutex poisoned") + .text() + } + + fn child_exit_message(&self) -> Result, String> { + let mut guard = self.child.lock().expect("backend child mutex poisoned"); + if let Some(child) = guard.as_mut() { + if let Some(status) = child.try_wait().map_err(|err| err.to_string())? { + thread::sleep(Duration::from_millis(50)); + return Ok(Some(launcher_exit_message( + &status.to_string(), + self.recent_startup_output(), + ))); + } + } + Ok(None) + } +} + +#[derive(Default)] +struct StartupOutput { + bytes: Vec, +} + +impl StartupOutput { + fn clear(&mut self) { + self.bytes.clear(); + } + + fn push(&mut self, stream: &str, chunk: &[u8]) { + if chunk.is_empty() { + return; + } + + self.bytes + .extend_from_slice(format!("\n[{stream}] ").as_bytes()); + self.bytes.extend_from_slice(chunk); + if self.bytes.len() > STARTUP_OUTPUT_LIMIT { + let overflow = self.bytes.len() - STARTUP_OUTPUT_LIMIT; + self.bytes.drain(0..overflow); + } + } + + fn text(&self) -> Option { + let text = String::from_utf8_lossy(&self.bytes).trim().to_string(); + if text.is_empty() { + None + } else { + Some(text) + } + } +} + +#[derive(Debug, PartialEq, Eq)] +pub struct BackendCommandSpec { + pub program: PathBuf, + pub args: Vec, + pub cwd: PathBuf, + pub env: BTreeMap, +} + +#[cfg(feature = "desktop-runtime")] +pub fn start_desktop_backend(app: AppHandle, window: WebviewWindow) { + let state = app.state::().inner().clone(); + thread::spawn(move || { + set_status( + &window, + "Starting backend", + "Preparing the local runtime and opening your workspace.", + false, + ); + match launch_and_wait(&app, &state) { + Ok(url) => { + if let Err(err) = navigate_to_backend(&window, &url) { + state.stop(); + set_status( + &window, + "Desktop startup failed", + &format!("Backend started, but the window could not navigate: {err}"), + true, + ); + } + } + Err(err) => { + state.stop(); + set_status(&window, "Desktop startup failed", &err, true); + } + } + }); +} + +#[cfg(feature = "desktop-runtime")] +fn launch_and_wait(app: &AppHandle, state: &BackendState) -> Result { + let runtime_dir = resolve_runtime_dir(app)?; + let port = pick_desktop_port()?; + let health_token = desktop_health_token()?; + let mut inherited_env: BTreeMap = env::vars_os().collect(); + inherited_env.insert( + OsString::from(DESKTOP_HEALTH_TOKEN_ENV), + OsString::from(&health_token), + ); + let spec = build_backend_command( + &runtime_dir, + port, + inherited_env, + current_home_dir().as_deref(), + )?; + state.reset_startup_output(); + if state.is_shutdown_started() { + return Err("Desktop startup cancelled".to_string()); + } + let mut child = spawn_backend_command(&spec)?; + capture_child_output(&mut child, state.startup_output.clone()); + if !state.set_child(child) { + return Err("Desktop startup cancelled".to_string()); + } + wait_for_backend(port, state, HEALTH_TIMEOUT, &health_token)?; + Ok(format!("http://{LOOPBACK_HOST}:{port}/")) +} + +#[cfg(feature = "desktop-runtime")] +fn resolve_runtime_dir(app: &AppHandle) -> Result { + if let Some(dir) = env::var_os("KANDEV_DESKTOP_RUNTIME_DIR") { + return Ok(PathBuf::from(dir)); + } + app.path() + .resource_dir() + .map(|dir| dir.join("kandev")) + .map_err(|err| err.to_string()) +} + +pub fn build_backend_command( + runtime_dir: &Path, + port: u16, + inherited_env: BTreeMap, + home_dir: Option<&Path>, +) -> Result { + validate_runtime_dir(runtime_dir)?; + let program = runtime_dir.join("bin").join(executable_name("kandev")); + let cwd = program + .parent() + .ok_or_else(|| format!("Kandev launcher has no parent directory: {}", program.display()))? + .to_path_buf(); + Ok(BackendCommandSpec { + program, + args: vec![ + OsString::from("--headless"), + OsString::from("--port"), + OsString::from(port.to_string()), + ], + cwd, + env: desktop_environment(runtime_dir, inherited_env, home_dir), + }) +} + +pub fn validate_runtime_dir(runtime_dir: &Path) -> Result<(), String> { + let bin_dir = runtime_dir.join("bin"); + require_runtime_file(&bin_dir.join(executable_name("kandev")), "Kandev launcher binary")?; + require_runtime_file(&bin_dir.join(executable_name("agentctl")), "agentctl binary")?; + require_runtime_file(&bin_dir.join("agentctl-linux-amd64"), "agentctl linux/amd64 helper")?; + Ok(()) +} + +fn require_runtime_file(path: &Path, label: &str) -> Result<(), String> { + if path.is_file() { + Ok(()) + } else { + Err(format!("{label} is missing at {}", path.display())) + } +} + +pub fn desktop_environment( + runtime_dir: &Path, + mut env: BTreeMap, + home_dir: Option<&Path>, +) -> BTreeMap { + let path = normalized_path(env.get(OsStr::new("PATH")), home_dir); + env.insert( + OsString::from("KANDEV_SERVER_HOST"), + OsString::from(LOOPBACK_HOST), + ); + env.insert( + OsString::from("KANDEV_BUNDLE_DIR"), + runtime_dir.as_os_str().to_os_string(), + ); + env.insert(OsString::from("PATH"), path); + env +} + +pub fn pick_loopback_port() -> Result { + let listener = TcpListener::bind((LOOPBACK_HOST, 0)).map_err(|err| err.to_string())?; + listener + .local_addr() + .map(|addr| addr.port()) + .map_err(|err| err.to_string()) +} + +pub fn pick_desktop_port() -> Result { + let preferred = preferred_desktop_port(env::var_os(DESKTOP_PORT_ENV))?; + pick_available_loopback_port(preferred) +} + +fn desktop_health_token() -> Result { + let mut bytes = [0_u8; 32]; + getrandom::fill(&mut bytes) + .map_err(|err| format!("Could not generate desktop health token: {err}"))?; + Ok(hex_encode(&bytes)) +} + +fn hex_encode(bytes: &[u8]) -> String { + const HEX: &[u8; 16] = b"0123456789abcdef"; + let mut out = String::with_capacity(bytes.len() * 2); + for byte in bytes { + out.push(HEX[(byte >> 4) as usize] as char); + out.push(HEX[(byte & 0x0f) as usize] as char); + } + out +} + +fn preferred_desktop_port(value: Option) -> Result { + let Some(value) = value else { + return Ok(DEFAULT_DESKTOP_PORT); + }; + let value = value + .into_string() + .map_err(|_| format!("{DESKTOP_PORT_ENV} must be valid UTF-8"))?; + let port = value + .parse::() + .map_err(|_| format!("{DESKTOP_PORT_ENV} must be a TCP port between 1 and 65535"))?; + if port == 0 { + Err(format!("{DESKTOP_PORT_ENV} must be a TCP port between 1 and 65535")) + } else { + Ok(port) + } +} + +fn pick_available_loopback_port(preferred: u16) -> Result { + match TcpListener::bind((LOOPBACK_HOST, preferred)) { + Ok(listener) => listener + .local_addr() + .map(|addr| addr.port()) + .map_err(|err| err.to_string()), + Err(err) if err.kind() == ErrorKind::AddrInUse => pick_loopback_port(), + Err(err) => Err(format!("Could not reserve {LOOPBACK_HOST}:{preferred}: {err}")), + } +} + +fn spawn_backend_command(spec: &BackendCommandSpec) -> Result { + let mut command = Command::new(&spec.program); + command + .args(&spec.args) + .current_dir(&spec.cwd) + .env_clear() + .envs(&spec.env) + .stdin(Stdio::null()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()); + command.spawn().map_err(|err| { + format!( + "Failed to start Kandev launcher at {}: {err}", + spec.program.display() + ) + }) +} + +fn capture_child_output(child: &mut Child, output: Arc>) { + if let Some(stdout) = child.stdout.take() { + capture_stream("stdout", stdout, output.clone()); + } + if let Some(stderr) = child.stderr.take() { + capture_stream("stderr", stderr, output); + } +} + +fn capture_stream(stream: &'static str, mut reader: R, output: Arc>) +where + R: Read + Send + 'static, +{ + thread::spawn(move || { + let mut buffer = [0_u8; 1024]; + loop { + match reader.read(&mut buffer) { + Ok(0) => return, + Err(err) if err.kind() == ErrorKind::Interrupted => continue, + Err(_) => return, + Ok(n) => output + .lock() + .expect("startup output mutex poisoned") + .push(stream, &buffer[..n]), + } + } + }); +} + +fn wait_for_backend( + port: u16, + state: &BackendState, + timeout: Duration, + expected_health_token: &str, +) -> Result<(), String> { + let deadline = Instant::now() + timeout; + loop { + if state.is_shutdown_started() { + return Err("Desktop startup cancelled".to_string()); + } + if let Some(message) = state.child_exit_message()? { + return Err(format!("Kandev launcher exited before /health became ready ({message})")); + } + if health_ready(port, expected_health_token) { + thread::sleep(HEALTH_READY_SETTLE); + if let Some(message) = state.child_exit_message()? { + return Err(format!( + "Kandev launcher exited before /health became ready ({message})" + )); + } + return Ok(()); + } + if Instant::now() >= deadline { + let mut message = format!("Timed out waiting for http://{LOOPBACK_HOST}:{port}/health"); + append_recent_output(&mut message, state.recent_startup_output()); + return Err(message); + } + thread::sleep(Duration::from_millis(250)); + } +} + +fn launcher_exit_message(status: &str, output: Option) -> String { + let mut message = status.to_string(); + append_recent_output(&mut message, output); + message +} + +fn append_recent_output(message: &mut String, output: Option) { + if let Some(output) = output { + message.push_str("\n\nRecent backend output:\n"); + message.push_str(&output); + } +} + +fn health_ready(port: u16, expected_health_token: &str) -> bool { + request_health(port, expected_health_token).unwrap_or(false) +} + +fn request_health(port: u16, expected_health_token: &str) -> Result { + let addr = (LOOPBACK_HOST, port) + .to_socket_addrs() + .map_err(|err| err.to_string())? + .next() + .ok_or_else(|| format!("Could not resolve {LOOPBACK_HOST}:{port}"))?; + let mut stream = TcpStream::connect_timeout(&addr, Duration::from_millis(250)) + .map_err(|err| err.to_string())?; + stream + .set_read_timeout(Some(Duration::from_millis(250))) + .map_err(|err| err.to_string())?; + stream + .write_all( + format!( + "GET /health HTTP/1.1\r\nHost: {LOOPBACK_HOST}:{port}\r\nConnection: close\r\n\r\n" + ) + .as_bytes(), + ) + .map_err(|err| err.to_string())?; + let response = read_http_response_head(&mut stream)?; + if !(response.starts_with(b"HTTP/1.1 200") || response.starts_with(b"HTTP/1.0 200")) { + return Ok(false); + } + Ok(response_has_header( + &response, + DESKTOP_HEALTH_TOKEN_HEADER, + expected_health_token, + )) +} + +fn read_http_response_head(reader: &mut R) -> Result, String> { + const MAX_HEADER_BYTES: usize = 8 * 1024; + let mut response = Vec::with_capacity(512); + let mut buffer = [0_u8; 16]; + while response.len() < MAX_HEADER_BYTES { + let read_len = buffer.len().min(MAX_HEADER_BYTES - response.len()); + let n = reader + .read(&mut buffer[..read_len]) + .map_err(|err| err.to_string())?; + if n == 0 { + break; + } + response.extend_from_slice(&buffer[..n]); + if response.windows(4).any(|window| window == b"\r\n\r\n") { + break; + } + } + Ok(response) +} + +fn response_has_header(response: &[u8], expected_name: &str, expected_value: &str) -> bool { + let response = String::from_utf8_lossy(response); + for line in response.lines().skip(1) { + let Some((name, value)) = line.split_once(':') else { + continue; + }; + if name.eq_ignore_ascii_case(expected_name) && value.trim() == expected_value { + return true; + } + } + false +} + +fn normalized_path(existing: Option<&OsString>, home_dir: Option<&Path>) -> OsString { + let mut entries: Vec = existing + .map(env::split_paths) + .into_iter() + .flatten() + .collect(); + for entry in common_path_entries(home_dir) { + if !entries.iter().any(|existing| existing == &entry) { + entries.push(entry); + } + } + env::join_paths(entries).unwrap_or_else(|_| existing.cloned().unwrap_or_default()) +} + +fn common_path_entries(home_dir: Option<&Path>) -> Vec { + let mut entries = if cfg!(windows) { + Vec::new() + } else if cfg!(target_os = "macos") { + vec![ + PathBuf::from("/opt/homebrew/bin"), + PathBuf::from("/usr/local/bin"), + PathBuf::from("/usr/bin"), + PathBuf::from("/bin"), + ] + } else { + vec![ + PathBuf::from("/usr/local/bin"), + PathBuf::from("/usr/bin"), + PathBuf::from("/bin"), + PathBuf::from("/opt/homebrew/bin"), + PathBuf::from("/home/linuxbrew/.linuxbrew/bin"), + ] + }; + if let Some(home) = home_dir { + entries.push(home.join(".local/bin")); + if cfg!(windows) { + entries.push(home.join("AppData/Roaming/npm")); + entries.push(home.join("scoop/shims")); + } else { + entries.push(home.join(".bun/bin")); + entries.push(home.join(".opencode/bin")); + } + } + entries +} + +fn current_home_dir() -> Option { + env::var_os("HOME") + .or_else(|| env::var_os("USERPROFILE")) + .map(PathBuf::from) +} + +fn executable_name(name: &str) -> OsString { + if cfg!(windows) { + OsString::from(format!("{name}.exe")) + } else { + OsString::from(name) + } +} + +#[cfg(feature = "desktop-runtime")] +fn set_status(window: &WebviewWindow, title: &str, detail: &str, failed: bool) { + let payload = serde_json::json!({ + "title": title, + "detail": detail, + "failed": failed, + }); + let script = format!( + "window.__KANDEV_DESKTOP_PENDING_STATUS={payload};window.__KANDEV_DESKTOP_SET_STATUS?.({payload});" + ); + let _ = window.eval(&script); +} + +#[cfg(feature = "desktop-runtime")] +fn navigate_to_backend(window: &WebviewWindow, url: &str) -> Result<(), String> { + let url = serde_json::to_string(url).map_err(|err| err.to_string())?; + window + .eval(&format!("window.location.replace({url});")) + .map_err(|err| err.to_string()) +} + +#[cfg(unix)] +fn terminate_child(child: &mut Child) { + let _ = unsafe { libc::kill(child.id() as i32, libc::SIGTERM) }; + wait_or_kill(child, Duration::from_secs(5)); +} + +#[cfg(windows)] +fn terminate_child(child: &mut Child) { + wait_or_kill(child, Duration::from_secs(0)); +} + +#[cfg(not(any(unix, windows)))] +fn terminate_child(child: &mut Child) { + wait_or_kill(child, Duration::from_secs(0)); +} + +fn wait_or_kill(child: &mut Child, graceful_timeout: Duration) { + let deadline = Instant::now() + graceful_timeout; + loop { + match child.try_wait() { + Ok(Some(_)) => return, + Ok(None) if Instant::now() < deadline => thread::sleep(Duration::from_millis(100)), + Ok(None) | Err(_) => break, + } + } + force_kill_child(child); + let _ = child.wait(); +} + +#[cfg(windows)] +fn force_kill_child(child: &mut Child) { + let pid = child.id().to_string(); + let _ = Command::new("taskkill") + .args(["/PID", &pid, "/T", "/F"]) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status(); + let _ = child.kill(); +} + +#[cfg(not(windows))] +fn force_kill_child(child: &mut Child) { + let _ = child.kill(); +} + +#[cfg(test)] +mod tests { + use super::*; + use std::fs; + + #[test] + fn command_spec_uses_headless_launcher_and_loopback_env() { + let runtime_dir = temp_runtime_dir("command-spec"); + let mut inherited = BTreeMap::new(); + inherited.insert(OsString::from("CUSTOM_ENV"), OsString::from("kept")); + inherited.insert( + OsString::from(DESKTOP_HEALTH_TOKEN_ENV), + OsString::from("health-token"), + ); + inherited.insert(OsString::from("PATH"), OsString::from("/existing/bin")); + + let spec = build_backend_command( + &runtime_dir, + 48123, + inherited, + Some(Path::new("/home/example")), + ) + .expect("command spec"); + + assert_eq!(spec.program, runtime_dir.join("bin").join(executable_name("kandev"))); + assert_eq!( + spec.args, + vec![ + OsString::from("--headless"), + OsString::from("--port"), + OsString::from("48123"), + ] + ); + assert_eq!(spec.env.get(OsStr::new("CUSTOM_ENV")), Some(&OsString::from("kept"))); + assert_eq!( + spec.env.get(OsStr::new("KANDEV_SERVER_HOST")), + Some(&OsString::from(LOOPBACK_HOST)) + ); + assert_eq!( + spec.env.get(OsStr::new("KANDEV_BUNDLE_DIR")), + Some(&runtime_dir.as_os_str().to_os_string()) + ); + assert_eq!( + spec.env.get(OsStr::new(DESKTOP_HEALTH_TOKEN_ENV)), + Some(&OsString::from("health-token")) + ); + } + + #[test] + fn desktop_environment_preserves_path_and_adds_gui_paths() { + let runtime_dir = Path::new("/opt/kandev"); + let home_dir = Path::new("/home/example"); + let mut inherited = BTreeMap::new(); + inherited.insert(OsString::from("PATH"), OsString::from("/existing/bin")); + + let env = desktop_environment(runtime_dir, inherited, Some(home_dir)); + let path = env.get(OsStr::new("PATH")).expect("PATH"); + let entries: Vec = env::split_paths(path).collect(); + + assert_eq!(entries.first(), Some(&PathBuf::from("/existing/bin"))); + assert!(entries.contains(&PathBuf::from("/usr/local/bin")) || cfg!(windows)); + assert!(entries.contains(&home_dir.join(".local/bin"))); + } + + #[test] + fn missing_launcher_returns_readable_error() { + let dir = temp_root("missing-launcher"); + let err = + build_backend_command(&dir, 48123, BTreeMap::new(), None).expect_err("missing launcher"); + assert!(err.contains("Kandev launcher binary is missing"), "{err}"); + } + + #[test] + fn missing_agentctl_returns_readable_error() { + let dir = temp_root("missing-agentctl"); + let bin = dir.join("bin"); + fs::create_dir_all(&bin).expect("create bin"); + fs::write(bin.join(executable_name("kandev")), b"stub").expect("write launcher"); + + let err = + build_backend_command(&dir, 48123, BTreeMap::new(), None).expect_err("missing agentctl"); + + assert!(err.contains("agentctl binary is missing"), "{err}"); + } + + #[test] + fn missing_linux_helper_returns_readable_error() { + let dir = temp_root("missing-linux-helper"); + let bin = dir.join("bin"); + fs::create_dir_all(&bin).expect("create bin"); + fs::write(bin.join(executable_name("kandev")), b"stub").expect("write launcher"); + fs::write(bin.join(executable_name("agentctl")), b"stub").expect("write agentctl"); + + let err = + build_backend_command(&dir, 48123, BTreeMap::new(), None).expect_err("missing helper"); + + assert!(err.contains("agentctl linux/amd64 helper is missing"), "{err}"); + } + + #[test] + fn pick_loopback_port_returns_valid_port() { + let port = pick_loopback_port().expect("loopback port"); + assert_ne!(port, 0); + } + + #[test] + fn preferred_desktop_port_defaults_to_stable_origin() { + assert_eq!( + preferred_desktop_port(None).expect("default desktop port"), + DEFAULT_DESKTOP_PORT + ); + } + + #[test] + fn preferred_desktop_port_accepts_env_override() { + assert_eq!( + preferred_desktop_port(Some(OsString::from("49152"))).expect("env desktop port"), + 49152 + ); + } + + #[test] + fn preferred_desktop_port_rejects_invalid_env_override() { + let err = preferred_desktop_port(Some(OsString::from("0"))).expect_err("zero port"); + + assert!(err.contains(DESKTOP_PORT_ENV), "{err}"); + } + + #[test] + fn desktop_health_token_is_hex_encoded() { + let token = desktop_health_token().expect("desktop health token"); + + assert_eq!(token.len(), 64); + assert!(token.chars().all(|ch| ch.is_ascii_hexdigit()), "{token}"); + } + + #[test] + fn pick_available_loopback_port_returns_preferred_port() { + let listener = TcpListener::bind((LOOPBACK_HOST, 0)).expect("reserve candidate"); + let port = listener.local_addr().expect("candidate address").port(); + drop(listener); + + assert_eq!( + pick_available_loopback_port(port).expect("preferred port"), + port + ); + } + + #[test] + fn pick_available_loopback_port_falls_back_when_preferred_port_is_taken() { + let listener = TcpListener::bind((LOOPBACK_HOST, 0)).expect("reserve occupied port"); + let occupied = listener.local_addr().expect("occupied address").port(); + + let picked = pick_available_loopback_port(occupied).expect("fallback port"); + + assert_ne!(picked, occupied); + assert_ne!(picked, 0); + } + + #[test] + fn shutdown_request_is_one_shot() { + let state = BackendState::default(); + + assert!(state.begin_shutdown()); + assert!(!state.begin_shutdown()); + } + + #[test] + fn stop_marks_shutdown_started() { + let state = BackendState::default(); + + state.stop(); + + assert!(state.is_shutdown_started()); + } + + #[test] + fn launcher_exit_message_includes_recent_output() { + let message = launcher_exit_message("exit status: 1", Some("database failed".to_string())); + + assert!(message.contains("exit status: 1")); + assert!(message.contains("Recent backend output")); + assert!(message.contains("database failed")); + } + + #[test] + fn startup_output_is_bounded() { + let mut output = StartupOutput::default(); + let chunk = vec![b'x'; STARTUP_OUTPUT_LIMIT + 256]; + + output.push("stderr", &chunk); + + assert!(output.bytes.len() <= STARTUP_OUTPUT_LIMIT); + } + + #[test] + fn capture_stream_retries_interrupted_reads() { + let output = Arc::new(Mutex::new(StartupOutput::default())); + + capture_stream("stdout", InterruptedThenData::new(b"backend ready"), output.clone()); + + let deadline = Instant::now() + Duration::from_secs(1); + while Instant::now() < deadline { + if output + .lock() + .expect("startup output mutex poisoned") + .text() + .is_some_and(|text| text.contains("backend ready")) + { + return; + } + thread::sleep(Duration::from_millis(10)); + } + panic!("capture_stream did not retry interrupted read"); + } + + #[test] + fn read_http_response_head_reads_past_short_first_chunk() { + let mut reader = ShortReader::new( + b"HTTP/1.1 200 OK\r\nx-kandev-desktop-health-token: token\r\n\r\nignored", + 4, + ); + + let prefix = read_http_response_head(&mut reader).expect("response head"); + + assert!(prefix.starts_with(b"HTTP/1.1 200")); + assert!( + prefix.windows(4).any(|window| window == b"\r\n\r\n"), + "response head should include the header terminator" + ); + } + + #[test] + fn response_header_check_requires_matching_desktop_health_token() { + let response = b"HTTP/1.1 200 OK\r\nX-Kandev-Desktop-Health-Token: token\r\n\r\n"; + + assert!(response_has_header(response, DESKTOP_HEALTH_TOKEN_HEADER, "token")); + assert!(!response_has_header(response, DESKTOP_HEALTH_TOKEN_HEADER, "other-token")); + assert!(!response_has_header( + b"HTTP/1.1 200 OK\r\n\r\n", + DESKTOP_HEALTH_TOKEN_HEADER, + "token" + )); + } + + #[cfg(unix)] + #[test] + fn stop_terminates_tracked_child() { + let state = BackendState::default(); + let child = Command::new("sh") + .arg("-c") + .arg("trap 'exit 0' TERM; while true; do sleep 1; done") + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + .expect("spawn long-running child"); + let pid = child.id(); + + assert!(state.set_child(child)); + state.stop(); + + assert!(!process_exists(pid), "backend child {pid} should be terminated"); + } + + #[cfg(unix)] + #[test] + fn set_child_terminates_child_when_shutdown_already_started() { + let state = BackendState::default(); + let child = Command::new("sh") + .arg("-c") + .arg("trap 'exit 0' TERM; while true; do sleep 1; done") + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + .expect("spawn long-running child"); + let pid = child.id(); + + state.stop(); + + assert!(!state.set_child(child)); + assert!(!process_exists(pid), "backend child {pid} should be terminated"); + } + + fn temp_runtime_dir(name: &str) -> PathBuf { + let dir = temp_root(name); + let bin = dir.join("bin"); + fs::create_dir_all(&bin).expect("create bin"); + fs::write(bin.join(executable_name("kandev")), b"stub").expect("write launcher"); + fs::write(bin.join(executable_name("agentctl")), b"stub").expect("write agentctl"); + fs::write(bin.join("agentctl-linux-amd64"), b"stub").expect("write linux helper"); + dir + } + + fn temp_root(name: &str) -> PathBuf { + let dir = env::temp_dir().join(format!( + "kandev-desktop-{name}-{}", + std::process::id() + )); + let _ = fs::remove_dir_all(&dir); + fs::create_dir_all(&dir).expect("create temp root"); + dir + } + + #[cfg(unix)] + fn process_exists(pid: u32) -> bool { + unsafe { libc::kill(pid as i32, 0) == 0 } + } + + struct ShortReader { + data: &'static [u8], + position: usize, + chunk_size: usize, + } + + impl ShortReader { + fn new(data: &'static [u8], chunk_size: usize) -> Self { + Self { + data, + position: 0, + chunk_size, + } + } + } + + impl Read for ShortReader { + fn read(&mut self, buffer: &mut [u8]) -> std::io::Result { + if self.position >= self.data.len() { + return Ok(0); + } + let len = buffer + .len() + .min(self.chunk_size) + .min(self.data.len() - self.position); + buffer[..len].copy_from_slice(&self.data[self.position..self.position + len]); + self.position += len; + Ok(len) + } + } + + struct InterruptedThenData { + data: &'static [u8], + interrupted: bool, + drained: bool, + } + + impl InterruptedThenData { + fn new(data: &'static [u8]) -> Self { + Self { + data, + interrupted: false, + drained: false, + } + } + } + + impl Read for InterruptedThenData { + fn read(&mut self, buffer: &mut [u8]) -> std::io::Result { + if !self.interrupted { + self.interrupted = true; + return Err(std::io::Error::from(ErrorKind::Interrupted)); + } + if self.drained { + return Ok(0); + } + let len = buffer.len().min(self.data.len()); + buffer[..len].copy_from_slice(&self.data[..len]); + self.drained = true; + Ok(len) + } + } +} diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs new file mode 100644 index 0000000000..fceb14190a --- /dev/null +++ b/apps/desktop/src-tauri/src/lib.rs @@ -0,0 +1 @@ +pub mod backend; diff --git a/apps/desktop/src-tauri/src/main.rs b/apps/desktop/src-tauri/src/main.rs new file mode 100644 index 0000000000..2262c8a40f --- /dev/null +++ b/apps/desktop/src-tauri/src/main.rs @@ -0,0 +1,50 @@ +use kandev_desktop::backend; +use std::thread; +use tauri::{Manager, RunEvent, WindowEvent}; + +fn main() { + let app = tauri::Builder::default() + .plugin(tauri_plugin_single_instance::init(|app, _argv, _cwd| { + if let Some(window) = app.get_webview_window("main") { + let _ = window.show(); + let _ = window.set_focus(); + } + })) + .manage(backend::BackendState::default()) + .setup(|app| { + let window = app + .get_webview_window("main") + .expect("main window should exist"); + backend::start_desktop_backend(app.handle().clone(), window); + Ok(()) + }) + .on_window_event(|window, event| { + if let WindowEvent::CloseRequested { api, .. } = event { + let state = window.app_handle().state::().inner().clone(); + if state.begin_shutdown() { + api.prevent_close(); + let window = window.clone(); + thread::spawn(move || { + state.stop(); + let _ = window.close(); + }); + } + } + }) + .build(tauri::generate_context!()) + .expect("error while building Kandev desktop app"); + + app.run(|app_handle, event| { + if let RunEvent::ExitRequested { api, .. } = event { + let state = app_handle.state::().inner().clone(); + if state.begin_shutdown() { + api.prevent_exit(); + let app_handle = app_handle.clone(); + thread::spawn(move || { + state.stop(); + app_handle.exit(0); + }); + } + } + }); +} diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json new file mode 100644 index 0000000000..4b5ae79a17 --- /dev/null +++ b/apps/desktop/src-tauri/tauri.conf.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "Kandev", + "version": "0.1.0", + "identifier": "dev.kandev.desktop", + "build": { + "beforeDevCommand": "pnpm dev:vite", + "beforeBuildCommand": "pnpm build:vite", + "devUrl": "http://127.0.0.1:1420", + "frontendDist": "../dist" + }, + "app": { + "windows": [ + { + "label": "main", + "title": "Kandev", + "width": 1280, + "height": 900, + "minWidth": 960, + "minHeight": 640, + "resizable": true, + "fullscreen": false + } + ], + "security": { + "capabilities": ["default"], + "csp": "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; connect-src 'self' http://127.0.0.1:* ws://127.0.0.1:*; frame-ancestors 'none'" + } + }, + "bundle": { + "active": true, + "targets": "all", + "publisher": "Kandev", + "homepage": "https://github.com/kdlbs/kandev", + "resources": { + "resources/kandev": "kandev" + }, + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "windows": { + "digestAlgorithm": "sha256", + "timestampUrl": "https://timestamp.digicert.com", + "signCommand": "powershell -NoProfile -ExecutionPolicy Bypass -File ./windows-sign.ps1 %1" + } + } +} diff --git a/apps/desktop/src-tauri/windows-sign.ps1 b/apps/desktop/src-tauri/windows-sign.ps1 new file mode 100644 index 0000000000..f3a3f4cdae --- /dev/null +++ b/apps/desktop/src-tauri/windows-sign.ps1 @@ -0,0 +1,72 @@ +param( + [Parameter(Mandatory = $true)] + [string]$Path +) + +$ErrorActionPreference = "Stop" + +$missing = @() +if ([string]::IsNullOrWhiteSpace($env:WINDOWS_CERTIFICATE)) { $missing += "WINDOWS_CERTIFICATE" } +if ([string]::IsNullOrWhiteSpace($env:WINDOWS_CERTIFICATE_PASSWORD)) { $missing += "WINDOWS_CERTIFICATE_PASSWORD" } + +if ($missing.Count -gt 0) { + if ($env:ALLOW_UNSIGNED_DESKTOP -eq "true") { + Write-Warning "Skipping Windows signing for internal unsigned desktop validation; missing: $($missing -join ', ')" + exit 0 + } + throw "Public Windows desktop releases require signing inputs: $($missing -join ', ')" +} + +if (!(Test-Path $Path)) { + throw "Cannot sign missing Windows artifact: $Path" +} + +$certificatePath = Join-Path $env:RUNNER_TEMP "kandev-code-signing.pfx" +[IO.File]::WriteAllBytes($certificatePath, [Convert]::FromBase64String($env:WINDOWS_CERTIFICATE)) + +$timestampUrl = if ([string]::IsNullOrWhiteSpace($env:WINDOWS_TIMESTAMP_URL)) { + "https://timestamp.digicert.com" +} else { + $env:WINDOWS_TIMESTAMP_URL +} + +$signTool = if ([string]::IsNullOrWhiteSpace($env:WINDOWS_SIGNTOOL_PATH)) { + "signtool" +} else { + $env:WINDOWS_SIGNTOOL_PATH +} + +function Invoke-SignTool { + param( + [Parameter(Mandatory = $true)] + [string[]]$Arguments, + [Parameter(Mandatory = $true)] + [string]$Description + ) + + & $signTool @Arguments + if ($LASTEXITCODE -ne 0) { + throw "$Description failed with exit code $LASTEXITCODE" + } +} + +try { + Invoke-SignTool ` + -Description "signtool sign" ` + -Arguments @( + "sign", + "/fd", "SHA256", + "/td", "SHA256", + "/tr", $timestampUrl, + "/f", $certificatePath, + "/p", $env:WINDOWS_CERTIFICATE_PASSWORD, + $Path + ) + Invoke-SignTool ` + -Description "signtool verify" ` + -Arguments @("verify", "/pa", $Path) +} finally { + if (Test-Path -LiteralPath $certificatePath) { + Remove-Item -LiteralPath $certificatePath -Force -ErrorAction SilentlyContinue + } +} diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts new file mode 100644 index 0000000000..937e771e71 --- /dev/null +++ b/apps/desktop/src/main.ts @@ -0,0 +1,33 @@ +import "./styles.css"; + +type DesktopStatus = { + title: string; + detail: string; + failed?: boolean; +}; + +declare global { + interface Window { + __KANDEV_DESKTOP_SET_STATUS?: (status: DesktopStatus) => void; + __KANDEV_DESKTOP_PENDING_STATUS?: DesktopStatus; + } +} + +const title = document.querySelector("#status-title"); +const detail = document.querySelector("#status-detail"); +const shell = document.querySelector(".startup-shell"); + +const applyStatus = (status: DesktopStatus) => { + if (title) { + title.textContent = status.title; + } + if (detail) { + detail.textContent = status.detail; + } + shell?.classList.toggle("is-failed", status.failed === true); +}; + +window.__KANDEV_DESKTOP_SET_STATUS = applyStatus; +if (window.__KANDEV_DESKTOP_PENDING_STATUS) { + applyStatus(window.__KANDEV_DESKTOP_PENDING_STATUS); +} diff --git a/apps/desktop/src/styles.css b/apps/desktop/src/styles.css new file mode 100644 index 0000000000..63d79714af --- /dev/null +++ b/apps/desktop/src/styles.css @@ -0,0 +1,116 @@ +:root { + color: #18201f; + background: #f5f7f6; + font-family: + Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + min-width: 320px; + min-height: 100vh; +} + +.startup-shell { + align-items: center; + background: + linear-gradient(135deg, rgba(18, 117, 82, 0.08), transparent 34%), + linear-gradient(315deg, rgba(117, 85, 18, 0.08), transparent 38%), #f5f7f6; + display: flex; + min-height: 100vh; + padding: 32px; +} + +.startup-panel { + align-items: center; + background: #ffffff; + border: 1px solid #d8dfdc; + border-radius: 8px; + box-shadow: 0 24px 70px rgba(24, 32, 31, 0.14); + display: grid; + gap: 20px; + grid-template-columns: 56px minmax(0, 1fr); + margin: 0 auto; + max-width: 560px; + min-height: 168px; + padding: 28px; + width: min(100%, 560px); +} + +.status-mark { + align-self: start; + background: conic-gradient(from 90deg, #16875f, #c48a2a, #16875f); + border-radius: 999px; + height: 44px; + position: relative; + width: 44px; +} + +.status-mark::after { + background: #ffffff; + border-radius: inherit; + content: ""; + inset: 6px; + position: absolute; +} + +.startup-copy { + min-width: 0; +} + +.eyebrow { + color: #53625e; + font-size: 0.78rem; + font-weight: 700; + letter-spacing: 0; + line-height: 1.4; + margin: 0 0 6px; + text-transform: uppercase; +} + +h1 { + color: #18201f; + font-size: 1.55rem; + line-height: 1.2; + margin: 0; + overflow-wrap: anywhere; +} + +#status-detail { + color: #53625e; + font-size: 0.96rem; + line-height: 1.55; + margin: 10px 0 0; + overflow-wrap: anywhere; +} + +.startup-shell.is-failed .status-mark { + background: conic-gradient(from 90deg, #b42318, #c48a2a, #b42318); +} + +.startup-shell.is-failed h1 { + color: #9d241b; +} + +@media (max-width: 520px) { + .startup-shell { + align-items: stretch; + padding: 16px; + } + + .startup-panel { + align-content: center; + grid-template-columns: 1fr; + justify-items: start; + min-height: 100%; + padding: 22px; + } +} diff --git a/apps/desktop/tsconfig.json b/apps/desktop/tsconfig.json new file mode 100644 index 0000000000..20fab4a6ae --- /dev/null +++ b/apps/desktop/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "types": ["vite/client"] + }, + "include": ["src/**/*.ts"] +} diff --git a/apps/pnpm-lock.yaml b/apps/pnpm-lock.yaml index 43149bcd04..0445f6ad3f 100644 --- a/apps/pnpm-lock.yaml +++ b/apps/pnpm-lock.yaml @@ -68,6 +68,18 @@ importers: specifier: ^1.6.0 version: 1.6.1(@types/node@20.19.28)(happy-dom@20.8.9)(lightningcss@1.32.0) + desktop: + devDependencies: + '@tauri-apps/cli': + specifier: 2.8.4 + version: 2.8.4 + typescript: + specifier: ^5 + version: 5.9.3 + vite: + specifier: ^8.0.16 + version: 8.0.16(@types/node@20.19.28)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0) + packages/theme: dependencies: shadcn: @@ -2937,6 +2949,77 @@ packages: resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} engines: {node: '>=12'} + '@tauri-apps/cli-darwin-arm64@2.8.4': + resolution: {integrity: sha512-BKu8HRkYV01SMTa7r4fLx+wjgtRK8Vep7lmBdHDioP6b8XH3q2KgsAyPWfEZaZIkZ2LY4SqqGARaE9oilNe0oA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tauri-apps/cli-darwin-x64@2.8.4': + resolution: {integrity: sha512-imb9PfSd/7G6VAO7v1bQ2A3ZH4NOCbhGJFLchxzepGcXf9NKkfun157JH9mko29K6sqAwuJ88qtzbKCbWJTH9g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tauri-apps/cli-linux-arm-gnueabihf@2.8.4': + resolution: {integrity: sha512-Ml215UnDdl7/fpOrF1CNovym/KjtUbCuPgrcZ4IhqUCnhZdXuphud/JT3E8X97Y03TZ40Sjz8raXYI2ET0exzw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tauri-apps/cli-linux-arm64-gnu@2.8.4': + resolution: {integrity: sha512-pbcgBpMyI90C83CxE5REZ9ODyIlmmAPkkJXtV398X3SgZEIYy5TACYqlyyv2z5yKgD8F8WH4/2fek7+jH+ZXAw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tauri-apps/cli-linux-arm64-musl@2.8.4': + resolution: {integrity: sha512-zumFeaU1Ws5Ay872FTyIm7z8kfzEHu8NcIn8M6TxbJs0a7GRV21KBdpW1zNj2qy7HynnpQCqjAYXTUUmm9JAOw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tauri-apps/cli-linux-riscv64-gnu@2.8.4': + resolution: {integrity: sha512-qiqbB3Zz6IyO201f+1ojxLj65WYj8mixL5cOMo63nlg8CIzsP23cPYUrx1YaDPsCLszKZo7tVs14pc7BWf+/aQ==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@tauri-apps/cli-linux-x64-gnu@2.8.4': + resolution: {integrity: sha512-TaqaDd9Oy6k45Hotx3pOf+pkbsxLaApv4rGd9mLuRM1k6YS/aw81YrsMryYPThrxrScEIUcmNIHaHsLiU4GMkw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tauri-apps/cli-linux-x64-musl@2.8.4': + resolution: {integrity: sha512-ot9STAwyezN8w+bBHZ+bqSQIJ0qPZFlz/AyscpGqB/JnJQVDFQcRDmUPFEaAtt2UUHSWzN3GoTJ5ypqLBp2WQA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tauri-apps/cli-win32-arm64-msvc@2.8.4': + resolution: {integrity: sha512-+2aJ/g90dhLiOLFSD1PbElXX3SoMdpO7HFPAZB+xot3CWlAZD1tReUFy7xe0L5GAR16ZmrxpIDM9v9gn5xRy/w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tauri-apps/cli-win32-ia32-msvc@2.8.4': + resolution: {integrity: sha512-yj7WDxkL1t9Uzr2gufQ1Hl7hrHuFKTNEOyascbc109EoiAqCp0tgZ2IykQqOZmZOHU884UAWI1pVMqBhS/BfhA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@tauri-apps/cli-win32-x64-msvc@2.8.4': + resolution: {integrity: sha512-XuvGB4ehBdd7QhMZ9qbj/8icGEatDuBNxyYHbLKsTYh90ggUlPa/AtaqcC1Fo69lGkTmq9BOKrs1aWSi7xDonA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tauri-apps/cli@2.8.4': + resolution: {integrity: sha512-ejUZBzuQRcjFV+v/gdj/DcbyX/6T4unZQjMSBZwLzP/CymEjKcc2+Fc8xTORThebHDUvqoXMdsCZt8r+hyN15g==} + engines: {node: '>= 10'} + hasBin: true + '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} @@ -9020,6 +9103,53 @@ snapshots: '@tanstack/table-core@8.21.3': {} + '@tauri-apps/cli-darwin-arm64@2.8.4': + optional: true + + '@tauri-apps/cli-darwin-x64@2.8.4': + optional: true + + '@tauri-apps/cli-linux-arm-gnueabihf@2.8.4': + optional: true + + '@tauri-apps/cli-linux-arm64-gnu@2.8.4': + optional: true + + '@tauri-apps/cli-linux-arm64-musl@2.8.4': + optional: true + + '@tauri-apps/cli-linux-riscv64-gnu@2.8.4': + optional: true + + '@tauri-apps/cli-linux-x64-gnu@2.8.4': + optional: true + + '@tauri-apps/cli-linux-x64-musl@2.8.4': + optional: true + + '@tauri-apps/cli-win32-arm64-msvc@2.8.4': + optional: true + + '@tauri-apps/cli-win32-ia32-msvc@2.8.4': + optional: true + + '@tauri-apps/cli-win32-x64-msvc@2.8.4': + optional: true + + '@tauri-apps/cli@2.8.4': + optionalDependencies: + '@tauri-apps/cli-darwin-arm64': 2.8.4 + '@tauri-apps/cli-darwin-x64': 2.8.4 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.8.4 + '@tauri-apps/cli-linux-arm64-gnu': 2.8.4 + '@tauri-apps/cli-linux-arm64-musl': 2.8.4 + '@tauri-apps/cli-linux-riscv64-gnu': 2.8.4 + '@tauri-apps/cli-linux-x64-gnu': 2.8.4 + '@tauri-apps/cli-linux-x64-musl': 2.8.4 + '@tauri-apps/cli-win32-arm64-msvc': 2.8.4 + '@tauri-apps/cli-win32-ia32-msvc': 2.8.4 + '@tauri-apps/cli-win32-x64-msvc': 2.8.4 + '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.28.6 diff --git a/apps/pnpm-workspace.yaml b/apps/pnpm-workspace.yaml index 4e9257f0cc..3095f1e6a5 100644 --- a/apps/pnpm-workspace.yaml +++ b/apps/pnpm-workspace.yaml @@ -1,4 +1,5 @@ packages: - 'cli' + - 'desktop' - 'web' - 'packages/*' diff --git a/docs/decisions/0026-tauri-desktop-shell.md b/docs/decisions/0026-tauri-desktop-shell.md new file mode 100644 index 0000000000..3a4dbe91ef --- /dev/null +++ b/docs/decisions/0026-tauri-desktop-shell.md @@ -0,0 +1,30 @@ +# 0026: Tauri Desktop Shell Over Native Runtime + +**Status:** accepted +**Date:** 2026-06-23 +**Area:** frontend, backend, cli, infra + +## Context + +Kandev now has a native Go launcher/backend path and embeds the Vite SPA into the backend binary. Users can run Kandev from CLI-oriented channels, but a desktop install should open from the OS launcher, manage a local backend process, and avoid a production Node.js runtime. The desktop packaging choice needs to preserve the existing local-first backend, agent executors, and release versioning model. + +## Decision + +Add a Tauri v2 desktop app as a thin native shell over the existing Kandev runtime. The shell lives under `apps/desktop`, packages the platform runtime binaries as resources, launches the native Kandev launcher in headless mode, waits for the backend `/health` endpoint, and loads the existing Go-served SPA in a native WebView. + +The installed desktop app will not include a Node.js runtime. Node.js and pnpm remain build-time tooling for Vite, TypeScript, Tauri CLI invocation, tests, and release automation. + +Desktop launches set the backend to a loopback-only bind address and an app-selected local port. Public desktop releases require macOS Developer ID signing/notarization and Windows code signing before the artifacts are presented as trusted downloads. The first desktop implementation does not include Tauri's in-app updater; updates continue through GitHub release downloads/manual reinstall until a separate updater spec is approved. + +## Consequences + +The desktop app can reuse the existing backend, embedded web UI, data directory, agent runtime, and supervisor behavior instead of introducing a parallel application stack. Release artifacts grow by the Tauri shell and installer overhead, but avoid Electron's bundled Chromium and avoid a runtime Node.js dependency. + +CI becomes more complex because desktop installers must be built on OS-specific runners and signing requires protected secrets. The desktop app also adds a new security boundary: the WebView must not get broad shell/filesystem permissions, and backend process spawning should stay in Rust-side Tauri code. + +## Alternatives Considered + +1. **Electron desktop app.** Rejected because it would add a bundled Chromium and Node.js runtime, increasing artifact size and conflicting with the no-production-Node direction established by ADR-0021 and ADR-0022. +2. **Rewrite the UI in a native toolkit.** Rejected because it would duplicate the existing React product surface and slow delivery without improving the backend/runtime model. +3. **Browser-only PWA.** Rejected because it does not solve OS-level desktop installation, app launcher integration, or process lifecycle ownership for the local backend. +4. **Tauri shell that embeds all UI assets separately from the Go backend.** Rejected for the first implementation because the backend already embeds and serves the release-quality Vite SPA. Duplicating the assets would increase packaging complexity and risk frontend/backend version drift. diff --git a/docs/decisions/INDEX.md b/docs/decisions/INDEX.md index 83967dc1af..b334f1667b 100644 --- a/docs/decisions/INDEX.md +++ b/docs/decisions/INDEX.md @@ -31,3 +31,4 @@ Read individual ADRs for full context. Create new ones via `/record decision` or | 0023 | [Active workspace cookie for boot state](0023-active-workspace-cookie.md) | accepted | backend, frontend | 2026-06-18 | | 0024 | [Go-fronted Vite dev mode](0024-go-fronted-vite-dev-mode.md) | accepted | backend, frontend, cli | 2026-06-18 | | 0025 | [Runtime cleanup uses `executors_running`](0025-runtime-cleanup-uses-executors-running.md) | accepted | backend | 2026-06-22 | +| 0026 | [Tauri desktop shell over native runtime](0026-tauri-desktop-shell.md) | accepted | frontend, backend, cli, infra | 2026-06-23 | diff --git a/docs/desktop-app.md b/docs/desktop-app.md new file mode 100644 index 0000000000..8477835c8b --- /dev/null +++ b/docs/desktop-app.md @@ -0,0 +1,67 @@ +# Kandev Desktop App + +Kandev desktop is a Tauri app that starts the native Kandev runtime locally and shows the existing Kandev UI in a system WebView. It does not require Node.js at runtime. Node.js, pnpm, Rust, and the Tauri CLI are build-time tools only. + +## Install Artifacts + +GitHub releases publish desktop artifacts alongside the existing runtime tarballs. Desktop artifact names start with `kandev-desktop--` and each artifact has a `.sha256` checksum. + +Supported desktop platforms: + +- `macos-arm64` +- `macos-x64` +- `linux-x64` +- `linux-arm64` +- `windows-x64` + +Public recommended macOS artifacts must be Developer ID signed and notarized. Public recommended Windows artifacts must be code signed. Linux artifacts are checksum-gated; package-manager signatures can be added later. + +Unsigned macOS or Windows desktop artifacts are for internal validation only. They may require manual OS security bypasses and should not be presented as trusted public downloads. + +## Runtime Requirements + +The desktop app packages the native Kandev runtime binaries and starts: + +```text +kandev --headless --port +``` + +The backend binds to `127.0.0.1` and serves the same embedded Vite UI used by the CLI/Homebrew/npm runtime. + +Platform WebView requirements: + +- macOS: system WebKit. +- Windows: Microsoft WebView2 runtime. +- Linux: WebKitGTK and package dependencies installed by the `.deb`/`.rpm` package. + +Kandev data still lives in the existing Kandev home directory, `~/.kandev` by default, unless overridden by existing environment/config settings. + +## Updates + +The first desktop release does not include an in-app Tauri updater. Update by downloading and installing a newer desktop artifact from GitHub Releases. Existing worktrees, settings, tasks, and the SQLite database remain in the Kandev data directory. + +The npm and Homebrew channels continue to update through: + +```bash +brew upgrade kandev +npm install -g kandev@latest +npx kandev@latest +``` + +Those channels are separate from desktop installers, even though all release artifacts share the same SemVer. + +## Agent CLI Discovery + +Desktop apps launched from an OS app launcher may not inherit the same shell initialization as a terminal. Kandev preserves available environment variables and adds common user binary directories such as `/usr/local/bin`, `/opt/homebrew/bin`, `/usr/bin`, `/bin`, `~/.local/bin`, and common agent install directories. + +If an agent CLI is not discoverable from the desktop app: + +- Set the agent profile command to the full executable path. +- Confirm the executable works from a normal terminal. +- Put custom install directories in a location visible to GUI apps, or configure them through OS-level environment settings rather than only shell startup files. + +Existing explicit command paths in Kandev settings remain authoritative over `PATH` lookup. + +## Release Trust + +See [desktop-tauri-signing.md](desktop-tauri-signing.md) for the CI secrets and signing expectations used for trusted desktop releases. diff --git a/docs/desktop-tauri-signing.md b/docs/desktop-tauri-signing.md new file mode 100644 index 0000000000..077927c1be --- /dev/null +++ b/docs/desktop-tauri-signing.md @@ -0,0 +1,36 @@ +# Tauri Desktop Signing + +Public recommended desktop releases require signing on macOS and Windows. The release workflow fails closed by default when those secrets are missing. + +Use `allow_unsigned_desktop=true` only for internal validation builds. That mode may upload workflow artifacts for maintainer inspection, but it does not publish a GitHub release, npm packages, Homebrew updates, or public container tags. Unsigned desktop artifacts are internal validation only and must not be presented as trusted public downloads. + +## macOS + +Required signing secrets: + +- `APPLE_CERTIFICATE`: base64 `.p12` Developer ID Application certificate. +- `APPLE_CERTIFICATE_PASSWORD`: export password for the `.p12`. +- `KEYCHAIN_PASSWORD`: temporary CI keychain password. + +Required notarization secrets, choose one path: + +- Apple ID path: `APPLE_ID`, `APPLE_PASSWORD`, `APPLE_TEAM_ID`. +- App Store Connect API path: `APPLE_API_KEY`, `APPLE_API_ISSUER`, `APPLE_API_KEY_P8`. + +Optional: + +- `APPLE_PROVIDER_SHORT_NAME` when the Apple ID belongs to multiple provider teams. + +## Windows + +Required signing secrets: + +- `WINDOWS_CERTIFICATE`: base64 `.pfx` code signing certificate. +- `WINDOWS_CERTIFICATE_PASSWORD`: export password for the `.pfx`. + +Optional: + +- `WINDOWS_TIMESTAMP_URL`: timestamp server, defaults to `http://timestamp.digicert.com`. +- `WINDOWS_SIGNTOOL_PATH`: custom `signtool.exe` path. + +Linux desktop artifacts are checksum-gated. The x64 `.deb`/`.rpm` artifacts are built on Ubuntu 22.04 for an older glibc baseline. The arm64 artifacts use GitHub's Ubuntu 24.04 arm64 runner baseline. GPG/RPM signing can be added later without changing the macOS and Windows trust gate. diff --git a/docs/features.md b/docs/features.md index 26bd602878..6a5f00dd85 100644 --- a/docs/features.md +++ b/docs/features.md @@ -25,6 +25,7 @@ This page expands the short feature list in the README without turning the READM ## Executors And Runtime +- **Desktop app:** install Kandev as a Tauri desktop app that starts the local backend and shows the existing Kandev UI without requiring Node.js at runtime. See [desktop-app.md](desktop-app.md). - **Executor types:** run agents as local host processes, git worktrees, Docker containers, remote SSH sessions, or Sprites cloud environments. - **Executor profiles:** save per-runtime configuration, including prepare scripts, environment variables, credentials, and profile-specific settings. - **Worktree isolation:** concurrent agents work in isolated git worktrees so their changes do not collide. diff --git a/docs/plans/desktop-tauri-app/plan.md b/docs/plans/desktop-tauri-app/plan.md new file mode 100644 index 0000000000..7f78bf4a91 --- /dev/null +++ b/docs/plans/desktop-tauri-app/plan.md @@ -0,0 +1,259 @@ +--- +spec: docs/specs/desktop-tauri-app/spec.md +created: 2026-06-23 +status: done +--- + +# Implementation Plan: Tauri Desktop App + +## Overview + +Add `apps/desktop` as a Tauri v2 shell that packages the existing native Kandev runtime, starts it in headless mode, waits for backend health, and loads the Go-served SPA in a desktop WebView. The implementation starts by tightening the backend/launcher contract for loopback desktop launches, then scaffolds the app, wires release packaging, adds signing gates, and finishes with desktop smoke coverage and docs. + +--- + +## Architecture Records + +- Spec: `docs/specs/desktop-tauri-app/spec.md` +- Decision: `docs/decisions/0026-tauri-desktop-shell.md` +- Existing dependencies: ADR-0021 Go-served SPA with boot state, ADR-0022 embedded Vite assets, and the native launcher spec at `docs/specs/native-kandev-cli/spec.md`. + +--- + +## Backend + +### Loopback bind contract + +Files: + +- `apps/backend/internal/common/config/config.go` +- `apps/backend/internal/backendapp/main.go` +- `apps/backend/internal/backendapp/helpers_test.go` or a focused backend server test +- `apps/backend/internal/launcher/env.go` +- `apps/backend/internal/launcher/start_test.go` or `apps/backend/internal/launcher/run_test.go` + +Use the existing `ServerConfig.Host` field when constructing the HTTP server address and listener address. Preserve the current default unless a caller sets `server.host` / `KANDEV_SERVER_HOST`. The desktop app will set `KANDEV_SERVER_HOST=127.0.0.1`. + +Add tests proving: + +- `buildHTTPServer` uses the configured host in `http.Server.Addr`. +- `startHTTPServer` listens on the configured host/port. +- launcher env construction can pass a backend host override for desktop/headless launches without changing normal CLI defaults. + +### Headless launcher lifecycle contract + +Files: + +- `apps/backend/internal/launcher/start.go` +- `apps/backend/internal/launcher/health.go` +- `apps/backend/internal/launcher/process.go` +- Existing launcher tests under `apps/backend/internal/launcher/` + +Keep `kandev --headless --port ` as the desktop process contract. It must supervise `kandev __backend`, wait for `/health`, skip opening a browser, and remain alive until the backend exits or the parent process terminates. Desktop-specific process termination should use the same process-group/job-object cleanup behavior already covered by the native launcher. + +--- + +## Desktop App + +### Workspace package + +Files: + +- `apps/pnpm-workspace.yaml` +- `apps/package.json` +- New `apps/desktop/package.json` +- New `apps/desktop/index.html` +- New `apps/desktop/src/main.ts` +- New `apps/desktop/src/styles.css` +- New `apps/desktop/src-tauri/Cargo.toml` +- New `apps/desktop/src-tauri/build.rs` +- New `apps/desktop/src-tauri/tauri.conf.json` +- New `apps/desktop/src-tauri/src/main.rs` +- New `apps/desktop/src-tauri/src/backend.rs` +- New `apps/desktop/src-tauri/capabilities/default.json` + +Add a minimal Tauri/Vite desktop package named `@kandev/desktop`. The app's first screen is a compact startup surface, not a marketing page. Rust-side Tauri code locates the packaged runtime resources, picks an available loopback port, spawns the native launcher in headless mode, polls `/health`, and navigates the main window to the backend URL. + +Do not expose shell execution to frontend JavaScript. Backend process control should live in Rust-side Tauri code. + +### Runtime resources + +Files: + +- New `scripts/release/prepare-desktop-runtime.sh` +- New `scripts/release/verify-desktop-runtime.sh` +- `apps/desktop/src-tauri/tauri.conf.json` +- `apps/desktop/src-tauri/src/backend.rs` + +Create a deterministic resource layout for the platform runtime extracted from the existing release bundle: + +```text +apps/desktop/src-tauri/resources/kandev/ +└── bin/ + ├── kandev[.exe] + ├── agentctl[.exe] + └── agentctl-linux-amd64 +``` + +The helper validates the exact binaries required by `internal/launcher/bundle.go` so the desktop app and existing runtime tarballs cannot drift. + +### Desktop process environment + +Files: + +- `apps/desktop/src-tauri/src/backend.rs` +- `apps/backend/internal/launcher/env.go` +- `apps/backend/internal/launcher/service.go` for existing PATH precedent +- `docs/desktop-tauri-signing.md` or desktop install docs for troubleshooting notes + +Build the backend process environment explicitly. Preserve inherited variables, force `KANDEV_SERVER_HOST=127.0.0.1`, and normalize `PATH` for GUI app launches so agent CLIs installed under common user locations are visible. Existing explicit agent command paths in settings remain authoritative; this task only makes default command lookup reliable. + +### Desktop UX + +Files: + +- `apps/desktop/src/main.ts` +- `apps/desktop/src/styles.css` +- `apps/desktop/src-tauri/src/main.rs` +- `apps/desktop/src-tauri/src/backend.rs` + +The startup surface shows only launch status and errors. Once the backend is ready, the WebView loads the existing Kandev UI. The app should support standard OS close/quit behavior and single-instance focus. + +--- + +## Release Pipeline + +### Build matrix + +Files: + +- `.github/workflows/release.yml` +- `scripts/release/verify-desktop-assets.sh` +- `apps/cli/src/release-config.test.ts` + +Add a `build-desktop` job that depends on `build-bundles`, downloads the matching `bundle-` artifact, prepares desktop runtime resources, runs the Tauri build on the appropriate OS runner, checks artifact sizes/checksums, and uploads `desktop-` artifacts. + +The initial matrix should mirror current runtime support: + +- `macos-arm64` +- `macos-x64` +- `linux-x64` +- `linux-arm64` +- `windows-x64` + +### GitHub release publishing + +Files: + +- `.github/workflows/release.yml` +- `scripts/release/verify-desktop-assets.sh` +- `scripts/release/update-homebrew-tap.sh` only if release asset assumptions need to ignore desktop artifacts + +Update `publish-release` to download and publish desktop artifacts alongside the existing `kandev-*.tar.gz` runtime bundles. Keep existing npm and Homebrew publishing tied to runtime tarballs only. + +### Signing + +Files: + +- `.github/workflows/release.yml` +- `apps/desktop/src-tauri/tauri.conf.json` +- New `docs/desktop-tauri-signing.md` +- GitHub Actions release docs/comments in `.github/workflows/release.yml` + +Add signing inputs/secrets behind conditional release steps: + +- macOS: Developer ID Application certificate, Apple team/provider metadata, notarization credentials. +- Windows: certificate/key-vault or custom signing command wiring. +- Linux: checksum required; GPG/AppImage signing optional. + +Unsigned desktop builds remain allowed for dry runs and internal validation, but public recommended artifacts should require signing success on macOS and Windows. + +--- + +## Frontend + +The existing `apps/web` product UI should not need route or state changes. Desktop-specific frontend work is limited to the Tauri startup surface under `apps/desktop`. If implementation discovers that the existing SPA needs to distinguish desktop WebView mode, add the smallest runtime flag necessary and document it in the spec before broadening scope. + +--- + +## Tests + +- **What:** backend honors configured host when constructing server addresses. + **File:** `apps/backend/internal/backendapp/helpers_test.go` or a new focused test file. + **How:** table-driven Go test over host/port config. + +- **What:** launcher/headless env includes desktop host override only when requested. + **File:** `apps/backend/internal/launcher/start_test.go` or `run_test.go`. + **How:** Go unit test around env/config helpers. + +- **What:** missing runtime resource binaries are detected before desktop launch. + **File:** `apps/desktop/src-tauri/src/backend.rs` tests. + **How:** Rust unit tests with temporary resource directories. + +- **What:** backend command builder passes `--headless`, `--port`, and loopback env. + **File:** `apps/desktop/src-tauri/src/backend.rs` tests. + **How:** Rust unit tests over pure command-building helpers. + +- **What:** desktop process environment preserves user env and adds common GUI-missing binary paths. + **File:** `apps/desktop/src-tauri/src/backend.rs` tests. + **How:** Rust unit tests around environment construction. + +- **What:** desktop startup handles health success, timeout, and child-process exit. + **File:** `apps/desktop/src-tauri/src/backend.rs` tests. + **How:** Rust tests using a local fake HTTP server or injectable health client. + +- **What:** release workflow requires desktop artifacts and leaves npm/Homebrew runtime publishing unchanged. + **File:** `apps/cli/src/release-config.test.ts` or a shell test under `scripts/`. + **How:** parse workflow/scripts and assert expected job names, artifacts, and publish filters. + +- **What:** desktop runtime resource preparation validates the existing bundle shape. + **File:** script test under `scripts/` or `apps/cli/src/release-config.test.ts`. + **How:** create fake bundle directories and assert success/failure paths. + +--- + +## E2E Tests + +- **Scenario:** GIVEN a prepared Linux desktop runtime bundle, WHEN the desktop app is launched in CI, THEN the Tauri window loads the Kandev UI without Node.js at runtime. + **File:** `apps/desktop/e2e/desktop-launch.spec.ts` or an equivalent Tauri WebDriver test. + **What to verify:** startup screen transitions to the Kandev app shell and `/health` succeeds. + +- **Scenario:** GIVEN the backend child fails during startup, WHEN the desktop app is launched, THEN the startup surface shows a failure and no child process remains running. + **File:** `apps/desktop/e2e/desktop-launch.spec.ts` or Rust integration test if WebDriver cannot observe process state reliably. + **What to verify:** visible error state plus process cleanup. + +- **Scenario:** GIVEN the desktop app is already running, WHEN a second instance is opened, THEN the first window is focused and only one backend launcher process exists. + **File:** `apps/desktop/e2e/desktop-single-instance.spec.ts` or Rust integration test. + **What to verify:** single-instance behavior and no duplicate backend process. + +Tauri desktop E2E should run on Linux with a fake display in CI first. macOS and Windows desktop smoke tests can be added after the Linux harness is stable. + +--- + +## Implementation Waves + +Wave 1: + +- [x] [task-01-backend-desktop-launch-contract](task-01-backend-desktop-launch-contract.md) + +Wave 2: + +- [x] [task-02-tauri-desktop-scaffold](task-02-tauri-desktop-scaffold.md) +- [x] [task-03-desktop-runtime-resources](task-03-desktop-runtime-resources.md) + +Wave 3: + +- [x] [task-04-release-desktop-artifacts](task-04-release-desktop-artifacts.md) +- [x] [task-05-signing-and-release-trust](task-05-signing-and-release-trust.md) + +Wave 4: + +- [x] [task-06-desktop-e2e-smoke](task-06-desktop-e2e-smoke.md) +- [x] [task-07-docs-and-release-notes](task-07-docs-and-release-notes.md) + +--- + +## Open Questions + +- Which Windows installer target should be the public default: NSIS `.exe` or MSI? Recommendation: start with the Tauri default/recommended installer for direct GitHub release downloads, then add MSI only if enterprise deployment requires it. +- Which Linux artifact set should be public by default: AppImage only, `.deb` plus AppImage, or `.deb`/`.rpm` plus AppImage? Recommendation: start with AppImage plus the package type Tauri produces reliably in CI, then broaden after QA. diff --git a/docs/plans/desktop-tauri-app/task-01-backend-desktop-launch-contract.md b/docs/plans/desktop-tauri-app/task-01-backend-desktop-launch-contract.md new file mode 100644 index 0000000000..31c33ab36a --- /dev/null +++ b/docs/plans/desktop-tauri-app/task-01-backend-desktop-launch-contract.md @@ -0,0 +1,47 @@ +--- +id: "01-backend-desktop-launch-contract" +title: "Backend desktop launch contract" +status: done +wave: 1 +depends_on: [] +plan: "plan.md" +spec: "../../specs/desktop-tauri-app/spec.md" +--- + +# Task 01: Backend Desktop Launch Contract + +## Acceptance + +- The backend honors `server.host` / `KANDEV_SERVER_HOST` when binding the HTTP listener. +- Desktop/headless launch can force `127.0.0.1` without changing normal CLI/service defaults. +- `kandev --headless --port ` remains a stable process contract for a parent desktop app to supervise. + +## Verification + +```bash +rtk bash -lc 'cd apps/backend && go test -tags fts5 ./internal/backendapp ./internal/launcher ./internal/common/config' +``` + +## Files Likely Touched + +- `apps/backend/internal/common/config/config.go` +- `apps/backend/internal/backendapp/main.go` +- `apps/backend/internal/backendapp/helpers_test.go` +- `apps/backend/internal/launcher/env.go` +- `apps/backend/internal/launcher/start.go` +- `apps/backend/internal/launcher/start_test.go` +- `apps/backend/internal/launcher/run_test.go` + +## Dependencies + +None. + +## Inputs + +- Spec sections: API surface > Desktop launch contract; API surface > Backend bind contract; Failure modes. +- Existing patterns: native launcher in `apps/backend/internal/launcher/`, backend HTTP server setup in `apps/backend/internal/backendapp/main.go`. +- ADR: `docs/decisions/0026-tauri-desktop-shell.md`. + +## Output Contract + +When complete, update this file's `status` to `done`, update the Wave 1 checkbox in `plan.md`, and report changed files, tests run, blockers, and residual risks. diff --git a/docs/plans/desktop-tauri-app/task-02-tauri-desktop-scaffold.md b/docs/plans/desktop-tauri-app/task-02-tauri-desktop-scaffold.md new file mode 100644 index 0000000000..fc50d40300 --- /dev/null +++ b/docs/plans/desktop-tauri-app/task-02-tauri-desktop-scaffold.md @@ -0,0 +1,55 @@ +--- +id: "02-tauri-desktop-scaffold" +title: "Tauri desktop scaffold" +status: done +wave: 2 +depends_on: ["01-backend-desktop-launch-contract"] +plan: "plan.md" +spec: "../../specs/desktop-tauri-app/spec.md" +--- + +# Task 02: Tauri Desktop Scaffold + +## Acceptance + +- `apps/desktop` builds as a Tauri v2 desktop package in the pnpm workspace. +- The Tauri Rust side starts the native Kandev launcher in headless mode, polls `/health`, and navigates the main window to the backend URL. +- The backend process environment preserves inherited variables, forces loopback backend binding, and adds common GUI-missing user binary paths. +- Frontend JavaScript is not granted broad shell/filesystem permissions. + +## Verification + +```bash +rtk bash -lc 'cd apps && pnpm --filter @kandev/desktop build' +rtk bash -lc 'cd apps/desktop/src-tauri && cargo test' +``` + +## Files Likely Touched + +- `apps/pnpm-workspace.yaml` +- `apps/package.json` +- `apps/desktop/package.json` +- `apps/desktop/index.html` +- `apps/desktop/src/main.ts` +- `apps/desktop/src/styles.css` +- `apps/desktop/src-tauri/Cargo.toml` +- `apps/desktop/src-tauri/build.rs` +- `apps/desktop/src-tauri/tauri.conf.json` +- `apps/desktop/src-tauri/src/main.rs` +- `apps/desktop/src-tauri/src/backend.rs` +- `apps/desktop/src-tauri/capabilities/default.json` +- `apps/backend/internal/launcher/service.go` only as a reference for existing service PATH conventions + +## Dependencies + +- Task 01. + +## Inputs + +- Spec sections: What, State machine, Permissions, Failure modes. +- Plan sections: Desktop App > Workspace package; Desktop App > Desktop UX. +- Existing runtime contract from Task 01. + +## Output Contract + +When complete, update this file's `status` to `done`, update the Wave 2 checkbox in `plan.md`, and report changed files, tests run, blockers, and residual risks. diff --git a/docs/plans/desktop-tauri-app/task-03-desktop-runtime-resources.md b/docs/plans/desktop-tauri-app/task-03-desktop-runtime-resources.md new file mode 100644 index 0000000000..ebaa1141ec --- /dev/null +++ b/docs/plans/desktop-tauri-app/task-03-desktop-runtime-resources.md @@ -0,0 +1,48 @@ +--- +id: "03-desktop-runtime-resources" +title: "Desktop runtime resources" +status: done +wave: 2 +depends_on: ["01-backend-desktop-launch-contract"] +plan: "plan.md" +spec: "../../specs/desktop-tauri-app/spec.md" +--- + +# Task 03: Desktop Runtime Resources + +## Acceptance + +- A release helper extracts the existing platform runtime bundle into the deterministic Tauri resource layout. +- The helper validates `kandev`, `agentctl`, and `agentctl-linux-amd64` requirements consistently with the native launcher. +- The Tauri app resolves packaged resources without relying on `KANDEV_BUNDLE_DIR` or Node.js at runtime. + +## Verification + +```bash +rtk bash -lc 'scripts/release/prepare-desktop-runtime.sh --help' +rtk bash -lc 'cd apps/desktop/src-tauri && cargo test' +rtk bash -lc 'cd apps && pnpm --filter @kandev/desktop build' +``` + +## Files Likely Touched + +- `scripts/release/prepare-desktop-runtime.sh` +- `scripts/release/verify-desktop-runtime.sh` +- `apps/desktop/src-tauri/tauri.conf.json` +- `apps/desktop/src-tauri/src/backend.rs` +- `apps/desktop/src-tauri/resources/.gitignore` +- `apps/cli/src/release-config.test.ts` or a new script test if script behavior is tested from Node/Vitest + +## Dependencies + +- Task 01. + +## Inputs + +- Spec sections: API surface > Desktop artifact contract; Failure modes. +- Plan sections: Desktop App > Runtime resources. +- Existing bundle shape: `apps/cli/README_internal.md` and `scripts/release/package-bundle.sh`. + +## Output Contract + +When complete, update this file's `status` to `done`, update the Wave 2 checkbox in `plan.md`, and report changed files, tests run, blockers, and residual risks. diff --git a/docs/plans/desktop-tauri-app/task-04-release-desktop-artifacts.md b/docs/plans/desktop-tauri-app/task-04-release-desktop-artifacts.md new file mode 100644 index 0000000000..b0960c6f3e --- /dev/null +++ b/docs/plans/desktop-tauri-app/task-04-release-desktop-artifacts.md @@ -0,0 +1,47 @@ +--- +id: "04-release-desktop-artifacts" +title: "Release desktop artifacts" +status: done +wave: 3 +depends_on: ["02-tauri-desktop-scaffold", "03-desktop-runtime-resources"] +plan: "plan.md" +spec: "../../specs/desktop-tauri-app/spec.md" +--- + +# Task 04: Release Desktop Artifacts + +## Acceptance + +- The release workflow builds desktop artifacts for macOS arm64, macOS x64, Linux x64, Linux arm64, and Windows x64. +- `publish-release` attaches desktop artifacts and checksums without changing npm/Homebrew runtime publishing behavior. +- Release verification fails when a required desktop artifact is missing. + +## Verification + +```bash +rtk bash -lc 'cd apps && pnpm --filter kandev test -- release-config' +rtk git diff --check +``` + +## Files Likely Touched + +- `.github/workflows/release.yml` +- `scripts/release/verify-desktop-assets.sh` +- `scripts/release/prepare-desktop-runtime.sh` +- `apps/cli/src/release-config.test.ts` +- `apps/desktop/package.json` + +## Dependencies + +- Task 02. +- Task 03. + +## Inputs + +- Spec sections: API surface > Desktop artifact contract; Scenarios. +- Plan sections: Release Pipeline > Build matrix; Release Pipeline > GitHub release publishing. +- Existing workflow: `.github/workflows/release.yml`. + +## Output Contract + +When complete, update this file's `status` to `done`, update the Wave 3 checkbox in `plan.md`, and report changed files, tests run, blockers, and residual risks. diff --git a/docs/plans/desktop-tauri-app/task-05-signing-and-release-trust.md b/docs/plans/desktop-tauri-app/task-05-signing-and-release-trust.md new file mode 100644 index 0000000000..cac7e9bcd4 --- /dev/null +++ b/docs/plans/desktop-tauri-app/task-05-signing-and-release-trust.md @@ -0,0 +1,51 @@ +--- +id: "05-signing-and-release-trust" +title: "Signing and release trust" +status: done +wave: 3 +depends_on: ["04-release-desktop-artifacts"] +plan: "plan.md" +spec: "../../specs/desktop-tauri-app/spec.md" +--- + +# Task 05: Signing and Release Trust + +## Acceptance + +- macOS desktop release builds support Developer ID signing and notarization through GitHub Actions secrets. +- Windows desktop release builds support code signing through the selected signing mechanism. +- Unsigned desktop artifacts are clearly limited to dry runs/internal validation and are not treated as trusted public artifacts. + +## Verification + +```bash +rtk bash -lc 'cd apps && pnpm --filter kandev test -- release-config' +rtk git diff --check +``` + +Manual verification for maintainers: + +```bash +rtk gh workflow run release.yml -f dry_run=true -f bump=patch +``` + +## Files Likely Touched + +- `.github/workflows/release.yml` +- `apps/desktop/src-tauri/tauri.conf.json` +- `docs/desktop-tauri-signing.md` +- `apps/cli/src/release-config.test.ts` + +## Dependencies + +- Task 04. + +## Inputs + +- Spec sections: What; Permissions; Failure modes; Scenarios. +- Plan sections: Release Pipeline > Signing. +- Tauri signing docs for macOS, Windows, Linux, and updater signing constraints. + +## Output Contract + +When complete, update this file's `status` to `done`, update the Wave 3 checkbox in `plan.md`, and report changed files, tests run, blockers, and residual risks. diff --git a/docs/plans/desktop-tauri-app/task-06-desktop-e2e-smoke.md b/docs/plans/desktop-tauri-app/task-06-desktop-e2e-smoke.md new file mode 100644 index 0000000000..de22a4a871 --- /dev/null +++ b/docs/plans/desktop-tauri-app/task-06-desktop-e2e-smoke.md @@ -0,0 +1,48 @@ +--- +id: "06-desktop-e2e-smoke" +title: "Desktop E2E smoke" +status: done +wave: 4 +depends_on: ["02-tauri-desktop-scaffold", "03-desktop-runtime-resources"] +plan: "plan.md" +spec: "../../specs/desktop-tauri-app/spec.md" +--- + +# Task 06: Desktop E2E Smoke + +## Acceptance + +- CI has at least one Linux desktop smoke test that launches the Tauri app with a prepared runtime bundle. +- The smoke test verifies the startup screen transitions to the Kandev UI after backend health succeeds. +- A failure-path test or Rust integration test verifies child process cleanup on startup failure. + +## Verification + +```bash +rtk bash -lc 'cd apps && pnpm --filter @kandev/desktop e2e' +rtk bash -lc 'cd apps/desktop/src-tauri && cargo test' +``` + +## Files Likely Touched + +- `apps/desktop/e2e/desktop-launch.spec.ts` +- `apps/desktop/e2e/desktop-single-instance.spec.ts` +- `apps/desktop/e2e/README.md` +- `apps/desktop/package.json` +- `apps/desktop/src-tauri/src/backend.rs` +- `.github/workflows/release.yml` or a dedicated desktop test workflow + +## Dependencies + +- Task 02. +- Task 03. + +## Inputs + +- Spec sections: State machine; Failure modes; Scenarios. +- Plan sections: E2E Tests. +- Existing web E2E patterns in `apps/web/e2e/README.md`; Tauri WebDriver guidance for desktop smoke coverage. + +## Output Contract + +When complete, update this file's `status` to `done`, update the Wave 4 checkbox in `plan.md`, and report changed files, tests run, blockers, and residual risks. diff --git a/docs/plans/desktop-tauri-app/task-07-docs-and-release-notes.md b/docs/plans/desktop-tauri-app/task-07-docs-and-release-notes.md new file mode 100644 index 0000000000..ef227e6e8a --- /dev/null +++ b/docs/plans/desktop-tauri-app/task-07-docs-and-release-notes.md @@ -0,0 +1,53 @@ +--- +id: "07-docs-and-release-notes" +title: "Docs and release notes" +status: done +wave: 4 +depends_on: ["04-release-desktop-artifacts", "05-signing-and-release-trust", "06-desktop-e2e-smoke"] +plan: "plan.md" +spec: "../../specs/desktop-tauri-app/spec.md" +--- + +# Task 07: Docs and Release Notes + +## Acceptance + +- User docs explain desktop install artifacts, runtime requirements, update expectations, and signing/trust status. +- User docs explain GUI-launch environment differences and what to do when an agent CLI is not discoverable from the desktop app. +- Engineering docs mention the `apps/desktop` package and release workflow ownership. +- The spec status and plan task statuses are reconciled with the implementation state. + +## Verification + +```bash +rtk git diff --check +rtk bash -lc 'cd apps && pnpm format:check' +``` + +## Files Likely Touched + +- `docs/specs/desktop-tauri-app/spec.md` +- `docs/plans/desktop-tauri-app/plan.md` +- `docs/desktop-tauri-signing.md` +- `docs/cli.md` +- `docs/features.md` +- `docs/remote-cloud-environment.md` if desktop build dependencies affect cloud dev setup +- `AGENTS.md` +- `apps/desktop/AGENTS.md` +- `apps/cli/README_internal.md` + +## Dependencies + +- Task 04. +- Task 05. +- Task 06. + +## Inputs + +- Spec sections: What; Out of scope. +- Plan sections: Release Pipeline; E2E Tests. +- Root `AGENTS.md` maintenance rule for changed package layout/release conventions. + +## Output Contract + +When complete, update this file's `status` to `done`, update the Wave 4 checkbox in `plan.md`, and report changed files, tests run, blockers, and residual risks. diff --git a/docs/specs/INDEX.md b/docs/specs/INDEX.md index fe5332505a..905ea53b5f 100644 --- a/docs/specs/INDEX.md +++ b/docs/specs/INDEX.md @@ -111,6 +111,7 @@ System pages (Radarr/Sonarr-style) for status, disk usage, database maintenance, | [improve-kandev](improve-kandev/spec.md) | draft | | [homebrew-core](homebrew-core/spec.md) | draft | | [native-kandev-cli](native-kandev-cli/spec.md) | draft | +| [desktop-tauri-app](desktop-tauri-app/spec.md) | shipped | | [public-share-links](public-share-links/spec.md) | draft | | [ssh-executor](ssh-executor/spec.md) | draft | | [cli-mode-parity](cli-mode-parity/spec.md) | draft | diff --git a/docs/specs/desktop-tauri-app/spec.md b/docs/specs/desktop-tauri-app/spec.md new file mode 100644 index 0000000000..7d86efb543 --- /dev/null +++ b/docs/specs/desktop-tauri-app/spec.md @@ -0,0 +1,166 @@ +--- +status: implemented +created: 2026-06-23 +owner: tbd +--- + +# Tauri Desktop App + +## Why + +Users who prefer a desktop workflow should be able to install and open Kandev from the OS app launcher without running a terminal command or managing a browser tab. The installed desktop app should keep Kandev's current local-first behavior while avoiding a production Node.js runtime. + +## What + +- Kandev provides desktop installers for the same primary release platforms as the native runtime bundle: macOS arm64, macOS x64, Linux x64, Linux arm64, and Windows x64. +- Opening the desktop app starts a local Kandev backend and displays the existing Vite/React Kandev UI inside a native Tauri WebView window. +- The installed desktop app does not require Node.js. Node.js and pnpm remain build-time tooling in CI and local development only. +- The desktop app reuses the existing Go-served SPA with embedded Vite assets. It does not ship or start a separate web server. +- The desktop app reuses the existing Kandev data directory, SQLite database, worktrees, executor settings, integrations, and agent configuration. +- The desktop app owns the backend lifecycle for the process it starts: startup waits for `/health`, normal quit terminates child processes, and startup failure surfaces an error instead of leaving orphaned backend processes. +- The desktop app starts the backend on a loopback-only address and an available local port unless the user has explicitly configured otherwise through existing environment/config mechanisms. +- The desktop app launches the backend with a predictable process environment for GUI launches, including common user binary locations, so configured agent CLIs can be discovered as reliably as they are from terminal-launched Kandev. +- Opening a second desktop instance focuses the existing app window or exits without starting a second backend for the same desktop launch context. +- GitHub releases include desktop artifacts alongside the existing runtime tarballs and checksums. +- Unsigned desktop artifacts may be produced for development or internal validation, but public recommended desktop releases require macOS Developer ID signing/notarization and Windows code signing before they are presented as trusted user-facing downloads. +- Desktop release notes and install docs tell users which artifact to download for each operating system and call out any unsigned/pre-release limitations. + +## Data model + +The feature does not add backend database tables. + +Desktop runtime state is process-local except for optional window placement/state stored by Tauri under the OS application data location. Kandev user data remains owned by the existing backend persistence model under `KANDEV_HOME_DIR` or the default `~/.kandev` location. + +## API surface + +### Desktop launch contract + +The Tauri shell starts the packaged native Kandev launcher in headless mode with an explicit backend port: + +```text +kandev --headless --port +``` + +The launcher starts the backend through the existing hidden backend mode and keeps the supervisor process alive until the desktop app exits. The desktop shell polls: + +```text +GET http://127.0.0.1:/health +``` + +Desktop launches pass a per-launch `KANDEV_DESKTOP_HEALTH_TOKEN` to the native launcher +environment. The backend echoes the token in the `X-Kandev-Desktop-Health-Token` response +header on successful `/health` responses. The desktop shell treats `/health` as ready only +when the status is successful and the response header matches its generated token, so a +separate local process on the same loopback port cannot satisfy desktop readiness. + +When `/health` reports ready for that launch, the desktop window navigates to: + +```text +http://127.0.0.1:/ +``` + +### Backend bind contract + +Desktop launches set the backend host to loopback: + +```text +KANDEV_SERVER_HOST=127.0.0.1 +``` + +The backend server honors `server.host` / `KANDEV_SERVER_HOST` when binding its listener. Existing CLI and service launches may keep their current default unless explicitly changed by their own specs. + +### Desktop environment contract + +The desktop shell passes an explicit environment to the native launcher: + +- Existing user environment variables are preserved when available. +- `KANDEV_SERVER_HOST=127.0.0.1` is set for desktop launches. +- `PATH` includes common GUI-missing user binary locations such as `/usr/local/bin`, `/opt/homebrew/bin`, `/usr/bin`, `/bin`, `%USERPROFILE%/.local/bin`, and existing Kandev agent CLI install locations where applicable. +- Explicit agent command paths configured in Kandev settings remain authoritative over `PATH` lookup. + +### Desktop artifact contract + +Each released version includes platform desktop artifacts with checksums. Exact file names may follow Tauri's generated naming, but the release must expose these platform groups: + +- macOS arm64: signed/notarized `.dmg` for public release, unsigned `.dmg` allowed only for internal validation. +- macOS x64: signed/notarized `.dmg` for public release, unsigned `.dmg` allowed only for internal validation. +- Windows x64: signed installer (`.exe` or `.msi`) for public release, unsigned installer allowed only for internal validation. +- Linux x64: AppImage and/or distro package generated by Tauri, with checksum. +- Linux arm64: AppImage and/or distro package generated by Tauri, with checksum. + +### Existing backend API + +The desktop app uses the existing backend HTTP, WebSocket, and boot-payload contracts. No new product API is required for the main Kandev UI. + +## State machine + +Desktop app lifecycle: + +- `idle`: the app process has started but no backend child is running. +- `backend-starting`: the app has spawned the native launcher and is polling backend health. +- `ready`: the backend is healthy and the WebView is displaying the Kandev UI. +- `backend-restarting`: the launcher supervisor is replacing the backend child after an existing restart request. +- `stopping`: the user quit the app or the app is terminating its child processes. +- `failed`: startup failed before the UI became ready. + +Transitions: + +- `idle` -> `backend-starting`: user opens the desktop app. +- `backend-starting` -> `ready`: `/health` returns success and the WebView navigates to the backend URL. +- `backend-starting` -> `failed`: the launcher exits, a required bundled binary is missing, the backend cannot bind, or health times out. +- `ready` -> `backend-restarting`: the existing backend restart supervisor handles a restart request. +- `backend-restarting` -> `ready`: the replacement backend becomes healthy on the same launch URL. +- any active state -> `stopping`: the user quits the app or the OS terminates the app. +- `stopping` -> `idle`: child processes are terminated and the app exits. + +## Permissions + +- The desktop app runs with the current OS user's permissions and does not require administrator/root privileges for normal install or launch. +- Backend filesystem, Docker, SSH, Git, and credential access remains governed by existing Kandev backend and executor behavior. +- The WebView does not receive broad shell/filesystem permissions. Process spawning for the backend is owned by the Tauri Rust side, not by arbitrary frontend code. +- Signing credentials are CI secrets. They are never committed to the repository or exposed to the desktop app runtime. + +## Failure modes + +- Missing packaged `kandev`, `agentctl`, or required helper binaries cause startup to fail with a visible desktop error that names the missing artifact. +- If the selected backend port is unavailable, the desktop app chooses a different available port before launch. If no port can be selected, startup fails visibly. +- If the backend exits before `/health` succeeds, the desktop app shows a startup failure and includes the captured launcher/backend output when available. +- If `/health` does not succeed before the configured timeout, the desktop app terminates the launched child process tree and shows a timeout error. +- If the WebView runtime is unavailable or broken on the host OS, the app fails using the platform's normal Tauri/WebView error behavior; the backend process must not remain running. +- If an agent CLI cannot be found from a GUI-launched environment, the desktop app/backend surfaces the same setup-health guidance as browser/CLI Kandev rather than failing silently. +- If signing/notarization secrets are absent in CI, release automation may still build explicitly unsigned internal artifacts, but public trusted desktop artifacts are not marked complete. + +## Persistence guarantees + +- Kandev data created through the desktop app survives app quit and process restart using the same persistence guarantees as CLI-launched Kandev. +- In-flight backend process state does not survive app quit. On next launch, the desktop app starts a fresh backend process, and backend recovery follows existing Kandev recovery behavior. +- Optional window size/position persistence survives app restart if the Tauri window-state plugin is enabled. +- Desktop installer artifacts do not alter existing npm/Homebrew/manual runtime update semantics. + +## Scenarios + +- **GIVEN** Kandev is installed as a desktop app on a machine without Node.js, **WHEN** the user opens the app, **THEN** the backend starts and the Kandev UI appears in the desktop window. +- **GIVEN** the desktop app is already running, **WHEN** the user opens the app again, **THEN** the existing window is focused and no second backend is started for that desktop app instance. +- **GIVEN** the backend has not finished startup, **WHEN** the desktop app is open, **THEN** the user sees a startup/loading state until `/health` succeeds or startup fails. +- **GIVEN** the backend becomes healthy, **WHEN** the desktop app navigates to the backend URL, **THEN** the existing Kandev boot payload hydrates the UI without a separate Node.js web runtime. +- **GIVEN** an agent CLI is installed in a common user binary location but the desktop app was opened from the OS launcher, **WHEN** the user starts a session using that agent, **THEN** Kandev can discover the agent command or surfaces existing setup-health guidance. +- **GIVEN** the user quits the desktop app, **WHEN** the app exits normally, **THEN** the launcher/backend child process tree is terminated. +- **GIVEN** a bundled backend binary is missing, **WHEN** the user opens the desktop app, **THEN** startup fails with a visible error naming the missing binary. +- **GIVEN** the release workflow builds desktop artifacts for a version, **WHEN** the GitHub release is published, **THEN** desktop installers and checksums are attached alongside the existing runtime tarballs. +- **GIVEN** a public macOS desktop release, **WHEN** the user downloads and opens the `.dmg`, **THEN** the app is signed and notarized so macOS does not report the download as damaged or from an unidentified developer. +- **GIVEN** a public Windows desktop release, **WHEN** the user runs the installer, **THEN** the installer is code signed to reduce SmartScreen trust warnings. + +## Out of scope + +- Replacing the existing npm, Homebrew, Docker, or runtime tarball channels. +- Requiring `npx` or npm installs to be Node-free. +- Mobile Tauri targets. +- App Store, Microsoft Store, Snapcraft, AUR, or Homebrew Cask distribution. +- In-app Tauri updater support in the first desktop release. +- Running Kandev as a background tray app after all windows close. +- Rewriting the Kandev frontend or backend in Rust. + +## Implementation plan + +- [Desktop Tauri App plan](../../plans/desktop-tauri-app/plan.md) +- [ADR-0026: Tauri desktop shell over native runtime](../../decisions/0026-tauri-desktop-shell.md) diff --git a/scripts/release-desktop.test.sh b/scripts/release-desktop.test.sh new file mode 100644 index 0000000000..ab74b14e35 --- /dev/null +++ b/scripts/release-desktop.test.sh @@ -0,0 +1,109 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +TMP_DIR="$(mktemp -d)" +trap 'rm -rf "$TMP_DIR"' EXIT +OUT_FILE="$TMP_DIR/out" +ERR_FILE="$TMP_DIR/err" + +fail() { + echo "FAIL: $*" >&2 + exit 1 +} + +pass() { + echo "PASS: $*" +} + +write_runtime() { + local dir="$1" + local helper="${2:-with-helper}" + mkdir -p "$dir/bin" + printf '#!/usr/bin/env bash\nexit 0\n' > "$dir/bin/kandev" + printf '#!/usr/bin/env bash\nexit 0\n' > "$dir/bin/agentctl" + if [ "$helper" = "with-helper" ]; then + printf '#!/usr/bin/env bash\nexit 0\n' > "$dir/bin/agentctl-linux-amd64" + fi +} + +chmod_runtime() { + local dir="$1" + chmod +x "$dir/bin/kandev" "$dir/bin/agentctl" + if [ -f "$dir/bin/agentctl-linux-amd64" ]; then + chmod +x "$dir/bin/agentctl-linux-amd64" + fi +} + +runtime_dir="$TMP_DIR/runtime" +write_runtime "$runtime_dir" + +if "$ROOT_DIR/scripts/release/verify-desktop-runtime.sh" --platform macos-arm64 "$runtime_dir" >"$OUT_FILE" 2>"$ERR_FILE"; then + fail "verify-desktop-runtime should reject non-executable binaries" +fi +grep -q "not executable" "$ERR_FILE" || fail "verify-desktop-runtime did not explain non-executable binaries" +pass "verify-desktop-runtime rejects non-executable binaries" + +chmod_runtime "$runtime_dir" +"$ROOT_DIR/scripts/release/verify-desktop-runtime.sh" --platform macos-arm64 "$runtime_dir" >"$OUT_FILE" +grep -q "verified for macos-arm64" "$OUT_FILE" || fail "verify-desktop-runtime did not include platform output" +pass "verify-desktop-runtime accepts executable runtime" + +missing_helper_runtime_dir="$TMP_DIR/missing-helper-runtime" +write_runtime "$missing_helper_runtime_dir" without-helper +chmod_runtime "$missing_helper_runtime_dir" +if "$ROOT_DIR/scripts/release/verify-desktop-runtime.sh" --platform linux-x64 "$missing_helper_runtime_dir" >"$OUT_FILE" 2>"$ERR_FILE"; then + fail "verify-desktop-runtime should require helper for linux-x64" +fi +grep -q "Missing agentctl linux/amd64 helper" "$ERR_FILE" || fail "verify-desktop-runtime did not explain missing helper" +pass "verify-desktop-runtime requires helper for linux-x64 runtime" + +linux_output_dir="$TMP_DIR/linux-output" +"$ROOT_DIR/scripts/release/prepare-desktop-runtime.sh" \ + --bundle-dir "$runtime_dir" \ + --platform linux-x64 \ + --output-dir "$linux_output_dir" >"$OUT_FILE" +grep -q "prepared for linux-x64" "$OUT_FILE" || fail "prepare-desktop-runtime did not include platform output" +if [ ! -x "$linux_output_dir/bin/agentctl-linux-amd64" ]; then + fail "prepare-desktop-runtime should copy executable helper for linux-x64" +fi +pass "prepare-desktop-runtime copies helper for linux-x64" + +macos_output_dir="$TMP_DIR/macos-output" +"$ROOT_DIR/scripts/release/prepare-desktop-runtime.sh" \ + --bundle-dir "$runtime_dir" \ + --platform macos-arm64 \ + --output-dir "$macos_output_dir" >/dev/null +if [ ! -x "$macos_output_dir/bin/agentctl-linux-amd64" ]; then + fail "prepare-desktop-runtime should copy executable helper for macos-arm64" +fi +pass "prepare-desktop-runtime copies helper for non-linux-x64" + +if "$ROOT_DIR/scripts/release/prepare-desktop-runtime.sh" --bundle-dir "$runtime_dir" --output-dir / >"$OUT_FILE" 2>"$ERR_FILE"; then + fail "prepare-desktop-runtime should reject root output directory" +fi +grep -q "Refusing dangerous desktop runtime output directory" "$ERR_FILE" || fail "prepare-desktop-runtime did not explain dangerous output directory" +pass "prepare-desktop-runtime rejects dangerous output directory" + +safe_cwd="$TMP_DIR/safe-cwd" +mkdir -p "$safe_cwd" +if (cd "$safe_cwd" && "$ROOT_DIR/scripts/release/prepare-desktop-runtime.sh" --bundle-dir "$runtime_dir" --output-dir . >"$OUT_FILE" 2>"$ERR_FILE"); then + fail "prepare-desktop-runtime should reject current-directory output" +fi +grep -q "Refusing dangerous desktop runtime output directory" "$ERR_FILE" || fail "prepare-desktop-runtime did not explain current-directory output" +pass "prepare-desktop-runtime rejects current-directory output" + +assets_dir="$TMP_DIR/assets" +mkdir -p "$assets_dir" +artifact="$assets_dir/kandev-desktop-linux-x64-test.deb" +printf 'desktop artifact\n' > "$artifact" +(cd "$assets_dir" && shasum -a 256 "$(basename "$artifact")" > "$(basename "$artifact").sha256") +"$ROOT_DIR/scripts/release/verify-desktop-assets.sh" "$assets_dir" linux-x64 >/dev/null +pass "verify-desktop-assets accepts matching checksums" + +printf 'tampered artifact\n' > "$artifact" +if "$ROOT_DIR/scripts/release/verify-desktop-assets.sh" "$assets_dir" linux-x64 >"$OUT_FILE" 2>"$ERR_FILE"; then + fail "verify-desktop-assets should reject checksum mismatches" +fi +grep -q "Checksum verification failed" "$ERR_FILE" || fail "verify-desktop-assets did not explain checksum mismatch" +pass "verify-desktop-assets rejects checksum mismatches" diff --git a/scripts/release/prepare-desktop-runtime.sh b/scripts/release/prepare-desktop-runtime.sh new file mode 100755 index 0000000000..ac5d6d5ad0 --- /dev/null +++ b/scripts/release/prepare-desktop-runtime.sh @@ -0,0 +1,114 @@ +#!/usr/bin/env bash +# Copy the native release bundle into the resource layout used by Tauri. +set -euo pipefail + +usage() { + cat <<'EOF' +Usage: prepare-desktop-runtime.sh [--bundle-dir DIR] [--output-dir DIR] [--platform PLATFORM] + +Prepare apps/desktop/src-tauri/resources/kandev from an existing release +runtime bundle. The input bundle must contain: + + bin/kandev[.exe] + bin/agentctl[.exe] + bin/agentctl-linux-amd64 + +Options: + --bundle-dir DIR Source runtime bundle. Defaults to dist/kandev. + --output-dir DIR Destination runtime resource directory. + Defaults to apps/desktop/src-tauri/resources/kandev. + --platform NAME Release platform to include in verification output. + -h, --help Show this help. +EOF +} + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +BUNDLE_DIR="${ROOT_DIR}/dist/kandev" +OUTPUT_DIR="${ROOT_DIR}/apps/desktop/src-tauri/resources/kandev" +VERIFY_SCRIPT="${ROOT_DIR}/scripts/release/verify-desktop-runtime.sh" +PLATFORM="" + +while [ "$#" -gt 0 ]; do + case "$1" in + --bundle-dir) + BUNDLE_DIR="${2:?Missing value for --bundle-dir}" + shift 2 + ;; + --output-dir) + OUTPUT_DIR="${2:?Missing value for --output-dir}" + shift 2 + ;; + --platform) + PLATFORM="${2:?Missing value for --platform}" + shift 2 + ;; + -h|--help) + usage + exit 0 + ;; + *) + printf 'Unknown argument: %s\n\n' "$1" >&2 + usage >&2 + exit 2 + ;; + esac +done + +refuse_dangerous_output_dir() { + local output_parent output_base resolved_parent resolved_output + case "$OUTPUT_DIR" in + ""|"."|".."|"/"|"/."|"/..") + printf 'Refusing dangerous desktop runtime output directory: %s\n' "${OUTPUT_DIR:-}" >&2 + exit 1 + ;; + esac + output_parent="$(dirname "$OUTPUT_DIR")" + output_base="$(basename "$OUTPUT_DIR")" + if resolved_parent="$(cd "$output_parent" 2>/dev/null && pwd -P)"; then + resolved_output="$resolved_parent/$output_base" + if [ "$resolved_output" = "/" ] || [ "$resolved_output" = "$ROOT_DIR" ]; then + printf 'Refusing dangerous desktop runtime output directory: %s\n' "$OUTPUT_DIR" >&2 + exit 1 + fi + fi +} + +refuse_dangerous_output_dir +chmod +x "$BUNDLE_DIR/bin/kandev" "$BUNDLE_DIR/bin/agentctl" "$BUNDLE_DIR/bin/agentctl-linux-amd64" 2>/dev/null || true +chmod +x "$BUNDLE_DIR/bin/kandev.exe" "$BUNDLE_DIR/bin/agentctl.exe" 2>/dev/null || true +VERIFY_ARGS=() +if [ -n "$PLATFORM" ]; then + VERIFY_ARGS=(--platform "$PLATFORM") +fi +"$VERIFY_SCRIPT" "${VERIFY_ARGS[@]}" "$BUNDLE_DIR" >/dev/null + +rm -rf -- "$OUTPUT_DIR" +mkdir -p "$OUTPUT_DIR/bin" +printf '*\n!.gitignore\n' > "$OUTPUT_DIR/.gitignore" + +copy_one() { + local label="$1" + shift + local source + for source in "$@"; do + if [ -f "$source" ]; then + cp "$source" "$OUTPUT_DIR/bin/$(basename "$source")" + chmod +x "$OUTPUT_DIR/bin/$(basename "$source")" 2>/dev/null || true + return 0 + fi + done + printf 'Missing %s in %s\n' "$label" "$BUNDLE_DIR/bin" >&2 + exit 1 +} + +copy_one "Kandev launcher binary" "$BUNDLE_DIR/bin/kandev" "$BUNDLE_DIR/bin/kandev.exe" +copy_one "agentctl binary" "$BUNDLE_DIR/bin/agentctl" "$BUNDLE_DIR/bin/agentctl.exe" +cp "$BUNDLE_DIR/bin/agentctl-linux-amd64" "$OUTPUT_DIR/bin/agentctl-linux-amd64" +chmod +x "$OUTPUT_DIR/bin/agentctl-linux-amd64" 2>/dev/null || true + +"$VERIFY_SCRIPT" "${VERIFY_ARGS[@]}" "$OUTPUT_DIR" >/dev/null +if [ -n "$PLATFORM" ]; then + printf 'Desktop runtime prepared for %s at %s\n' "$PLATFORM" "$OUTPUT_DIR" +else + printf 'Desktop runtime prepared at %s\n' "$OUTPUT_DIR" +fi diff --git a/scripts/release/verify-desktop-assets.sh b/scripts/release/verify-desktop-assets.sh new file mode 100755 index 0000000000..8091ee32d1 --- /dev/null +++ b/scripts/release/verify-desktop-assets.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +# Verify desktop installer artifacts and checksums before publishing a release. +set -euo pipefail + +usage() { + cat <<'EOF' +Usage: verify-desktop-assets.sh [platform...] + +Checks that each required platform has at least one desktop artifact named: + + kandev-desktop--* + +and that every matching artifact has a sibling .sha256 file. If no platform is +given, all supported desktop platforms are required. +EOF +} + +if [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ]; then + usage + exit 0 +fi + +ASSETS_DIR="${1:?Usage: verify-desktop-assets.sh [platform...]}" +shift || true + +if [ "$#" -gt 0 ]; then + REQUIRED_PLATFORMS=("$@") +else + REQUIRED_PLATFORMS=(macos-arm64 macos-x64 linux-x64 linux-arm64 windows-x64) +fi + +if [ ! -d "$ASSETS_DIR" ]; then + echo "Missing desktop assets directory: $ASSETS_DIR" >&2 + exit 1 +fi + +shopt -s nullglob + +for platform in "${REQUIRED_PLATFORMS[@]}"; do + artifacts=("$ASSETS_DIR"/kandev-desktop-"$platform"-*) + found=0 + + for artifact in "${artifacts[@]}"; do + if [[ "$artifact" == *.sha256 ]]; then + continue + fi + found=$((found + 1)) + checksum_file="$artifact.sha256" + if [ ! -f "$checksum_file" ]; then + echo "Missing desktop checksum: $checksum_file" >&2 + exit 1 + fi + ( + cd "$ASSETS_DIR" + shasum -a 256 -c "$(basename "$checksum_file")" >/dev/null + ) || { + echo "Checksum verification failed for: $artifact" >&2 + exit 1 + } + done + + if [ "$found" -eq 0 ]; then + echo "Missing desktop artifact for platform: $platform" >&2 + exit 1 + fi +done + +echo "Desktop release assets verified in $ASSETS_DIR" diff --git a/scripts/release/verify-desktop-runtime.sh b/scripts/release/verify-desktop-runtime.sh new file mode 100755 index 0000000000..83086ee469 --- /dev/null +++ b/scripts/release/verify-desktop-runtime.sh @@ -0,0 +1,112 @@ +#!/usr/bin/env bash +# Validate the runtime resource layout consumed by the Tauri desktop app. +set -euo pipefail + +usage() { + cat <<'EOF' +Usage: verify-desktop-runtime.sh [--platform PLATFORM] [runtime-dir] + +Validate a desktop runtime directory with this layout: + + kandev/ + bin/ + kandev[.exe] + agentctl[.exe] + agentctl-linux-amd64 + +If runtime-dir is omitted, apps/desktop/src-tauri/resources/kandev is checked. +EOF +} + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +RUNTIME_DIR="${ROOT_DIR}/apps/desktop/src-tauri/resources/kandev" +RUNTIME_DIR_SET=false +PLATFORM="" + +while [ "$#" -gt 0 ]; do + case "$1" in + --platform) + PLATFORM="${2:?Missing value for --platform}" + shift 2 + ;; + -h|--help) + usage + exit 0 + ;; + -*) + printf 'Unknown argument: %s\n\n' "$1" >&2 + usage >&2 + exit 2 + ;; + *) + if [ "$RUNTIME_DIR_SET" = true ]; then + printf 'Unexpected extra runtime directory: %s\n\n' "$1" >&2 + usage >&2 + exit 2 + fi + RUNTIME_DIR="$1" + RUNTIME_DIR_SET=true + shift + ;; + esac +done + +BIN_DIR="$RUNTIME_DIR/bin" + +is_executable_file() { + local path="$1" + if [ -x "$path" ]; then + return 0 + fi + # MSYS/Git Bash can report Windows executables differently from Unix mode bits. + [ "${OS:-}" = "Windows_NT" ] && [[ "$path" == *.exe ]] +} + +require_one() { + local label="$1" + shift + local candidate + local found="" + for candidate in "$@"; do + if [ -f "$candidate" ]; then + found="$candidate" + if is_executable_file "$candidate"; then + return 0 + fi + fi + done + if [ -n "$found" ]; then + printf '%s is not executable: %s\n' "$label" "$found" >&2 + exit 1 + fi + printf 'Missing %s in %s\n' "$label" "$BIN_DIR" >&2 + exit 1 +} + +require_executable() { + local label="$1" + local path="$2" + if [ ! -f "$path" ]; then + printf 'Missing %s at %s\n' "$label" "$path" >&2 + exit 1 + fi + if ! is_executable_file "$path"; then + printf '%s is not executable: %s\n' "$label" "$path" >&2 + exit 1 + fi +} + +if [ ! -d "$BIN_DIR" ]; then + printf 'Missing desktop runtime bin directory at %s\n' "$BIN_DIR" >&2 + exit 1 +fi + +require_one "Kandev launcher binary" "$BIN_DIR/kandev" "$BIN_DIR/kandev.exe" +require_one "agentctl binary" "$BIN_DIR/agentctl" "$BIN_DIR/agentctl.exe" +require_executable "agentctl linux/amd64 helper" "$BIN_DIR/agentctl-linux-amd64" + +if [ -n "$PLATFORM" ]; then + printf 'Desktop runtime verified for %s at %s\n' "$PLATFORM" "$RUNTIME_DIR" +else + printf 'Desktop runtime verified at %s\n' "$RUNTIME_DIR" +fi